diff --git a/_maps/custom/otherz/old/otherz.dmm b/_maps/custom/otherz/old/otherz.dmm index 0bc64a7364..36dc1a403c 100644 --- a/_maps/custom/otherz/old/otherz.dmm +++ b/_maps/custom/otherz/old/otherz.dmm @@ -335,7 +335,6 @@ /turf/closed/mineral/rogue/bedrock, /area/rogue) "bD" = ( -/obj/item/clothing/head/kitty, /turf/closed/mineral/random/rogue/high, /area/rogue/under/cavelava) "bE" = ( diff --git a/_maps/custom/otherz/smallforest.dmm b/_maps/custom/otherz/smallforest.dmm index c203368b1f..c41d06a175 100644 --- a/_maps/custom/otherz/smallforest.dmm +++ b/_maps/custom/otherz/smallforest.dmm @@ -126,7 +126,7 @@ /turf/open/water/swamp, /area/rogue/outdoors/woods) "aQ" = ( -/turf/closed/indestructible/riveted/boss, +/turf/closed/wall/mineral/rogue/wood/boss, /area/rogue/outdoors/woods) "aR" = ( /mob/living/simple_animal/hostile/retaliate/rogue/mole, diff --git a/_maps/custom/otherz/underworld.dmm b/_maps/custom/otherz/underworld.dmm index f7cd15502c..0a5ce79f3c 100644 --- a/_maps/custom/otherz/underworld.dmm +++ b/_maps/custom/otherz/underworld.dmm @@ -3,7 +3,7 @@ /turf/open/floor/rogue/underworld/road, /area/rogue) "b" = ( -/turf/open/floor/plating/dirt/dark, +/turf/open/floor/rogue/dirt, /area/rogue/underworld) "c" = ( /obj/effect/landmark/underworldsafe, @@ -11,7 +11,7 @@ /area/rogue) "d" = ( /obj/structure/underworld/barrier, -/turf/open/floor/plating/dirt/dark, +/turf/open/floor/rogue/dirt, /area/rogue/underworld) "e" = ( /turf/open/floor/rogue/underworld/road, @@ -44,11 +44,11 @@ /turf/open/floor/rogue/churchrough, /area/rogue/underworld) "l" = ( -/turf/open/floor/plating/dirt/dark, +/turf/open/floor/rogue/dirt, /area/rogue) "m" = ( /obj/effect/landmark/underworldsafe, -/turf/open/floor/plating/dirt/dark, +/turf/open/floor/rogue/dirt, /area/rogue) "n" = ( /obj/structure/flora/roguetree/underworld, @@ -67,11 +67,11 @@ /area/rogue/underworld) "q" = ( /obj/structure/flora/roguetree/underworld, -/turf/open/floor/plating/dirt/dark, +/turf/open/floor/rogue/dirt, /area/rogue/underworld) "r" = ( /obj/effect/landmark/underworldcoin, -/turf/open/floor/plating/dirt/dark, +/turf/open/floor/rogue/dirt, /area/rogue/underworld) "s" = ( /obj/effect/landmark/underworldsafe, diff --git a/_maps/custom/roguehamlet.dmm b/_maps/custom/roguehamlet.dmm index 37bbc521b0..7e1f758be8 100644 --- a/_maps/custom/roguehamlet.dmm +++ b/_maps/custom/roguehamlet.dmm @@ -8041,7 +8041,6 @@ lockid = "mage"; name = "secret projectes" }, -/obj/item/ship_in_a_bottle, /obj/item/bomb{ pixel_x = 3; pixel_y = 3 @@ -12880,10 +12879,10 @@ /obj/structure/closet/crate/chest/old_crate, /obj/item/reagent_containers/food/snacks/rogue/meat/steak, /obj/item/reagent_containers/food/snacks/rogue/meat/steak, -/obj/item/reagent_containers/food/snacks/egg/loaded, -/obj/item/reagent_containers/food/snacks/egg/loaded, -/obj/item/reagent_containers/food/snacks/egg/loaded, -/obj/item/reagent_containers/food/snacks/egg/loaded, +/obj/item/reagent_containers/food/snacks/egg, +/obj/item/reagent_containers/food/snacks/egg, +/obj/item/reagent_containers/food/snacks/egg, +/obj/item/reagent_containers/food/snacks/egg, /obj/item/reagent_containers/food/snacks/rogue/meat/poultry, /obj/item/reagent_containers/food/snacks/rogue/meat/poultry, /obj/item/reagent_containers/food/snacks/rogue/meat/steak, @@ -18811,7 +18810,7 @@ /area/rogue/indoors/shelter/town/dwarf) "tAx" = ( /obj/structure/fluff/nest, -/obj/item/reagent_containers/food/snacks/egg/loaded, +/obj/item/reagent_containers/food/snacks/egg, /turf/open/floor/rogue/dirt/road, /area/rogue/indoors/town) "tAK" = ( diff --git a/_maps/custom/roguehamlet1.dmm b/_maps/custom/roguehamlet1.dmm index 924e0856b8..3d01b382b0 100644 --- a/_maps/custom/roguehamlet1.dmm +++ b/_maps/custom/roguehamlet1.dmm @@ -2689,7 +2689,6 @@ /area/rogue/indoors/town/church/chapel) "dht" = ( /obj/structure/closet/crate/roguecloset/dark, -/obj/item/ship_in_a_bottle, /obj/item/bomb{ pixel_x = 3; pixel_y = 3 @@ -5496,8 +5495,8 @@ }, /obj/item/reagent_containers/food/snacks/rogue/meat/steak, /obj/item/reagent_containers/food/snacks/rogue/meat/steak, -/obj/item/reagent_containers/food/snacks/egg/loaded, -/obj/item/reagent_containers/food/snacks/egg/loaded, +/obj/item/reagent_containers/food/snacks/egg, +/obj/item/reagent_containers/food/snacks/egg, /obj/item/rogueweapon/knife/cleaver, /turf/open/floor/rogue/dirt/road, /area/rogue/indoors/town) @@ -8774,7 +8773,6 @@ ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) }) "jGc" = ( -/mob/living/simple_animal/cow, /turf/open/floor/rogue/dirt, /area/rogue/outdoors/town) "jGo" = ( @@ -12478,12 +12476,12 @@ first_time_text = "Blackwine Manor" }) "nBX" = ( -/obj/item/reagent_containers/food/snacks/egg/loaded, +/obj/item/reagent_containers/food/snacks/egg, /obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/reagent_containers/food/snacks/egg/loaded, -/obj/item/reagent_containers/food/snacks/egg/loaded, -/obj/item/reagent_containers/food/snacks/egg/loaded, -/obj/item/reagent_containers/food/snacks/egg/loaded, +/obj/item/reagent_containers/food/snacks/egg, +/obj/item/reagent_containers/food/snacks/egg, +/obj/item/reagent_containers/food/snacks/egg, +/obj/item/reagent_containers/food/snacks/egg, /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) "nCg" = ( @@ -18376,7 +18374,7 @@ /area/rogue/indoors/shelter/town/dwarf) "tAx" = ( /obj/structure/fluff/nest, -/obj/item/reagent_containers/food/snacks/egg/loaded, +/obj/item/reagent_containers/food/snacks/egg, /turf/open/floor/rogue/dirt/road, /area/rogue/indoors/town) "tAK" = ( diff --git a/_maps/map_files/dakkatown/dakkatown.dmm b/_maps/map_files/dakkatown/dakkatown.dmm index f11942df01..56ae6e14f7 100644 --- a/_maps/map_files/dakkatown/dakkatown.dmm +++ b/_maps/map_files/dakkatown/dakkatown.dmm @@ -5710,9 +5710,6 @@ /area/rogue/indoors/town) "vM" = ( /obj/structure/closet/crate/roguecloset, -/obj/item/clothing/suit/bio_suit/plaguedoctorsuit, -/obj/item/clothing/mask/gas/plaguedoctor, -/obj/item/clothing/head/plaguedoctorhat, /obj/item/roguekey/apothecary, /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors/town/apothecary) @@ -11285,7 +11282,6 @@ /turf/closed/wall/mineral/rogue/stone, /area/rogue/outdoors/town) "QW" = ( -/turf/open/space/basic, /area/rogue/outdoors/town) "QX" = ( /turf/open/floor/rogue/church, diff --git a/_maps/map_files/debug/multiz.dmm b/_maps/map_files/debug/multiz.dmm index 4787f2d021..cae4f48d39 100644 --- a/_maps/map_files/debug/multiz.dmm +++ b/_maps/map_files/debug/multiz.dmm @@ -910,7 +910,6 @@ "dO" = ( /obj/structure/table, /obj/machinery/light, -/obj/item/twohanded/fireaxe, /obj/item/extinguisher, /turf/open/floor/plasteel, /area/storage/primary) diff --git a/_maps/map_files/dun_manor/dun_manor.dmm b/_maps/map_files/dun_manor/dun_manor.dmm index f3f07586b9..2b73583082 100644 --- a/_maps/map_files/dun_manor/dun_manor.dmm +++ b/_maps/map_files/dun_manor/dun_manor.dmm @@ -362,12 +362,6 @@ /turf/open/floor/rogue/blocks/stonered/tiny, /area/rogue/indoors/town) "auw" = ( -/obj/item/kitchen/spoon/plastic, -/obj/item/kitchen/spoon/plastic{ - pixel_x = -5; - pixel_y = 3 - }, -/obj/item/kitchen/spoon/plastic, /obj/structure/rack/rogue/shelf/big{ icon_state = "shelf_biggest"; pixel_y = 0 @@ -7868,7 +7862,7 @@ /area/rogue/outdoors/rtfield) "hEt" = ( /obj/item/candle/yellow/lit/infinite{ - light_outer_range = 1; + light_outer_range = 1; pixel_x = -8; pixel_y = 5 }, @@ -10598,7 +10592,7 @@ /area/rogue/outdoors/town/roofs) "ktR" = ( /obj/item/candle/yellow/lit/infinite{ - light_outer_range = 1; + light_outer_range = 1; pixel_x = 8; pixel_y = 5 }, diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index 0b80852eec..1db78eaf21 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -1349,10 +1349,6 @@ "eq" = ( /turf/open/floor/rogue/tile/masonic/spiral, /area/rogue) -"eB" = ( -/obj/item/nullrod/claymore/chainsaw_sword, -/turf/closed/wall/mineral/rogue/decostone/cand, -/area/rogue) "eD" = ( /obj/structure/fluff/railing/wood{ dir = 1 @@ -2582,7 +2578,7 @@ /area/rogue) "wB" = ( /obj/effect/landmark/start/new_player, -/turf/open/floor/plating, +/turf/open/floor/rogue/blocks, /area/start) "wO" = ( /turf/closed, @@ -3008,7 +3004,6 @@ /turf/open/floor/rogue/grass, /area/rogue/outdoors) "Dt" = ( -/obj/structure/fluff/divine/nexus, /obj/structure/fluff/wallclock, /turf/open/floor/rogue/ruinedwood/chevron, /area/rogue) @@ -3082,7 +3077,6 @@ /obj/item/roguecoin/gold/pile, /obj/item/roguecoin/gold/pile, /obj/item/roguecoin/gold/pile, -/obj/item/bikehorn/golden, /turf/open/floor/rogue/ruinedwood/chevron, /area/rogue) "Fl" = ( @@ -4005,7 +3999,7 @@ /turf/open/floor/rogue/wood, /area/rogue) "RX" = ( -/turf/closed/indestructible/riveted, +/turf/closed/wall/mineral/rogue/wood, /area/start) "Sc" = ( /obj/item/rope/chain, @@ -4334,7 +4328,7 @@ /turf/open/floor/rogue/metal/barograte, /area/rogue/indoors/vampire_manor) "Vz" = ( -/turf/closed/indestructible/splashscreen, +/turf/closed/splashscreen, /area/start) "VB" = ( /turf/open/floor/rogue/dirt, @@ -11055,7 +11049,7 @@ rQ rQ rQ bX -eB +RP ke sZ HX diff --git a/_maps/map_files/roguetown/otherz/old/otherz.dmm b/_maps/map_files/roguetown/otherz/old/otherz.dmm index 0bc64a7364..36dc1a403c 100644 --- a/_maps/map_files/roguetown/otherz/old/otherz.dmm +++ b/_maps/map_files/roguetown/otherz/old/otherz.dmm @@ -335,7 +335,6 @@ /turf/closed/mineral/rogue/bedrock, /area/rogue) "bD" = ( -/obj/item/clothing/head/kitty, /turf/closed/mineral/random/rogue/high, /area/rogue/under/cavelava) "bE" = ( diff --git a/_maps/map_files/roguetown/otherz/smalldecap.dmm b/_maps/map_files/roguetown/otherz/smalldecap.dmm index f76fe5a2eb..568c7b6c85 100644 --- a/_maps/map_files/roguetown/otherz/smalldecap.dmm +++ b/_maps/map_files/roguetown/otherz/smalldecap.dmm @@ -946,7 +946,6 @@ /area/rogue/outdoors/mountains/decap) "Ko" = ( /obj/structure/table/wood/reinforced, -/obj/item/ship_in_a_bottle, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/rogue/concrete, /area/rogue/outdoors/mountains/decap) diff --git a/_maps/map_files/roguetown/otherz/underworld.dmm b/_maps/map_files/roguetown/otherz/underworld.dmm index 9202d8e5e7..afc29f2738 100644 --- a/_maps/map_files/roguetown/otherz/underworld.dmm +++ b/_maps/map_files/roguetown/otherz/underworld.dmm @@ -3,7 +3,7 @@ /turf/open/floor/rogue/underworld/road, /area/rogue) "b" = ( -/turf/open/floor/plating/dirt/dark, +/turf/open/floor/rogue/dirt, /area/rogue/underworld) "c" = ( /obj/effect/landmark/underworldsafe, @@ -11,7 +11,7 @@ /area/rogue) "d" = ( /obj/structure/underworld/barrier, -/turf/open/floor/plating/dirt/dark, +/turf/open/floor/rogue/dirt, /area/rogue/underworld) "e" = ( /turf/open/floor/rogue/underworld/road, @@ -44,11 +44,11 @@ /turf/open/floor/rogue/churchrough, /area/rogue/underworld) "l" = ( -/turf/open/floor/plating/dirt/dark, +/turf/open/floor/rogue/dirt, /area/rogue) "m" = ( /obj/effect/landmark/underworldsafe, -/turf/open/floor/plating/dirt/dark, +/turf/open/floor/rogue/dirt, /area/rogue) "n" = ( /obj/structure/flora/roguetree/underworld, @@ -67,7 +67,7 @@ /area/rogue/underworld) "q" = ( /obj/structure/flora/roguetree/underworld, -/turf/open/floor/plating/dirt/dark, +/turf/open/floor/rogue/dirt, /area/rogue/underworld) "s" = ( /obj/effect/landmark/underworldsafe, diff --git a/_maps/map_files/roguetown/roguetown.dmm b/_maps/map_files/roguetown/roguetown.dmm index 5889cd542c..9a8a229da8 100644 --- a/_maps/map_files/roguetown/roguetown.dmm +++ b/_maps/map_files/roguetown/roguetown.dmm @@ -2299,7 +2299,7 @@ pixel_y = 2 }, /obj/item/candle/yellow/lit/infinite{ - light_outer_range = 1; + light_outer_range = 1; pixel_x = 14; pixel_y = 5 }, @@ -4091,7 +4091,7 @@ /area/rogue/indoors/town/manor) "eGP" = ( /obj/structure/flora/ausbushes/leafybush, -/obj/structure/flora/bush, +/obj/structure/flora/ausbushes/leafybush, /turf/open/floor/rogue/grass, /area/rogue/outdoors/town) "eHb" = ( @@ -4759,7 +4759,6 @@ /area/rogue/outdoors/town) "ftR" = ( /obj/structure/table/wood, -/obj/item/ship_in_a_bottle, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/magician) "fup" = ( diff --git a/_maps/map_files/vanderlin/vanderlin.dmm b/_maps/map_files/vanderlin/vanderlin.dmm index 29d72a4a35..6d5167f56e 100644 --- a/_maps/map_files/vanderlin/vanderlin.dmm +++ b/_maps/map_files/vanderlin/vanderlin.dmm @@ -10026,9 +10026,9 @@ /area/rogue/outdoors/rtfield) "ZO" = ( /obj/structure/closet/crate/chest, -/obj/item/reagent_containers/food/snacks/egg/loaded, -/obj/item/reagent_containers/food/snacks/egg/loaded, -/obj/item/reagent_containers/food/snacks/egg/loaded, +/obj/item/reagent_containers/food/snacks/egg, +/obj/item/reagent_containers/food/snacks/egg, +/obj/item/reagent_containers/food/snacks/egg, /turf/open/floor/rogue/tile, /area/rogue/under/town/basement) "ZP" = ( diff --git a/_maps/roguehamlet/roguehamlet.dmm b/_maps/roguehamlet/roguehamlet.dmm index c7ceaf5072..e503e6b9f8 100644 --- a/_maps/roguehamlet/roguehamlet.dmm +++ b/_maps/roguehamlet/roguehamlet.dmm @@ -8109,7 +8109,6 @@ lockid = "mage"; name = "secret projectes" }, -/obj/item/ship_in_a_bottle, /obj/item/bomb{ pixel_x = 3; pixel_y = 3 @@ -12952,10 +12951,10 @@ /obj/structure/closet/crate/chest/old_crate, /obj/item/reagent_containers/food/snacks/rogue/meat/steak, /obj/item/reagent_containers/food/snacks/rogue/meat/steak, -/obj/item/reagent_containers/food/snacks/egg/loaded, -/obj/item/reagent_containers/food/snacks/egg/loaded, -/obj/item/reagent_containers/food/snacks/egg/loaded, -/obj/item/reagent_containers/food/snacks/egg/loaded, +/obj/item/reagent_containers/food/snacks/egg, +/obj/item/reagent_containers/food/snacks/egg, +/obj/item/reagent_containers/food/snacks/egg, +/obj/item/reagent_containers/food/snacks/egg, /obj/item/reagent_containers/food/snacks/rogue/meat/poultry, /obj/item/reagent_containers/food/snacks/rogue/meat/poultry, /obj/item/reagent_containers/food/snacks/rogue/meat/steak, @@ -18984,7 +18983,7 @@ /area/rogue/indoors/shelter/town/dwarf) "tAx" = ( /obj/structure/fluff/nest, -/obj/item/reagent_containers/food/snacks/egg/loaded, +/obj/item/reagent_containers/food/snacks/egg, /turf/open/floor/rogue/dirt/road, /area/rogue/indoors/town) "tAK" = ( diff --git a/code/__DEFINES/cargo.dm b/code/__DEFINES/cargo.dm index 68d73f387e..7d936e1360 100644 --- a/code/__DEFINES/cargo.dm +++ b/code/__DEFINES/cargo.dm @@ -10,8 +10,7 @@ #define STYLE_HONK 10 #define STYLE_FRUIT 11 #define STYLE_INVISIBLE 12 -#define STYLE_GONDOLA 13 -#define STYLE_SEETHROUGH 14 +#define STYLE_SEETHROUGH 13 #define POD_ICON_STATE 1 #define POD_NAME 2 diff --git a/code/__DEFINES/inventory.dm b/code/__DEFINES/inventory.dm index bcdab799e9..1f6daedf86 100644 --- a/code/__DEFINES/inventory.dm +++ b/code/__DEFINES/inventory.dm @@ -249,64 +249,3 @@ #define CANT_CADJUST 0 #define CAN_CADJUST 1 #define CADJUSTED 2 - -//Allowed equipment lists for security vests and hardsuits. - -GLOBAL_LIST_INIT(advanced_hardsuit_allowed, typecacheof(list( - /obj/item/ammo_box, - /obj/item/ammo_casing, - /obj/item/flashlight, - /obj/item/gun, - /obj/item/reagent_containers/spray/pepper, - /obj/item/restraints/handcuffs, - /obj/item/tank/internals))) - -GLOBAL_LIST_INIT(security_hardsuit_allowed, typecacheof(list( - /obj/item/ammo_box, - /obj/item/ammo_casing, - /obj/item/flashlight, - /obj/item/gun/ballistic, - /obj/item/reagent_containers/spray/pepper, - /obj/item/restraints/handcuffs, - /obj/item/tank/internals))) - -GLOBAL_LIST_INIT(detective_vest_allowed, typecacheof(list( - /obj/item/ammo_box, - /obj/item/ammo_casing, - /obj/item/detective_scanner, - /obj/item/flashlight, - /obj/item/taperecorder, - /obj/item/gun/ballistic, - /obj/item/lighter, - /obj/item/melee/classic_baton, - /obj/item/reagent_containers/spray/pepper, - /obj/item/restraints/handcuffs, - /obj/item/storage/fancy/cigarettes, - /obj/item/tank/internals/emergency_oxygen, - /obj/item/tank/internals/plasmaman))) - -GLOBAL_LIST_INIT(security_vest_allowed, typecacheof(list( - /obj/item/ammo_box, - /obj/item/ammo_casing, - /obj/item/flashlight, - /obj/item/gun/ballistic, - /obj/item/kitchen/knife/combat, - /obj/item/melee/classic_baton/telescopic, - /obj/item/reagent_containers/spray/pepper, - /obj/item/restraints/handcuffs, - /obj/item/tank/internals/emergency_oxygen, - /obj/item/tank/internals/plasmaman))) - -GLOBAL_LIST_INIT(security_wintercoat_allowed, typecacheof(list( - /obj/item/ammo_box, - /obj/item/ammo_casing, - /obj/item/flashlight, - /obj/item/storage/fancy/cigarettes, - /obj/item/gun/ballistic, - /obj/item/lighter, - /obj/item/melee/classic_baton/telescopic, - /obj/item/reagent_containers/spray/pepper, - /obj/item/restraints/handcuffs, - /obj/item/tank/internals/emergency_oxygen, - /obj/item/tank/internals/plasmaman, - /obj/item/toy))) diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index 1e4b718837..c23d7328ac 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -14,7 +14,6 @@ //#define isturf(A) (istype(A, /turf)) This is actually a byond built-in. Added here for completeness sake. GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list( - /turf/open/space, /turf/open/lava, /turf/open/water, /turf/open/transparent/openspace @@ -38,8 +37,6 @@ GLOBAL_LIST_INIT(our_forest_sex, typecacheof(list( #define isindestructiblefloor(A) (istype(A, /turf/open/indestructible)) -#define isspaceturf(A) (istype(A, /turf/open/space)) - #define isfloorturf(A) (istype(A, /turf/open/floor)) #define isclosedturf(A) (istype(A, /turf/closed)) @@ -118,10 +115,6 @@ GLOBAL_LIST_INIT(our_forest_sex, typecacheof(list( #define ishostile(A) (istype(A, /mob/living/simple_animal/hostile)) - -#define isconstruct(A) (istype(A, /mob/living/simple_animal/hostile/construct)) - - #define isclown(A) (istype(A, /mob/living/simple_animal/hostile/retaliate/clown)) @@ -155,11 +148,9 @@ GLOBAL_LIST_INIT(our_forest_sex, typecacheof(list( #define isclothing(A) (istype(A, /obj/item/clothing)) -#define iscash(A) (istype(A, /obj/item/coin) || istype(A, /obj/item/stack/spacecash) || istype(A, /obj/item/holochip)) +#define iscash(A) (istype(A, /obj/item/stack/spacecash) || istype(A, /obj/item/holochip)) GLOBAL_LIST_INIT(pointed_types, typecacheof(list( - /obj/item/pen, - /obj/item/screwdriver, /obj/item/reagent_containers/syringe, /obj/item/kitchen/fork))) @@ -171,15 +162,6 @@ GLOBAL_LIST_INIT(pointed_types, typecacheof(list( #define isgun(A) (istype(A, /obj/item/gun)) -GLOBAL_LIST_INIT(glass_sheet_types, typecacheof(list( - /obj/item/stack/sheet/glass, - /obj/item/stack/sheet/rglass, - /obj/item/stack/sheet/plasmaglass, - /obj/item/stack/sheet/plasmarglass, - /obj/item/stack/sheet/titaniumglass, - /obj/item/stack/sheet/plastitaniumglass))) - -#define is_glass_sheet(O) (is_type_in_typecache(O, GLOB.glass_sheet_types)) #define iseffect(O) (istype(O, /obj/effect)) diff --git a/code/__DEFINES/maps.dm b/code/__DEFINES/maps.dm index e15b57ef55..0adb84cb95 100644 --- a/code/__DEFINES/maps.dm +++ b/code/__DEFINES/maps.dm @@ -85,7 +85,7 @@ require only minor tweaks. #define CAMERA_LOCK_CENTCOM 4 //Reserved/Transit turf type -#define RESERVED_TURF_TYPE /turf/open/space/basic //What the turf is when not being used +#define RESERVED_TURF_TYPE /turf/open/floor/rogue/blocks //What the turf is when not being used //Ruin Generation diff --git a/code/__HELPERS/AStar.dm b/code/__HELPERS/AStar.dm index dd4e1c041e..8f62d33b4c 100644 --- a/code/__HELPERS/AStar.dm +++ b/code/__HELPERS/AStar.dm @@ -171,29 +171,25 @@ Actual Adjacent procs : //Returns adjacent turfs in cardinal directions that are reachable //simulated_only controls whether only simulated turfs are considered or not -/turf/proc/reachableAdjacentTurfs(caller, ID, simulated_only) +/turf/proc/reachableAdjacentTurfs(caller, ID) var/list/L = new() var/turf/T - var/static/space_type_cache = typecacheof(/turf/open/space) for(var/k in 1 to GLOB.cardinals.len) T = get_step(src,GLOB.cardinals[k]) - if(!T || (simulated_only && space_type_cache[T.type])) + if(!T) continue if(!T.density && !LinkBlockedWithAccess(T,caller, ID)) L.Add(T) return L -/turf/proc/reachableTurftest(caller, turf/T, ID, simulated_only) - if(T && !T.density && !(simulated_only && SSpathfinder.space_type_cache[T.type]) && !LinkBlockedWithAccess(T,caller, ID)) +/turf/proc/reachableTurftest(caller, turf/T, ID) + if(T && !T.density && !LinkBlockedWithAccess(T,caller, ID)) return TRUE /turf/proc/LinkBlockedWithAccess(turf/T, caller, ID) var/adir = get_dir(src, T) var/rdir = ((adir & MASK_ODD)<<1)|((adir & MASK_EVEN)>>1) - for(var/obj/structure/window/W in src) - if(!W.CanAStarPass(ID, adir)) - return TRUE for(var/obj/O in T) if(!O.CanAStarPass(ID, rdir, caller)) return TRUE diff --git a/code/__HELPERS/areas.dm b/code/__HELPERS/areas.dm index db67ac1faf..ea1f3389ed 100644 --- a/code/__HELPERS/areas.dm +++ b/code/__HELPERS/areas.dm @@ -38,7 +38,6 @@ /proc/create_area(mob/creator) // Passed into the above proc as list/break_if_found var/static/area_or_turf_fail_types = typecacheof(list( - /turf/open/space, /area/shuttle, )) // Ignore these areas and dont let people expand them. They can expand into them though diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index 1476c9e3bc..49442884b1 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -333,19 +333,6 @@ block( \ return M.current.stat != DEAD return FALSE -/** - * Exiled check - * - * Checks if the current body of the mind has an exile implant and is currently in - * an away mission. Returns FALSE if any of those conditions aren't met. - */ -/proc/considered_exiled(datum/mind/M) - if(!ishuman(M?.current)) - return FALSE - for(var/obj/item/implant/I in M.current.implants) - if(istype(I, /obj/item/implant/exile && M.current.onAwayMission())) - return TRUE - /proc/considered_afk(datum/mind/M) return !M || !M.current || !M.current.client || M.current.client.is_afk() @@ -555,9 +542,8 @@ block( \ if (!istype(turf_area, specific_area)) continue - if (!isspaceturf(found_turf)) - if (!is_blocked_turf(found_turf)) - possible_loc.Add(found_turf) + if (!is_blocked_turf(found_turf)) + possible_loc.Add(found_turf) // Need at least one free location. if (possible_loc.len < 1) diff --git a/code/__HELPERS/icon_smoothing.dm b/code/__HELPERS/icon_smoothing.dm index daac1a8cd1..9933a304a7 100644 --- a/code/__HELPERS/icon_smoothing.dm +++ b/code/__HELPERS/icon_smoothing.dm @@ -393,12 +393,3 @@ SSicon_smooth.smooth_queue += A SSicon_smooth.can_fire = 1 A.smooth |= SMOOTH_QUEUED - - -//Example smooth wall -/turf/closed/wall/smooth - name = "smooth wall" - icon = 'icons/turf/smooth_wall.dmi' - icon_state = "smooth" - smooth = SMOOTH_TRUE|SMOOTH_DIAGONAL|SMOOTH_BORDER - canSmoothWith = null diff --git a/code/__HELPERS/type_processing.dm b/code/__HELPERS/type_processing.dm index 204b411a73..fdde52b081 100644 --- a/code/__HELPERS/type_processing.dm +++ b/code/__HELPERS/type_processing.dm @@ -8,7 +8,6 @@ /obj/effect/decal/cleanable = "CLEANABLE", /obj/item/clothing/head/helmet/space = "SPESSHELMET", /obj/item/book/manual = "MANUAL", - /obj/item/reagent_containers/food/drinks = "DRINK", //longest paths comes first /obj/item/reagent_containers/food = "FOOD", /obj/item/reagent_containers = "REAGENT_CONTAINERS", /obj/item/organ = "ORGAN", diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 7dfe337944..1ff324ca1e 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -644,14 +644,95 @@ will handle it, but: return FALSE return TRUE +/proc/wash_atom(atom/A, clean = CLEAN_WEAK) + SEND_SIGNAL(A, COMSIG_COMPONENT_CLEAN_ACT, clean) + if(isobj(A)) + wash_obj(A,clean) + var/obj/O = A + O.wash_act(clean) + else if(isturf(A)) + wash_turf(A,clean) + else if(isliving(A)) + wash_mob(A,clean) + +/obj/proc/wash_act(clean = CLEAN_WEAK) + return + +/proc/wash_obj(obj/O, clean = CLEAN_WEAK) + . = SEND_SIGNAL(O, COMSIG_COMPONENT_CLEAN_ACT, clean) + +/proc/wash_turf(turf/tile, clean = CLEAN_WEAK) + SEND_SIGNAL(tile, COMSIG_COMPONENT_CLEAN_ACT, clean) + for(var/obj/effect/E in tile) + if(is_cleanable(E)) + qdel(E) + +/proc/wash_mob(mob/living/L, clean = CLEAN_WEAK) + SEND_SIGNAL(L, COMSIG_COMPONENT_CLEAN_ACT, clean) + if(iscarbon(L)) + var/mob/living/carbon/M = L + . = TRUE + + for(var/obj/item/I in M.held_items) + wash_obj(I) + + if(M.back && wash_obj(M.back)) + M.update_inv_back(0) + + var/list/obscured = M.check_obscured_slots() + + if(M.head && wash_obj(M.head,clean)) + M.update_inv_head() + + if(M.glasses && !(SLOT_GLASSES in obscured) && wash_obj(M.glasses,clean)) + M.update_inv_glasses() + + if(M.wear_mask && !(SLOT_WEAR_MASK in obscured) && wash_obj(M.wear_mask,clean)) + M.update_inv_wear_mask() + + if(M.ears && !(HIDEEARS in obscured) && wash_obj(M.ears,clean)) + M.update_inv_ears() + + if(M.wear_neck && !(SLOT_NECK in obscured) && wash_obj(M.wear_neck,clean)) + M.update_inv_neck() + + if(M.shoes && !(HIDESHOES in obscured) && wash_obj(M.shoes,clean)) + M.update_inv_shoes() + + var/washgloves = FALSE + if(M.gloves && !(HIDEGLOVES in obscured)) + washgloves = TRUE + + if(ishuman(M)) + var/mob/living/carbon/human/H = M + + if(H.wear_armor && wash_obj(H.wear_armor,clean)) + H.update_inv_armor() + else if(H.wear_shirt && wash_obj(H.wear_shirt,clean)) + H.update_inv_shirt() + else if(H.wear_pants && wash_obj(H.wear_pants,clean)) + H.update_inv_pants() + + if(washgloves) + SEND_SIGNAL(H, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) + + if(!H.is_mouth_covered()) + H.lip_style = null + H.update_body() + + if(H.belt && wash_obj(H.belt,clean)) + H.update_inv_belt() + else + SEND_SIGNAL(M, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) + else + SEND_SIGNAL(L, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) + /* Checks if that loc and dir has an item on the wall */ GLOBAL_LIST_INIT(WALLITEMS, typecacheof(list( - /obj/structure/extinguisher_cabinet, /obj/structure/reagent_dispensers/peppertank, /obj/structure/sign, /obj/structure/noticeboard, - /obj/item/storage/secure/safe, /obj/structure/mirror, /obj/structure/fireaxecabinet, /obj/structure/sign/picture_frame ))) @@ -1164,16 +1245,6 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new) #define FOR_DVIEW_END GLOB.dview_mob.loc = null -//can a window be here, or is there a window blocking it? -/proc/valid_window_location(turf/T, dir_to_check) - if(!T) - return FALSE - for(var/obj/O in T) - if(istype(O, /obj/structure/window)) - var/obj/structure/window/W = O - if(W.ini_dir == dir_to_check || W.ini_dir == FULLTILE_WINDOW_DIR || dir_to_check == FULLTILE_WINDOW_DIR) - return FALSE - return TRUE #define UNTIL(X) while(!(X)) stoplag() @@ -1364,12 +1435,6 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new) return pick(subtypesof(/obj/item/reagent_containers/food/snacks) - blocked) -/proc/get_random_drink() - var/list/blocked = list(/obj/item/reagent_containers/food/drinks/soda_cans, - /obj/item/reagent_containers/food/drinks/bottle - ) - return pick(subtypesof(/obj/item/reagent_containers/food/drinks) - blocked) - //For these two procs refs MUST be ref = TRUE format like typecaches! /proc/weakref_filter_list(list/things, list/refs) if(!islist(things) || !islist(refs)) diff --git a/code/_globalvars/lists/maintenance_loot.dm b/code/_globalvars/lists/maintenance_loot.dm deleted file mode 100644 index 8f8561f11a..0000000000 --- a/code/_globalvars/lists/maintenance_loot.dm +++ /dev/null @@ -1,94 +0,0 @@ -//How to balance this table -//------------------------- -//The total added weight of all the entries should be (roughly) equal to the total number of lootdrops -//(take in account those that spawn more than one object!) -// -//While this is random, probabilities tells us that item distribution will have a tendency to look like -//the content of the weighted table that created them. -//The less lootdrops, the less even the distribution. -// -//If you want to give items a weight <1 you can multiply all the weights by 10 -// -//the "" entry will spawn nothing, if you increase this value, -//ensure that you balance it with more spawn points - -//table data: -//----------- -//aft maintenance: 24 items, 18 spots 2 extra (28/08/2014) -//asmaint: 16 items, 11 spots 0 extra (08/08/2014) -//asmaint2: 36 items, 26 spots 2 extra (28/08/2014) -//fpmaint: 5 items, 4 spots 0 extra (08/08/2014) -//fpmaint2: 12 items, 11 spots 2 extra (28/08/2014) -//fsmaint: 0 items, 0 spots 0 extra (08/08/2014) -//fsmaint2: 40 items, 27 spots 5 extra (28/08/2014) -//maintcentral: 2 items, 2 spots 0 extra (08/08/2014) -//port: 5 items, 5 spots 0 extra (08/08/2014) - -GLOBAL_LIST_INIT(maintenance_loot, list( - /obj/item/bodybag = 1, - /obj/item/clothing/glasses/meson = 2, - /obj/item/clothing/glasses/sunglasses = 1, - /obj/item/clothing/gloves/color/fyellow = 1, - /obj/item/clothing/head/hardhat = 1, - /obj/item/clothing/head/hardhat/red = 1, - /obj/item/clothing/head/that = 1, - /obj/item/clothing/head/ushanka = 1, - /obj/item/clothing/head/welding = 1, - /obj/item/clothing/mask/gas = 15, - /obj/item/clothing/under/misc/vice_officer = 1, - /obj/item/clothing/suit/hooded/flashsuit = 2, - /obj/item/flashlight = 4, - /obj/item/flashlight/pen = 1, - /obj/effect/spawner/lootdrop/glowstick = 4, - /obj/item/multitool = 2, - /obj/item/stack/medical/suture = 1, - /obj/item/stack/rods/ten = 9, - /obj/item/stack/rods/twentyfive = 1, - /obj/item/stack/rods/fifty = 1, - /obj/item/stack/sheet/cardboard = 2, - /obj/item/stack/sheet/metal/twenty = 1, - /obj/item/stack/sheet/mineral/plasma = 1, - /obj/item/stack/sheet/rglass = 1, - /obj/item/book/manual/wiki/engineering_construction = 1, - /obj/item/book/manual/wiki/engineering_hacking = 1, - /obj/item/clothing/head/cone = 1, - /obj/item/coin/silver = 1, - /obj/item/coin/twoheaded = 1, - /obj/item/poster/random_contraband = 1, - /obj/item/poster/random_official = 1, - /obj/item/crowbar = 1, - /obj/item/crowbar/red = 1, - /obj/item/extinguisher = 11, - /obj/item/hand_labeler = 1, - /obj/item/paper/crumpled = 1, - /obj/item/reagent_containers/hypospray/medipen/pumpup = 6, - /obj/item/pen = 1, - /obj/item/reagent_containers/spray/pestspray = 1, - /obj/item/reagent_containers/glass/rag = 3, - /obj/item/storage/belt/utility = 2, - /obj/item/storage/box = 2, - /obj/item/storage/box/cups = 1, - /obj/item/storage/box/donkpockets = 1, - /obj/item/storage/box/lights/mixed = 3, - /obj/item/storage/box/hug/medical = 1, - /obj/item/storage/fancy/cigarettes/dromedaryco = 1, - /obj/item/storage/toolbox/mechanical = 1, - /obj/item/screwdriver = 3, - /obj/item/tank/internals/emergency_oxygen = 2, - /obj/item/weldingtool = 3, - /obj/item/wirecutters = 1, - /obj/item/wrench = 4, - /obj/item/weaponcrafting/receiver = 2, - /obj/item/clothing/head/cone = 2, - /obj/item/grenade/smokebomb = 2, - /obj/item/geiger_counter = 3, - /obj/item/reagent_containers/syringe = 2, - /obj/effect/spawner/lootdrop/gloves = 8, - /obj/item/clothing/shoes/laceup = 1, - /obj/item/storage/secure/briefcase = 3, - /obj/item/toy/eightball = 1, - /obj/item/reagent_containers/pill/floorpill = 1, - /obj/item/reagent_containers/food/snacks/canned/peaches/maint = 1, - /obj/item/throwing_star = 1, - "" = 3 - )) diff --git a/code/_onclick/hud/monkey.dm b/code/_onclick/hud/monkey.dm index f75433f977..09c4ae0c95 100644 --- a/code/_onclick/hud/monkey.dm +++ b/code/_onclick/hud/monkey.dm @@ -89,10 +89,6 @@ throw_icon.hud = src hotkeybuttons += throw_icon - internals = new /atom/movable/screen/internals() - internals.hud = src - infodisplay += internals - healths = new /atom/movable/screen/healths() healths.hud = src infodisplay += healths diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index 54080ddc88..7d8c6d25f6 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -618,70 +618,6 @@ L.toggle_cmode() update_icon() -/atom/movable/screen/act_intent/robot - icon = 'icons/mob/screen_cyborg.dmi' - screen_loc = ui_borg_intents - -/atom/movable/screen/internals - name = "toggle internals" - icon_state = "internal0" - screen_loc = null - -/atom/movable/screen/internals/Click(location, control, params) - if(!iscarbon(usr)) - return - var/mob/living/carbon/C = usr - if(C.incapacitated()) - return - - if(C.internal) - C.internal = null - to_chat(C, "I are no longer running on internals.") - icon_state = "internal0" - else - if(!C.getorganslot(ORGAN_SLOT_BREATHING_TUBE)) - if(!istype(C.wear_mask, /obj/item/clothing/mask)) - to_chat(C, "I are not wearing an internals mask!") - return 1 - else - var/obj/item/clothing/mask/M = C.wear_mask - if(M.mask_adjusted) // if mask on face but pushed down - M.adjustmask(C) // adjust it back - if( !(M.clothing_flags & MASKINTERNALS) ) - to_chat(C, "I are not wearing an internals mask!") - return - - var/obj/item/I = C.is_holding_item_of_type(/obj/item/tank) - if(I) - to_chat(C, "I are now running on internals from [I] in your [C.get_held_index_name(C.get_held_index_of_item(I))].") - C.internal = I - else if(ishuman(C)) - var/mob/living/carbon/human/H = C - if(istype(H.s_store, /obj/item/tank)) - to_chat(H, "I are now running on internals from [H.s_store] on your [H.wear_armor.name].") - H.internal = H.s_store - else if(istype(H.belt, /obj/item/tank)) - to_chat(H, "I are now running on internals from [H.belt] on your belt.") - H.internal = H.belt - else if(istype(H.l_store, /obj/item/tank)) - to_chat(H, "I are now running on internals from [H.l_store] in your left pocket.") - H.internal = H.l_store - else if(istype(H.r_store, /obj/item/tank)) - to_chat(H, "I are now running on internals from [H.r_store] in your right pocket.") - H.internal = H.r_store - - //Separate so CO2 jetpacks are a little less cumbersome. - if(!C.internal && istype(C.back, /obj/item/tank)) - to_chat(C, "I are now running on internals from [C.back] on your back.") - C.internal = C.back - - if(C.internal) - icon_state = "internal1" - else - to_chat(C, "I don't have an oxygen tank!") - return - C.update_action_buttons_icon() - /atom/movable/screen/mov_intent name = "run/walk toggle" icon = 'icons/mob/screen_midnight.dmi' diff --git a/code/controllers/subsystem/air.dm b/code/controllers/subsystem/air.dm index 3ddcf2388e..31263b3764 100644 --- a/code/controllers/subsystem/air.dm +++ b/code/controllers/subsystem/air.dm @@ -293,9 +293,6 @@ SUBSYSTEM_DEF(air) if (!ET.excited) ET.excited = 1 . += ET -/turf/open/space/resolve_active_graph() - return list() - /datum/controller/subsystem/air/proc/generate_atmos() atmos_gen = list() diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm index 9d835b82de..84bf4294cd 100644 --- a/code/controllers/subsystem/job.dm +++ b/code/controllers/subsystem/job.dm @@ -176,9 +176,6 @@ SUBSYSTEM_DEF(job) if(!job) continue -// if(istype(job, GetJob(SSjob.overflow_role))) // We don't want to give him assistant, that's boring! -// continue - if(job.title in GLOB.noble_positions) //If you want a command position, select it! continue @@ -244,10 +241,6 @@ SUBSYSTEM_DEF(job) if(job.whitelist_req && (!player.client.whitelisted())) continue -// if((player.client.prefs.lastclass == job.title) && (!job.bypass_lastclass)) -// JobDebug("GRJ incompatible with lastclass, Player: [player], Job: [job.title]") -// continue - if(job.spawn_positions) if((job.current_positions < job.spawn_positions) || job.spawn_positions == -1) JobDebug("GRJ Random job given, Player: [player], Job: [job]") @@ -355,9 +348,6 @@ SUBSYSTEM_DEF(job) if(unassigned.len == 0) return validate_required_jobs(required_jobs) - //Scale number of open security officer slots to population -// setup_officer_positions() - //Jobs will have fewer access permissions if the number of players exceeds the threshold defined in game_options.txt var/mat = CONFIG_GET(number/minimal_access_threshold) if(mat) @@ -371,28 +361,12 @@ SUBSYSTEM_DEF(job) HandleFeedbackGathering() - //People who wants to be the overflow role, sure, go on. -// JobDebug("DO, Running Overflow Check 1") -// var/datum/job/overflow = GetJob(SSjob.overflow_role) -// var/list/overflow_candidates = FindOccupationCandidates(overflow, JP_LOW) -// JobDebug("AC1, Candidates: [overflow_candidates.len]") -// for(var/mob/dead/new_player/player in overflow_candidates) -// JobDebug("AC1 pass, Player: [player]") -// AssignRole(player, SSjob.overflow_role) -// overflow_candidates -= player -// JobDebug("DO, AC1 end") //Select one head JobDebug("DO, Running Head Check") -// FillHeadPosition() do_required_jobs() JobDebug("DO, Head Check end") - //Check for an AI -// JobDebug("DO, Running AI Check") -// FillAIPosition() -// JobDebug("DO, AI Check end") - //Other jobs are now checked JobDebug("DO, Running Standard Check") @@ -495,9 +469,6 @@ SUBSYSTEM_DEF(job) //Mop up people who can't leave. for(var/mob/dead/new_player/player in unassigned) //Players that wanted to back out but couldn't because they're antags (can you feel the edge case?) RejectPlayer(player) -// if(!GiveRandomJob(player)) -// if(!AssignRole(player, SSjob.overflow_role)) //If everything is already filled, make them an assistant -// return FALSE //Living on the edge, the forced antagonist couldn't be assigned to overflow role (bans, client age) - just reroll return validate_required_jobs(required_jobs) @@ -677,21 +648,10 @@ SUBSYSTEM_DEF(job) else handle_auto_deadmin_roles(M.client, rank) -// if(job) -// to_chat(M, "As the [rank] you answer directly to [job.supervisors]. Special circumstances may change this.") -// job.radio_help_message(M) -//// if(job.req_admin_notify) -// to_chat(M, "I are playing a job that is important for Game Progression. If you have to disconnect, please notify the admins via adminhelp.") -// if(CONFIG_GET(number/minimal_access_threshold)) -// to_chat(M, "As this station was initially staffed with a [CONFIG_GET(flag/jobs_have_minimal_access) ? "full crew, only your job's necessities" : "skeleton crew, additional access may"] have been added to your ID card.") -// if(job.tutorial) -// to_chat(M, job.tutorial) var/related_policy = get_policy(rank) if(related_policy) to_chat(M,related_policy) -// if(ishuman(H)) -// var/mob/living/carbon/human/wageslave = H -// H.add_memory("Your account ID is [wageslave.account_id].") + if(job && H) job.after_spawn(H, M, joined_late) // note: this happens before the mob has a key! M will always have a client, H might not. diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm index 3d9d90930c..0ef403a11d 100644 --- a/code/controllers/subsystem/mapping.dm +++ b/code/controllers/subsystem/mapping.dm @@ -78,8 +78,6 @@ SUBSYSTEM_DEF(mapping) // Add the transit level transit = add_new_zlevel("Transit/Reserved", list(ZTRAIT_RESERVED = TRUE)) repopulate_sorted_areas() - // Set up Z-level transitions. - setup_map_transitions() initialize_reserved_level(transit.z_value) return ..() @@ -112,27 +110,6 @@ SUBSYSTEM_DEF(mapping) returning += M qdel(T, TRUE) -/* Nuke threats, for making the blue tiles on the station go RED - Used by the AI doomsday and the self destruct nuke. -*/ - -/datum/controller/subsystem/mapping/proc/add_nuke_threat(datum/nuke) - nuke_threats[nuke] = TRUE - check_nuke_threats() - -/datum/controller/subsystem/mapping/proc/remove_nuke_threat(datum/nuke) - nuke_threats -= nuke - check_nuke_threats() - -/datum/controller/subsystem/mapping/proc/check_nuke_threats() - for(var/datum/d in nuke_threats) - if(!istype(d) || QDELETED(d)) - nuke_threats -= d - - for(var/N in nuke_tiles) - var/turf/open/floor/circuit/C = N - C.update_icon() - /datum/controller/subsystem/mapping/Recover() flags |= SS_NO_INIT initialized = SSmapping.initialized diff --git a/code/controllers/subsystem/materials.dm b/code/controllers/subsystem/materials.dm index 0dcc5e9699..90ad50eb60 100644 --- a/code/controllers/subsystem/materials.dm +++ b/code/controllers/subsystem/materials.dm @@ -10,14 +10,12 @@ SUBSYSTEM_DEF(materials) flags = SS_NO_FIRE init_order = INIT_ORDER_MATERIALS ///Dictionary of material.type || material ref - var/list/materials = list() + var/list/materials = list() ///Dictionary of category || list of material refs - var/list/materials_by_category = list() + var/list/materials_by_category = list() ///List of stackcrafting recipes for materials using rigid materials var/list/rigid_stack_recipes = list( new /datum/stack_recipe("chair", /obj/structure/chair/greyscale, one_per_turf = TRUE, on_floor = TRUE, applies_mats = TRUE), - new /datum/stack_recipe("toilet", /obj/structure/toilet/greyscale, one_per_turf = TRUE, on_floor = TRUE, applies_mats = TRUE), - new /datum/stack_recipe("sink", /obj/structure/sink/greyscale, one_per_turf = TRUE, on_floor = TRUE, applies_mats = TRUE), ) /datum/controller/subsystem/materials/Initialize(timeofday) diff --git a/code/controllers/subsystem/minor_mapping.dm b/code/controllers/subsystem/minor_mapping.dm index 6ffc4696c3..14b5638497 100644 --- a/code/controllers/subsystem/minor_mapping.dm +++ b/code/controllers/subsystem/minor_mapping.dm @@ -7,73 +7,9 @@ SUBSYSTEM_DEF(minor_mapping) //Minor mapping comes quite late in the init list so it should be safe to add here. We want this long after everything else is done SSmapping.load_marks() -// trigger_migration(CONFIG_GET(number/mice_roundstart)) //christ why is this uncommented yikes // place_sunlight() -// place_satchels() return ..() -/datum/controller/subsystem/minor_mapping/proc/trigger_migration(num_mice=10) - var/list/exposed_wires = find_exposed_wires() - - var/mob/living/simple_animal/mouse/M - var/turf/proposed_turf - - while((num_mice > 0) && exposed_wires.len) - proposed_turf = pick_n_take(exposed_wires) - if(!M) - M = new(proposed_turf) - else - M.forceMove(proposed_turf) - if(M.environment_is_safe()) - num_mice -= 1 - M = null - -/datum/controller/subsystem/minor_mapping/proc/place_satchels(amount=10) - var/list/turfs = find_satchel_suitable_turfs() - - while(turfs.len && amount > 0) - var/turf/T = pick_n_take(turfs) - var/obj/item/storage/backpack/satchel/flat/S = new(T) - S.hide(intact=TRUE) - amount-- - -/proc/find_exposed_wires() - var/list/exposed_wires = list() - - var/list/all_turfs - for(var/z in SSmapping.levels_by_trait(ZTRAIT_STATION)) - all_turfs += block(locate(1,1,z), locate(world.maxx,world.maxy,z)) - for(var/turf/open/floor/plating/T in all_turfs) - if(is_blocked_turf(T)) - continue - - return shuffle(exposed_wires) - -/proc/find_satchel_suitable_turfs() - var/list/suitable = list() - - for(var/z in SSmapping.levels_by_trait(ZTRAIT_STATION)) - for(var/t in block(locate(1,1,z), locate(world.maxx,world.maxy,z))) - if(isfloorturf(t) && !isplatingturf(t)) - suitable += t - - return shuffle(suitable) -/* -/datum/controller/subsystem/minor_mapping/proc/place_sunlight(amount=0) //shitcode hack - var/list/turfs = find_sun_suitable_turfs() - while(turfs.len && amount > 0) - var/detected = FALSE - var/turf/T = pick_n_take(turfs) - var/turf/F - var/list/surrounding_turfs = block(locate(T.x - 5, T.y - 5, T.z), locate(T.x + 5, T.y + 5, T.z)) - for(F in surrounding_turfs) - var/obj/machinery/light/sun/S = locate() in F - if(S) - detected = TRUE - if(!detected) - new /obj/machinery/light/sun(T) - amount-- -*/ /proc/find_sun_suitable_turfs() var/list/suitable = list() diff --git a/code/controllers/subsystem/pathfinder.dm b/code/controllers/subsystem/pathfinder.dm index 21ee7ea60b..4cc3c76cf8 100644 --- a/code/controllers/subsystem/pathfinder.dm +++ b/code/controllers/subsystem/pathfinder.dm @@ -4,10 +4,8 @@ SUBSYSTEM_DEF(pathfinder) flags = SS_NO_FIRE var/datum/flowcache/mobs var/datum/flowcache/circuits - var/static/space_type_cache /datum/controller/subsystem/pathfinder/Initialize() - space_type_cache = typecacheof(/turf/open/space) mobs = new(10) circuits = new(3) return ..() diff --git a/code/controllers/subsystem/persistence.dm b/code/controllers/subsystem/persistence.dm index 74295560af..e8422529d6 100644 --- a/code/controllers/subsystem/persistence.dm +++ b/code/controllers/subsystem/persistence.dm @@ -5,7 +5,6 @@ SUBSYSTEM_DEF(persistence) init_order = INIT_ORDER_PERSISTENCE flags = SS_NO_FIRE - var/list/obj/structure/chisel_message/chisel_messages = list() var/list/saved_messages = list() var/list/saved_modes = list(1,2,3) var/list/saved_trophies = list() @@ -17,7 +16,6 @@ SUBSYSTEM_DEF(persistence) /datum/controller/subsystem/persistence/Initialize() LoadPoly() - LoadChiselMessages() LoadTrophies() LoadRecentModes() LoadPhotoPersistence() @@ -31,51 +29,6 @@ SUBSYSTEM_DEF(persistence) twitterize(P.speech_buffer, "polytalk") break //Who's been duping the bird?! -/datum/controller/subsystem/persistence/proc/LoadChiselMessages() - var/list/saved_messages = list() - if(fexists("data/npc_saves/ChiselMessages.sav")) //legacy compatability to convert old format to new - var/savefile/chisel_messages_sav = new /savefile("data/npc_saves/ChiselMessages.sav") - var/saved_json - chisel_messages_sav[SSmapping.config.map_name] >> saved_json - if(!saved_json) - return - saved_messages = json_decode(saved_json) - fdel("data/npc_saves/ChiselMessages.sav") - else - var/json_file = file("data/npc_saves/ChiselMessages[SSmapping.config.map_name].json") - if(!fexists(json_file)) - return - var/list/json = json_decode(file2text(json_file)) - - if(!json) - return - saved_messages = json["data"] - - for(var/item in saved_messages) - if(!islist(item)) - continue - - var/xvar = item["x"] - var/yvar = item["y"] - var/zvar = item["z"] - - if(!xvar || !yvar || !zvar) - continue - - var/turf/T = locate(xvar, yvar, zvar) - if(!isturf(T)) - continue - - if(locate(/obj/structure/chisel_message) in T) - continue - - var/obj/structure/chisel_message/M = new(T) - - if(!QDELETED(M)) - M.unpack(item) - - log_world("Loaded [saved_messages.len] engraved messages on map [SSmapping.config.map_name]") - /datum/controller/subsystem/persistence/proc/LoadTrophies() if(fexists("data/npc_saves/TrophyItems.sav")) //legacy compatability to convert old format to new var/savefile/S = new /savefile("data/npc_saves/TrophyItems.sav") @@ -141,7 +94,6 @@ SUBSYSTEM_DEF(persistence) T.update_icon() /datum/controller/subsystem/persistence/proc/CollectData() - CollectChiselMessages() CollectTrophies() CollectRoundtype() SavePhotoPersistence() //THIS IS PERSISTENCE, NOT THE LOGGING PORTION. @@ -218,20 +170,6 @@ SUBSYSTEM_DEF(persistence) WRITE_FILE(frame_path, frame_json) -/datum/controller/subsystem/persistence/proc/CollectChiselMessages() - var/json_file = file("data/npc_saves/ChiselMessages[SSmapping.config.map_name].json") - - for(var/obj/structure/chisel_message/M in chisel_messages) - saved_messages += list(M.pack()) - - log_world("Saved [saved_messages.len] engraved messages on map [SSmapping.config.map_name]") - var/list/file_data = list() - file_data["data"] = saved_messages - fdel(json_file) - WRITE_FILE(json_file, json_encode(file_data)) - -/datum/controller/subsystem/persistence/proc/SaveChiselMessage(obj/structure/chisel_message/M) - saved_messages += list(M.pack()) // dm eats one list /datum/controller/subsystem/persistence/proc/CollectTrophies() diff --git a/code/controllers/subsystem/shuttle.dm b/code/controllers/subsystem/shuttle.dm index edfcd495c7..8ebd7d191b 100644 --- a/code/controllers/subsystem/shuttle.dm +++ b/code/controllers/subsystem/shuttle.dm @@ -301,16 +301,7 @@ SUBSYSTEM_DEF(shuttle) [transit_height] in height. The travel dir is [travel_dir]." */ - var/transit_path = /turf/open/space/transit - switch(travel_dir) - if(NORTH) - transit_path = /turf/open/space/transit/north - if(SOUTH) - transit_path = /turf/open/space/transit/south - if(EAST) - transit_path = /turf/open/space/transit/east - if(WEST) - transit_path = /turf/open/space/transit/west + var/transit_path = /turf/open/water/river var/datum/turf_reservation/proposal = SSmapping.RequestBlockReservation(transit_width, transit_height, null, /datum/turf_reservation/transit, transit_path) diff --git a/code/controllers/subsystem/title.dm b/code/controllers/subsystem/title.dm index b565ce1d19..f5ae683dcd 100644 --- a/code/controllers/subsystem/title.dm +++ b/code/controllers/subsystem/title.dm @@ -6,7 +6,7 @@ SUBSYSTEM_DEF(title) var/file_path var/icon/icon var/icon/previous_icon - var/turf/closed/indestructible/splashscreen/splash_turf + var/turf/closed/splashscreen/splash_turf /datum/controller/subsystem/title/Initialize() if(file_path && icon) diff --git a/code/controllers/subsystem/traumas.dm b/code/controllers/subsystem/traumas.dm index c5ed98c8e5..bab3a9478b 100644 --- a/code/controllers/subsystem/traumas.dm +++ b/code/controllers/subsystem/traumas.dm @@ -31,43 +31,24 @@ SUBSYSTEM_DEF(traumas) "spiders" = typecacheof(list(/mob/living/simple_animal/hostile/poison/giant_spider)), "lizards" = typecacheof(list(/mob/living/simple_animal/hostile/lizard)), - "skeletons" = typecacheof(list(/mob/living/simple_animal/hostile/skeleton)), "snakes" = typecacheof(list(/mob/living/simple_animal/hostile/retaliate/poison/snake)), - "the supernatural" = typecacheof(list(/mob/living/simple_animal/hostile/construct, - /mob/living/simple_animal/shade)), - "conspiracies" = typecacheof(list( - /mob/living/simple_animal/pet/penguin)), - "birds" = typecacheof(list(/mob/living/simple_animal/parrot, /mob/living/simple_animal/chick, /mob/living/simple_animal/chicken, - /mob/living/simple_animal/pet/penguin)) + "birds" = typecacheof(list(/mob/living/simple_animal/parrot)) ) phobia_objs = list( "spiders" = typecacheof(list(/obj/structure/spider)), - "lizards" = typecacheof(list(/obj/item/toy/plush/lizardplushie, /obj/item/reagent_containers/food/snacks/kebab/tail, - /obj/item/organ/tail/lizard, /obj/item/reagent_containers/food/drinks/bottle/lizardwine)), + "lizards" = typecacheof(list(/obj/item/reagent_containers/food/snacks/kebab/tail, + /obj/item/organ/tail/lizard)), - "skeletons" = typecacheof(list(/obj/item/organ/tongue/bone, /obj/item/clothing/suit/armor/bone, /obj/item/stack/sheet/bone, + "skeletons" = typecacheof(list(/obj/item/organ/tongue/bone, /obj/item/alch/bone, /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/skeleton, /obj/effect/decal/remains/human)), - - "birds" = typecacheof(list(/obj/item/clothing/mask/gas/plaguedoctor, /obj/item/reagent_containers/food/snacks/cracker, - /obj/item/clothing/suit/chickensuit, /obj/item/clothing/head/chicken, - /obj/item/clothing/suit/toggle/owlwings, /obj/item/clothing/under/costume/owl, /obj/item/clothing/mask/gas/owl_mask, - /obj/item/clothing/under/costume/griffin, /obj/item/clothing/shoes/griffin, /obj/item/clothing/head/griffin)), - - ) - - phobia_turfs = list( - "the supernatural" = typecacheof(list(/turf/open/floor/plasteel/cult, /turf/closed/wall/mineral/cult)), - "falling" = typecacheof(list(/turf/open/floor/fakepit)) ) phobia_species = list( "lizards" = typecacheof(list(/datum/species/lizard)), - "skeletons" = typecacheof(list(/datum/species/skeleton, /datum/species/plasmaman)), - "the supernatural" = typecacheof(list(/datum/species/golem/runic)), ) return ..() diff --git a/code/datums/action.dm b/code/datums/action.dm index 1a1befddf0..150d125c59 100644 --- a/code/datums/action.dm +++ b/code/datums/action.dm @@ -232,15 +232,6 @@ /datum/action/item_action/toggle_paddles name = "Toggle Paddles" -/datum/action/item_action/set_internals - name = "Set Internals" - -/datum/action/item_action/set_internals/UpdateButtonIcon(status_only = FALSE, force) - if(..()) //button available - if(iscarbon(owner)) - var/mob/living/carbon/C = owner - if(target == C.internal) - button.icon_state = "template_active" /datum/action/item_action/pick_color name = "Choose A Color" @@ -254,35 +245,6 @@ /datum/action/item_action/toggle_helmet_light name = "Toggle Helmet Light" -/datum/action/item_action/toggle_welding_screen - name = "Toggle Welding Screen" - -/datum/action/item_action/toggle_welding_screen/Trigger() - var/obj/item/clothing/head/hardhat/weldhat/H = target - if(istype(H)) - H.toggle_welding_screen(owner) - -/datum/action/item_action/toggle_headphones - name = "Toggle Headphones" - desc = "" - -/datum/action/item_action/toggle_headphones/Trigger() - var/obj/item/clothing/ears/headphones/H = target - if(istype(H)) - H.toggle(owner) - - -/datum/action/item_action/synthswitch - name = "Change Synthesizer Instrument" - desc = "" - -/datum/action/item_action/synthswitch/Trigger() - if(istype(target, /obj/item/instrument/piano_synth)) - var/obj/item/instrument/piano_synth/synth = target - return synth.selectInstrument() - return ..() - - /datum/action/item_action/toggle_helmet_flashlight name = "Toggle Helmet Flashlight" @@ -308,19 +270,6 @@ /datum/action/item_action/change name = "Change" -/datum/action/item_action/nano_picket_sign - name = "Retext Nano Picket Sign" - var/obj/item/picket_sign/S - -/datum/action/item_action/nano_picket_sign/New(Target) - ..() - if(istype(Target, /obj/item/picket_sign)) - S = Target - -/datum/action/item_action/nano_picket_sign/Trigger() - if(istype(S)) - S.retext(owner) - /datum/action/item_action/adjust /datum/action/item_action/adjust/New(Target) @@ -375,17 +324,6 @@ active = FALSE ..() -/datum/action/item_action/instrument - name = "Use Instrument" - desc = "" - -/datum/action/item_action/instrument/Trigger() - if(istype(target, /obj/item/instrument)) - var/obj/item/instrument/I = target - I.interact(usr) - return - return ..() - /datum/action/item_action/organ_action check_flags = AB_CHECK_CONSCIOUS @@ -405,39 +343,6 @@ name = "Use [target.name]" button.name = name -///MGS BOX! -/datum/action/item_action/agent_box - name = "Deploy Box" - desc = "" - check_flags = AB_CHECK_RESTRAINED|AB_CHECK_STUN|AB_CHECK_CONSCIOUS - background_icon_state = "bg_agent" - icon_icon = 'icons/mob/actions/actions_items.dmi' - button_icon_state = "deploy_box" - ///Cooldown between deploys. Uses world.time - var/cooldown = 0 - ///The type of closet this action spawns. - var/boxtype = /obj/structure/closet/cardboard/agent - -///Handles opening and closing the box. -/datum/action/item_action/agent_box/Trigger() - . = ..() - if(!.) - return FALSE - if(istype(owner.loc, /obj/structure/closet/cardboard/agent)) - var/obj/structure/closet/cardboard/agent/box = owner.loc - owner.playsound_local(box, 'sound/blank.ogg', 50, TRUE) - box.open() - return - //Box closing from here on out. - if(!isturf(owner.loc)) //Don't let the player use this to escape mechs/welded closets. - to_chat(owner, "I need more space to activate this implant!") - return - if(cooldown < world.time - 100) - var/box = new boxtype(owner.drop_location()) - owner.forceMove(box) - cooldown = world.time - owner.playsound_local(box, 'sound/blank.ogg', 50, TRUE) - //Preset for spells /datum/action/spell_action check_flags = NONE diff --git a/code/datums/brain_damage/special.dm b/code/datums/brain_damage/special.dm index 562c0e5701..bd8c20a086 100644 --- a/code/datums/brain_damage/special.dm +++ b/code/datums/brain_damage/special.dm @@ -120,30 +120,6 @@ user.visible_message("[user] [slip_in_message].", null, null, null, user) user.visible_message("[user] [slip_out_message].", "...and find your way to the other side.") -/datum/brain_trauma/special/psychotic_brawling - name = "Violent Psychosis" - desc = "" - scan_desc = "" - gain_text = "I feel unhinged..." - lose_text = "I feel more balanced." - var/datum/martial_art/psychotic_brawling/psychotic_brawling - -/datum/brain_trauma/special/psychotic_brawling/on_gain() - ..() - psychotic_brawling = new(null) - if(!psychotic_brawling.teach(owner, TRUE)) - to_chat(owner, "But your martial knowledge keeps you grounded.") - qdel(src) - -/datum/brain_trauma/special/psychotic_brawling/on_lose() - ..() - psychotic_brawling.remove(owner) - QDEL_NULL(psychotic_brawling) - -/datum/brain_trauma/special/psychotic_brawling/bath_salts - name = "Chemical Violent Psychosis" - clonable = FALSE - /datum/brain_trauma/special/tenacity name = "Tenacity" desc = "" diff --git a/code/datums/components/archaeology.dm b/code/datums/components/archaeology.dm deleted file mode 100644 index 35e0bf74c0..0000000000 --- a/code/datums/components/archaeology.dm +++ /dev/null @@ -1,95 +0,0 @@ -/datum/component/archaeology - dupe_mode = COMPONENT_DUPE_UNIQUE - var/list/archdrops = list(/obj/item/bikehorn = list(ARCH_PROB = 100, ARCH_MAXDROP = 1)) // honk~ - var/prob2drop - var/dug - var/datum/callback/callback - -/datum/component/archaeology/Initialize(list/_archdrops = list(), datum/callback/_callback) - archdrops = _archdrops - for(var/i in archdrops) - if(isnull(archdrops[i][ARCH_MAXDROP])) - archdrops[i][ARCH_MAXDROP] = 1 - stack_trace("ARCHAEOLOGY WARNING: [parent] contained a null max_drop value in [i].") - if(isnull(archdrops[i][ARCH_PROB])) - archdrops[i][ARCH_PROB] = 100 - stack_trace("ARCHAEOLOGY WARNING: [parent] contained a null probability value in [i].") - callback = _callback - RegisterSignal(parent, COMSIG_PARENT_ATTACKBY,PROC_REF(Dig)) - RegisterSignal(parent, COMSIG_ATOM_EX_ACT, PROC_REF(BombDig)) - RegisterSignal(parent, COMSIG_ATOM_SING_PULL, PROC_REF(SingDig)) - -/datum/component/archaeology/InheritComponent(datum/component/archaeology/A, i_am_original) - var/list/other_archdrops = A.archdrops - var/list/_archdrops = archdrops - for(var/I in other_archdrops) - _archdrops[I] += other_archdrops[I] - -/datum/component/archaeology/proc/Dig(datum/source, obj/item/I, mob/living/user) - if(dug) - to_chat(user, "Looks like someone has dug here already!") - return - - if(!isturf(user.loc)) - return - - if(I.tool_behaviour == TOOL_SHOVEL || I.tool_behaviour == TOOL_MINING) - to_chat(user, "You start digging...") - - if(I.use_tool(parent, user, 40, volume=50)) - to_chat(user, "You dig a hole.") - gets_dug() - dug = TRUE - SSblackbox.record_feedback("tally", "pick_used_mining", 1, I.type) - return COMPONENT_NO_AFTERATTACK - -/datum/component/archaeology/proc/gets_dug() - if(dug) - return - else - var/turf/open/OT = get_turf(parent) - for(var/thing in archdrops) - var/maxtodrop = archdrops[thing][ARCH_MAXDROP] - for(var/i in 1 to maxtodrop) - if(prob(archdrops[thing][ARCH_PROB])) // can't win them all! - new thing(OT) - - if(isopenturf(OT)) - if(OT.postdig_icon_change) - if(istype(OT, /turf/open/floor/plating/asteroid/) && !OT.postdig_icon) - var/turf/open/floor/plating/asteroid/AOT = parent - AOT.icon_plating = "[AOT.environment_type]_dug" - AOT.icon_state = "[AOT.environment_type]_dug" - else - if(isplatingturf(OT)) - var/turf/open/floor/plating/POT = parent - POT.icon_plating = "[POT.postdig_icon]" - POT.icon_state = "[OT.postdig_icon]" - - if(OT.slowdown) //Things like snow slow you down until you dig them. - OT.slowdown = 0 - dug = TRUE - if(callback) - callback.Invoke() - -/datum/component/archaeology/proc/SingDig(datum/source, S, current_size) - switch(current_size) - if(STAGE_THREE) - if(prob(30)) - gets_dug() - if(STAGE_FOUR) - if(prob(50)) - gets_dug() - else - if(current_size >= STAGE_FIVE && prob(70)) - gets_dug() - -/datum/component/archaeology/proc/BombDig(datum/source, severity, target) - switch(severity) - if(3) - return - if(2) - if(prob(20)) - gets_dug() - if(1) - gets_dug() diff --git a/code/datums/components/armor_plate.dm b/code/datums/components/armor_plate.dm deleted file mode 100644 index d4e57ea03d..0000000000 --- a/code/datums/components/armor_plate.dm +++ /dev/null @@ -1,57 +0,0 @@ -/datum/component/armor_plate - var/amount = 0 - var/maxamount = 3 - var/upgrade_item = /obj/item/stack/sheet/animalhide/goliath_hide - var/datum/armor/added_armor = list("melee" = 10) - var/upgrade_name - -/datum/component/armor_plate/Initialize(_maxamount,obj/item/_upgrade_item,datum/armor/_added_armor) - if(!isobj(parent)) - return COMPONENT_INCOMPATIBLE - - RegisterSignal(parent, COMSIG_PARENT_EXAMINE, PROC_REF(examine)) - RegisterSignal(parent, COMSIG_PARENT_ATTACKBY, PROC_REF(applyplate)) - - if(_maxamount) - maxamount = _maxamount - if(_upgrade_item) - upgrade_item = _upgrade_item - if(_added_armor) - if(islist(_added_armor)) - added_armor = getArmor(arglist(_added_armor)) - else if (istype(_added_armor, /datum/armor)) - added_armor = _added_armor - else - stack_trace("Invalid type [_added_armor.type] passed as _armor_item argument to armorplate component") - else - added_armor = getArmor(arglist(added_armor)) - var/obj/item/typecast = upgrade_item - upgrade_name = initial(typecast.name) - -/datum/component/armor_plate/proc/examine(datum/source, mob/user, list/examine_list) - //upgrade_item could also be typecast here instead - if(amount) - examine_list += "It has been strengthened with [amount]/[maxamount] [upgrade_name]." - else - examine_list += "It can be strengthened with up to [maxamount] [upgrade_name]." - -/datum/component/armor_plate/proc/applyplate(datum/source, obj/item/I, mob/user, params) - if(!istype(I,upgrade_item)) - return - if(amount >= maxamount) - to_chat(user, "I can't improve [parent] any further!") - return - - if(istype(I,/obj/item/stack)) - I.use(1) - else - if(length(I.contents)) - to_chat(user, "[I] cannot be used for armoring while there's something inside!") - return - qdel(I) - - var/obj/O = parent - amount++ - O.armor = O.armor.attachArmor(added_armor) - - to_chat(user, "I strengthen [O], improving its resistance against melee attacks.") diff --git a/code/datums/components/crafting/tailoring.dm b/code/datums/components/crafting/tailoring.dm deleted file mode 100644 index 7336604be9..0000000000 --- a/code/datums/components/crafting/tailoring.dm +++ /dev/null @@ -1,83 +0,0 @@ - -/datum/crafting_recipe/durathread_vest - name = "Durathread Vest" - result = /obj/item/clothing/suit/armor/vest/durathread - reqs = list(/obj/item/stack/sheet/durathread = 5, - /obj/item/stack/sheet/leather = 4) - time = 50 - category = CAT_NONE - -/datum/crafting_recipe/durathread_helmet - name = "Durathread Helmet" - result = /obj/item/clothing/head/helmet/durathread - reqs = list(/obj/item/stack/sheet/durathread = 4, - /obj/item/stack/sheet/leather = 5) - time = 40 - category = CAT_NONE - -/datum/crafting_recipe/durathread_jumpsuit - name = "Durathread Jumpsuit" - result = /obj/item/clothing/under/misc/durathread - reqs = list(/obj/item/stack/sheet/durathread = 4) - time = 40 - category = CAT_NONE - -/datum/crafting_recipe/durathread_beret - name = "Durathread Beret" - result = /obj/item/clothing/head/beret/durathread - reqs = list(/obj/item/stack/sheet/durathread = 2) - time = 40 - category = CAT_NONE - -/datum/crafting_recipe/durathread_beanie - name = "Durathread Beanie" - result = /obj/item/clothing/head/beanie/durathread - reqs = list(/obj/item/stack/sheet/durathread = 2) - time = 40 - category = CAT_NONE - -/datum/crafting_recipe/durathread_bandana - name = "Durathread Bandana" - result = /obj/item/clothing/mask/bandana/durathread - reqs = list(/obj/item/stack/sheet/durathread = 1) - time = 25 - category = CAT_NONE - -/datum/crafting_recipe/fannypack - name = "Fannypack" - result = /obj/item/storage/belt/fannypack - reqs = list(/obj/item/stack/sheet/cloth = 2, - /obj/item/stack/sheet/leather = 1) - time = 20 - category = CAT_NONE - - -/datum/crafting_recipe/beergogglesremoval - name = "Beer Goggles removal" - result = /obj/item/clothing/glasses/sunglasses - time = 20 - tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER) - reqs = list(/obj/item/clothing/glasses/sunglasses/reagent = 1) - category = CAT_NONE - -/datum/crafting_recipe/ghostsheet - name = "Ghost Sheet" - result = /obj/item/clothing/suit/ghost_sheet - time = 5 - tools = list(TOOL_WIRECUTTER) - reqs = list(/obj/item/bedsheet = 1) - category = CAT_NONE - -/datum/crafting_recipe/cowboyboots - name = "Cowboy Boots" - result = /obj/item/clothing/shoes/cowboy - reqs = list(/obj/item/stack/sheet/leather = 2) - time = 45 - category = CAT_NONE - -/datum/crafting_recipe/lizardboots - name = "Lizard Skin Boots" - result = /obj/effect/spawner/lootdrop/lizardboots - reqs = list(/obj/item/stack/sheet/animalhide/lizard = 1, /obj/item/stack/sheet/leather = 1) - time = 60 - category = CAT_NONE diff --git a/code/datums/components/fantasy/_fantasy.dm b/code/datums/components/fantasy/_fantasy.dm deleted file mode 100644 index 86e016784a..0000000000 --- a/code/datums/components/fantasy/_fantasy.dm +++ /dev/null @@ -1,140 +0,0 @@ -/datum/component/fantasy - dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS - - var/quality - - var/canFail - var/announce - - var/originalName - var/list/affixes - var/list/appliedComponents - - var/static/list/affixListing - -/datum/component/fantasy/Initialize(quality, list/affixes = list(), canFail=FALSE, announce=FALSE) - if(!isitem(parent)) - return COMPONENT_INCOMPATIBLE - - src.quality = quality || randomQuality() - src.canFail = canFail - src.announce = announce - - src.affixes = affixes - appliedComponents = list() - randomAffixes() - -/datum/component/fantasy/Destroy() - unmodify() - affixes = null - return ..() - -/datum/component/fantasy/RegisterWithParent() - var/obj/item/master = parent - originalName = master.name - modify() - -/datum/component/fantasy/UnregisterFromParent() - unmodify() - -/datum/component/fantasy/InheritComponent(datum/component/fantasy/newComp, original, list/arguments) - unmodify() - if(newComp) - quality += newComp.quality - canFail = newComp.canFail - announce = newComp.announce - else - arguments.len = 5 // This is done to replicate what happens when an arglist smaller than the necessary arguments is given - quality += arguments[1] - canFail = arguments[4] || canFail - announce = arguments[5] || announce - modify() - -/datum/component/fantasy/proc/randomQuality() - var/quality = pick(1;15, 2;14, 2;13, 2;12, 3;11, 3;10, 3;9, 4;8, 4;7, 4;6, 5;5, 5;4, 5;3, 6;2, 6;1, 6;0) - if(prob(50)) - quality = -quality - return quality - -/datum/component/fantasy/proc/randomAffixes(force) - if(!affixListing) - affixListing = list() - for(var/T in subtypesof(/datum/fantasy_affix)) - var/datum/fantasy_affix/affix = new T - affixListing[affix] = affix.weight - - if(length(affixes)) - if(!force) - return - affixes = list() - - var/alignment - if(quality >= 0) - alignment |= AFFIX_GOOD - if(quality <= 0) - alignment |= AFFIX_EVIL - - var/usedSlots = NONE - for(var/i in 1 to max(1, abs(quality))) // We want at least 1 affix applied - var/datum/fantasy_affix/affix = pickweight(affixListing) - if(affix.placement & usedSlots) - continue - if(!(affix.alignment & alignment)) - continue - if(!affix.validate(src)) - continue - affixes += affix - usedSlots |= affix.placement - -/datum/component/fantasy/proc/modify() - var/obj/item/master = parent - - master.force = max(0, master.force + quality) - master.throwforce = max(0, master.throwforce + quality) - master.armor = master.armor?.modifyAllRatings(quality) - - var/newName = originalName - for(var/i in affixes) - var/datum/fantasy_affix/affix = i - newName = affix.apply(src, newName) - - if(quality != 0) - newName = "[newName] [quality > 0 ? "+" : ""][quality]" - - if(canFail && prob((quality - 9)*10)) - var/turf/place = get_turf(parent) - place.visible_message("[parent] violently glows blue for a while, then evaporates.") - master.burn() - return - else if(announce) - announce() - - master.name = newName - -/datum/component/fantasy/proc/unmodify() - var/obj/item/master = parent - - for(var/i in affixes) - var/datum/fantasy_affix/affix = i - affix.remove(src) - for(var/i in appliedComponents) - qdel(i) - - master.force = max(0, master.force - quality) - master.throwforce = max(0, master.throwforce - quality) - master.armor = master.armor?.modifyAllRatings(-quality) - - master.name = originalName - -/datum/component/fantasy/proc/announce() - var/turf/location = get_turf(parent) - var/span - var/effect_description - if(quality >= 0) - span = "" - effect_description = "shimmering golden glow" - else - span = "" - effect_description = "mottled black glow" - - location.visible_message("[span][originalName] is covered by a [effect_description] and then transforms into [parent]!") diff --git a/code/datums/components/fantasy/affix.dm b/code/datums/components/fantasy/affix.dm deleted file mode 100644 index ad1f44ce4d..0000000000 --- a/code/datums/components/fantasy/affix.dm +++ /dev/null @@ -1,13 +0,0 @@ -/datum/fantasy_affix - var/placement // A bitflag of "slots" this affix takes up, for example pre/suffix - var/alignment - var/weight = 10 - -// For those occasional affixes which only make sense in certain circumstances -/datum/fantasy_affix/proc/validate(datum/component/fantasy/comp) - return TRUE - -/datum/fantasy_affix/proc/apply(datum/component/fantasy/comp, newName) - return newName - -/datum/fantasy_affix/proc/remove(datum/component/fantasy/comp) diff --git a/code/datums/components/fantasy/prefixes.dm b/code/datums/components/fantasy/prefixes.dm deleted file mode 100644 index 11705540cb..0000000000 --- a/code/datums/components/fantasy/prefixes.dm +++ /dev/null @@ -1,68 +0,0 @@ -/datum/fantasy_affix/cosmetic_prefixes - placement = AFFIX_PREFIX - alignment = AFFIX_GOOD | AFFIX_EVIL - - var/list/goodPrefixes - var/list/badPrefixes - -/datum/fantasy_affix/cosmetic_prefixes/New() - goodPrefixes = list( - "greater", - "major", - "blessed", - "superior", - "empowered", - "honed", - "true", - "glorious", - "robust", - ) - badPrefixes = list( - "lesser", - "minor", - "blighted", - "inferior", - "enfeebled", - "rusted", - "unsteady", - "tragic", - "gimped", - "cursed", - ) - - weight = (length(goodPrefixes) + length(badPrefixes)) * 10 - -/datum/fantasy_affix/cosmetic_prefixes/apply(datum/component/fantasy/comp, newName) - if(comp.quality > 0 || (comp.quality == 0 && prob(50))) - return "[pick(goodPrefixes)] [newName]" - else - return "[pick(badPrefixes)] [newName]" - -/datum/fantasy_affix/tactical - placement = AFFIX_PREFIX - alignment = AFFIX_GOOD - weight = 1 // Very powerful, no one should have such power - -/datum/fantasy_affix/tactical/apply(datum/component/fantasy/comp, newName) - var/obj/item/master = comp.parent - comp.appliedComponents += master.AddComponent(/datum/component/tactical) - return "tactical [newName]" - -/datum/fantasy_affix/pyromantic - placement = AFFIX_PREFIX - alignment = AFFIX_GOOD - -/datum/fantasy_affix/pyromantic/apply(datum/component/fantasy/comp, newName) - var/obj/item/master = comp.parent - comp.appliedComponents += master.AddComponent(/datum/component/igniter, CLAMP(comp.quality, 1, 10)) - return "pyromantic [newName]" - -/datum/fantasy_affix/vampiric - placement = AFFIX_PREFIX - alignment = AFFIX_GOOD - weight = 5 - -/datum/fantasy_affix/vampiric/apply(datum/component/fantasy/comp, newName) - var/obj/item/master = comp.parent - comp.appliedComponents += master.AddComponent(/datum/component/lifesteal, comp.quality) - return "vampiric [newName]" diff --git a/code/datums/components/fantasy/suffixes.dm b/code/datums/components/fantasy/suffixes.dm deleted file mode 100644 index b637b4cd06..0000000000 --- a/code/datums/components/fantasy/suffixes.dm +++ /dev/null @@ -1,168 +0,0 @@ -/datum/fantasy_affix/cosmetic_suffixes - placement = AFFIX_SUFFIX - alignment = AFFIX_GOOD | AFFIX_EVIL - - var/list/goodSuffixes - var/list/badSuffixes - -/datum/fantasy_affix/cosmetic_suffixes/New() - goodSuffixes = list( - "dexterity", - "constitution", - "intelligence", - "wisdom", - "charisma", - "the forest", - "the hills", - "the plains", - "the sea", - "the sun", - "the moon", - "the void", - "the world", - "many secrets", - "many tales", - "many colors", - "rending", - "sundering", - "the night", - "the day", - ) - badSuffixes = list( - "draining", - "burden", - "discomfort", - "awkwardness", - "poor hygiene", - "timidity", - ) - - weight = (length(goodSuffixes) + length(badSuffixes)) * 10 - -/datum/fantasy_affix/cosmetic_suffixes/apply(datum/component/fantasy/comp, newName) - if(comp.quality > 0 || (comp.quality == 0 && prob(50))) - return "[newName] of [pick(goodSuffixes)]" - else - return "[newName] of [pick(badSuffixes)]" - -//////////// Good suffixes -/datum/fantasy_affix/bane - placement = AFFIX_SUFFIX - alignment = AFFIX_GOOD - -/datum/fantasy_affix/bane/apply(datum/component/fantasy/comp, newName) - . = ..() - // This is set up to be easy to add to these lists as I expect it will need modifications - var/static/list/possible_mobtypes - if(!possible_mobtypes) - // The base list of allowed mob/species types - possible_mobtypes = typecacheof(list( - /mob/living/simple_animal, - /mob/living/carbon, - /datum/species, - )) - // Some particular types to disallow if they're too broad/abstract - possible_mobtypes -= list( - /mob/living/simple_animal/hostile, - ) - // Some types to remove them and their subtypes - possible_mobtypes -= typecacheof(list( - /mob/living/carbon/human/species, - )) - - var/mob/picked_mobtype = pick(possible_mobtypes) - // This works even with the species picks since we're only accessing the name - - var/obj/item/master = comp.parent - comp.appliedComponents += master.AddComponent(/datum/component/bane, picked_mobtype) - return "[newName] of [initial(picked_mobtype.name)] slaying" - -/datum/fantasy_affix/summoning - placement = AFFIX_SUFFIX - alignment = AFFIX_GOOD - weight = 5 - -/datum/fantasy_affix/summoning/apply(datum/component/fantasy/comp, newName) - . = ..() - // This is set up to be easy to add to these lists as I expect it will need modifications - var/static/list/possible_mobtypes - if(!possible_mobtypes) - // The base list of allowed mob/species types - possible_mobtypes = typecacheof(list( - /mob/living/simple_animal, - /mob/living/carbon, - /datum/species, - )) - // Some particular types to disallow if they're too broad/abstract - possible_mobtypes -= list( - /mob/living/simple_animal/hostile, - ) - // Some types to remove them and their subtypes - possible_mobtypes -= typecacheof(list( - /mob/living/carbon/human/species, - )) - - var/mob/picked_mobtype = pick(possible_mobtypes) - // This works even with the species picks since we're only accessing the name - - var/obj/item/master = comp.parent - var/max_mobs = max(CEILING(comp.quality/2, 1), 1) - var/spawn_delay = 300 - 30 * comp.quality - comp.appliedComponents += master.AddComponent(/datum/component/summoning, list(picked_mobtype), 100, max_mobs, spawn_delay) - return "[newName] of [initial(picked_mobtype.name)] summoning" - -/datum/fantasy_affix/shrapnel - placement = AFFIX_SUFFIX - alignment = AFFIX_GOOD - -/datum/fantasy_affix/shrapnel/validate(datum/component/fantasy/comp) - if(isgun(comp.parent)) - return TRUE - return FALSE - -/datum/fantasy_affix/shrapnel/apply(datum/component/fantasy/comp, newName) - . = ..() - // higher means more likely - var/list/weighted_projectile_types = list( - /obj/projectile/meteor = 1, - /obj/projectile/energy/nuclear_particle = 1, - /obj/projectile/beam/pulse = 1, - /obj/projectile/bullet/honker = 15, - /obj/projectile/temp = 15, - /obj/projectile/ion = 15, - /obj/projectile/magic/locker = 15, - /obj/projectile/magic/fetch = 15, - /obj/projectile/beam/emitter = 15, - /obj/projectile/magic/flying = 15, - /obj/projectile/bullet/incendiary/c9mm = 15, - /obj/projectile/temp/hot = 15, - /obj/projectile/beam/disabler = 15 - ) - - var/obj/projectile/picked_projectiletype = pickweight(weighted_projectile_types) - - var/obj/item/master = comp.parent - comp.appliedComponents += master.AddComponent(/datum/component/shrapnel, picked_projectiletype) - return "[newName] of [initial(picked_projectiletype.name)] shrapnel" - -/datum/fantasy_affix/strength - placement = AFFIX_SUFFIX - alignment = AFFIX_GOOD - -/datum/fantasy_affix/strength/apply(datum/component/fantasy/comp, newName) - . = ..() - var/obj/item/master = comp.parent - comp.appliedComponents += master.AddComponent(/datum/component/knockback, CEILING(comp.quality/2, 1), FLOOR(comp.quality/10, 1)) - return "[newName] of strength" - -//////////// Bad suffixes - -/datum/fantasy_affix/fool - placement = AFFIX_SUFFIX - alignment = AFFIX_EVIL - -/datum/fantasy_affix/fool/apply(datum/component/fantasy/comp, newName) - . = ..() - var/obj/item/master = comp.parent - comp.appliedComponents += master.AddComponent(/datum/component/squeak, list('sound/blank.ogg'=1), 50) - return "[newName] of the fool" diff --git a/code/datums/components/forced_gravity.dm b/code/datums/components/forced_gravity.dm index 90051af551..eca46ad4cc 100644 --- a/code/datums/components/forced_gravity.dm +++ b/code/datums/components/forced_gravity.dm @@ -12,8 +12,6 @@ gravity = forced_value /datum/component/forced_gravity/proc/gravity_check(datum/source, turf/location, list/gravs) - if(!ignore_space && isspaceturf(location)) - return gravs += gravity /datum/component/forced_gravity/proc/turf_gravity_check(datum/source, atom/checker, list/gravs) diff --git a/code/datums/components/paintable.dm b/code/datums/components/paintable.dm deleted file mode 100644 index 7ef9de44e6..0000000000 --- a/code/datums/components/paintable.dm +++ /dev/null @@ -1,29 +0,0 @@ -/datum/component/spraycan_paintable - var/current_paint - -/datum/component/spraycan_paintable/Initialize() - RegisterSignal(parent, COMSIG_PARENT_ATTACKBY, PROC_REF(Repaint)) - -/datum/component/spraycan_paintable/Destroy() - RemoveCurrentCoat() - return ..() - -/datum/component/spraycan_paintable/proc/RemoveCurrentCoat() - var/atom/A = parent - A.remove_atom_colour(FIXED_COLOUR_PRIORITY, current_paint) - -/datum/component/spraycan_paintable/proc/Repaint(datum/source, obj/item/toy/crayon/spraycan/spraycan, mob/living/user) - if(!istype(spraycan) || user.used_intent.type == INTENT_HARM) - return - . = COMPONENT_NO_AFTERATTACK - if(spraycan.is_capped) - to_chat(user, "Take the cap off first!") - return - RemoveCurrentCoat() - if(spraycan.use_charges(user, 2)) - var/colour = spraycan.paint_color - current_paint = colour - var/atom/A = parent - A.add_atom_colour(colour, FIXED_COLOUR_PRIORITY) - playsound(spraycan, 'sound/blank.ogg', 5, TRUE, 5) - to_chat(user, "I spray [spraycan] on [A], painting it.") diff --git a/code/datums/components/spawner.dm b/code/datums/components/spawner.dm index 7044c11357..190a7d5e51 100644 --- a/code/datums/components/spawner.dm +++ b/code/datums/components/spawner.dm @@ -1,5 +1,5 @@ /datum/component/spawner - var/mob_types = list(/mob/living/simple_animal/hostile/carp) + var/mob_types = list(/mob/living/simple_animal/hostile/rogue/werewolf) var/spawn_time = 300 //30 seconds default var/list/spawned_mobs = list() var/spawn_delay = 0 diff --git a/code/datums/components/spooky.dm b/code/datums/components/spooky.dm deleted file mode 100644 index 2e8ab711d1..0000000000 --- a/code/datums/components/spooky.dm +++ /dev/null @@ -1,60 +0,0 @@ -/datum/component/spooky - var/too_spooky = TRUE //will it spawn a new instrument? - -/datum/component/spooky/Initialize() - RegisterSignal(parent, COMSIG_ITEM_ATTACK, PROC_REF(spectral_attack)) - -/datum/component/spooky/proc/spectral_attack(datum/source, mob/living/carbon/C, mob/user) - if(ishuman(user)) //this weapon wasn't meant for mortals. - var/mob/living/carbon/human/U = user - if(!istype(U.dna.species, /datum/species/skeleton)) - U.adjustStaminaLoss(35) //Extra Damage - U.Jitter(35) - U.stuttering = 20 - if(U.getStaminaLoss() > 95) - to_chat(U, "My ears weren't meant for this spectral sound.") - spectral_change(U) - return - - if(ishuman(C)) - var/mob/living/carbon/human/H = C - if(istype(H.dna.species, /datum/species/skeleton)) - return //undeads are unaffected by the spook-pocalypse. - if(istype(H.dna.species, /datum/species/zombie)) - H.adjustStaminaLoss(25) - H.Paralyze(15) //zombies can't resist the doot - C.Jitter(35) - C.stuttering = 20 - if((!istype(H.dna.species, /datum/species/skeleton)) && (!istype(H.dna.species, /datum/species/golem)) && (!istype(H.dna.species, /datum/species/android))) - C.adjustStaminaLoss(25) //boneless humanoids don't lose the will to live - to_chat(C, "DOOT") - spectral_change(H) - - else //the sound will spook monkeys. - C.Jitter(15) - C.stuttering = 20 - -/datum/component/spooky/proc/spectral_change(mob/living/carbon/human/H, mob/user) - if((H.getStaminaLoss() > 95) && (!istype(H.dna.species, /datum/species/skeleton)) && (!istype(H.dna.species, /datum/species/golem)) && (!istype(H.dna.species, /datum/species/android))) - H.Paralyze(20) - H.set_species(/datum/species/skeleton) - H.visible_message("[H] has given up on life as a mortal.") - var/T = get_turf(H) - if(too_spooky) - if(prob(30)) - new/obj/item/instrument/saxophone/spectral(T) - else if(prob(30)) - new/obj/item/instrument/trumpet/spectral(T) - else if(prob(30)) - new/obj/item/instrument/trombone/spectral(T) - else - to_chat(H, "The spooky gods forgot to ship my instrument. Better luck next unlife.") - to_chat(H, "I are the spooky skeleton!") - to_chat(H, "A new life and identity has begun. Help my fellow skeletons into bringing out the spooky-pocalypse. You haven't forgotten my past life, and are still beholden to past loyalties.") - change_name(H) //time for a new name! - -/datum/component/spooky/proc/change_name(mob/living/carbon/human/H) - var/t = sanitize_name(stripped_input(H, "Enter my new skeleton name", H.real_name, null, MAX_NAME_LEN)) - if(!t) - t = "spooky skeleton" - H.fully_replace_character_name(null, t) diff --git a/code/datums/components/storage/concrete/bag_of_holding.dm b/code/datums/components/storage/concrete/bag_of_holding.dm deleted file mode 100644 index 2dcf9e63e9..0000000000 --- a/code/datums/components/storage/concrete/bag_of_holding.dm +++ /dev/null @@ -1,22 +0,0 @@ -/datum/component/storage/concrete/bluespace/bag_of_holding/handle_item_insertion(obj/item/W, prevent_warning = FALSE, mob/living/user) - var/atom/A = parent - if(A == W) //don't put myself into myself. - return - var/list/obj/item/storage/backpack/holding/matching = typecache_filter_list(W.GetAllContents(), typecacheof(/obj/item/storage/backpack/holding)) - matching -= A - if(istype(W, /obj/item/storage/backpack/holding) || matching.len) - var/safety = alert(user, "Doing this will have extremely dire consequences for the station and its crew. Be sure you know what you're doing.", "Put in [A.name]?", "Abort", "Proceed") - if(safety != "Proceed" || QDELETED(A) || QDELETED(W) || QDELETED(user) || !user.canUseTopic(A, BE_CLOSE, iscarbon(user))) - return - var/turf/loccheck = get_turf(A) - to_chat(user, "The Bluespace interfaces of the two devices catastrophically malfunction!") - qdel(W) - playsound(loccheck,'sound/blank.ogg', 200, TRUE) - - message_admins("[ADMIN_LOOKUPFLW(user)] detonated a bag of holding at [ADMIN_VERBOSEJMP(loccheck)].") - log_game("[key_name(user)] detonated a bag of holding at [loc_name(loccheck)].") - - user.gib(TRUE, TRUE, TRUE) - qdel(A) - return - . = ..() diff --git a/code/datums/components/storage/concrete/bluespace.dm b/code/datums/components/storage/concrete/bluespace.dm deleted file mode 100644 index 06a050615f..0000000000 --- a/code/datums/components/storage/concrete/bluespace.dm +++ /dev/null @@ -1,22 +0,0 @@ -/datum/component/storage/concrete/bluespace - var/dumping_range = 8 - var/dumping_sound = 'sound/blank.ogg' - var/alt_sound = 'sound/blank.ogg' - -/datum/component/storage/concrete/bluespace/dump_content_at(atom/dest, mob/M) - var/atom/A = parent - if(A.Adjacent(M)) - var/atom/dumping_location = dest.get_dumping_location() - var/turf/bagT = get_turf(parent) - var/turf/destT = get_turf(dumping_location) - if(destT && bagT && bagT.z == destT.z && get_dist(M, dumping_location) < dumping_range) - if(dumping_location.storage_contents_dump_act(src, M)) - if(alt_sound && prob(1)) - playsound(src, alt_sound, 40, TRUE) - else - playsound(src, dumping_sound, 40, TRUE) - M.Beam(dumping_location, icon_state="rped_upgrade", time=5) - return TRUE - to_chat(M, "The [A.name] buzzes.") - playsound(src, 'sound/blank.ogg', 50, FALSE) - return FALSE diff --git a/code/datums/components/storage/concrete/implant.dm b/code/datums/components/storage/concrete/implant.dm deleted file mode 100644 index cf15b2d6df..0000000000 --- a/code/datums/components/storage/concrete/implant.dm +++ /dev/null @@ -1,14 +0,0 @@ -/datum/component/storage/concrete/implant - max_w_class = WEIGHT_CLASS_NORMAL - max_combined_w_class = 6 - max_items = 2 - drop_all_on_destroy = TRUE - drop_all_on_deconstruct = TRUE - silent = TRUE - allow_big_nesting = TRUE - -/datum/component/storage/concrete/implant/InheritComponent(datum/component/storage/concrete/implant/I, original) - if(!istype(I)) - return ..() - max_combined_w_class += I.max_combined_w_class - max_items += I.max_items diff --git a/code/datums/components/storage/concrete/pockets.dm b/code/datums/components/storage/concrete/pockets.dm deleted file mode 100644 index 7053e79157..0000000000 --- a/code/datums/components/storage/concrete/pockets.dm +++ /dev/null @@ -1,95 +0,0 @@ -/datum/component/storage/concrete/pockets - max_items = 2 - max_w_class = WEIGHT_CLASS_SMALL - max_combined_w_class = 50 - rustle_sound = FALSE - -/datum/component/storage/concrete/pockets/handle_item_insertion(obj/item/I, prevent_warning, mob/user) - . = ..() - if(. && silent && !prevent_warning) - if(quickdraw) - to_chat(user, "I discreetly slip [I] into [parent]. Alt-click [parent] to remove it.") - else - to_chat(user, "I discreetly slip [I] into [parent].") - -/datum/component/storage/concrete/pockets/small - max_items = 1 - max_w_class = WEIGHT_CLASS_SMALL - attack_hand_interact = FALSE - -/datum/component/storage/concrete/pockets/tiny - max_items = 1 - max_w_class = WEIGHT_CLASS_TINY - attack_hand_interact = FALSE - -/datum/component/storage/concrete/pockets/small/fedora/Initialize() - . = ..() - var/static/list/exception_cache = typecacheof(list( - /obj/item/katana, /obj/item/toy/katana, /obj/item/nullrod/claymore/katana, - /obj/item/gun/ballistic/automatic/tommygun - )) - exception_hold = exception_cache - -/datum/component/storage/concrete/pockets/small/fedora/detective - attack_hand_interact = TRUE // so the detectives would discover pockets in their hats - -/datum/component/storage/concrete/pockets/shoes - attack_hand_interact = FALSE - quickdraw = TRUE - silent = TRUE - -/datum/component/storage/concrete/pockets/shoes/Initialize() - . = ..() - set_holdable(list( - /obj/item/kitchen/knife, /obj/item/switchblade, /obj/item/pen, - /obj/item/scalpel, /obj/item/reagent_containers/syringe, /obj/item/dnainjector, - /obj/item/reagent_containers/hypospray/medipen, /obj/item/reagent_containers/dropper, - /obj/item/implanter, /obj/item/screwdriver, /obj/item/weldingtool/mini, - /obj/item/firing_pin - ), - list(/obj/item/screwdriver/power) - ) - -/datum/component/storage/concrete/pockets/shoes/clown/Initialize() - . = ..() - set_holdable(list( - /obj/item/kitchen/knife, /obj/item/switchblade, /obj/item/pen, - /obj/item/scalpel, /obj/item/reagent_containers/syringe, /obj/item/dnainjector, - /obj/item/reagent_containers/hypospray/medipen, /obj/item/reagent_containers/dropper, - /obj/item/implanter, /obj/item/screwdriver, /obj/item/weldingtool/mini, - /obj/item/firing_pin, /obj/item/bikehorn), - list(/obj/item/screwdriver/power) - ) - -/datum/component/storage/concrete/pockets/pocketprotector - max_items = 3 - max_w_class = WEIGHT_CLASS_TINY - var/atom/original_parent - -/datum/component/storage/concrete/pockets/pocketprotector/Initialize() - original_parent = parent - . = ..() - set_holdable(list( //Same items as a PDA - /obj/item/pen, - /obj/item/toy/crayon, - /obj/item/lipstick, - /obj/item/flashlight/pen, - /obj/item/clothing/mask/cigarette) - ) - -/datum/component/storage/concrete/pockets/pocketprotector/real_location() - // if the component is reparented to a jumpsuit, the items still go in the protector - return original_parent - -/datum/component/storage/concrete/pockets/helmet - quickdraw = TRUE - max_combined_w_class = 6 - -/datum/component/storage/concrete/pockets/helmet/Initialize() - . = ..() - set_holdable(list( - /obj/item/reagent_containers/food/drinks/bottle/vodka, - /obj/item/reagent_containers/food/drinks/bottle/molotov, - /obj/item/reagent_containers/food/drinks/drinkingglass, - /obj/item/ammo_box/a762) - ) diff --git a/code/datums/components/storage/concrete/rped.dm b/code/datums/components/storage/concrete/rped.dm deleted file mode 100644 index 455eb985f0..0000000000 --- a/code/datums/components/storage/concrete/rped.dm +++ /dev/null @@ -1,33 +0,0 @@ -/datum/component/storage/concrete/rped - collection_mode = COLLECT_EVERYTHING - allow_quick_gather = TRUE - allow_quick_empty = TRUE - click_gather = TRUE - max_w_class = WEIGHT_CLASS_NORMAL - max_combined_w_class = 100 - max_items = 50 - display_numerical_stacking = TRUE - -/datum/component/storage/concrete/rped/can_be_inserted(obj/item/I, stop_messages, mob/M) - . = ..() - if(!I.get_part_rating()) - if (!stop_messages) - to_chat(M, "[parent] only accepts machine parts!") - return FALSE - -/datum/component/storage/concrete/bluespace/rped - collection_mode = COLLECT_EVERYTHING - allow_quick_gather = TRUE - allow_quick_empty = TRUE - click_gather = TRUE - max_w_class = WEIGHT_CLASS_BULKY // can fit vending refills - max_combined_w_class = 800 - max_items = 400 - display_numerical_stacking = TRUE - -/datum/component/storage/concrete/bluespace/rped/can_be_inserted(obj/item/I, stop_messages, mob/M) - . = ..() - if(!I.get_part_rating()) - if (!stop_messages) - to_chat(M, "[parent] only accepts machine parts!") - return FALSE diff --git a/code/datums/components/storage/storage.dm b/code/datums/components/storage/storage.dm index c39e0a9252..a75ce45561 100644 --- a/code/datums/components/storage/storage.dm +++ b/code/datums/components/storage/storage.dm @@ -551,11 +551,7 @@ //This proc is called when you want to place an item into the storage item. /datum/component/storage/proc/attackby(datum/source, obj/item/I, mob/M, params) - if(istype(I, /obj/item/hand_labeler)) - var/obj/item/hand_labeler/labeler = I - if(labeler.mode) - return FALSE -// . = TRUE //no afterattack + if(!can_be_inserted(I, FALSE, M)) var/atom/real_location = real_location() if(real_location.contents.len >= max_items) //don't use items on the backpack if they don't fit diff --git a/code/datums/components/tactical.dm b/code/datums/components/tactical.dm index 74a4eebb5d..3c1a72c0e3 100644 --- a/code/datums/components/tactical.dm +++ b/code/datums/components/tactical.dm @@ -15,7 +15,7 @@ UnregisterSignal(parent, list(COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED)) unmodify() -/datum/component/fantasy/Destroy() +/datum/component/tactical/Destroy() unmodify() return ..() @@ -37,5 +37,5 @@ if(!ismob(master.loc)) return user = master.loc - + user.remove_alt_appearance("sneaking_mission") diff --git a/code/datums/components/thermite.dm b/code/datums/components/thermite.dm deleted file mode 100644 index b666833c97..0000000000 --- a/code/datums/components/thermite.dm +++ /dev/null @@ -1,91 +0,0 @@ -/datum/component/thermite - dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS - var/amount - var/burn_require - var/overlay - - var/static/list/blacklist = typecacheof(list( - /turf/open/lava, - /turf/open/space, - /turf/open/water) - ) - - var/static/list/immunelist = typecacheof(list( - /turf/closed/wall/mineral/diamond, - /turf/closed/indestructible, - /turf/open/indestructible) - ) - - var/static/list/resistlist = typecacheof( - /turf/closed/wall/r_wall - ) - -/datum/component/thermite/Initialize(_amount) - if(!istype(parent, /turf) || blacklist[parent.type]) - return COMPONENT_INCOMPATIBLE - - if(immunelist[parent.type]) - amount = 0 //Yeah the overlay can still go on it and be cleaned but you arent burning down a diamond wall - else - amount = _amount - if(resistlist[parent.type]) - burn_require = 50 - else - burn_require = 30 - - var/turf/master = parent - overlay = mutable_appearance('icons/effects/effects.dmi', "thermite") - master.add_overlay(overlay) - - RegisterSignal(parent, COMSIG_COMPONENT_CLEAN_ACT, PROC_REF(clean_react)) - RegisterSignal(parent, COMSIG_PARENT_ATTACKBY, PROC_REF(attackby_react)) - RegisterSignal(parent, COMSIG_ATOM_FIRE_ACT, PROC_REF(flame_react)) - -/datum/component/thermite/UnregisterFromParent() - UnregisterSignal(parent, COMSIG_COMPONENT_CLEAN_ACT) - UnregisterSignal(parent, COMSIG_PARENT_ATTACKBY) - UnregisterSignal(parent, COMSIG_ATOM_FIRE_ACT) - -/datum/component/thermite/Destroy() - var/turf/master = parent - master.cut_overlay(overlay) - return ..() - -/datum/component/thermite/InheritComponent(datum/component/thermite/newC, i_am_original, list/arguments) - if(!i_am_original) - return - if(newC) - amount += newC.amount - else - amount += arguments[1] - -/datum/component/thermite/proc/thermite_melt(mob/user) - var/turf/master = parent - master.cut_overlay(overlay) - playsound(master, 'sound/blank.ogg', 100, TRUE) - var/obj/effect/overlay/thermite/fakefire = new(master) - addtimer(CALLBACK(src, PROC_REF(burn_parent), fakefire, user), min(amount * 0.35 SECONDS, 20 SECONDS)) - UnregisterFromParent() - -/datum/component/thermite/proc/burn_parent(datum/fakefire, mob/user) - var/turf/master = parent - if(!QDELETED(fakefire)) - qdel(fakefire) - if(user) - master.add_hiddenprint(user) - if(amount >= burn_require) - master = master.Melt() - master.burn_tile() - qdel(src) - -/datum/component/thermite/proc/clean_react(datum/source, strength) - //Thermite is just some loose powder, you could probably clean it with your hands. << todo? - qdel(src) - -/datum/component/thermite/proc/flame_react(datum/source, added, maxstacks) - if(added > 1922) // This is roughly the real life requirement to ignite thermite - thermite_melt() - -/datum/component/thermite/proc/attackby_react(datum/source, obj/item/thing, mob/user, params) - if(thing.get_temperature()) - thermite_melt(user) diff --git a/code/datums/dna.dm b/code/datums/dna.dm index e8739b7e60..db2de0186f 100644 --- a/code/datums/dna.dm +++ b/code/datums/dna.dm @@ -589,11 +589,7 @@ switch(rand(0,8)) //not complete and utter death if(0) monkeyize() - if(1) - gain_trauma(/datum/brain_trauma/severe/paralysis/paraplegic) - new/obj/vehicle/ridden/wheelchair(get_turf(src)) //don't buckle, because I can't imagine to plethora of things to go through that could otherwise break - to_chat(src, span_warning("My flesh turned into a wheelchair and I can't feel my legs.")) - if(2) + if(1 to 2) corgize() if(3) to_chat(src, span_notice("Oh, I actually feel quite alright!")) diff --git a/code/datums/emotes.dm b/code/datums/emotes.dm index 991b69763b..6d2fd846ad 100644 --- a/code/datums/emotes.dm +++ b/code/datums/emotes.dm @@ -77,8 +77,6 @@ var/pitch = 1 //bespoke vary system so deep voice/high voiced humans if(isliving(user)) var/mob/living/L = user - for(var/obj/item/implant/I in L.implants) - I.trigger(key, L) pitch = L.get_emote_pitch() var/sound/tmp_sound = get_sound(user) diff --git a/code/datums/explosion.dm b/code/datums/explosion.dm index 422732fcd5..7d38ebfb2a 100644 --- a/code/datums/explosion.dm +++ b/code/datums/explosion.dm @@ -209,7 +209,7 @@ GLOBAL_LIST_EMPTY(explosions) if(!QDELETED(A)) A.ex_act(dist) - if(flame_dist && !isspaceturf(T)) + if(flame_dist) new /obj/effect/hotspot(T) //Mostly for ambience! if(dist > EXPLODE_NONE) diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm index d433949ec8..d0abb911fe 100644 --- a/code/datums/helper_datums/teleport.dm +++ b/code/datums/helper_datums/teleport.dm @@ -13,7 +13,6 @@ var/static/list/delete_atoms = typecacheof(list( /obj/effect, )) - typecacheof(list( - /obj/effect/dummy/chameleon, /obj/effect/wisp, /obj/effect/mob_spawn, )) @@ -28,17 +27,6 @@ switch(channel) if(TELEPORT_CHANNEL_BLUESPACE) - if(istype(teleatom, /obj/item/storage/backpack/holding)) - precision = rand(1,100) - - var/static/list/bag_cache = typecacheof(/obj/item/storage/backpack/holding) - var/list/bagholding = typecache_filter_list(teleatom.GetAllContents(), bag_cache) - if(bagholding.len) - precision = max(rand(1,100)*bagholding.len,100) - if(isliving(teleatom)) - var/mob/living/MM = teleatom - to_chat(MM, "The bluespace interface on your bag of holding interferes with the teleport!") - // if effects are not specified and not explicitly disabled, sparks if ((!effectin || !effectout) && !no_effects) var/datum/effect_system/spark_spread/sparks = new diff --git a/code/datums/looping_sounds/machinery_sounds.dm b/code/datums/looping_sounds/machinery_sounds.dm deleted file mode 100644 index d26a147acc..0000000000 --- a/code/datums/looping_sounds/machinery_sounds.dm +++ /dev/null @@ -1,63 +0,0 @@ -/datum/looping_sound/showering - start_sound = 'sound/blank.ogg' - start_length = 2 - mid_sounds = list('sound/blank.ogg'=1) - mid_length = 10 - end_sound = 'sound/blank.ogg' - volume = 20 - -/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/datum/looping_sound/supermatter - mid_sounds = list('sound/blank.ogg' = 1) - mid_length = 60 - volume = 40 - extra_range = 10 - falloff = 4 - vary = TRUE - -/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/datum/looping_sound/generator - start_sound = 'sound/blank.ogg' - start_length = 4 - mid_sounds = list('sound/blank.ogg'=1) - mid_length = 4 - end_sound = 'sound/blank.ogg' - volume = 40 - -/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - -/datum/looping_sound/deep_fryer - start_sound = 'sound/blank.ogg' //my immersions - start_length = 10 - mid_sounds = list('sound/blank.ogg' = 1) - mid_length = 2 - end_sound = 'sound/blank.ogg' - volume = 15 - -/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/datum/looping_sound/grill - mid_length = 2 - mid_sounds = list('sound/blank.ogg' = 1) - volume = 30 - -/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/datum/looping_sound/microwave - start_sound = 'sound/blank.ogg' - start_length = 10 - mid_sounds = list('sound/blank.ogg'=1) - mid_length = 10 - end_sound = 'sound/blank.ogg' - volume = 90 - -/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/datum/looping_sound/jackpot - mid_length = 11 - mid_sounds = list('sound/blank.ogg') - volume = 85 - vary = TRUE diff --git a/code/datums/martial/boxing.dm b/code/datums/martial/boxing.dm deleted file mode 100644 index 4a9d3d60e3..0000000000 --- a/code/datums/martial/boxing.dm +++ /dev/null @@ -1,73 +0,0 @@ -/datum/martial_art/boxing - name = "Boxing" - id = MARTIALART_BOXING - -/datum/martial_art/boxing/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) - to_chat(A, "Can't disarm while boxing!") - return 1 - -/datum/martial_art/boxing/grab_act(mob/living/carbon/human/A, mob/living/carbon/human/D) - to_chat(A, "Can't grab while boxing!") - return 1 - -/datum/martial_art/boxing/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) - - A.do_attack_animation(D, ATTACK_EFFECT_PUNCH) - - var/atk_verb = pick("left hook","right hook","straight punch") - - var/damage = rand(5, 8) + A.dna.species.punchdamagelow - if(!damage) - playsound(D.loc, A.dna.species.miss_sound, 25, TRUE, -1) - D.visible_message("[A]'s [atk_verb] misses [D]!", \ - "I avoid [A]'s [atk_verb]!", "I hear a swoosh!", COMBAT_MESSAGE_RANGE, A) - to_chat(A, "My [atk_verb] misses [D]!") - log_combat(A, D, "attempted to hit", atk_verb) - return 0 - - - var/obj/item/bodypart/affecting = D.get_bodypart(ran_zone(A.zone_selected)) - var/armor_block = D.run_armor_check(affecting, "melee") - - playsound(D.loc, A.dna.species.attack_sound, 25, TRUE, -1) - - D.visible_message("[A] [atk_verb]ed [D]!", \ - "You're [atk_verb]ed by [A]!", "I hear a sickening sound of flesh hitting flesh!", COMBAT_MESSAGE_RANGE, A) - to_chat(A, "I [atk_verb]ed [D]!") - - D.apply_damage(damage, STAMINA, affecting, armor_block) - log_combat(A, D, "punched (boxing) ") - if(D.getStaminaLoss() > 50 && istype(D.mind?.martial_art, /datum/martial_art/boxing)) - var/knockout_prob = D.getStaminaLoss() + rand(-15,15) - if((D.stat != DEAD) && prob(knockout_prob)) - D.visible_message("[A] knocks [D] out with a haymaker!", \ - "You're knocked unconscious by [A]!", "I hear a sickening sound of flesh hitting flesh!", COMBAT_MESSAGE_RANGE, A) - to_chat(A, "I knock [D] out with a haymaker!") - D.apply_effect(200,EFFECT_KNOCKDOWN,armor_block) - D.SetSleeping(100) - D.forcesay(GLOB.hit_appends) - log_combat(A, D, "knocked out (boxing) ") - else if(!(D.mobility_flags & MOBILITY_STAND)) - D.forcesay(GLOB.hit_appends) - return 1 - -/obj/item/clothing/gloves/boxing - var/datum/martial_art/boxing/style = new - -/obj/item/clothing/gloves/boxing/equipped(mob/user, slot) - . = ..() - if(!ishuman(user)) - return - if(slot == SLOT_GLOVES) - var/mob/living/carbon/human/H = user - style.teach(H,1) - return - -/obj/item/clothing/gloves/boxing/dropped(mob/user) - . = ..() - if(!ishuman(user)) - return - var/mob/living/carbon/human/H = user - if(H.get_item_by_slot(SLOT_GLOVES) == src) - style.remove(H) - return diff --git a/code/datums/martial/cqc.dm b/code/datums/martial/cqc.dm deleted file mode 100644 index 2bbd2d222b..0000000000 --- a/code/datums/martial/cqc.dm +++ /dev/null @@ -1,232 +0,0 @@ -#define SLAM_COMBO "GH" -#define KICK_COMBO "HH" -#define RESTRAIN_COMBO "GG" -#define PRESSURE_COMBO "DG" -#define CONSECUTIVE_COMBO "DDH" - -/datum/martial_art/cqc - name = "CQC" - id = MARTIALART_CQC - help_verb = /mob/living/carbon/human/proc/CQC_help - block_chance = 75 - smashes_tables = TRUE - var/old_grab_state = null - var/restraining = FALSE - -/datum/martial_art/cqc/reset_streak(mob/living/carbon/human/new_target) - . = ..() - restraining = FALSE - -/datum/martial_art/cqc/proc/check_streak(mob/living/carbon/human/A, mob/living/carbon/human/D) - if(!can_use(A)) - return FALSE - if(findtext(streak,SLAM_COMBO)) - streak = "" - Slam(A,D) - return TRUE - if(findtext(streak,KICK_COMBO)) - streak = "" - Kick(A,D) - return TRUE - if(findtext(streak,RESTRAIN_COMBO)) - streak = "" - Restrain(A,D) - return TRUE - if(findtext(streak,PRESSURE_COMBO)) - streak = "" - Pressure(A,D) - return TRUE - if(findtext(streak,CONSECUTIVE_COMBO)) - streak = "" - Consecutive(A,D) - return FALSE - -/datum/martial_art/cqc/proc/Slam(mob/living/carbon/human/A, mob/living/carbon/human/D) - if(!can_use(A)) - return FALSE - if(D.mobility_flags & MOBILITY_STAND) - D.visible_message("[A] slams [D] into the ground!", \ - "You're slammed into the ground by [A]!", "I hear a sickening sound of flesh hitting flesh!", null, A) - to_chat(A, "I slam [D] into the ground!") - playsound(get_turf(A), 'sound/blank.ogg', 50, TRUE, -1) - D.apply_damage(10, BRUTE) - D.Paralyze(120) - log_combat(A, D, "slammed (CQC)") - return TRUE - -/datum/martial_art/cqc/proc/Kick(mob/living/carbon/human/A, mob/living/carbon/human/D) - if(!can_use(A)) - return FALSE - if(!D.stat || !D.IsParalyzed()) - D.visible_message("[A] kicks [D] back!", \ - "You're kicked back by [A]!", "I hear a sickening sound of flesh hitting flesh!", COMBAT_MESSAGE_RANGE, A) - to_chat(A, "I kick [D] back!") - playsound(get_turf(A), 'sound/blank.ogg', 50, TRUE, -1) - var/atom/throw_target = get_edge_target_turf(D, A.dir) - D.throw_at(throw_target, 1, 14, A) - D.apply_damage(10, A.dna.species.attack_type) - log_combat(A, D, "kicked (CQC)") - if(D.IsParalyzed() && !D.stat) - log_combat(A, D, "knocked out (Head kick)(CQC)") - D.visible_message("[A] kicks [D]'s head, knocking [D.p_them()] out!", \ - "You're knocked unconscious by [A]!", "I hear a sickening sound of flesh hitting flesh!", null, A) - to_chat(A, "I kick [D]'s head, knocking [D.p_them()] out!") - playsound(get_turf(A), 'sound/blank.ogg', 50, TRUE, -1) - D.SetSleeping(300) - D.adjustOrganLoss(ORGAN_SLOT_BRAIN, 15, 150) - return TRUE - -/datum/martial_art/cqc/proc/Pressure(mob/living/carbon/human/A, mob/living/carbon/human/D) - if(!can_use(A)) - return FALSE - log_combat(A, D, "pressured (CQC)") - D.visible_message("[A] punches [D]'s neck!", \ - "My neck is punched by [A]!", "I hear a sickening sound of flesh hitting flesh!", COMBAT_MESSAGE_RANGE, A) - to_chat(A, "I punch [D]'s neck!") - D.adjustStaminaLoss(60) - playsound(get_turf(A), 'sound/blank.ogg', 50, TRUE, -1) - return TRUE - -/datum/martial_art/cqc/proc/Restrain(mob/living/carbon/human/A, mob/living/carbon/human/D) - if(restraining) - return - if(!can_use(A)) - return FALSE - if(!D.stat) - log_combat(A, D, "restrained (CQC)") - D.visible_message("[A] locks [D] into a restraining position!", \ - "You're locked into a restraining position by [A]!", "I hear shuffling and a muffled groan!", null, A) - to_chat(A, "I lock [D] into a restraining position!") - D.adjustStaminaLoss(20) - D.Stun(100) - restraining = TRUE - addtimer(VARSET_CALLBACK(src, restraining, FALSE), 50, TIMER_UNIQUE) - return TRUE - -/datum/martial_art/cqc/proc/Consecutive(mob/living/carbon/human/A, mob/living/carbon/human/D) - if(!can_use(A)) - return FALSE - if(!D.stat) - log_combat(A, D, "consecutive CQC'd (CQC)") - D.visible_message("[A] strikes [D]'s abdomen, neck and back consecutively", \ - "My abdomen, neck and back are struck consecutively by [A]!", "I hear a sickening sound of flesh hitting flesh!", COMBAT_MESSAGE_RANGE, A) - to_chat(A, "I strike [D]'s abdomen, neck and back consecutively!") - playsound(get_turf(D), 'sound/blank.ogg', 50, TRUE, -1) - var/obj/item/I = D.get_active_held_item() - if(I && D.temporarilyRemoveItemFromInventory(I)) - A.put_in_hands(I) - D.adjustStaminaLoss(50) - D.apply_damage(25, A.dna.species.attack_type) - return TRUE - -/datum/martial_art/cqc/grab_act(mob/living/carbon/human/A, mob/living/carbon/human/D) - if(A.used_intent.type == INTENT_GRAB && A!=D && can_use(A)) // A!=D prevents grabbing yourself - add_to_streak("G",D) - if(check_streak(A,D)) //if a combo is made no grab upgrade is done - return TRUE - old_grab_state = A.grab_state - D.grabbedby(A, 1) - if(old_grab_state == GRAB_PASSIVE) -// D.drop_all_held_items() - A.setGrabState(GRAB_AGGRESSIVE) //Instant agressive grab if on grab intent - log_combat(A, D, "grabbed", addition="aggressively") - D.visible_message("[A] violently grabs [D]!", \ - "You're grabbed violently by [A]!", "I hear sounds of aggressive fondling!", COMBAT_MESSAGE_RANGE, A) - to_chat(A, "I violently grab [D]!") - return TRUE - else - return FALSE - -/datum/martial_art/cqc/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) - if(!can_use(A)) - return FALSE - add_to_streak("H",D) - if(check_streak(A,D)) - return TRUE - log_combat(A, D, "attacked (CQC)") - A.do_attack_animation(D) - var/picked_hit_type = pick("CQC", "Big Boss") - var/bonus_damage = 13 - if(!(D.mobility_flags & MOBILITY_STAND)) - bonus_damage += 5 - picked_hit_type = "stomp" - D.apply_damage(bonus_damage, BRUTE) - if(picked_hit_type == "kick" || picked_hit_type == "stomp") - playsound(get_turf(D), 'sound/blank.ogg', 50, TRUE, -1) - else - playsound(get_turf(D), 'sound/blank.ogg', 50, TRUE, -1) - D.visible_message("[A] [picked_hit_type]ed [D]!", \ - "You're [picked_hit_type]ed by [A]!", "I hear a sickening sound of flesh hitting flesh!", COMBAT_MESSAGE_RANGE, A) - to_chat(A, "I [picked_hit_type] [D]!") - log_combat(A, D, "[picked_hit_type]s (CQC)") - if(A.resting && !D.stat && !D.IsParalyzed()) - D.visible_message("[A] leg sweeps [D]!", \ - "My legs are sweeped by [A]!", "I hear a sickening sound of flesh hitting flesh!", null, A) - to_chat(A, "I leg sweep [D]!") - playsound(get_turf(A), 'sound/blank.ogg', 50, TRUE, -1) - D.apply_damage(10, BRUTE) - D.Paralyze(60) - log_combat(A, D, "sweeped (CQC)") - return TRUE - -/datum/martial_art/cqc/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) - if(!can_use(A)) - return FALSE - add_to_streak("D",D) - var/obj/item/I = null - if(check_streak(A,D)) - return TRUE - if(prob(65)) - if(!D.stat || !D.IsParalyzed() || !restraining) - I = D.get_active_held_item() - D.visible_message("[A] strikes [D]'s jaw with their hand!", \ - "My jaw is struck by [A], you feel disoriented!", "I hear a sickening sound of flesh hitting flesh!", COMBAT_MESSAGE_RANGE, A) - to_chat(A, "I strike [D]'s jaw, leaving [D.p_them()] disoriented!") - playsound(get_turf(D), 'sound/blank.ogg', 50, TRUE, -1) - if(I && D.temporarilyRemoveItemFromInventory(I)) - A.put_in_hands(I) - D.Jitter(2) - D.apply_damage(5, A.dna.species.attack_type) - else - D.visible_message("[A] fails to disarm [D]!", \ - "You're nearly disarmed by [A]!", "I hear a swoosh!", COMBAT_MESSAGE_RANGE, A) - to_chat(A, "I fail to disarm [D]!") - playsound(D, 'sound/blank.ogg', 25, TRUE, -1) - log_combat(A, D, "disarmed (CQC)", "[I ? " grabbing \the [I]" : ""]") - if(restraining && A.pulling == D) - log_combat(A, D, "knocked out (Chokehold)(CQC)") - D.visible_message("[A] puts [D] into a chokehold!", \ - "You're put into a chokehold by [A]!", "I hear shuffling and a muffled groan!", null, A) - to_chat(A, "I put [D] into a chokehold!") - D.SetSleeping(400) - restraining = FALSE - if(A.grab_state < GRAB_NECK) - A.setGrabState(GRAB_NECK) - else - restraining = FALSE - return FALSE - return TRUE - -/mob/living/carbon/human/proc/CQC_help() - set name = "Remember The Basics" - set desc = "" - set category = "CQC" - to_chat(usr, "I try to remember some of the basics of CQC.") - - to_chat(usr, "Slam: Grab Harm. Slam opponent into the ground, knocking them down.") - to_chat(usr, "CQC Kick: Harm Harm. Knocks opponent away. Knocks out stunned or knocked down opponents.") - to_chat(usr, "Restrain: Grab Grab. Locks opponents into a restraining position, disarm to knock them out with a chokehold.") - to_chat(usr, "Pressure: Disarm Grab. Decent stamina damage.") - to_chat(usr, "Consecutive CQC: Disarm Disarm Harm. Mainly offensive move, huge damage and decent stamina damage.") - - to_chat(usr, "In addition, by having my throw mode on when being attacked, you enter an active defense mode where you have a chance to block and sometimes even counter attacks done to you.") - -///Subtype of CQC. Only used for the chef. -/datum/martial_art/cqc/under_siege - name = "Close Quarters Cooking" - -///Prevents use if the cook is not in the kitchen. -/datum/martial_art/cqc/under_siege/can_use(mob/living/carbon/human/H) //this is used to make chef CQC only work in kitchen - if(!istype(get_area(H), /area/rogue/indoors/town/garrison)) - return FALSE - return ..() diff --git a/code/datums/martial/krav_maga.dm b/code/datums/martial/krav_maga.dm deleted file mode 100644 index ccdead3680..0000000000 --- a/code/datums/martial/krav_maga.dm +++ /dev/null @@ -1,217 +0,0 @@ -/datum/martial_art/krav_maga - name = "Krav Maga" - id = MARTIALART_KRAVMAGA - var/datum/action/neck_chop/neckchop = new/datum/action/neck_chop() - var/datum/action/leg_sweep/legsweep = new/datum/action/leg_sweep() - var/datum/action/lung_punch/lungpunch = new/datum/action/lung_punch() - -/datum/action/neck_chop - name = "Neck Chop - Injures the neck, stopping the victim from speaking for a while." - icon_icon = 'icons/mob/actions/actions_items.dmi' - button_icon_state = "neckchop" - -/datum/action/neck_chop/Trigger() - if(owner.incapacitated()) - to_chat(owner, "I can't use [name] while you're incapacitated.") - return - var/mob/living/carbon/human/H = owner - if (H.mind.martial_art.streak == "neck_chop") - owner.visible_message("[owner] assumes a neutral stance.", "My next attack is cleared.") - H.mind.martial_art.streak = "" - else - owner.visible_message("[owner] assumes the Neck Chop stance!", "My next attack will be a Neck Chop.") - H.mind.martial_art.streak = "neck_chop" - -/datum/action/leg_sweep - name = "Leg Sweep - Trips the victim, knocking them down for a brief moment." - icon_icon = 'icons/mob/actions/actions_items.dmi' - button_icon_state = "legsweep" - -/datum/action/leg_sweep/Trigger() - if(owner.incapacitated()) - to_chat(owner, "I can't use [name] while you're incapacitated.") - return - var/mob/living/carbon/human/H = owner - if (H.mind.martial_art.streak == "leg_sweep") - owner.visible_message("[owner] assumes a neutral stance.", "My next attack is cleared.") - H.mind.martial_art.streak = "" - else - owner.visible_message("[owner] assumes the Leg Sweep stance!", "My next attack will be a Leg Sweep.") - H.mind.martial_art.streak = "leg_sweep" - -/datum/action/lung_punch//referred to internally as 'quick choke' - name = "Lung Punch - Delivers a strong punch just above the victim's abdomen, constraining the lungs. The victim will be unable to breathe for a short time." - icon_icon = 'icons/mob/actions/actions_items.dmi' - button_icon_state = "lungpunch" - -/datum/action/lung_punch/Trigger() - if(owner.incapacitated()) - to_chat(owner, "I can't use [name] while you're incapacitated.") - return - var/mob/living/carbon/human/H = owner - if (H.mind.martial_art.streak == "quick_choke") - owner.visible_message("[owner] assumes a neutral stance.", "My next attack is cleared.") - H.mind.martial_art.streak = "" - else - owner.visible_message("[owner] assumes the Lung Punch stance!", "My next attack will be a Lung Punch.") - H.mind.martial_art.streak = "quick_choke"//internal name for lung punch - -/datum/martial_art/krav_maga/teach(mob/living/carbon/human/H,make_temporary=0) - if(..()) - to_chat(H, "I know the arts of [name]!") - to_chat(H, "Place my cursor over a move at the top of the screen to see what it does.") - neckchop.Grant(H) - legsweep.Grant(H) - lungpunch.Grant(H) - -/datum/martial_art/krav_maga/on_remove(mob/living/carbon/human/H) - to_chat(H, "I suddenly forget the arts of [name]...") - neckchop.Remove(H) - legsweep.Remove(H) - lungpunch.Remove(H) - -/datum/martial_art/krav_maga/proc/check_streak(mob/living/carbon/human/A, mob/living/carbon/human/D) - switch(streak) - if("neck_chop") - streak = "" - neck_chop(A,D) - return 1 - if("leg_sweep") - streak = "" - leg_sweep(A,D) - return 1 - if("quick_choke")//is actually lung punch - streak = "" - quick_choke(A,D) - return 1 - return 0 - -/datum/martial_art/krav_maga/proc/leg_sweep(mob/living/carbon/human/A, mob/living/carbon/human/D) - if(D.stat || D.IsParalyzed()) - return 0 - D.visible_message("[A] leg sweeps [D]!", \ - "My legs are sweeped by [A]!", "I hear a sickening sound of flesh hitting flesh!", null, A) - to_chat(A, "I leg sweep [D]!") - playsound(get_turf(A), 'sound/blank.ogg', 50, TRUE, -1) - D.apply_damage(5, BRUTE) - D.Paralyze(40) - log_combat(A, D, "leg sweeped") - return 1 - -/datum/martial_art/krav_maga/proc/quick_choke(mob/living/carbon/human/A, mob/living/carbon/human/D)//is actually lung punch - D.visible_message("[A] pounds [D] on the chest!", \ - "My chest is slammed by [A]! You can't breathe!", "I hear a sickening sound of flesh hitting flesh!", COMBAT_MESSAGE_RANGE, A) - to_chat(A, "I pound [D] on the chest!") - playsound(get_turf(A), 'sound/blank.ogg', 50, TRUE, -1) - if(D.losebreath <= 10) - D.losebreath = CLAMP(D.losebreath + 5, 0, 10) - D.adjustOxyLoss(10) - log_combat(A, D, "quickchoked") - return 1 - -/datum/martial_art/krav_maga/proc/neck_chop(mob/living/carbon/human/A, mob/living/carbon/human/D) - D.visible_message("[A] karate chops [D]'s neck!", \ - "My neck is karate chopped by [A], rendering you unable to speak!", "I hear a sickening sound of flesh hitting flesh!", COMBAT_MESSAGE_RANGE, A) - to_chat(A, "I karate chop [D]'s neck, rendering [D.p_them()] unable to speak!") - playsound(get_turf(A), 'sound/blank.ogg', 50, TRUE, -1) - D.apply_damage(5, A.dna.species.attack_type) - if(D.silent <= 10) - D.silent = CLAMP(D.silent + 10, 0, 10) - log_combat(A, D, "neck chopped") - return 1 - -/datum/martial_art/krav_maga/grab_act(mob/living/carbon/human/A, mob/living/carbon/human/D) - if(check_streak(A,D)) - return 1 - log_combat(A, D, "grabbed (Krav Maga)") - ..() - -/datum/martial_art/krav_maga/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) - if(check_streak(A,D)) - return 1 - log_combat(A, D, "punched") - var/picked_hit_type = pick("punch", "kick") - var/bonus_damage = 10 - if(!(D.mobility_flags & MOBILITY_STAND)) - bonus_damage += 5 - picked_hit_type = "stomp" - D.apply_damage(bonus_damage, A.dna.species.attack_type) - if(picked_hit_type == "kick" || picked_hit_type == "stomp") - A.do_attack_animation(D, ATTACK_EFFECT_KICK) - playsound(get_turf(D), 'sound/blank.ogg', 50, TRUE, -1) - else - A.do_attack_animation(D, ATTACK_EFFECT_PUNCH) - playsound(get_turf(D), 'sound/blank.ogg', 50, TRUE, -1) - D.visible_message("[A] [picked_hit_type]s [D]!", \ - "You're [picked_hit_type]ed by [A]!", "I hear a sickening sound of flesh hitting flesh!", COMBAT_MESSAGE_RANGE, A) - to_chat(A, "I [picked_hit_type] [D]!") - log_combat(A, D, "[picked_hit_type] with [name]") - return 1 - -/datum/martial_art/krav_maga/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) - if(check_streak(A,D)) - return 1 - var/obj/item/I = null - if(prob(60)) - I = D.get_active_held_item() - if(I) - if(D.temporarilyRemoveItemFromInventory(I)) - A.put_in_hands(I) - D.visible_message("[A] disarms [D]!", \ - "You're disarmed by [A]!", "I hear aggressive shuffling!", COMBAT_MESSAGE_RANGE, A) - to_chat(A, "I disarm [D]!") - playsound(D, 'sound/blank.ogg', 50, TRUE, -1) - else - D.visible_message("[A] fails to disarm [D]!", \ - "You're nearly disarmed by [A]!", "I hear a swoosh!", COMBAT_MESSAGE_RANGE, A) - to_chat(A, "I fail to disarm [D]!") - playsound(D, 'sound/blank.ogg', 25, TRUE, -1) - log_combat(A, D, "disarmed (Krav Maga)", "[I ? " removing \the [I]" : ""]") - return 1 - -//Krav Maga Gloves - -/obj/item/clothing/gloves/krav_maga - var/datum/martial_art/krav_maga/style = new - -/obj/item/clothing/gloves/krav_maga/equipped(mob/user, slot) - . = ..() - if(!ishuman(user)) - return - if(slot == SLOT_GLOVES) - var/mob/living/carbon/human/H = user - style.teach(H,1) - -/obj/item/clothing/gloves/krav_maga/dropped(mob/user) - . = ..() - if(!ishuman(user)) - return - var/mob/living/carbon/human/H = user - if(H.get_item_by_slot(SLOT_GLOVES) == src) - style.remove(H) - -/obj/item/clothing/gloves/krav_maga/sec//more obviously named, given to sec - name = "krav maga gloves" - desc = "" - icon_state = "fightgloves" - item_state = "fightgloves" - cold_protection = HANDS - min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT - heat_protection = HANDS - max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT - resistance_flags = NONE - -/obj/item/clothing/gloves/krav_maga/combatglovesplus - name = "combat gloves plus" - desc = "" - icon_state = "black" - item_state = "blackgloves" - siemens_coefficient = 0 - permeability_coefficient = 0.05 - strip_delay = 80 - cold_protection = HANDS - min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT - heat_protection = HANDS - max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT - resistance_flags = NONE - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 50) diff --git a/code/datums/martial/mushpunch.dm b/code/datums/martial/mushpunch.dm deleted file mode 100644 index edc4c1154b..0000000000 --- a/code/datums/martial/mushpunch.dm +++ /dev/null @@ -1,40 +0,0 @@ -/datum/martial_art/mushpunch - name = "Mushroom Punch" - id = MARTIALART_MUSHPUNCH - -/datum/martial_art/mushpunch/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) - var/atk_verb - to_chat(A, "I begin to wind up an attack...") - if(!do_after(A, 25, target = D)) - to_chat(A, "My attack was interrupted!") - return TRUE //martial art code was a mistake - A.do_attack_animation(D, ATTACK_EFFECT_PUNCH) - atk_verb = pick("punch", "smash", "crack") - D.visible_message("[A] [atk_verb]ed [D] with such inhuman strength that it sends [D.p_them()] flying backwards!", \ - "You're [atk_verb]ed by [A] with such inhuman strength that it sends you flying backwards!", "I hear a sickening sound of flesh hitting flesh!", null, A) - to_chat(A, "I [atk_verb] [D] with such inhuman strength that it sends [D.p_them()] flying backwards!") - D.apply_damage(rand(15,30), A.dna.species.attack_type) - playsound(D, 'sound/blank.ogg', 25, TRUE, -1) - var/throwtarget = get_edge_target_turf(A, get_dir(A, get_step_away(D, A))) - D.throw_at(throwtarget, 4, 2, A)//So stuff gets tossed around at the same time. - D.Paralyze(20) - if(atk_verb) - log_combat(A, D, "[atk_verb] (Mushroom Punch)") - return TRUE - -/obj/item/mushpunch - name = "odd mushroom" - desc = "" - icon = 'icons/obj/hydroponics/seeds.dmi' - icon_state = "mycelium-angel" - -/obj/item/mushpunch/attack_self(mob/living/carbon/human/user) - if(!istype(user) || !user) - return - var/message = "I devour [src], and a confluence of skill and power from the mushroom enhances my punches! You do need a short moment to charge these powerful punches." - to_chat(user, message) - var/datum/martial_art/mushpunch/mush = new(null) - mush.teach(user) - qdel(src) - visible_message("[user] devours [src].", \ - "I devour [src].") diff --git a/code/datums/martial/plasma_fist.dm b/code/datums/martial/plasma_fist.dm deleted file mode 100644 index fdf3296953..0000000000 --- a/code/datums/martial/plasma_fist.dm +++ /dev/null @@ -1,85 +0,0 @@ -#define TORNADO_COMBO "HHD" -#define THROWBACK_COMBO "DHD" -#define PLASMA_COMBO "HDDDH" - -/datum/martial_art/plasma_fist - name = "Plasma Fist" - id = MARTIALART_PLASMAFIST - help_verb = /mob/living/carbon/human/proc/plasma_fist_help - - -/datum/martial_art/plasma_fist/proc/check_streak(mob/living/carbon/human/A, mob/living/carbon/human/D) - if(findtext(streak,TORNADO_COMBO)) - streak = "" - Tornado(A,D) - return 1 - if(findtext(streak,THROWBACK_COMBO)) - streak = "" - Throwback(A,D) - return 1 - if(findtext(streak,PLASMA_COMBO)) - streak = "" - Plasma(A,D) - return 1 - return 0 - -/datum/martial_art/plasma_fist/proc/Tornado(mob/living/carbon/human/A, mob/living/carbon/human/D) - A.say("TORNADO SWEEP!", forced="plasma fist") - dance_rotate(A, CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(playsound), A.loc, 'sound/blank.ogg', 15, TRUE, -1)) - var/obj/effect/proc_holder/spell/aoe_turf/repulse/R = new(null) - var/list/turfs = list() - for(var/turf/T in range(1,A)) - turfs.Add(T) - R.cast(turfs) - log_combat(A, D, "tornado sweeped(Plasma Fist)") - return - -/datum/martial_art/plasma_fist/proc/Throwback(mob/living/carbon/human/A, mob/living/carbon/human/D) - D.visible_message("[A] hits [D] with Plasma Punch!", \ - "You're hit with a Plasma Punch by [A]!", "I hear a sickening sound of flesh hitting flesh!", null, A) - to_chat(A, "I hit [D] with Plasma Punch!") - playsound(D.loc, 'sound/blank.ogg', 50, TRUE, -1) - var/atom/throw_target = get_edge_target_turf(D, get_dir(D, get_step_away(D, A))) - D.throw_at(throw_target, 200, 4,A) - A.say("HYAH!", forced="plasma fist") - log_combat(A, D, "threw back (Plasma Fist)") - return - -/datum/martial_art/plasma_fist/proc/Plasma(mob/living/carbon/human/A, mob/living/carbon/human/D) - A.do_attack_animation(D, ATTACK_EFFECT_PUNCH) - playsound(D.loc, 'sound/blank.ogg', 50, TRUE, -1) - A.say("PLASMA FIST!", forced="plasma fist") - D.visible_message("[A] hits [D] with THE PLASMA FIST TECHNIQUE!", \ - "You're suddenly hit with THE PLASMA FIST TECHNIQUE by [A]!", "I hear a sickening sound of flesh hitting flesh!", null, A) - to_chat(A, "I hit [D] with THE PLASMA FIST TECHNIQUE!") - D.gib() - log_combat(A, D, "gibbed (Plasma Fist)") - return - -/datum/martial_art/plasma_fist/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) - add_to_streak("H",D) - if(check_streak(A,D)) - return TRUE - return FALSE - -/datum/martial_art/plasma_fist/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) - add_to_streak("D",D) - if(check_streak(A,D)) - return TRUE - return FALSE - -/datum/martial_art/plasma_fist/grab_act(mob/living/carbon/human/A, mob/living/carbon/human/D) - add_to_streak("G",D) - if(check_streak(A,D)) - return TRUE - return FALSE - -/mob/living/carbon/human/proc/plasma_fist_help() - set name = "Recall Teachings" - set desc = "" - set category = "Plasma Fist" - - to_chat(usr, "I clench your fists and have a flashback of knowledge...") - to_chat(usr, "Tornado Sweep: Harm Harm Disarm. Repulses target and everyone back.") - to_chat(usr, "Throwback: Disarm Harm Disarm. Throws the target and an item at them.") - to_chat(usr, "The Plasma Fist: Harm Disarm Disarm Disarm Harm. Knocks the brain out of the opponent and gibs their body.") diff --git a/code/datums/martial/psychotic_brawl.dm b/code/datums/martial/psychotic_brawl.dm deleted file mode 100644 index f332c1689c..0000000000 --- a/code/datums/martial/psychotic_brawl.dm +++ /dev/null @@ -1,70 +0,0 @@ -/datum/martial_art/psychotic_brawling - name = "Psychotic Brawling" - id = MARTIALART_PSYCHOBRAWL - -/datum/martial_art/psychotic_brawling/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) - return psycho_attack(A,D) - -/datum/martial_art/psychotic_brawling/grab_act(mob/living/carbon/human/A, mob/living/carbon/human/D) - return psycho_attack(A,D) - -/datum/martial_art/psychotic_brawling/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) - return psycho_attack(A,D) - -/datum/martial_art/psychotic_brawling/proc/psycho_attack(mob/living/carbon/human/A, mob/living/carbon/human/D) - var/atk_verb - switch(rand(1,8)) - if(1) - D.help_shake_act(A) - atk_verb = "helped" - if(2) - A.emote("cry") - A.Stun(20) - atk_verb = "cried looking at" - if(3) - if(A.grab_state >= GRAB_AGGRESSIVE) - D.grabbedby(A, 1) - else - A.start_pulling(D, supress_message = TRUE) - if(A.pulling) - D.drop_all_held_items() - D.stop_pulling() - if(A.used_intent.type == INTENT_GRAB) - log_combat(A, D, "grabbed", addition="aggressively") - D.visible_message("[A] violently grabs [D]!", \ - "You're violently grabbed by [A]!", "I hear sounds of aggressive fondling!", null, A) - to_chat(A, "I violently grab [D]!") - A.setGrabState(GRAB_AGGRESSIVE) //Instant aggressive grab - else - log_combat(A, D, "grabbed", addition="passively") - A.setGrabState(GRAB_PASSIVE) - if(4) - A.do_attack_animation(D, ATTACK_EFFECT_PUNCH) - atk_verb = "headbutt" - D.visible_message("[A] [atk_verb]s [D]!", \ - "You're [atk_verb]ed by [A]!", "I hear a sickening sound of flesh hitting flesh!", null, A) - to_chat(A, "I [atk_verb] [D]!") - playsound(get_turf(D), 'sound/blank.ogg', 40, TRUE, -1) - D.apply_damage(rand(5,10), A.dna.species.attack_type, BODY_ZONE_HEAD) - A.apply_damage(rand(5,10), A.dna.species.attack_type, BODY_ZONE_HEAD) - if(!istype(D.head,/obj/item/clothing/head/helmet/) && !istype(D.head,/obj/item/clothing/head/hardhat)) - D.adjustOrganLoss(ORGAN_SLOT_BRAIN, 5) - A.Stun(rand(10,45)) - D.Stun(rand(5,30)) - if(5,6) - A.do_attack_animation(D, ATTACK_EFFECT_PUNCH) - atk_verb = pick("kick", "hit", "slam") - D.visible_message("[A] [atk_verb]s [D] with such inhuman strength that it sends [D.p_them()] flying backwards!", \ - "You're [atk_verb]ed by [A] with such inhuman strength that it sends you flying backwards!", "I hear a sickening sound of flesh hitting flesh!", null, A) - to_chat(A, "I [atk_verb] [D] with such inhuman strength that it sends [D.p_them()] flying backwards!") - D.apply_damage(rand(15,30), A.dna.species.attack_type) - playsound(get_turf(D), 'sound/blank.ogg', 25, TRUE, -1) - var/throwtarget = get_edge_target_turf(A, get_dir(A, get_step_away(D, A))) - D.throw_at(throwtarget, 4, 2, A)//So stuff gets tossed around at the same time. - D.Paralyze(60) - if(7,8) - return FALSE //Resume default behaviour - - if(atk_verb) - log_combat(A, D, "[atk_verb] (Psychotic Brawling)") - return TRUE diff --git a/code/datums/martial/sleeping_carp.dm b/code/datums/martial/sleeping_carp.dm deleted file mode 100644 index f7ed2a3048..0000000000 --- a/code/datums/martial/sleeping_carp.dm +++ /dev/null @@ -1,262 +0,0 @@ -#define WRIST_WRENCH_COMBO "DD" -#define BACK_KICK_COMBO "HG" -#define STOMACH_KNEE_COMBO "GH" -#define HEAD_KICK_COMBO "DHH" -#define ELBOW_DROP_COMBO "HDHDH" - -/datum/martial_art/the_sleeping_carp - name = "The Sleeping Carp" - id = MARTIALART_SLEEPINGCARP - allow_temp_override = FALSE - help_verb = /mob/living/carbon/human/proc/sleeping_carp_help - smashes_tables = TRUE - var/old_grab_state = null - -/datum/martial_art/the_sleeping_carp/proc/check_streak(mob/living/carbon/human/A, mob/living/carbon/human/D) - if(findtext(streak,WRIST_WRENCH_COMBO)) - streak = "" - wristWrench(A,D) - return TRUE - if(findtext(streak,BACK_KICK_COMBO)) - streak = "" - backKick(A,D) - return TRUE - if(findtext(streak,STOMACH_KNEE_COMBO)) - streak = "" - kneeStomach(A,D) - return TRUE - if(findtext(streak,HEAD_KICK_COMBO)) - streak = "" - headKick(A,D) - return TRUE - if(findtext(streak,ELBOW_DROP_COMBO)) - streak = "" - elbowDrop(A,D) - return TRUE - return FALSE - -/datum/martial_art/the_sleeping_carp/proc/wristWrench(mob/living/carbon/human/A, mob/living/carbon/human/D) - if(!D.stat && !D.IsStun() && !D.IsParalyzed()) - log_combat(A, D, "wrist wrenched (Sleeping Carp)") - A.do_attack_animation(D, ATTACK_EFFECT_PUNCH) - D.visible_message("[A] grabs [D]'s wrist and wrenches it sideways!", \ - "My wrist is grabbed by [A] while simultaneously wrenched it to the side!", "I hear aggressive shuffling!", null, A) - to_chat(A, "I grab [D]'s wrist and wrench it sideways!") - playsound(get_turf(A), 'sound/blank.ogg', 50, TRUE, -1) - D.emote("scream") - D.dropItemToGround(D.get_active_held_item()) - D.apply_damage(5, BRUTE, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)) - D.Stun(60) - return TRUE - - return FALSE - -/datum/martial_art/the_sleeping_carp/proc/backKick(mob/living/carbon/human/A, mob/living/carbon/human/D) - if(!D.stat && !D.IsParalyzed()) - if(A.dir != D.dir) - log_combat(A, D, "missed a back-kick (Sleeping Carp) on") - D.visible_message("[A] tries to kick [D] in the back, but misses!", \ - "I avoid a kick in the back by [A]!", "I hear a swoosh!", null, A) - to_chat(A, "My kick to [D]'s back misses!") - return TRUE - log_combat(A, D, "back-kicked (Sleeping Carp)") - A.do_attack_animation(D, ATTACK_EFFECT_PUNCH) - D.visible_message("[A] kicks [D] in the back!", \ - "You're kicked in the back by [A]!", "I hear a sickening sound of flesh hitting flesh!", null, A) - to_chat(A, "I kick [D] in the back!") - step_to(D,get_step(D,D.dir),1) - D.Paralyze(80) - playsound(get_turf(D), 'sound/blank.ogg', 50, TRUE, -1) - return TRUE - return FALSE - -/datum/martial_art/the_sleeping_carp/proc/kneeStomach(mob/living/carbon/human/A, mob/living/carbon/human/D) - if(!D.stat && !D.IsParalyzed()) - log_combat(A, D, "stomach kneed (Sleeping Carp)") - A.do_attack_animation(D, ATTACK_EFFECT_KICK) - D.visible_message("[A] knees [D] in the stomach!", \ - "My stomach is kneed by [A], making you gag!", "I hear a sickening sound of flesh hitting flesh!", null, A) - to_chat(A, "I knee [D] in the stomach, making [D.p_them()] gag!") - D.losebreath += 3 - D.Stun(40) - playsound(get_turf(D), 'sound/blank.ogg', 50, TRUE, -1) - return TRUE - return FALSE - -/datum/martial_art/the_sleeping_carp/proc/headKick(mob/living/carbon/human/A, mob/living/carbon/human/D) - if(!D.stat && !D.IsParalyzed()) - log_combat(A, D, "head kicked (Sleeping Carp)") - A.do_attack_animation(D, ATTACK_EFFECT_KICK) - D.visible_message("[A] kicks [D] in the head!", \ - "My jaw is kicked by [A]!", "I hear a sickening sound of flesh hitting flesh!", null, A) - to_chat(A, "I kick [D] in the jaw!") - D.apply_damage(20, A.dna.species.attack_type, BODY_ZONE_HEAD) - D.drop_all_held_items() - playsound(get_turf(D), 'sound/blank.ogg', 50, TRUE, -1) - D.Stun(80) - return TRUE - return FALSE - -/datum/martial_art/the_sleeping_carp/proc/elbowDrop(mob/living/carbon/human/A, mob/living/carbon/human/D) - if(!(D.mobility_flags & MOBILITY_STAND)) - log_combat(A, D, "elbow dropped (Sleeping Carp)") - A.do_attack_animation(D, ATTACK_EFFECT_PUNCH) - D.visible_message("[A] elbow drops [D]!", \ - "You're piledrived by [A] with [A.p_their()] elbow!", "I hear a sickening sound of flesh hitting flesh!", null, A) - to_chat(A, "I piledrive [D] with my elbow!") - if(D.stat) - D.death() //FINISH HIM! - D.apply_damage(50, A.dna.species.attack_type, BODY_ZONE_CHEST) - playsound(get_turf(D), 'sound/blank.ogg', 75, TRUE, -1) - return TRUE - return FALSE - -/datum/martial_art/the_sleeping_carp/grab_act(mob/living/carbon/human/A, mob/living/carbon/human/D) - if(A.used_intent.type == INTENT_GRAB && A!=D) // A!=D prevents grabbing yourself - add_to_streak("G",D) - if(check_streak(A,D)) //if a combo is made no grab upgrade is done - return TRUE - old_grab_state = A.grab_state - D.grabbedby(A, 1) - if(old_grab_state == GRAB_PASSIVE) - D.drop_all_held_items() - A.setGrabState(GRAB_AGGRESSIVE) //Instant agressive grab if on grab intent - log_combat(A, D, "grabbed", addition="aggressively") - D.visible_message("[A] violently grabs [D]!", \ - "You're violently grabbed by [A]!", "I hear aggressive shuffling!", null, A) - to_chat(A, "I violently grab [D]!") - return TRUE - return FALSE - -/datum/martial_art/the_sleeping_carp/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) - add_to_streak("H",D) - if(check_streak(A,D)) - return TRUE - A.do_attack_animation(D, ATTACK_EFFECT_PUNCH) - var/atk_verb = pick("kick", "chop", "hit", "slam") - D.visible_message("[A] [atk_verb]s [D]!", \ - "[A] [atk_verb]s you!", null, null, A) - to_chat(A, "I [atk_verb] [D]!") - D.apply_damage(rand(10,15), BRUTE) - playsound(get_turf(D), 'sound/blank.ogg', 25, TRUE, -1) - if(prob(D.getBruteLoss()) && (D.mobility_flags & MOBILITY_STAND)) - D.visible_message("[D] stumbles and falls!", "The blow sends you to the ground!") - D.Paralyze(80) - log_combat(A, D, "[atk_verb] (Sleeping Carp)") - return TRUE - - -/datum/martial_art/the_sleeping_carp/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) - add_to_streak("D",D) - if(check_streak(A,D)) - return TRUE - return ..() - -/datum/martial_art/the_sleeping_carp/on_projectile_hit(mob/living/carbon/human/A, obj/projectile/P, def_zone) - . = ..() - if(A.incapacitated(FALSE, TRUE)) //NO STUN - return BULLET_ACT_HIT - if(!(A.mobility_flags & MOBILITY_USE)) //NO UNABLE TO USE - return BULLET_ACT_HIT - if(A.dna && A.dna.check_mutation(HULK)) //NO HULK - return BULLET_ACT_HIT - if(!isturf(A.loc)) //NO MOTHERFLIPPIN MECHS! - return BULLET_ACT_HIT - A.visible_message("[A] deflects the projectile; [A.p_they()] can't be hit with ranged weapons!", "I deflect the projectile!") - playsound(src, pick('sound/blank.ogg'), 75, TRUE) - P.firer = A - P.setAngle(rand(0, 360))//SHING - return BULLET_ACT_FORCE_PIERCE - -/datum/martial_art/the_sleeping_carp/teach(mob/living/carbon/human/H, make_temporary = FALSE) - . = ..() - if(!.) - return - ADD_TRAIT(H, TRAIT_NOGUNS, SLEEPING_CARP_TRAIT) - -/datum/martial_art/the_sleeping_carp/on_remove(mob/living/carbon/human/H) - . = ..() - REMOVE_TRAIT(H, TRAIT_NOGUNS, SLEEPING_CARP_TRAIT) - - -/mob/living/carbon/human/proc/sleeping_carp_help() - set name = "Recall Teachings" - set desc = "" - set category = "Sleeping Carp" - - to_chat(usr, "I retreat inward and recall the teachings of the Sleeping Carp...") - - to_chat(usr, "Wrist Wrench: Disarm Disarm. Forces opponent to drop item in hand.") - to_chat(usr, "Back Kick: Harm Grab. Opponent must be facing away. Knocks down.") - to_chat(usr, "Stomach Knee: Grab Harm. Knocks the wind out of opponent and stuns.") - to_chat(usr, "Head Kick: Disarm Harm Harm. Decent damage, forces opponent to drop item in hand.") - to_chat(usr, "Elbow Drop: Harm Disarm Harm Disarm Harm. Opponent must be on the ground. Deals huge damage, instantly kills anyone in critical condition.") - -/obj/item/twohanded/bostaff - name = "bo staff" - desc = "" - force = 10 - w_class = WEIGHT_CLASS_BULKY - slot_flags = ITEM_SLOT_BACK - force_unwielded = 10 - force_wielded = 24 - throwforce = 20 - throw_speed = 2 - attack_verb = list("smashed", "slammed", "whacked", "thwacked") - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "bostaff0" - lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi' - block_chance = 50 - -/obj/item/twohanded/bostaff/update_icon_state() - icon_state = "bostaff[wielded]" - -/obj/item/twohanded/bostaff/attack(mob/target, mob/living/user) - add_fingerprint(user) - if((HAS_TRAIT(user, TRAIT_CLUMSY)) && prob(50)) - to_chat(user, "I club myself over the head with [src].") - user.Paralyze(60) - if(ishuman(user)) - var/mob/living/carbon/human/H = user - H.apply_damage(2*force, BRUTE, BODY_ZONE_HEAD) - else - user.take_bodypart_damage(2*force) - return - if(!isliving(target)) - return ..() - var/mob/living/carbon/C = target - if(C.stat) - to_chat(user, "It would be dishonorable to attack a foe while they cannot retaliate.") - return - if(user.used_intent.type == INTENT_DISARM) - if(!wielded) - return ..() - if(!ishuman(target)) - return ..() - var/mob/living/carbon/human/H = target - var/list/fluffmessages = list("club", "smack", "broadside", "beat", "slam") - H.visible_message("[user] [pick(fluffmessages)]s [H] with [src]!", \ - "[user] [pick(fluffmessages)]s you with [src]!", "I hear a sickening sound of flesh hitting flesh!", null, user) - to_chat(user, "I [pick(fluffmessages)] [H] with [src]!") - playsound(get_turf(user), 'sound/blank.ogg', 75, TRUE, -1) - H.adjustStaminaLoss(rand(13,20)) - if(prob(10)) - H.visible_message("[H] collapses!", \ - "My legs give out!") - H.Paralyze(80) - if(H.staminaloss && !H.IsSleeping()) - var/total_health = (H.health - H.staminaloss) - if(total_health <= HEALTH_THRESHOLD_CRIT && !H.stat) - H.visible_message("[user] delivers a heavy hit to [H]'s head, knocking [H.p_them()] out cold!", \ - "You're knocked unconscious by [user]!", "I hear a sickening sound of flesh hitting flesh!", null, user) - to_chat(user, "I deliver a heavy hit to [H]'s head, knocking [H.p_them()] out cold!") - H.SetSleeping(600) - H.adjustOrganLoss(ORGAN_SLOT_BRAIN, 15, 150) - 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) - return ..() - return FALSE diff --git a/code/datums/martial/wrestling.dm b/code/datums/martial/wrestling.dm deleted file mode 100644 index f7d53db35d..0000000000 --- a/code/datums/martial/wrestling.dm +++ /dev/null @@ -1,482 +0,0 @@ -/mob/living/carbon/human/proc/wrestling_help() - set name = "Recall Teachings" - set desc = "" - set category = "Wrestling" - - to_chat(usr, "I flex my muscles and have a revelation...") - to_chat(usr, "Clinch: Grab. Passively gives you a chance to immediately aggressively grab someone. Not always successful.") - to_chat(usr, "Suplex: Disarm someone you are grabbing. Suplexes my target to the floor. Greatly injures them and leaves both you and my target on the floor.") - to_chat(usr, "Advanced grab: Grab. Passively causes stamina damage when grabbing someone.") - -/datum/martial_art/wrestling - name = "Wrestling" - id = MARTIALART_WRESTLING - var/datum/action/slam/slam = new/datum/action/slam() - var/datum/action/throw_wrassle/throw_wrassle = new/datum/action/throw_wrassle() - var/datum/action/kick/kick = new/datum/action/kick() - var/datum/action/strike/strike = new/datum/action/strike() - var/datum/action/drop/drop = new/datum/action/drop() - -/datum/martial_art/wrestling/proc/check_streak(mob/living/carbon/human/A, mob/living/carbon/human/D) - switch(streak) - if("drop") - streak = "" - drop(A,D) - return 1 - if("strike") - streak = "" - strike(A,D) - return 1 - if("kick") - streak = "" - kick(A,D) - return 1 - if("throw") - streak = "" - throw_wrassle(A,D) - return 1 - if("slam") - streak = "" - slam(A,D) - return 1 - return 0 - -/datum/action/slam - name = "Slam (Cinch) - Slam a grappled opponent into the floor." - button_icon_state = "wrassle_slam" - -/datum/action/slam/Trigger() - if(owner.incapacitated()) - to_chat(owner, "I can't WRESTLE while you're OUT FOR THE COUNT.") - return - owner.visible_message("[owner] prepares to BODY SLAM!", "My next attack will be a BODY SLAM.") - var/mob/living/carbon/human/H = owner - H.mind.martial_art.streak = "slam" - -/datum/action/throw_wrassle - name = "Throw (Cinch) - Spin a cinched opponent around and throw them." - button_icon_state = "wrassle_throw" - -/datum/action/throw_wrassle/Trigger() - if(owner.incapacitated()) - to_chat(owner, "I can't WRESTLE while you're OUT FOR THE COUNT.") - return - owner.visible_message("[owner] prepares to THROW!", "My next attack will be a THROW.") - var/mob/living/carbon/human/H = owner - H.mind.martial_art.streak = "throw" - -/datum/action/kick - name = "Kick - A powerful kick, sends people flying away from you. Also useful for escaping from bad situations." - button_icon_state = "wrassle_kick" - -/datum/action/kick/Trigger() - if(owner.incapacitated()) - to_chat(owner, "I can't WRESTLE while you're OUT FOR THE COUNT.") - return - owner.visible_message("[owner] prepares to KICK!", "My next attack will be a KICK.") - var/mob/living/carbon/human/H = owner - H.mind.martial_art.streak = "kick" - -/datum/action/strike - name = "Strike - Hit a neaby opponent with a quick attack." - button_icon_state = "wrassle_strike" - -/datum/action/strike/Trigger() - if(owner.incapacitated()) - to_chat(owner, "I can't WRESTLE while you're OUT FOR THE COUNT.") - return - owner.visible_message("[owner] prepares to STRIKE!", "My next attack will be a STRIKE.") - var/mob/living/carbon/human/H = owner - H.mind.martial_art.streak = "strike" - -/datum/action/drop - name = "Drop - Smash down onto an opponent." - button_icon_state = "wrassle_drop" - -/datum/action/drop/Trigger() - if(owner.incapacitated()) - to_chat(owner, "I can't WRESTLE while you're OUT FOR THE COUNT.") - return - owner.visible_message("[owner] prepares to LEG DROP!", "My next attack will be a LEG DROP.") - var/mob/living/carbon/human/H = owner - H.mind.martial_art.streak = "drop" - -/datum/martial_art/wrestling/teach(mob/living/carbon/human/H,make_temporary=0) - if(..()) - to_chat(H, "SNAP INTO A THIN TIM!") - to_chat(H, "Place my cursor over a move at the top of the screen to see what it does.") - drop.Grant(H) - kick.Grant(H) - slam.Grant(H) - throw_wrassle.Grant(H) - strike.Grant(H) - -/datum/martial_art/wrestling/on_remove(mob/living/carbon/human/H) - to_chat(H, "I no longer feel that the tower of power is too sweet to be sour...") - drop.Remove(H) - kick.Remove(H) - slam.Remove(H) - throw_wrassle.Remove(H) - strike.Remove(H) - -/datum/martial_art/wrestling/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) - if(check_streak(A,D)) - return 1 - log_combat(A, D, "punched with wrestling") - ..() - -/datum/martial_art/wrestling/proc/throw_wrassle(mob/living/carbon/human/A, mob/living/carbon/human/D) - if(!D) - return - if(!A.pulling || A.pulling != D) - to_chat(A, "I need to have [D] in a cinch!") - return - D.forceMove(A.loc) - D.setDir(get_dir(D, A)) - - D.Stun(80) - D.visible_message("[A] starts spinning around with [D]!", \ - "You're spun around by [A]!", "I hear aggressive shuffling!", null, A) - to_chat(A, "I start spinning around with [D]!") - A.emote("scream") - - for (var/i = 0, i < 20, i++) - var/delay = 5 - switch (i) - if (17 to INFINITY) - delay = 0.25 - if (14 to 16) - delay = 0.5 - if (9 to 13) - delay = 1 - if (5 to 8) - delay = 2 - if (0 to 4) - delay = 3 - - if (A && D) - - if (get_dist(A, D) > 1) - to_chat(A, "[D] is too far away!") - return 0 - - if (!isturf(A.loc) || !isturf(D.loc)) - to_chat(A, "I can't throw [D] from here!") - return 0 - - A.setDir(turn(A.dir, 90)) - var/turf/T = get_step(A, A.dir) - var/turf/S = D.loc - if ((S && isturf(S) && S.Exit(D)) && (T && isturf(T) && T.Enter(A))) - D.forceMove(T) - D.setDir(get_dir(D, A)) - else - return 0 - - sleep(delay) - - if (A && D) - // These are necessary because of the sleep call. - - if (get_dist(A, D) > 1) - to_chat(A, "[D] is too far away!") - return 0 - - if (!isturf(A.loc) || !isturf(D.loc)) - to_chat(A, "I can't throw [D] from here!") - return 0 - - D.forceMove(A.loc) // Maybe this will help with the wallthrowing bug. - - D.visible_message("[A] throws [D]!", \ - "You're thrown by [A]!", "I hear aggressive shuffling and a loud thud!", null, A) - to_chat(A, "I throw [D]!") - playsound(A.loc, "swing_hit", 50, TRUE) - var/turf/T = get_edge_target_turf(A, A.dir) - if (T && isturf(T)) - if (!D.stat) - D.emote("scream") - D.throw_at(T, 10, 4, A, TRUE, TRUE, callback = CALLBACK(D, TYPE_PROC_REF(/mob/living/carbon/human, Paralyze), 20)) - log_combat(A, D, "has thrown with wrestling") - return 0 - -/datum/martial_art/wrestling/proc/FlipAnimation(mob/living/carbon/human/D) - set waitfor = FALSE - if (D) - animate(D, transform = matrix(180, MATRIX_ROTATE), time = 1, loop = 0) - sleep(15) - if (D) - animate(D, transform = null, time = 1, loop = 0) - -/datum/martial_art/wrestling/proc/slam(mob/living/carbon/human/A, mob/living/carbon/human/D) - if(!D) - return - if(!A.pulling || A.pulling != D) - to_chat(A, "I need to have [D] in a cinch!") - return - D.forceMove(A.loc) - A.setDir(get_dir(A, D)) - D.setDir(get_dir(D, A)) - - D.visible_message("[A] lifts [D] up!", \ - "You're lifted up by [A]!", "I hear aggressive shuffling!", null, A) - to_chat(A, "I lift [D] up!") - - FlipAnimation() - - for (var/i = 0, i < 3, i++) - if (A && D) - A.pixel_y += 3 - D.pixel_y += 3 - A.setDir(turn(A.dir, 90)) - D.setDir(turn(D.dir, 90)) - - switch (A.dir) - if (NORTH) - D.pixel_x = A.pixel_x - if (SOUTH) - D.pixel_x = A.pixel_x - if (EAST) - D.pixel_x = A.pixel_x - 8 - if (WEST) - D.pixel_x = A.pixel_x + 8 - - if (get_dist(A, D) > 1) - to_chat(A, "[D] is too far away!") - A.pixel_x = 0 - A.pixel_y = 0 - D.pixel_x = 0 - D.pixel_y = 0 - return 0 - - if (!isturf(A.loc) || !isturf(D.loc)) - to_chat(A, "I can't slam [D] here!") - A.pixel_x = 0 - A.pixel_y = 0 - D.pixel_x = 0 - D.pixel_y = 0 - return 0 - else - if (A) - A.pixel_x = 0 - A.pixel_y = 0 - if (D) - D.pixel_x = 0 - D.pixel_y = 0 - return 0 - - sleep(1) - - if (A && D) - A.pixel_x = 0 - A.pixel_y = 0 - D.pixel_x = 0 - D.pixel_y = 0 - - if (get_dist(A, D) > 1) - to_chat(A, "[D] is too far away!") - return 0 - - if (!isturf(A.loc) || !isturf(D.loc)) - to_chat(A, "I can't slam [D] here!") - return 0 - - D.forceMove(A.loc) - - var/fluff = "body-slam" - switch(pick(2,3)) - if (2) - fluff = "turbo [fluff]" - if (3) - fluff = "atomic [fluff]" - - D.visible_message("[A] [fluff] [D]!", \ - "You're [fluff]ed by [A]!", "I hear a sickening sound of flesh hitting flesh!", COMBAT_MESSAGE_RANGE, A) - to_chat(A, "I [fluff] [D]!") - playsound(A.loc, "swing_hit", 50, TRUE) - if (!D.stat) - D.emote("scream") - D.Paralyze(40) - - switch(rand(1,3)) - if (2) - D.adjustBruteLoss(rand(20,30)) - if (3) - D.ex_act(EXPLODE_LIGHT) - else - D.adjustBruteLoss(rand(10,20)) - else - D.ex_act(EXPLODE_LIGHT) - - else - if (A) - A.pixel_x = 0 - A.pixel_y = 0 - if (D) - D.pixel_x = 0 - D.pixel_y = 0 - - - log_combat(A, D, "body-slammed") - return 0 - -/datum/martial_art/wrestling/proc/CheckStrikeTurf(mob/living/carbon/human/A, turf/T) - if (A && (T && isturf(T) && get_dist(A, T) <= 1)) - A.forceMove(T) - -/datum/martial_art/wrestling/proc/strike(mob/living/carbon/human/A, mob/living/carbon/human/D) - if(!D) - return - var/turf/T = get_turf(A) - if (T && isturf(T) && D && isturf(D.loc)) - for (var/i = 0, i < 4, i++) - A.setDir(turn(A.dir, 90)) - - A.forceMove(D.loc) - addtimer(CALLBACK(src, PROC_REF(CheckStrikeTurf), A, T), 4) - - D.visible_message("[A] headbutts [D]!", \ - "You're headbutted by [A]!", "I hear a sickening sound of flesh hitting flesh!", COMBAT_MESSAGE_RANGE, A) - to_chat(A, "I headbutt [D]!") - D.adjustBruteLoss(rand(10,20)) - playsound(A.loc, "swing_hit", 50, TRUE) - D.Unconscious(20) - log_combat(A, D, "headbutted") - -/datum/martial_art/wrestling/proc/kick(mob/living/carbon/human/A, mob/living/carbon/human/D) - if(!D) - return - A.emote("scream") - A.emote("flip") - A.setDir(turn(A.dir, 90)) - - D.visible_message("[A] roundhouse-kicks [D]!", \ - "You're roundhouse-kicked by [A]!", "I hear a sickening sound of flesh hitting flesh!", COMBAT_MESSAGE_RANGE, A) - to_chat(A, "I roundhouse-kick [D]!") - playsound(A.loc, "swing_hit", 50, TRUE) - D.adjustBruteLoss(rand(10,20)) - - var/turf/T = get_edge_target_turf(A, get_dir(A, get_step_away(D, A))) - if (T && isturf(T)) - D.Paralyze(20) - D.throw_at(T, 3, 2) - log_combat(A, D, "roundhouse-kicked") - -/datum/martial_art/wrestling/proc/drop(mob/living/carbon/human/A, mob/living/carbon/human/D) - if(!D) - return - var/obj/surface = null - var/turf/ST = null - var/falling = 0 - - for (var/obj/O in oview(1, A)) - if (O.density == 1) - if (O == A) - continue - if (O == D) - continue - if (O.opacity) - continue - else - surface = O - ST = get_turf(O) - break - - if (surface && (ST && isturf(ST))) - A.forceMove(ST) - A.visible_message("[A] climbs onto [surface]!", \ - "I climb onto [surface]!") - A.pixel_y = 10 - falling = 1 - sleep(10) - - if (A && D) - // These are necessary because of the sleep call. - - if ((falling == 0 && get_dist(A, D) > 1) || (falling == 1 && get_dist(A, D) > 2)) // We climbed onto stuff. - A.pixel_y = 0 - if (falling == 1) - A.visible_message("...and dives head-first into the ground, ouch!", \ - "...and dive head-first into the ground, ouch!") - A.adjustBruteLoss(rand(10,20)) - A.Paralyze(60) - to_chat(A, "[D] is too far away!") - return 0 - - if (!isturf(A.loc) || !isturf(D.loc)) - A.pixel_y = 0 - to_chat(A, "I can't drop onto [D] from here!") - return 0 - - if(A) - animate(A, transform = matrix(90, MATRIX_ROTATE), time = 1, loop = 0) - sleep(10) - if(A) - animate(A, transform = null, time = 1, loop = 0) - - A.forceMove(D.loc) - - D.visible_message("[A] leg-drops [D]!", \ - "You're leg-dropped by [A]!", "I hear a sickening sound of flesh hitting flesh!", null, A) - to_chat(A, "I leg-drop [D]!") - playsound(A.loc, "swing_hit", 50, TRUE) - A.emote("scream") - - if (falling == 1) - if (prob(33) || D.stat) - D.ex_act(EXPLODE_LIGHT) - else - D.adjustBruteLoss(rand(20,30)) - else - D.adjustBruteLoss(rand(20,30)) - - D.Paralyze(40) - - A.pixel_y = 0 - - else - if (A) - A.pixel_y = 0 - log_combat(A, D, "leg-dropped") - return - -/datum/martial_art/wrestling/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) - if(check_streak(A,D)) - return 1 - log_combat(A, D, "wrestling-disarmed") - ..() - -/datum/martial_art/wrestling/grab_act(mob/living/carbon/human/A, mob/living/carbon/human/D) - if(check_streak(A,D)) - return 1 - if(A.pulling == D) - return 1 - A.start_pulling(D) - D.visible_message("[A] gets [D] in a cinch!", \ - "You're put into a cinch by [A]!", "I hear aggressive shuffling!", COMBAT_MESSAGE_RANGE, A) - to_chat(A, "I get [D] in a cinch!") - D.Stun(rand(60,100)) - log_combat(A, D, "cinched") - return 1 - -/obj/item/storage/belt/champion/wrestling - name = "Wrestling Belt" - var/datum/martial_art/wrestling/style = new - -/obj/item/storage/belt/champion/wrestling/equipped(mob/user, slot) - . = ..() - if(!ishuman(user)) - return - if(slot == SLOT_BELT) - var/mob/living/carbon/human/H = user - style.teach(H,1) - return - -/obj/item/storage/belt/champion/wrestling/dropped(mob/user) - . = ..() - if(!ishuman(user)) - return - var/mob/living/carbon/human/H = user - if(H.get_item_by_slot(SLOT_BELT) == src) - style.remove(H) - return diff --git a/code/datums/materials/basemats.dm b/code/datums/materials/basemats.dm deleted file mode 100644 index ac78f63efb..0000000000 --- a/code/datums/materials/basemats.dm +++ /dev/null @@ -1,214 +0,0 @@ -///Has no special properties. -/datum/material/iron - name = "iron" - id = "iron" - desc = "" - color = "#878687" - categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE) - sheet_type = /obj/item/stack/sheet/metal - value_per_unit = 0.0025 - -///Breaks extremely easily but is transparent. -/datum/material/glass - name = "glass" - id = "glass" - desc = "" - color = "#88cdf1" - alpha = 150 - categories = list(MAT_CATEGORY_RIGID = TRUE) - integrity_modifier = 0.1 - sheet_type = /obj/item/stack/sheet/glass - value_per_unit = 0.0025 - beauty_modifier = 0.05 - armor_modifiers = list("melee" = 0.2, "bullet" = 0.2, "laser" = 0, "energy" = 1, "bomb" = 0, "bio" = 0.2, "rad" = 0.2, "fire" = 1, "acid" = 0.2) // yeah ok retard - -/* -Color matrices are like regular colors but unlike with normal colors, you can go over 255 on a channel. -Unless you know what you're doing, only use the first three numbers. They're in RGB order. -*/ - -///Has no special properties. Could be good against vampires in the future perhaps. -/datum/material/silver - name = "silver" - id = "silver" - desc = "" - color = list(255/255, 284/255, 302/255,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0) - categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE) - sheet_type = /obj/item/stack/sheet/mineral/silver - value_per_unit = 0.025 - beauty_modifier = 0.075 - -///Slight force increase -/datum/material/gold - name = "gold" - id = "gold" - desc = "" - color = list(340/255, 240/255, 50/255,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0) //gold is shiny, but not as bright as bananium - strength_modifier = 1.2 - categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE) - sheet_type = /obj/item/stack/sheet/mineral/gold - value_per_unit = 0.0625 - beauty_modifier = 0.15 - armor_modifiers = list("melee" = 1.1, "bullet" = 1.1, "laser" = 1.15, "energy" = 1.15, "bomb" = 1, "bio" = 1, "rad" = 1, "fire" = 0.7, "acid" = 1.1) - -///Has no special properties -/datum/material/diamond - name = "diamond" - id = "diamond" - desc = "" - color = list(48/255, 272/255, 301/255,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0) - categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE) - sheet_type = /obj/item/stack/sheet/mineral/diamond - alpha = 132 - value_per_unit = 0.25 - beauty_modifier = 0.3 - armor_modifiers = list("melee" = 1.3, "bullet" = 1.3, "laser" = 0.6, "energy" = 1, "bomb" = 1.2, "bio" = 1, "rad" = 1, "fire" = 1, "acid" = 1) - -///Is slightly radioactive -/datum/material/uranium - name = "uranium" - id = "uranium" - desc = "" - color = rgb(48, 237, 26) - categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE) - sheet_type = /obj/item/stack/sheet/mineral/uranium - value_per_unit = 0.05 - beauty_modifier = 0.3 //It shines so beautiful - armor_modifiers = list("melee" = 1.5, "bullet" = 1.4, "laser" = 0.5, "energy" = 0.5, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 1, "acid" = 1) - -/datum/material/uranium/on_applied(atom/source, amount, material_flags) - . = ..() - source.AddComponent(/datum/component/radioactive, amount / 20, source, 0) //half-life of 0 because we keep on going. - -/datum/material/uranium/on_removed(atom/source, material_flags) - . = ..() - qdel(source.GetComponent(/datum/component/radioactive)) - -///Adds firestacks on hit (Still needs support to turn into gas on destruction) -/datum/material/plasma - name = "plasma" - id = "plasma" - desc = "" - color = list(298/255, 46/255, 352/255,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0) - categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE) - sheet_type = /obj/item/stack/sheet/mineral/plasma - value_per_unit = 0.1 - beauty_modifier = 0.15 - armor_modifiers = list("melee" = 1.4, "bullet" = 0.7, "laser" = 0, "energy" = 1.2, "bomb" = 0, "bio" = 1.2, "rad" = 1, "fire" = 0, "acid" = 0.5) - -/datum/material/plasma/on_applied(atom/source, amount, material_flags) - . = ..() - if(ismovableatom(source)) - source.AddElement(/datum/element/firestacker) - source.AddComponent(/datum/component/explodable, 0, 0, amount / 2500, amount / 1250) - -/datum/material/plasma/on_removed(atom/source, material_flags) - . = ..() - source.RemoveElement(/datum/element/firestacker) - qdel(source.GetComponent(/datum/component/explodable)) - -///Can cause bluespace effects on use. (Teleportation) (Not yet implemented) -/datum/material/bluespace - name = "bluespace crystal" - id = "bluespace_crystal" - desc = "" - color = list(119/255, 217/255, 396/255,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0) - alpha = 200 - categories = list(MAT_CATEGORY_ORE = TRUE) - beauty_modifier = 0.5 - sheet_type = /obj/item/stack/sheet/bluespace_crystal - value_per_unit = 0.15 - -///Honks and slips -/datum/material/bananium - name = "bananium" - id = "bananium" - desc = "" - color = list(460/255, 464/255, 0, 0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0) //obnoxiously bright yellow - categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE) - sheet_type = /obj/item/stack/sheet/mineral/bananium - value_per_unit = 0.5 - beauty_modifier = 0.5 - armor_modifiers = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 100, "bio" = 0, "rad" = 0, "fire" = 10, "acid" = 0) //Clowns cant be blown away. - -/datum/material/bananium/on_applied(atom/source, amount, material_flags) - . = ..() - source.AddComponent(/datum/component/squeak, list('sound/blank.ogg'=1), 50) - source.AddComponent(/datum/component/slippery, min(amount / 10, 80)) - - -/datum/material/bananium/on_removed(atom/source, amount, material_flags) - . = ..() - qdel(source.GetComponent(/datum/component/slippery)) - qdel(source.GetComponent(/datum/component/squeak)) - - -///Mediocre force increase -/datum/material/titanium - name = "titanium" - id = "titanium" - desc = "" - color = "#b3c0c7" - strength_modifier = 1.3 - categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE) - sheet_type = /obj/item/stack/sheet/mineral/titanium - value_per_unit = 0.0625 - beauty_modifier = 0.05 - armor_modifiers = list("melee" = 1.35, "bullet" = 1.3, "laser" = 1.3, "energy" = 1.25, "bomb" = 1.25, "bio" = 1, "rad" = 1, "fire" = 0.7, "acid" = 1) - -/datum/material/runite - name = "runite" - id = "runite" - desc = "" - color = "#3F9995" - strength_modifier = 1.3 - categories = list(MAT_CATEGORY_RIGID = TRUE) - sheet_type = /obj/item/stack/sheet/mineral/runite - value_per_unit = 0.3 - beauty_modifier = 0.5 - armor_modifiers = list("melee" = 1.35, "bullet" = 2, "laser" = 0.5, "energy" = 1.25, "bomb" = 1.25, "bio" = 1, "rad" = 1, "fire" = 1.4, "acid" = 1) //rune is weak against magic lasers but strong against bullets. This is the combat triangle. - -///Force decrease -/datum/material/plastic - name = "plastic" - id = "plastic" - desc = "" - color = "#caccd9" - strength_modifier = 0.85 - sheet_type = /obj/item/stack/sheet/plastic - value_per_unit = 0.0125 - beauty_modifier = -0.01 - armor_modifiers = list("melee" = 1.5, "bullet" = 1.1, "laser" = 0.3, "energy" = 0.5, "bomb" = 1, "bio" = 1, "rad" = 1, "fire" = 1.1, "acid" = 1) - -///Force decrease and mushy sound effect. (Not yet implemented) -/datum/material/biomass - name = "biomass" - id = "biomass" - desc = "" - color = "#735b4d" - strength_modifier = 0.8 - value_per_unit = 0.025 - - -///RPG Magic. -/datum/material/mythril - name = "mythril" - id = "mythril" - desc = "" - color = "#f2d5d7" - categories = list(MAT_CATEGORY_RIGID = TRUE) - sheet_type = /obj/item/stack/sheet/mineral/mythril - value_per_unit = 0.75 - strength_modifier = 1.2 - armor_modifiers = list("melee" = 1.5, "bullet" = 1.5, "laser" = 1.5, "energy" = 1.5, "bomb" = 1.5, "bio" = 1.5, "rad" = 1.5, "fire" = 1.5, "acid" = 1.5) - beauty_modifier = 0.5 - -/datum/material/mythril/on_applied_obj(atom/source, amount, material_flags) - . = ..() - if(istype(source, /obj/item)) - source.AddComponent(/datum/component/fantasy) - -/datum/material/mythril/on_removed_obj(atom/source, material_flags) - . = ..() - if(istype(source, /obj/item)) - qdel(source.GetComponent(/datum/component/fantasy)) diff --git a/code/datums/mood_events/needs_events.dm b/code/datums/mood_events/needs_events.dm index f368af1ec5..be1334251c 100644 --- a/code/datums/mood_events/needs_events.dm +++ b/code/datums/mood_events/needs_events.dm @@ -74,11 +74,6 @@ mood_change = 2 timeout = 10 MINUTES -/datum/mood_event/nice_shower - description = "I have recently had a nice shower.\n" - mood_change = 4 - timeout = 5 MINUTES - /datum/mood_event/fresh_laundry description = "There's nothing like the feeling of a freshly laundered jumpsuit.\n" mood_change = 2 diff --git a/code/datums/mutations/cold.dm b/code/datums/mutations/cold.dm deleted file mode 100644 index 961a956332..0000000000 --- a/code/datums/mutations/cold.dm +++ /dev/null @@ -1,43 +0,0 @@ -/datum/mutation/human/geladikinesis - name = "Geladikinesis" - desc = "" - quality = POSITIVE - text_gain_indication = "My hand feels cold." - instability = 10 - difficulty = 10 - synchronizer_coeff = 1 - power = /obj/effect/proc_holder/spell/targeted/conjure_item/snow - -/obj/effect/proc_holder/spell/targeted/conjure_item/snow - name = "Create Snow" - desc = "" - item_type = /obj/item/stack/sheet/mineral/snow - charge_max = 50 - delete_old = FALSE - action_icon_state = "snow" - - -/datum/mutation/human/cryokinesis - name = "Cryokinesis" - desc = "" - quality = POSITIVE //upsides and downsides - text_gain_indication = "My hand feels cold." - instability = 20 - difficulty = 12 - synchronizer_coeff = 1 - power = /obj/effect/proc_holder/spell/aimed/cryo - -/obj/effect/proc_holder/spell/aimed/cryo - name = "Cryobeam" - desc = "" - charge_max = 150 - cooldown_min = 150 - clothes_req = FALSE - range = 3 - projectile_type = /obj/projectile/temp/cryo - base_icon_state = "icebeam" - action_icon_state = "icebeam" - active_msg = "You focus my cryokinesis!" - deactive_msg = "You relax." - active = FALSE - diff --git a/code/datums/outdoor_datum.dm b/code/datums/outdoor_datum.dm index da746f34fc..02ea0c1215 100644 --- a/code/datums/outdoor_datum.dm +++ b/code/datums/outdoor_datum.dm @@ -72,7 +72,6 @@ Sunlight System //non-weatherproof turfs /turf/var/weatherproof = TRUE -/turf/open/openspace/weatherproof = FALSE /turf/open/transparent/openspace/weatherproof = FALSE /turf/proc/reassess_stack() diff --git a/code/datums/outfit.dm b/code/datums/outfit.dm index e8c048891d..47f197d801 100644 --- a/code/datums/outfit.dm +++ b/code/datums/outfit.dm @@ -96,9 +96,6 @@ /// Should the toggle helmet proc be called on the helmet during equip var/toggle_helmet = TRUE - ///ID of the slot containing a gas tank - var/internals_slot = null - /** * list of items that should go in the backpack of the user * @@ -109,13 +106,6 @@ /// Internals box. Will be inserted at the start of backpack_contents var/box - /** - * Any implants the mob should start implanted with - * - * Format of this list is (typepath, typepath, typepath) - */ - var/list/implants = null - /// Any undershirt. While on humans it is a string, here we use paths to stay consistent with the rest of the equips. var/datum/sprite_accessory/undershirt = null @@ -265,13 +255,6 @@ if(!visualsOnly) apply_fingerprints(H) - if(internals_slot) - H.internal = H.get_item_by_slot(internals_slot) - H.update_action_buttons_icon() - if(implants) - for(var/implant_type in implants) - var/obj/item/implant/I = new implant_type(H) - I.implant(H, null, TRUE) H.update_body() return TRUE @@ -354,10 +337,8 @@ .["suit_store"] = suit_store .["r_hand"] = r_hand .["l_hand"] = l_hand - .["internals_slot"] = internals_slot .["backpack_contents"] = backpack_contents .["box"] = box - .["implants"] = implants .["accessory"] = accessory /// Prompt the passed in mob client to download this outfit as a json blob @@ -392,7 +373,6 @@ suit_store = text2path(outfit_data["suit_store"]) r_hand = text2path(outfit_data["r_hand"]) l_hand = text2path(outfit_data["l_hand"]) - internals_slot = outfit_data["internals_slot"] var/list/backpack = outfit_data["backpack_contents"] backpack_contents = list() for(var/item in backpack) @@ -400,11 +380,5 @@ if(itype) backpack_contents[itype] = backpack[item] box = text2path(outfit_data["box"]) - var/list/impl = outfit_data["implants"] - implants = list() - for(var/I in impl) - var/imptype = text2path(I) - if(imptype) - implants += imptype accessory = text2path(outfit_data["accessory"]) return TRUE diff --git a/code/datums/pollution.dm b/code/datums/pollution.dm index 49d24d31e8..7f8ac1f17c 100644 --- a/code/datums/pollution.dm +++ b/code/datums/pollution.dm @@ -190,7 +190,7 @@ var/new_heights = calculate_height(total_share_amount) var/obj/effect/abstract/pollution/new_overlay = get_overlay(total_share_pollutants, total_share_amount) for(var/turf/open/open_turf as anything in sharing_turfs) - if(!isopenturf(open_turf) || isspaceturf(open_turf) || QDELING(open_turf)) + if(!isopenturf(open_turf) || QDELING(open_turf)) continue assert_pollution(open_turf) @@ -297,9 +297,3 @@ if(cap && pollution.total_amount >= cap) return pollution.add_pollutant_list(pollutions) - -/turf/open/space/pollute_turf(pollution_type, amount, cap) - return - -/turf/open/space/pollute_turf_list(list/pollutions, cap) - return diff --git a/code/datums/radiation_wave.dm b/code/datums/radiation_wave.dm index 4e0a89f68a..73bdbe2dbf 100644 --- a/code/datums/radiation_wave.dm +++ b/code/datums/radiation_wave.dm @@ -104,8 +104,7 @@ var/static/list/blacklisted = typecacheof(list( /turf, /mob, - /obj/item/ammo_casing, - /obj/item/implant + /obj/item/ammo_casing )) if(!can_contaminate || blacklisted[thing.type]) continue diff --git a/code/datums/shuttles.dm b/code/datums/shuttles.dm index 0b4c9f021c..bca982ae26 100644 --- a/code/datums/shuttles.dm +++ b/code/datums/shuttles.dm @@ -63,8 +63,6 @@ locate(.[MAP_MAXX], .[MAP_MAXY], .[MAP_MAXZ])) for(var/i in 1 to turfs.len) var/turf/place = turfs[i] - if(istype(place, /turf/open/space)) // This assumes all shuttles are loaded in a single spot then moved to their real destination. - continue if(length(place.baseturfs) < 2) // Some snowflake shuttle shit continue place.baseturfs.Insert(3, /turf/baseturf_skipover/shuttle) diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm index 7ae36b8d93..54a075e543 100644 --- a/code/datums/status_effects/buffs.dm +++ b/code/datums/status_effects/buffs.dm @@ -57,56 +57,6 @@ desc = "" icon_state = "power_regen" -/datum/status_effect/his_grace - id = "his_grace" - duration = -1 - tick_interval = 4 - alert_type = /atom/movable/screen/alert/status_effect/his_grace - var/bloodlust = 0 - -/atom/movable/screen/alert/status_effect/his_grace - name = "His Grace" - desc = "" - icon_state = "his_grace" - alerttooltipstyle = "hisgrace" - -/atom/movable/screen/alert/status_effect/his_grace/MouseEntered(location,control,params) - desc = initial(desc) - var/datum/status_effect/his_grace/HG = attached_effect - desc += "
Current Bloodthirst: [HG.bloodlust]\ -
Becomes undroppable at [HIS_GRACE_FAMISHED]\ -
Will consume you at [HIS_GRACE_CONSUME_OWNER]" - ..() - -/datum/status_effect/his_grace/on_apply() - owner.log_message("gained His Grace's stun immunity", LOG_ATTACK) - owner.add_stun_absorption("hisgrace", INFINITY, 3, null, "His Grace protects you from the stun!") - return ..() - -/datum/status_effect/his_grace/tick() - bloodlust = 0 - var/graces = 0 - for(var/obj/item/his_grace/HG in owner.held_items) - if(HG.bloodthirst > bloodlust) - bloodlust = HG.bloodthirst - if(HG.awakened) - graces++ - if(!graces) - owner.apply_status_effect(STATUS_EFFECT_HISWRATH) - qdel(src) - return - var/grace_heal = bloodlust * 0.05 - owner.adjustBruteLoss(-grace_heal) - owner.adjustFireLoss(-grace_heal) - owner.adjustToxLoss(-grace_heal, TRUE, TRUE) - owner.adjustOxyLoss(-(grace_heal * 2)) - owner.adjustCloneLoss(-grace_heal) - -/datum/status_effect/his_grace/on_remove() - owner.log_message("lost His Grace's stun immunity", LOG_ATTACK) - if(islist(owner.stun_absorption) && owner.stun_absorption["hisgrace"]) - owner.stun_absorption -= "hisgrace" - /datum/status_effect/wish_granters_gift //Fully revives after ten seconds. id = "wish_granters_gift" diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm index 9e205d9927..62dd5dbf3f 100644 --- a/code/datums/status_effects/debuffs.dm +++ b/code/datums/status_effects/debuffs.dm @@ -246,26 +246,6 @@ /datum/status_effect/pacify/on_remove() REMOVE_TRAIT(owner, TRAIT_PACIFISM, "status_effect") -/datum/status_effect/his_wrath //does minor damage over time unless holding His Grace - id = "his_wrath" - duration = -1 - tick_interval = 4 - alert_type = /atom/movable/screen/alert/status_effect/his_wrath - -/atom/movable/screen/alert/status_effect/his_wrath - name = "His Wrath" - desc = "" - icon_state = "his_grace" - alerttooltipstyle = "hisgrace" - -/datum/status_effect/his_wrath/tick() - for(var/obj/item/his_grace/HG in owner.held_items) - qdel(src) - return - owner.adjustBruteLoss(0.1) - owner.adjustFireLoss(0.1) - owner.adjustToxLoss(0.2, TRUE, TRUE) - /datum/status_effect/stacking/saw_bleed id = "saw_bleed" tick_interval = 6 diff --git a/code/datums/traits/good.dm b/code/datums/traits/good.dm index ea8c2aae50..efbf4f9861 100644 --- a/code/datums/traits/good.dm +++ b/code/datums/traits/good.dm @@ -59,42 +59,6 @@ lose_text = "I feel isolated from others." medical_record_text = "Patient is highly perceptive of and sensitive to social cues, or may possibly have ESP. Further testing needed." -/datum/quirk/fan_clown - name = "Clown Fan" - desc = "" - value = 1 - mob_trait = TRAIT_FAN_CLOWN - gain_text = "I are a big fan of the Clown." - lose_text = "The clown doesn't seem so great." - medical_record_text = "Patient reports being a big fan of the Clown." - -/datum/quirk/fan_clown/on_spawn() - var/mob/living/carbon/human/H = quirk_holder - var/obj/item/clothing/accessory/fan_clown_pin/B = new(get_turf(H)) - var/list/slots = list ( - "backpack" = SLOT_IN_BACKPACK, - "hands" = SLOT_HANDS, - ) - H.equip_in_one_of_slots(B, slots , qdel_on_fail = TRUE) - -/datum/quirk/fan_mime - name = "Mime Fan" - desc = "" - value = 1 - mob_trait = TRAIT_FAN_MIME - gain_text = "I are a big fan of the Mime." - lose_text = "The mime doesn't seem so great." - medical_record_text = "Patient reports being a big fan of the Mime." - -/datum/quirk/fan_mime/on_spawn() - var/mob/living/carbon/human/H = quirk_holder - var/obj/item/clothing/accessory/fan_mime_pin/B = new(get_turf(H)) - var/list/slots = list ( - "backpack" = SLOT_IN_BACKPACK, - "hands" = SLOT_HANDS, - ) - H.equip_in_one_of_slots(B, slots , qdel_on_fail = TRUE) - /datum/quirk/freerunning name = "Freerunning" desc = "" @@ -135,24 +99,6 @@ lose_text = "I start tromping around like a barbarian." medical_record_text = "Patient's dexterity belies a strong capacity for stealth." -/datum/quirk/musician - name = "Musician" - desc = "" - value = 1 - mob_trait = TRAIT_MUSICIAN - gain_text = "I know everything about musical instruments." - lose_text = "I forget how musical instruments work." - medical_record_text = "Patient brain scans show a highly-developed auditory pathway." - -/datum/quirk/musician/on_spawn() - var/mob/living/carbon/human/H = quirk_holder - var/obj/item/choice_beacon/music/B = new(get_turf(H)) - var/list/slots = list ( - "backpack" = SLOT_IN_BACKPACK, - "hands" = SLOT_HANDS, - ) - H.equip_in_one_of_slots(B, slots , qdel_on_fail = TRUE) - /datum/quirk/night_vision name = "Night Vision" desc = "" @@ -195,23 +141,6 @@ /datum/quirk/spiritual/on_spawn() var/mob/living/carbon/human/H = quirk_holder H.equip_to_slot_or_del(new /obj/item/storage/fancy/candle_box(H), SLOT_IN_BACKPACK) - H.equip_to_slot_or_del(new /obj/item/storage/box/matches(H), SLOT_IN_BACKPACK) - -/datum/quirk/tagger - name = "Tagger" - desc = "" - value = 1 - mob_trait = TRAIT_TAGGER - gain_text = "I know how to tag walls efficiently." - lose_text = "I forget how to tag walls properly." - medical_record_text = "Patient was recently seen for possible paint huffing incident." - -/datum/quirk/tagger/on_spawn() - var/mob/living/carbon/human/H = quirk_holder - var/obj/item/toy/crayon/spraycan/spraycan = new(get_turf(H)) - H.put_in_hands(spraycan) - H.equip_to_slot(spraycan, SLOT_IN_BACKPACK) - H.regenerate_icons() /datum/quirk/voracious name = "Voracious" diff --git a/code/datums/traits/negative.dm b/code/datums/traits/negative.dm index 31d875cd99..0cd798aa18 100644 --- a/code/datums/traits/negative.dm +++ b/code/datums/traits/negative.dm @@ -130,24 +130,6 @@ lose_text = "You're no longer severely affected by alcohol." medical_record_text = "Patient demonstrates a low tolerance for alcohol. (Wimp)" -/datum/quirk/nearsighted //t. errorage - name = "Nearsighted" - desc = "" - value = -1 - gain_text = "Things far away from you start looking blurry." - lose_text = "I start seeing faraway things normally again." - medical_record_text = "Patient requires prescription glasses in order to counteract nearsightedness." - -/datum/quirk/nearsighted/add() - quirk_holder.become_nearsighted(ROUNDSTART_TRAIT) - -/datum/quirk/nearsighted/on_spawn() - var/mob/living/carbon/human/H = quirk_holder - var/obj/item/clothing/glasses/regular/glasses = new(get_turf(H)) - H.put_in_hands(glasses) - H.equip_to_slot(glasses, SLOT_GLASSES) - H.regenerate_icons() //this is to remove the inhand icon, which persists even if it's not in their hands - /datum/quirk/nyctophobia name = "Nyctophobia" desc = "" @@ -177,40 +159,6 @@ lose_text = "I think you can defend myself again." medical_record_text = "Patient is unusually pacifistic and cannot bring themselves to cause physical harm." -/datum/quirk/paraplegic - name = "Paraplegic" - desc = "" - value = -3 - human_only = TRUE - gain_text = null // Handled by trauma. - lose_text = null - medical_record_text = "Patient has an untreatable impairment in motor function in the lower extremities." - -/datum/quirk/paraplegic/add() - var/datum/brain_trauma/severe/paralysis/paraplegic/T = new() - var/mob/living/carbon/human/H = quirk_holder - H.gain_trauma(T, TRAUMA_RESILIENCE_ABSOLUTE) - -/datum/quirk/paraplegic/on_spawn() - if(quirk_holder.buckled) // Handle late joins being buckled to arrival shuttle chairs. - quirk_holder.buckled.unbuckle_mob(quirk_holder) - - var/turf/T = get_turf(quirk_holder) - var/obj/structure/chair/spawn_chair = locate() in T - - var/obj/vehicle/ridden/wheelchair/wheels = new(T) - if(spawn_chair) // Makes spawning on the arrivals shuttle more consistent looking - wheels.setDir(spawn_chair.dir) - - wheels.buckle_mob(quirk_holder) - - // During the spawning process, they may have dropped what they were holding, due to the paralysis - // So put the things back in their hands. - - for(var/obj/item/I in T) - if(I.fingerprintslast == quirk_holder.ckey) - quirk_holder.put_in_hands(I) - /datum/quirk/poor_aim name = "Poor Aim" desc = "" diff --git a/code/game/alternate_appearance.dm b/code/game/alternate_appearance.dm index 5e50125476..834ef2c2e1 100644 --- a/code/game/alternate_appearance.dm +++ b/code/game/alternate_appearance.dm @@ -129,8 +129,6 @@ GLOBAL_LIST_EMPTY(active_alternate_appearances) /datum/atom_hud/alternate_appearance/basic/blessedAware/mobShouldSee(mob/M) if(M.mind && (M.mind.assigned_role == "Chaplain")) return TRUE - if (istype(M, /mob/living/simple_animal/hostile/construct/wraith)) - return TRUE return FALSE /datum/atom_hud/alternate_appearance/basic/onePerson diff --git a/code/game/area/areas/shuttles.dm b/code/game/area/areas/shuttles.dm index 184ec9424f..95b9e37c7a 100644 --- a/code/game/area/areas/shuttles.dm +++ b/code/game/area/areas/shuttles.dm @@ -17,13 +17,6 @@ canSmoothWithAreas = type . = ..() -/area/shuttle/PlaceOnTopReact(list/new_baseturfs, turf/fake_turf_type, flags) - . = ..() - if(length(new_baseturfs) > 1 || fake_turf_type) - return // More complicated larger changes indicate this isn't a player - if(ispath(new_baseturfs[1], /turf/open/floor/plating)) - new_baseturfs.Insert(1, /turf/baseturf_skipover/shuttle) - ////////////////////////////Multi-area shuttles//////////////////////////// ////////////////////////////Syndicate infiltrator//////////////////////////// diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 7385bdfbcc..23f50cbd19 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -637,13 +637,6 @@ return FALSE return add_blood_DNA(blood_dna) -///Is this atom in space -/atom/proc/isinspace() - if(isspaceturf(get_turf(src))) - return TRUE - else - return FALSE - ///Called when gravity returns after floating I think /atom/proc/handle_fall() return @@ -1231,9 +1224,6 @@ max_grav = max(max_grav, i) return max_grav - if(isspaceturf(T)) // Turf never has gravity - return 0 - var/area/A = get_area(T) if(A.has_gravity) // Areas which always has gravity return A.has_gravity diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm index be95551dc9..90d0aeb057 100644 --- a/code/game/data_huds.dm +++ b/code/game/data_huds.dm @@ -173,58 +173,6 @@ Medical HUD! Basic mode needs suit sensors on. else holder.icon_state = "hudhealthy" - -/*********************************************** -Security HUDs! Basic mode shows only the job. -************************************************/ - -//HOOKS - -/mob/living/proc/sec_hud_set_implants() - var/image/holder - for(var/i in list(IMPTRACK_HUD, IMPLOYAL_HUD, IMPCHEM_HUD)) - holder = hud_list[i] - holder.icon_state = null - for(var/obj/item/implant/I in implants) - if(istype(I, /obj/item/implant/tracking)) - holder = hud_list[IMPTRACK_HUD] - var/icon/IC = icon(icon, icon_state, dir) - holder.pixel_y = IC.Height() - world.icon_size - holder.icon_state = "hud_imp_tracking" - else if(istype(I, /obj/item/implant/chem)) - holder = hud_list[IMPCHEM_HUD] - var/icon/IC = icon(icon, icon_state, dir) - holder.pixel_y = IC.Height() - world.icon_size - holder.icon_state = "hud_imp_chem" - if(HAS_TRAIT(src, TRAIT_MINDSHIELD)) - holder = hud_list[IMPLOYAL_HUD] - var/icon/IC = icon(icon, icon_state, dir) - holder.pixel_y = IC.Height() - world.icon_size - holder.icon_state = "hud_imp_loyal" - -/mob/living/carbon/human/proc/sec_hud_set_security_status() - var/image/holder = hud_list[WANTED_HUD] - var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size - var/perpname = get_face_name(get_id_name("")) - if(perpname && GLOB.data_core) - var/datum/data/record/R = find_record("name", perpname, GLOB.data_core.security) - if(R) - switch(R.fields["criminal"]) - if("*Arrest*") - holder.icon_state = "hudwanted" - return - if("Incarcerated") - holder.icon_state = "hudincarcerated" - return - if("Paroled") - holder.icon_state = "hudparolled" - return - if("Discharged") - holder.icon_state = "huddischarged" - return - holder.icon_state = null - /*********************************************** Diagnostic HUDs! ************************************************/ diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 9a858af0dc..528b66bd68 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -52,8 +52,6 @@ GLOBAL_LIST(admin_objective_list) //Prefilled admin assignable objective list /datum/objective/proc/considered_escaped(datum/mind/M) if(!considered_alive(M)) return FALSE - if(considered_exiled(M)) - return FALSE if(M.force_escaped) return TRUE var/area/A = get_area(M.current) @@ -205,7 +203,7 @@ GLOBAL_LIST(admin_objective_list) //Prefilled admin assignable objective list ..() /datum/objective/mutiny/check_completion() - if(!target || !considered_alive(target) || considered_afk(target) || considered_exiled(target)) + if(!target || !considered_alive(target) || considered_afk(target)) return TRUE var/turf/T = get_turf(target.current) return !T || !is_station_level(T.z) @@ -517,62 +515,6 @@ GLOBAL_LIST_EMPTY(possible_items) return TRUE return FALSE -GLOBAL_LIST_EMPTY(possible_items_special) -/datum/objective/steal/special //ninjas are so special they get their own subtype good for them - name = "steal special" - -/datum/objective/steal/special/New() - ..() - if(!GLOB.possible_items_special.len) - for(var/I in subtypesof(/datum/objective_item/special) + subtypesof(/datum/objective_item/stack)) - new I - -/datum/objective/steal/special/find_target(dupe_search_range) - return set_target(pick(GLOB.possible_items_special)) - -/datum/objective/steal/exchange - name = "exchange" - martyr_compatible = 0 - -/datum/objective/steal/exchange/admin_edit(mob/admin) - return - -/datum/objective/steal/exchange/proc/set_faction(faction,otheragent) - target = otheragent - if(faction == "red") - targetinfo = new/datum/objective_item/unique/docs_blue - else if(faction == "blue") - targetinfo = new/datum/objective_item/unique/docs_red - explanation_text = "Acquire [targetinfo.name] held by [target.current.real_name], the [target.assigned_role] and syndicate agent" - steal_target = targetinfo.targetitem - - -/datum/objective/steal/exchange/update_explanation_text() - ..() - if(target && target.current) - explanation_text = "Acquire [targetinfo.name] held by [target.name], the [target.assigned_role] and syndicate agent" - else - explanation_text = "Free Objective" - - -/datum/objective/steal/exchange/backstab - name = "prevent exchange" - -/datum/objective/steal/exchange/backstab/set_faction(faction) - if(faction == "red") - targetinfo = new/datum/objective_item/unique/docs_red - else if(faction == "blue") - targetinfo = new/datum/objective_item/unique/docs_blue - explanation_text = "Do not give up or lose [targetinfo.name]." - steal_target = targetinfo.targetitem - - -/datum/objective/download/admin_edit(mob/admin) - var/count = input(admin,"How many nodes ?","Nodes",target_amount) as num|null - if(count) - target_amount = count - update_explanation_text() - /datum/objective/capture name = "capture" @@ -682,7 +624,6 @@ GLOBAL_LIST_EMPTY(possible_items_special) /datum/objective/survive, /datum/objective/martyr, /datum/objective/steal, - /datum/objective/download, /datum/objective/capture, /datum/objective/custom ),/proc/cmp_typepaths_asc) diff --git a/code/game/gamemodes/objective_items.dm b/code/game/gamemodes/objective_items.dm index 3915ac9a4c..9b5d0c4642 100644 --- a/code/game/gamemodes/objective_items.dm +++ b/code/game/gamemodes/objective_items.dm @@ -2,7 +2,7 @@ /datum/objective_item var/name = "A silly bike horn! Honk!" - var/targetitem = /obj/item/bikehorn //typepath of the objective item + var/targetitem = /obj/item/paper //typepath of the objective item var/difficulty = 9001 //vaguely how hard it is to do this objective var/list/excludefromjob = list() //If you don't want a job to get a certain objective (no captain stealing his own medal, etcetc) var/list/altitems = list() //Items which can serve as an alternative to the objective (darn you blueprints) @@ -48,136 +48,3 @@ targetitem = /obj/item/clothing/head/roguetown/crown/serpcrown difficulty = 3 excludefromjob = list("King", "Queen", "Knight") - - -//////////////////////////////////////////////////////////// - -/datum/objective_item/steal/magboots - name = "the chief engineer's advanced magnetic boots." - targetitem = /obj/item/clothing/shoes/magboots/advance - difficulty = 5 - excludefromjob = list("Chief Engineer") - -/datum/objective_item/steal/capmedal - name = "the medal of captaincy." - targetitem = /obj/item/clothing/accessory/medal/gold/captain - difficulty = 5 - excludefromjob = list("Captain") - -/datum/objective_item/steal/hypo - name = "the hypospray." - targetitem = /obj/item/reagent_containers/hypospray/CMO - difficulty = 5 - excludefromjob = list("Chief Medical Officer") - -/datum/objective_item/steal/reflector - name = "a reflector trenchcoat." - targetitem = /obj/item/clothing/suit/hooded/ablative - difficulty = 3 - excludefromjob = list("Head of Security", "Warden") - -/datum/objective_item/steal/documents - name = "any set of secret documents of any organization." - targetitem = /obj/item/documents //Any set of secret documents. Doesn't have to be NT's - difficulty = 5 - -//Items with special checks! -/datum/objective_item/steal/plasma - name = "28 moles of plasma (full tank)." - targetitem = /obj/item/tank - difficulty = 3 - excludefromjob = list("Chief Engineer","Research Director","Station Engineer","Scientist","Atmospheric Technician") - -/datum/objective_item/steal/plasma/check_special_completion(obj/item/tank/T) - var/target_amount = text2num(name) - var/found_amount = 0 - found_amount += T.air_contents.gases[/datum/gas/plasma] ? T.air_contents.gases[/datum/gas/plasma][MOLES] : 0 - return found_amount>=target_amount - -/datum/objective_item/steal/blueprints - name = "the station blueprints." - targetitem = /obj/item/areaeditor/blueprints - difficulty = 10 - excludefromjob = list("Chief Engineer") - altitems = list(/obj/item/photo) - -/datum/objective_item/steal/blueprints/check_special_completion(obj/item/I) - if(istype(I, /obj/item/areaeditor/blueprints)) - return TRUE - if(istype(I, /obj/item/photo)) - var/obj/item/photo/P = I - if(P.picture.has_blueprints) //if the blueprints are in frame - return TRUE - return FALSE - -//Unique Objectives -/datum/objective_item/unique/docs_red - name = "the \"Red\" secret documents." - targetitem = /obj/item/documents/syndicate/red - difficulty = 10 - -/datum/objective_item/unique/docs_blue - name = "the \"Blue\" secret documents." - targetitem = /obj/item/documents/syndicate/blue - difficulty = 10 - -/datum/objective_item/special/New() - ..() - if(TargetExists()) - GLOB.possible_items_special += src - else - qdel(src) - -/datum/objective_item/special/Destroy() - GLOB.possible_items_special -= src - return ..() - -/datum/objective_item/special/boh - name = "a bag of holding." - targetitem = /obj/item/storage/backpack/holding - difficulty = 10 - -/datum/objective_item/special/corgimeat - name = "a piece of corgi meat." - targetitem = /obj/item/reagent_containers/food/snacks/meat/slab/corgi - difficulty = 5 - -/datum/objective_item/stack/New() - ..() - if(TargetExists()) - GLOB.possible_items_special += src - else - qdel(src) - -/datum/objective_item/stack/Destroy() - GLOB.possible_items_special -= src - return ..() - -//Stack objectives get their own subtype -/datum/objective_item/stack - name = "5 cardboard." - targetitem = /obj/item/stack/sheet/cardboard - difficulty = 9001 - -/datum/objective_item/stack/check_special_completion(obj/item/stack/S) - var/target_amount = text2num(name) - var/found_amount = 0 - - if(istype(S, targetitem)) - found_amount = S.amount - return found_amount>=target_amount - -/datum/objective_item/stack/diamond - name = "10 diamonds." - targetitem = /obj/item/stack/sheet/mineral/diamond - difficulty = 10 - -/datum/objective_item/stack/gold - name = "50 gold bars." - targetitem = /obj/item/stack/sheet/mineral/gold - difficulty = 15 - -/datum/objective_item/stack/uranium - name = "25 refined uranium bars." - targetitem = /obj/item/stack/sheet/mineral/uranium - difficulty = 10 diff --git a/code/game/gamemodes/sandbox/h_sandbox.dm b/code/game/gamemodes/sandbox/h_sandbox.dm index a4f46343ea..28db16e2dd 100644 --- a/code/game/gamemodes/sandbox/h_sandbox.dm +++ b/code/game/gamemodes/sandbox/h_sandbox.dm @@ -22,34 +22,15 @@ GLOBAL_VAR_INIT(hsboxspawn, TRUE) var/hsbinfo = null //items that shouldn't spawn on the floor because they would bug or act weird var/static/list/spawn_forbidden = list( - /obj/item/tk_grab, /obj/item/implant, // not implanter, the actual thing that is inside you + /obj/item/tk_grab, /obj/projectile) /datum/hSB/proc/update() var/static/list/hrefs = list( "Space Gear", - "Suit Up (Space Travel Gear)" = "hsbsuit", - "Spawn Gas Mask" = "hsbspawn&path=[/obj/item/clothing/mask/gas]", - "Spawn Emergency Air Tank" = "hsbspawn&path=[/obj/item/tank/internals/emergency_oxygen/double]", "Standard Tools", - "Spawn Flashlight" = "hsbspawn&path=[/obj/item/flashlight]", - "Spawn Toolbox" = "hsbspawn&path=[/obj/item/storage/toolbox/mechanical]", - "Spawn Light Replacer" = "hsbspawn&path=[/obj/item/lightreplacer]", - "Spawn Medical Kit" = "hsbspawn&path=[/obj/item/storage/firstaid/regular]", - - "Building Supplies", - "Spawn 50 Wood" = "hsbwood", - "Spawn 50 Metal" = "hsbmetal", - "Spawn 50 Plasteel" = "hsbplasteel", - "Spawn 50 Reinforced Glass" = "hsbrglass", - "Spawn 50 Glass" = "hsbglass", - "Spawn Rapid Construction Device" = "hsbrcd", - "Spawn Airlock" = "hsbairlock", - - "Miscellaneous", - "Spawn Welding Fuel Tank" = "hsbspawn&path=[/obj/structure/reagent_dispensers/fueltank]", - "Spawn Water Tank" = "hsbspawn&path=[/obj/structure/reagent_dispensers/watertank]") + "Spawn Torch" = "hsbspawn&path=[/obj/item/flashlight/flare/torch]") @@ -109,67 +90,6 @@ GLOBAL_VAR_INIT(hsboxspawn, TRUE) CONFIG_SET(flag/sandbox_autoclose, !sbac) return // - // Spacesuit with full air jetpack set as internals - // - if("hsbsuit") - var/mob/living/carbon/human/P = usr - if(!istype(P)) return - if(P.wear_armor) - P.wear_armor.forceMove(P.drop_location()) - P.wear_armor.layer = initial(P.wear_armor.layer) - P.wear_armor.plane = initial(P.wear_armor.plane) - P.wear_armor = null - P.wear_armor.layer = ABOVE_HUD_LAYER - P.wear_armor.plane = ABOVE_HUD_PLANE - P.update_inv_wear_suit() - if(P.head) - P.head.forceMove(P.drop_location()) - P.head.layer = initial(P.head.layer) - P.head.plane = initial(P.head.plane) - P.head = null - P.head = new/obj/item/clothing/head/helmet/space(P) - P.head.layer = ABOVE_HUD_LAYER - P.head.plane = ABOVE_HUD_PLANE - P.update_inv_head() - if(P.wear_mask) - P.wear_mask.forceMove(P.drop_location()) - P.wear_mask.layer = initial(P.wear_mask.layer) - P.wear_mask.plane = initial(P.wear_mask.plane) - P.wear_mask = null - P.wear_mask = new/obj/item/clothing/mask/gas(P) - P.wear_mask.layer = ABOVE_HUD_LAYER - P.wear_mask.plane = ABOVE_HUD_PLANE - P.update_inv_wear_mask() - if(P.back) - P.back.forceMove(P.drop_location()) - P.back.layer = initial(P.back.layer) - P.back.plane = initial(P.back.plane) - P.back = null - P.back.layer = ABOVE_HUD_LAYER - P.back.plane = ABOVE_HUD_PLANE - P.update_inv_back() - P.internal = P.back - P.update_internals_hud_icon(1) - - // - // Stacked Materials - // - - if("hsbrglass") - new/obj/item/stack/sheet/rglass{amount=50}(usr.loc) - - if("hsbmetal") - new/obj/item/stack/sheet/metal{amount=50}(usr.loc) - - if("hsbplasteel") - new/obj/item/stack/sheet/plasteel{amount=50}(usr.loc) - - if("hsbglass") - new/obj/item/stack/sheet/glass{amount=50}(usr.loc) - - if("hsbwood") - new/obj/item/stack/sheet/mineral/wood{amount=50}(usr.loc) - // // Object spawn window // diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm index 13f9be73ee..d73c54fca9 100644 --- a/code/game/machinery/_machinery.dm +++ b/code/game/machinery/_machinery.dm @@ -357,7 +357,7 @@ return 0 /obj/proc/can_be_unfasten_wrench(mob/user, silent) //if we can unwrench this object; returns SUCCESSFUL_UNFASTEN and FAILED_UNFASTEN, which are both TRUE, or CANT_UNFASTEN, which isn't. - if(!(isfloorturf(loc) || istype(loc, /turf/open/indestructible)) && !anchored) + if(!(isfloorturf(loc)) && !anchored) to_chat(user, "[src] needs to be on the floor to be secured!") return FAILED_UNFASTEN return SUCCESSFUL_UNFASTEN diff --git a/code/game/objects/effects/decals/cleanable.dm b/code/game/objects/effects/decals/cleanable.dm index 10cb951691..a4d0b3410a 100644 --- a/code/game/objects/effects/decals/cleanable.dm +++ b/code/game/objects/effects/decals/cleanable.dm @@ -37,7 +37,7 @@ return TRUE /obj/effect/decal/cleanable/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/reagent_containers/glass) || istype(W, /obj/item/reagent_containers/food/drinks)) + if(istype(W, /obj/item/reagent_containers/glass)) if(src.reagents && W.reagents) . = 1 //so the containers don't splash their content on the src while scooping. if(!src.reagents.total_volume) diff --git a/code/game/objects/effects/decals/cleanable/misc.dm b/code/game/objects/effects/decals/cleanable/misc.dm index bde011e589..e7ebe053b4 100644 --- a/code/game/objects/effects/decals/cleanable/misc.dm +++ b/code/game/objects/effects/decals/cleanable/misc.dm @@ -65,7 +65,7 @@ name = "dirt" desc = "" icon_state = "dirt" - canSmoothWith = list(/obj/effect/decal/cleanable/dirt, /turf/closed/wall, /obj/structure/falsewall) + canSmoothWith = list(/obj/effect/decal/cleanable/dirt, /turf/closed/wall) smooth = SMOOTH_FALSE mouse_opacity = MOUSE_OPACITY_TRANSPARENT beauty = -75 @@ -143,25 +143,6 @@ beauty = -150 alpha = 160 -/obj/effect/decal/cleanable/vomit/attack_hand(mob/user) - . = ..() - if(.) - return - if(ishuman(user)) - var/mob/living/carbon/human/H = user - if(isflyperson(H)) - playsound(get_turf(src), 'sound/blank.ogg', 50, TRUE) //slurp - H.visible_message("[H] extends a small proboscis into the vomit pool, sucking it with a slurping sound.") - if(reagents) - for(var/datum/reagent/R in reagents.reagent_list) - if (istype(R, /datum/reagent/consumable)) - var/datum/reagent/consumable/nutri_check = R - if(nutri_check.nutriment_factor >0) - H.adjust_nutrition(nutri_check.nutriment_factor * nutri_check.volume) - reagents.remove_reagent(nutri_check.type,nutri_check.volume) - reagents.trans_to(H, reagents.total_volume, transfered_by = user) - qdel(src) - /obj/effect/decal/cleanable/vomit/old name = "dried vomit" desc = "" diff --git a/code/game/objects/effects/effect_system/effects_foam.dm b/code/game/objects/effects/effect_system/effects_foam.dm index 6b9d95a69e..72f00df2d9 100644 --- a/code/game/objects/effects/effect_system/effects_foam.dm +++ b/code/game/objects/effects/effect_system/effects_foam.dm @@ -19,7 +19,6 @@ var/lifetime = 40 var/reagent_divisor = 7 var/static/list/blacklisted_turfs = typecacheof(list( - /turf/open/space/transit, /turf/open/lava)) var/slippery_foam = TRUE @@ -119,8 +118,6 @@ STOP_PROCESSING(SSfastprocess, src) if(metal) var/turf/T = get_turf(src) - if(isspaceturf(T)) //Block up any exposed space - T.PlaceOnTop(/turf/open/floor/plating/foam, flags = CHANGETURF_INHERIT_AIR) for(var/direction in GLOB.cardinals) var/turf/cardinal_turf = get_step(T, direction) if(get_area(cardinal_turf) != get_area(T)) //We're at an area boundary, so let's block off this turf! diff --git a/code/game/objects/effects/effect_system/effects_smoke.dm b/code/game/objects/effects/effect_system/effects_smoke.dm index d1abae6d9c..0e19c17b84 100644 --- a/code/game/objects/effects/effect_system/effects_smoke.dm +++ b/code/game/objects/effects/effect_system/effects_smoke.dm @@ -60,8 +60,6 @@ return 0 if(lifetime<1) return 0 - if(C.internal != null || C.has_smoke_protection()) - return 0 if(C.smoke_delay) return 0 C.smoke_delay++ @@ -241,11 +239,8 @@ return 0 if(!istype(M)) return 0 - var/mob/living/carbon/C = M - if(C.internal != null || C.has_smoke_protection()) - return 0 var/fraction = 1/initial(lifetime) - reagents.copy_to(C, fraction*reagents.total_volume) + reagents.copy_to(M, fraction*reagents.total_volume) reagents.reaction(M, INGEST, fraction) return 1 diff --git a/code/game/objects/effects/light_effect.dm b/code/game/objects/effects/light_effect.dm new file mode 100644 index 0000000000..cbf0feee4b --- /dev/null +++ b/code/game/objects/effects/light_effect.dm @@ -0,0 +1,17 @@ +//this item is intended to give the effect of entering the mine, so that light gradually fades +/obj/effect/light_emitter + name = "Light emitter" + anchored = TRUE + invisibility = 101 + var/set_luminosity = 8 + var/set_cap = 0 + +/obj/effect/light_emitter/Initialize() + . = ..() + set_light(set_luminosity, set_cap) + +/obj/effect/light_emitter/singularity_pull() + return + +/obj/effect/light_emitter/singularity_act() + return diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm index 8f8ad54872..5ef0ae06a3 100644 --- a/code/game/objects/effects/mines.dm +++ b/code/game/objects/effects/mines.dm @@ -110,47 +110,6 @@ mineEffect(victim) qdel(src) - -/obj/effect/mine/pickup/bloodbath - name = "Red Orb" - desc = "" - duration = 1200 //2min - color = "#FF0000" - -/obj/effect/mine/pickup/bloodbath/mineEffect(mob/living/carbon/victim) - if(!victim.client || !istype(victim)) - return - to_chat(victim, "RIP AND TEAR") - var/old_color = victim.client.color - var/static/list/red_splash = list(1,0,0,0.8,0.2,0, 0.8,0,0.2,0.1,0,0) - var/static/list/pure_red = list(0,0,0,0,0,0,0,0,0,1,0,0) - - INVOKE_ASYNC(src, PROC_REF(blood_delusion), victim) - - var/obj/item/twohanded/required/chainsaw/doomslayer/chainsaw = new(victim.loc) - victim.log_message("entered a blood frenzy", LOG_ATTACK) - - ADD_TRAIT(chainsaw, TRAIT_NODROP, CHAINSAW_FRENZY_TRAIT) - victim.drop_all_held_items() - victim.put_in_hands(chainsaw, forced = TRUE) - chainsaw.attack_self(victim) - chainsaw.wield(victim) - victim.reagents.add_reagent(/datum/reagent/medicine/adminordrazine,25) - to_chat(victim, "KILL, KILL, KILL! YOU HAVE NO ALLIES ANYMORE, KILL THEM ALL!") - - victim.client.color = pure_red - animate(victim.client,color = red_splash, time = 10, easing = SINE_EASING|EASE_OUT) - sleep(10) - animate(victim.client,color = old_color, time = duration)//, easing = SINE_EASING|EASE_OUT) - sleep(duration) - to_chat(victim, "My bloodlust seeps back into the bog of my subconscious and you regain self control.") - qdel(chainsaw) - victim.log_message("exited a blood frenzy", LOG_ATTACK) - qdel(src) - -/obj/effect/mine/pickup/bloodbath/proc/blood_delusion(mob/living/carbon/victim) - new /datum/hallucination/delusion(victim, TRUE, "demon", duration, 0) - /obj/effect/mine/pickup/healing name = "Blue Orb" desc = "" diff --git a/code/game/objects/effects/spawners/bundle.dm b/code/game/objects/effects/spawners/bundle.dm deleted file mode 100644 index 919b83eef7..0000000000 --- a/code/game/objects/effects/spawners/bundle.dm +++ /dev/null @@ -1,170 +0,0 @@ -/obj/effect/spawner/bundle - name = "bundle spawner" - icon = 'icons/mob/screen_gen.dmi' - icon_state = "x2" - color = "#00FF00" - - var/list/items - -/obj/effect/spawner/bundle/Initialize(mapload) - ..() - if(items && items.len) - var/turf/T = get_turf(src) - for(var/path in items) - new path(T) - return INITIALIZE_HINT_QDEL - -/obj/effect/spawner/bundle/costume/chicken - name = "chicken costume spawner" - items = list( - /obj/item/clothing/suit/chickensuit, - /obj/item/clothing/head/chicken, - /obj/item/reagent_containers/food/snacks/egg) - -/obj/effect/spawner/bundle/costume/gladiator - name = "gladiator costume spawner" - items = list( - /obj/item/clothing/under/costume/gladiator, - /obj/item/clothing/head/helmet/gladiator) - -/obj/effect/spawner/bundle/costume/madscientist - name = "mad scientist costume spawner" - items = list( - /obj/item/clothing/under/rank/captain/suit, - /obj/item/clothing/head/flatcap, - /obj/item/clothing/suit/toggle/labcoat/mad) - -/obj/effect/spawner/bundle/costume/elpresidente - name = "el presidente costume spawner" - items = list( - /obj/item/clothing/under/rank/captain/suit, - /obj/item/clothing/head/flatcap, - /obj/item/clothing/mask/cigarette/cigar/havana, - /obj/item/clothing/shoes/jackboots) - -/obj/effect/spawner/bundle/costume/nyangirl - name = "nyangirl costume spawner" - items = list( - /obj/item/clothing/under/costume/schoolgirl, - /obj/item/clothing/head/kitty, - /obj/item/clothing/glasses/blindfold) - -/obj/effect/spawner/bundle/costume/maid - name = "maid costume spawner" - items = list( - /obj/item/clothing/under/dress/skirt, - /obj/effect/spawner/lootdrop/minor/beret_or_rabbitears, - /obj/item/clothing/glasses/blindfold) - - -/obj/effect/spawner/bundle/costume/butler - name = "butler costume spawner" - items = list( - /obj/item/clothing/accessory/waistcoat, - /obj/item/clothing/under/suit/black, - /obj/item/clothing/head/that) - -/obj/effect/spawner/bundle/costume/highlander - name = "highlander costume spawner" - items = list( - /obj/item/clothing/under/costume/kilt, - /obj/item/clothing/head/beret) - -/obj/effect/spawner/bundle/costume/prig - name = "prig costume spawner" - items = list( - /obj/item/clothing/accessory/waistcoat, - /obj/item/clothing/glasses/monocle, - /obj/effect/spawner/lootdrop/minor/bowler_or_that, - /obj/item/clothing/shoes/sneakers/black, - /obj/item/cane, - /obj/item/clothing/under/suit/sl, - /obj/item/clothing/mask/fakemoustache) - -/obj/effect/spawner/bundle/costume/plaguedoctor - name = "plague doctor costume spawner" - items = list( - /obj/item/clothing/suit/bio_suit/plaguedoctorsuit, - /obj/item/clothing/head/plaguedoctorhat, - /obj/item/clothing/mask/gas/plaguedoctor) - -/obj/effect/spawner/bundle/costume/nightowl - name = "night owl costume spawner" - items = list( - /obj/item/clothing/suit/toggle/owlwings, - /obj/item/clothing/under/costume/owl, - /obj/item/clothing/mask/gas/owl_mask) - -/obj/effect/spawner/bundle/costume/griffin - name = "griffin costume spawner" - items = list( - /obj/item/clothing/suit/toggle/owlwings/griffinwings, - /obj/item/clothing/shoes/griffin, - /obj/item/clothing/under/costume/griffin, - /obj/item/clothing/head/griffin) - -/obj/effect/spawner/bundle/costume/waiter - name = "waiter costume spawner" - items = list( - /obj/item/clothing/under/suit/waiter, - /obj/effect/spawner/lootdrop/minor/kittyears_or_rabbitears, - /obj/item/clothing/suit/apron) - -/obj/effect/spawner/bundle/costume/pirate - name = "pirate costume spawner" - items = list( - /obj/item/clothing/under/costume/pirate, - /obj/item/clothing/suit/pirate, - /obj/effect/spawner/lootdrop/minor/pirate_or_bandana, - /obj/item/clothing/glasses/eyepatch) - -/obj/effect/spawner/bundle/costume/commie - name = "commie costume spawner" - items = list( - /obj/item/clothing/under/costume/soviet, - /obj/item/clothing/head/ushanka) - -/obj/effect/spawner/bundle/costume/imperium_monk - name = "imperium monk costume spawner" - items = list( - /obj/item/clothing/suit/imperium_monk, - /obj/effect/spawner/lootdrop/minor/twentyfive_percent_cyborg_mask) - -/obj/effect/spawner/bundle/costume/holiday_priest - name = "holiday priest costume spawner" - items = list( - /obj/item/clothing/suit/chaplainsuit/holidaypriest) - -/obj/effect/spawner/bundle/costume/marisawizard - name = "marisa wizard costume spawner" - items = list( - /obj/item/clothing/shoes/sandal/marisa, - /obj/item/clothing/head/wizard/marisa/fake, - /obj/item/clothing/suit/wizrobe/marisa/fake) - -/obj/effect/spawner/bundle/costume/cutewitch - name = "cute witch costume spawner" - items = list( - /obj/item/clothing/under/dress/sundress, - /obj/item/clothing/head/witchwig, - /obj/item/broom) - -/obj/effect/spawner/bundle/costume/wizard - name = "wizard costume spawner" - items = list( - /obj/item/clothing/shoes/sandal, - /obj/item/clothing/suit/wizrobe/fake, - /obj/item/clothing/head/wizard/fake, - /obj/item/staff) - -/obj/effect/spawner/bundle/costume/sexyclown - name = "sexy clown costume spawner" - items = list( - /obj/item/clothing/mask/gas/sexyclown, - /obj/item/clothing/under/rank/civilian/clown/sexy) - -/obj/effect/spawner/bundle/costume/sexymime - name = "sexy mime costume spawner" - items = list( - /obj/item/clothing/mask/gas/sexymime, - /obj/item/clothing/under/rank/civilian/mime/sexy) diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index 27d1558eb3..2189cf78ae 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -31,164 +31,3 @@ spawned_loot.pixel_x = spawned_loot.pixel_y = ((!(loot_spawned%2)*loot_spawned/2)*-1)+((loot_spawned%2)*(loot_spawned+1)/2*1) loot_spawned++ return INITIALIZE_HINT_QDEL - -/obj/effect/spawner/lootdrop/armory_contraband - name = "armory contraband gun spawner" - lootdoubles = FALSE - - loot = list( - /obj/item/gun/ballistic/automatic/pistol = 8, - /obj/item/gun/ballistic/shotgun/automatic/combat = 5, - /obj/item/gun/ballistic/automatic/pistol/deagle, - /obj/item/gun/ballistic/revolver/mateba - ) - -/obj/effect/spawner/lootdrop/armory_contraband/metastation - loot = list(/obj/item/gun/ballistic/automatic/pistol = 5, - /obj/item/gun/ballistic/shotgun/automatic/combat = 5, - /obj/item/gun/ballistic/automatic/pistol/deagle, - /obj/item/gun/ballistic/revolver/mateba) - -/obj/effect/spawner/lootdrop/armory_contraband/donutstation - loot = list( - /obj/item/gun/ballistic/shotgun/automatic/combat = 5, - /obj/item/bikehorn/golden, - /obj/item/grenade/clusterbuster) - -/obj/effect/spawner/lootdrop/gambling - name = "gambling valuables spawner" - loot = list( - /obj/item/gun/ballistic/revolver/russian = 5, - /obj/item/clothing/head/ushanka = 3, - /obj/item/coin/gold, - /obj/item/reagent_containers/food/drinks/bottle/vodka/badminka, - ) - -/obj/effect/spawner/lootdrop/grille_or_trash - name = "maint grille or trash spawner" - loot = list(/obj/structure/grille = 5, - /obj/item/cigbutt = 1, - /obj/item/trash/cheesie = 1, - /obj/item/trash/candy = 1, - /obj/item/trash/chips = 1, - /obj/item/reagent_containers/food/snacks/deadmouse = 1, - /obj/item/trash/pistachios = 1, - /obj/item/trash/plate = 1, - /obj/item/trash/popcorn = 1, - /obj/item/trash/raisins = 1, - /obj/item/trash/sosjerky = 1, - /obj/item/trash/syndi_cakes = 1) - -/obj/effect/spawner/lootdrop/three_course_meal - name = "three course meal spawner" - lootcount = 3 - lootdoubles = FALSE - var/soups = list( - /obj/item/reagent_containers/food/snacks/soup/beet, - /obj/item/reagent_containers/food/snacks/soup/sweetpotato, - /obj/item/reagent_containers/food/snacks/soup/stew, - /obj/item/reagent_containers/food/snacks/soup/hotchili, - /obj/item/reagent_containers/food/snacks/soup/nettle, - /obj/item/reagent_containers/food/snacks/soup/meatball) - var/salads = list( - /obj/item/reagent_containers/food/snacks/salad/herbsalad, - /obj/item/reagent_containers/food/snacks/salad/validsalad, - /obj/item/reagent_containers/food/snacks/salad/fruit, - /obj/item/reagent_containers/food/snacks/salad/jungle, - /obj/item/reagent_containers/food/snacks/salad/aesirsalad) - var/mains = list( - /obj/item/reagent_containers/food/snacks/bearsteak, - /obj/item/reagent_containers/food/snacks/enchiladas, - /obj/item/reagent_containers/food/snacks/stewedsoymeat, - /obj/item/reagent_containers/food/snacks/burger/bigbite, - /obj/item/reagent_containers/food/snacks/burger/superbite, - /obj/item/reagent_containers/food/snacks/burger/fivealarm) - -/obj/effect/spawner/lootdrop/three_course_meal/Initialize(mapload) - loot = list(pick(soups) = 1,pick(salads) = 1,pick(mains) = 1) - . = ..() - -/obj/effect/spawner/lootdrop/maintenance - name = "maintenance loot spawner" - // see code/_globalvars/lists/maintenance_loot.dm for loot table - -/obj/effect/spawner/lootdrop/maintenance/Initialize(mapload) - loot = GLOB.maintenance_loot - . = ..() - -/obj/effect/spawner/lootdrop/maintenance/two - name = "2 x maintenance loot spawner" - lootcount = 2 - -/obj/effect/spawner/lootdrop/maintenance/three - name = "3 x maintenance loot spawner" - lootcount = 3 - -/obj/effect/spawner/lootdrop/maintenance/four - name = "4 x maintenance loot spawner" - lootcount = 4 - -/obj/effect/spawner/lootdrop/maintenance/five - name = "5 x maintenance loot spawner" - lootcount = 5 - -/obj/effect/spawner/lootdrop/maintenance/six - name = "6 x maintenance loot spawner" - lootcount = 6 - -/obj/effect/spawner/lootdrop/maintenance/seven - name = "7 x maintenance loot spawner" - lootcount = 7 - -/obj/effect/spawner/lootdrop/maintenance/eight - name = "8 x maintenance loot spawner" - lootcount = 8 - -/obj/effect/spawner/lootdrop/costume - name = "random costume spawner" - -/obj/effect/spawner/lootdrop/costume/Initialize() - loot = list() - for(var/path in subtypesof(/obj/effect/spawner/bundle/costume)) - loot[path] = TRUE - . = ..() - -// Minor lootdrops follow - -/obj/effect/spawner/lootdrop/minor/beret_or_rabbitears - name = "beret or rabbit ears spawner" - loot = list( - /obj/item/clothing/head/beret = 1, - /obj/item/clothing/head/rabbitears = 1) - -/obj/effect/spawner/lootdrop/minor/bowler_or_that - name = "bowler or top hat spawner" - loot = list( - /obj/item/clothing/head/bowler = 1, - /obj/item/clothing/head/that = 1) - -/obj/effect/spawner/lootdrop/minor/kittyears_or_rabbitears - name = "kitty ears or rabbit ears spawner" - loot = list( - /obj/item/clothing/head/kitty = 1, - /obj/item/clothing/head/rabbitears = 1) - -/obj/effect/spawner/lootdrop/minor/pirate_or_bandana - name = "pirate hat or bandana spawner" - loot = list( - /obj/item/clothing/head/pirate = 1, - /obj/item/clothing/head/bandana = 1) - -/obj/effect/spawner/lootdrop/minor/twentyfive_percent_cyborg_mask - name = "25% cyborg mask spawner" - loot = list( - /obj/item/clothing/mask/gas/cyborg = 25, - "" = 75) - -// Tech storage circuit board spawners - -/obj/effect/spawner/lootdrop/techstorage - name = "generic circuit board spawner" - lootdoubles = FALSE - fan_out_items = TRUE - lootcount = INFINITY diff --git a/code/game/objects/effects/spawners/structure.dm b/code/game/objects/effects/spawners/structure.dm index 7fb6e553a0..a121fdca0d 100644 --- a/code/game/objects/effects/spawners/structure.dm +++ b/code/game/objects/effects/spawners/structure.dm @@ -14,281 +14,3 @@ again. for(var/I in spawn_list) new I(get_turf(src)) return INITIALIZE_HINT_QDEL - - -//normal windows - -/obj/effect/spawner/structure/window - icon = 'icons/obj/structures_spawners.dmi' - icon_state = "window_spawner" - name = "window spawner" - spawn_list = list(/obj/structure/grille, /obj/structure/window/fulltile) - dir = SOUTH - -/obj/effect/spawner/structure/window/hollow - name = "hollow window spawner" - icon_state = "hwindow_spawner_full" - spawn_list = list(/obj/structure/grille, /obj/structure/window, /obj/structure/window/spawner/north, /obj/structure/window/spawner/east, /obj/structure/window/spawner/west) - -/obj/effect/spawner/structure/window/hollow/end - icon_state = "hwindow_spawner_end" - -/obj/effect/spawner/structure/window/hollow/end/Initialize() - switch(dir) - if(NORTH) - spawn_list = list(/obj/structure/grille, /obj/structure/window/spawner/north, /obj/structure/window/spawner/east, /obj/structure/window/spawner/west) - if(EAST) - spawn_list = list(/obj/structure/grille, /obj/structure/window, /obj/structure/window/spawner/north, /obj/structure/window/spawner/east) - if(SOUTH) - spawn_list = list(/obj/structure/grille, /obj/structure/window, /obj/structure/window/spawner/east, /obj/structure/window/spawner/west) - if(WEST) - spawn_list = list(/obj/structure/grille, /obj/structure/window, /obj/structure/window/spawner/north, /obj/structure/window/spawner/west) - . = ..() - -/obj/effect/spawner/structure/window/hollow/middle - icon_state = "hwindow_spawner_middle" - -/obj/effect/spawner/structure/window/hollow/middle/Initialize() - switch(dir) - if(NORTH,SOUTH) - spawn_list = list(/obj/structure/grille, /obj/structure/window, /obj/structure/window/spawner/north) - if(EAST,WEST) - spawn_list = list(/obj/structure/grille, /obj/structure/window/spawner/east, /obj/structure/window/spawner/west) - . = ..() - -/obj/effect/spawner/structure/window/hollow/directional - icon_state = "hwindow_spawner_directional" - -/obj/effect/spawner/structure/window/hollow/directional/Initialize() - switch(dir) - if(NORTH) - spawn_list = list(/obj/structure/grille, /obj/structure/window/spawner/north) - if(NORTHEAST) - spawn_list = list(/obj/structure/grille, /obj/structure/window/spawner/north, /obj/structure/window/spawner/east) - if(EAST) - spawn_list = list(/obj/structure/grille, /obj/structure/window/spawner/east) - if(SOUTHEAST) - spawn_list = list(/obj/structure/grille, /obj/structure/window, /obj/structure/window/spawner/east) - if(SOUTH) - spawn_list = list(/obj/structure/grille, /obj/structure/window) - if(SOUTHWEST) - spawn_list = list(/obj/structure/grille, /obj/structure/window, /obj/structure/window/spawner/west) - if(WEST) - spawn_list = list(/obj/structure/grille, /obj/structure/window/spawner/west) - if(NORTHWEST) - spawn_list = list(/obj/structure/grille, /obj/structure/window/spawner/north, /obj/structure/window/spawner/west) - . = ..() - -//reinforced - -/obj/effect/spawner/structure/window/reinforced - name = "reinforced window spawner" - icon_state = "rwindow_spawner" - spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced/fulltile) - -/obj/effect/spawner/structure/window/hollow/reinforced - name = "hollow reinforced window spawner" - icon_state = "hrwindow_spawner_full" - spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced, /obj/structure/window/reinforced/spawner/north, /obj/structure/window/reinforced/spawner/east, /obj/structure/window/reinforced/spawner/west) - -/obj/effect/spawner/structure/window/hollow/reinforced/end - icon_state = "hrwindow_spawner_end" - -/obj/effect/spawner/structure/window/hollow/reinforced/end/Initialize() - switch(dir) - if(NORTH) - spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced/spawner/north, /obj/structure/window/reinforced/spawner/east, /obj/structure/window/reinforced/spawner/west) - if(EAST) - spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced, /obj/structure/window/reinforced/spawner/north, /obj/structure/window/reinforced/spawner/east) - if(SOUTH) - spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced, /obj/structure/window/reinforced/spawner/east, /obj/structure/window/reinforced/spawner/west) - if(WEST) - spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced, /obj/structure/window/reinforced/spawner/north, /obj/structure/window/reinforced/spawner/west) - . = ..() - -/obj/effect/spawner/structure/window/hollow/reinforced/middle - icon_state = "hrwindow_spawner_middle" - -/obj/effect/spawner/structure/window/hollow/reinforced/middle/Initialize() - switch(dir) - if(NORTH,SOUTH) - spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced, /obj/structure/window/reinforced/spawner/north) - if(EAST,WEST) - spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced/spawner/east, /obj/structure/window/reinforced/spawner/west) - . = ..() - -/obj/effect/spawner/structure/window/hollow/reinforced/directional - icon_state = "hrwindow_spawner_directional" - -/obj/effect/spawner/structure/window/hollow/reinforced/directional/Initialize() - switch(dir) - if(NORTH) - spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced/spawner/north) - if(NORTHEAST) - spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced/spawner/north, /obj/structure/window/reinforced/spawner/east) - if(EAST) - spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced/spawner/east) - if(SOUTHEAST) - spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced, /obj/structure/window/reinforced/spawner/east) - if(SOUTH) - spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced) - if(SOUTHWEST) - spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced, /obj/structure/window/reinforced/spawner/west) - if(WEST) - spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced/spawner/west) - if(NORTHWEST) - spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced/spawner/north, /obj/structure/window/reinforced/spawner/west) - . = ..() - -//tinted - -/obj/effect/spawner/structure/window/reinforced/tinted - name = "tinted reinforced window spawner" - icon_state = "twindow_spawner" - spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced/tinted/fulltile) - - -//shuttle window - -/obj/effect/spawner/structure/window/shuttle - name = "shuttle window spawner" - icon_state = "swindow_spawner" - spawn_list = list(/obj/structure/grille, /obj/structure/window/shuttle) - - -//plastitanium window - -/obj/effect/spawner/structure/window/plasma/reinforced/plastitanium - name = "plastitanium window spawner" - icon_state = "plastitaniumwindow_spawner" - spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/reinforced/plastitanium) - - -//ice window - -/obj/effect/spawner/structure/window/ice - name = "ice window spawner" - icon_state = "icewindow_spawner" - spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced/fulltile/ice) - -//plasma windows - -/obj/effect/spawner/structure/window/plasma - name = "plasma window spawner" - icon_state = "pwindow_spawner" - spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/fulltile) - -/obj/effect/spawner/structure/window/hollow/plasma - name = "hollow plasma window spawner" - icon_state = "phwindow_spawner_full" - spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma, /obj/structure/window/plasma/spawner/north, /obj/structure/window/plasma/spawner/east, /obj/structure/window/plasma/spawner/west) - -/obj/effect/spawner/structure/window/hollow/plasma/end - icon_state = "phwindow_spawner_end" - -/obj/effect/spawner/structure/window/hollow/plasma/end/Initialize() - switch(dir) - if(NORTH) - spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/spawner/north, /obj/structure/window/plasma/spawner/east, /obj/structure/window/plasma/spawner/west) - if(EAST) - spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma, /obj/structure/window/plasma/spawner/north, /obj/structure/window/plasma/spawner/east) - if(SOUTH) - spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma, /obj/structure/window/plasma/spawner/east, /obj/structure/window/plasma/spawner/west) - if(WEST) - spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma, /obj/structure/window/plasma/spawner/north, /obj/structure/window/plasma/spawner/west) - . = ..() - -/obj/effect/spawner/structure/window/hollow/plasma/middle - icon_state = "phwindow_spawner_middle" - -/obj/effect/spawner/structure/window/hollow/plasma/middle/Initialize() - switch(dir) - if(NORTH,SOUTH) - spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma, /obj/structure/window/plasma/spawner/north) - if(EAST,WEST) - spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/spawner/east, /obj/structure/window/plasma/spawner/west) - . = ..() - -/obj/effect/spawner/structure/window/hollow/plasma/directional - icon_state = "phwindow_spawner_directional" - -/obj/effect/spawner/structure/window/hollow/plasma/directional/Initialize() - switch(dir) - if(NORTH) - spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/spawner/north) - if(NORTHEAST) - spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/spawner/north, /obj/structure/window/plasma/spawner/east) - if(EAST) - spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/spawner/east) - if(SOUTHEAST) - spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma, /obj/structure/window/plasma/spawner/east) - if(SOUTH) - spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma) - if(SOUTHWEST) - spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma, /obj/structure/window/plasma/spawner/west) - if(WEST) - spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/spawner/west) - if(NORTHWEST) - spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/spawner/north, /obj/structure/window/plasma/spawner/west) - . = ..() - -//plasma reinforced - -/obj/effect/spawner/structure/window/plasma/reinforced - name = "reinforced plasma window spawner" - icon_state = "prwindow_spawner" - spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/reinforced/fulltile) - -/obj/effect/spawner/structure/window/hollow/plasma/reinforced - name = "hollow reinforced plasma window spawner" - icon_state = "phrwindow_spawner_full" - spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/reinforced, /obj/structure/window/plasma/reinforced/spawner/north, /obj/structure/window/plasma/reinforced/spawner/east, /obj/structure/window/plasma/reinforced/spawner/west) - -/obj/effect/spawner/structure/window/hollow/plasma/reinforced/end - icon_state = "phrwindow_spawner_end" - -/obj/effect/spawner/structure/window/hollow/plasma/reinforced/end/Initialize() - switch(dir) - if(NORTH) - spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/reinforced/spawner/north, /obj/structure/window/plasma/reinforced/spawner/east, /obj/structure/window/plasma/reinforced/spawner/west) - if(EAST) - spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/reinforced, /obj/structure/window/plasma/reinforced/spawner/north, /obj/structure/window/plasma/reinforced/spawner/east) - if(SOUTH) - spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/reinforced, /obj/structure/window/plasma/reinforced/spawner/east, /obj/structure/window/plasma/reinforced/spawner/west) - if(WEST) - spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/reinforced, /obj/structure/window/plasma/reinforced/spawner/north, /obj/structure/window/plasma/reinforced/spawner/west) - . = ..() - -/obj/effect/spawner/structure/window/hollow/plasma/reinforced/middle - icon_state = "phrwindow_spawner_middle" - -/obj/effect/spawner/structure/window/hollow/plasma/reinforced/middle/Initialize() - switch(dir) - if(NORTH,SOUTH) - spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/reinforced, /obj/structure/window/plasma/reinforced/spawner/north) - if(EAST,WEST) - spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/reinforced/spawner/east, /obj/structure/window/plasma/reinforced/spawner/west) - . = ..() - -/obj/effect/spawner/structure/window/hollow/plasma/reinforced/directional - icon_state = "phrwindow_spawner_directional" - -/obj/effect/spawner/structure/window/hollow/plasma/reinforced/directional/Initialize() - switch(dir) - if(NORTH) - spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/reinforced/spawner/north) - if(NORTHEAST) - spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/reinforced/spawner/north, /obj/structure/window/plasma/reinforced/spawner/east) - if(EAST) - spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/reinforced/spawner/east) - if(SOUTHEAST) - spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/reinforced, /obj/structure/window/plasma/reinforced/spawner/east) - if(SOUTH) - spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/reinforced) - if(SOUTHWEST) - spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/reinforced, /obj/structure/window/plasma/reinforced/spawner/west) - if(WEST) - spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/reinforced/spawner/west) - if(NORTHWEST) - spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/reinforced/spawner/north, /obj/structure/window/plasma/reinforced/spawner/west) - . = ..() diff --git a/code/game/objects/effects/spawners/vaultspawner.dm b/code/game/objects/effects/spawners/vaultspawner.dm deleted file mode 100644 index 9bdf0a673e..0000000000 --- a/code/game/objects/effects/spawners/vaultspawner.dm +++ /dev/null @@ -1,28 +0,0 @@ -/obj/effect/vaultspawner - var/maxX = 6 - var/maxY = 6 - var/minX = 2 - var/minY = 2 - -/obj/effect/vaultspawner/New(turf/location,lX = minX,uX = maxX,lY = minY,uY = maxY,type = null) - if(!type) - type = pick("sandstone","rock","alien") - - var/lowBoundX = location.x - var/lowBoundY = location.y - - var/hiBoundX = location.x + rand(lX,uX) - var/hiBoundY = location.y + rand(lY,uY) - - var/z = location.z - - for(var/i = lowBoundX,i<=hiBoundX,i++) - for(var/j = lowBoundY,j<=hiBoundY,j++) - var/turf/T = locate(i,j,z) - if(i == lowBoundX || i == hiBoundX || j == lowBoundY || j == hiBoundY) - T.PlaceOnTop(/turf/closed/wall/vault) - else - T.PlaceOnTop(/turf/open/floor/vault) - T.icon_state = "[type]vault" - - qdel(src) diff --git a/code/game/objects/effects/temporary_visuals/miscellaneous.dm b/code/game/objects/effects/temporary_visuals/miscellaneous.dm index c5ca6758cf..7ba7e4281c 100644 --- a/code/game/objects/effects/temporary_visuals/miscellaneous.dm +++ b/code/game/objects/effects/temporary_visuals/miscellaneous.dm @@ -164,9 +164,6 @@ if(EAST) icon_state = "beam_splash_e" -/obj/projectile/curse_hand/update_icon() - icon_state = "[icon_state][handedness]" - /obj/effect/temp_visual/wizard name = "water" icon = 'icons/mob/mob.dmi' diff --git a/code/game/objects/fluff.dm b/code/game/objects/fluff.dm new file mode 100644 index 0000000000..e43aa1d7a2 --- /dev/null +++ b/code/game/objects/fluff.dm @@ -0,0 +1,160 @@ + +// ausbush + +/obj/structure/flora/ausbushes + name = "bush" + desc = "" + icon = 'icons/obj/flora/ausflora.dmi' + icon_state = "firstbush_1" + +/obj/structure/flora/ausbushes/Initialize() + if(icon_state == "firstbush_1") + icon_state = "firstbush_[rand(1, 4)]" + . = ..() + +/obj/structure/flora/ausbushes/reedbush + icon_state = "reedbush_1" + +/obj/structure/flora/ausbushes/reedbush/Initialize() + icon_state = "reedbush_[rand(1, 4)]" + . = ..() + +/obj/structure/flora/ausbushes/leafybush + icon_state = "leafybush_1" + +/obj/structure/flora/ausbushes/leafybush/Initialize() + icon_state = "leafybush_[rand(1, 3)]" + . = ..() + +/obj/structure/flora/ausbushes/palebush + icon_state = "palebush_1" + +/obj/structure/flora/ausbushes/palebush/Initialize() + icon_state = "palebush_[rand(1, 4)]" + . = ..() + +/obj/structure/flora/ausbushes/stalkybush + icon_state = "stalkybush_1" + +/obj/structure/flora/ausbushes/stalkybush/Initialize() + icon_state = "stalkybush_[rand(1, 3)]" + . = ..() + +/obj/structure/flora/ausbushes/grassybush + icon_state = "grassybush_1" + +/obj/structure/flora/ausbushes/grassybush/Initialize() + icon_state = "grassybush_[rand(1, 4)]" + . = ..() + +/obj/structure/flora/ausbushes/fernybush + icon_state = "fernybush_1" + +/obj/structure/flora/ausbushes/fernybush/Initialize() + icon_state = "fernybush_[rand(1, 3)]" + . = ..() + +/obj/structure/flora/ausbushes/sunnybush + icon_state = "sunnybush_1" + +/obj/structure/flora/ausbushes/sunnybush/Initialize() + icon_state = "sunnybush_[rand(1, 3)]" + . = ..() + +/obj/structure/flora/ausbushes/genericbush + icon_state = "genericbush_1" + +/obj/structure/flora/ausbushes/genericbush/Initialize() + icon_state = "genericbush_[rand(1, 4)]" + . = ..() + +/obj/structure/flora/ausbushes/pointybush + icon_state = "pointybush_1" + +/obj/structure/flora/ausbushes/pointybush/Initialize() + icon_state = "pointybush_[rand(1, 4)]" + . = ..() + +/obj/structure/flora/ausbushes/lavendergrass + icon_state = "lavendergrass_1" + +/obj/structure/flora/ausbushes/lavendergrass/Initialize() + icon_state = "lavendergrass_[rand(1, 4)]" + . = ..() + +/obj/structure/flora/ausbushes/ywflowers + icon_state = "ywflowers_1" + +/obj/structure/flora/ausbushes/ywflowers/Initialize() + icon_state = "ywflowers_[rand(1, 3)]" + . = ..() + +/obj/structure/flora/ausbushes/brflowers + icon_state = "brflowers_1" + +/obj/structure/flora/ausbushes/brflowers/Initialize() + icon_state = "brflowers_[rand(1, 3)]" + . = ..() + +/obj/structure/flora/ausbushes/ppflowers + icon_state = "ppflowers_1" + +/obj/structure/flora/ausbushes/ppflowers/Initialize() + icon_state = "ppflowers_[rand(1, 3)]" + . = ..() + +/obj/structure/flora/ausbushes/sparsegrass + icon_state = "sparsegrass_1" + +/obj/structure/flora/ausbushes/sparsegrass/Initialize() + icon_state = "sparsegrass_[rand(1, 3)]" + . = ..() + +/obj/structure/flora/ausbushes/fullgrass + icon_state = "fullgrass_1" + +/obj/structure/flora/ausbushes/fullgrass/Initialize() + icon_state = "fullgrass_[rand(1, 3)]" + . = ..() + +//a rock is flora according to where the icon file is +//and now these defines + +/obj/structure/flora/rock + icon_state = "basalt" + desc = "" + icon = 'icons/obj/flora/rocks.dmi' + resistance_flags = FIRE_PROOF + density = TRUE + +/obj/structure/flora/rock/Initialize() + . = ..() + icon_state = "[icon_state][rand(1,3)]" + +/obj/structure/flora/rock/pile + icon_state = "lavarocks" + desc = "" + +/obj/structure/flora/rock/pile/largejungle + name = "rocks" + icon_state = "rocks" + icon = 'icons/obj/flora/largejungleflora.dmi' + density = FALSE + pixel_x = -16 + pixel_y = -16 + +/obj/structure/flora/rock/pile/largejungle/Initialize() + . = ..() + icon_state = "[initial(icon_state)][rand(1,3)]" + +//Jungle rocks + +/obj/structure/flora/rock/jungle + icon_state = "rock" + desc = "" + icon = 'icons/obj/flora/jungleflora.dmi' + density = FALSE + +/obj/structure/flora/rock/jungle/Initialize() + . = ..() + icon_state = "[initial(icon_state)][rand(1,5)]" diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index bf9e1b28df..22445f5f65 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -1,7 +1,5 @@ GLOBAL_DATUM_INIT(fire_overlay, /mutable_appearance, mutable_appearance('icons/effects/fire.dmi', "fire")) - -GLOBAL_VAR_INIT(rpg_loot_items, FALSE) // if true, everyone item when created will have its name changed to be // more... RPG-like. @@ -324,9 +322,6 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) new path(src) actions_types = null - if(GLOB.rpg_loot_items) - AddComponent(/datum/component/fantasy) - if(force_string) item_flags |= FORCE_STRING_OVERRIDE @@ -494,13 +489,8 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) if(user.get_num_arms() < 2) to_chat(user, "[src] is too bulky to carry in one hand!") return - var/obj/item/twohanded/required/H - H = user.get_inactive_held_item() if(get_dist(src,user) > 1) return - if(H != null) - to_chat(user, "[src] is too bulky to carry in one hand!") - return if(w_class == WEIGHT_CLASS_GIGANTIC) return @@ -687,13 +677,6 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) if(altgripped || wielded) ungrip(user, FALSE) if(twohands_required) - var/slotbit = slotdefine2slotbit(slot) - if(slot_flags & slotbit) - var/datum/O = user.is_holding_item_of_type(/obj/item/twohanded/offhand) - if(!O || QDELETED(O)) - return - qdel(O) - return if(slot == SLOT_HANDS) wield(user) else @@ -1180,9 +1163,6 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) if(force_wielded) force = initial(force) wdefense = wdefense - 1 - var/obj/item/twohanded/offhand/O = user.get_inactive_held_item() - if(O && istype(O)) - O.unwield() if(altgripped) altgripped = FALSE update_transform() @@ -1222,10 +1202,6 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) update_transform() to_chat(user, "I wield [src] with both hands.") playsound(loc, pick('sound/combat/weaponr1.ogg','sound/combat/weaponr2.ogg'), 100, TRUE) - var/obj/item/twohanded/offhand/O = new(user) ////Let's reserve his other hand~ - O.name = "[name] - offhand" - O.wielded = TRUE - user.put_in_inactive_hand(O) if(twohands_required) if(!wielded) user.dropItemToGround(src) diff --git a/code/game/objects/items/beartraps.dm b/code/game/objects/items/beartraps.dm new file mode 100644 index 0000000000..1454ffd112 --- /dev/null +++ b/code/game/objects/items/beartraps.dm @@ -0,0 +1,191 @@ +//Legcuffs + +/obj/item/restraints/legcuffs + name = "leg cuffs" + desc = "" + gender = PLURAL + icon = 'icons/obj/items_and_weapons.dmi' + icon_state = "handcuff" + lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' + flags_1 = CONDUCT_1 + throwforce = 0 + w_class = WEIGHT_CLASS_NORMAL + slowdown = 7 + breakouttime = 30 SECONDS + +/obj/item/restraints/legcuffs/beartrap + icon = 'icons/roguetown/items/misc.dmi' + name = "mantrap" + gender = NEUTER + throw_speed = 1 + throw_range = 1 + icon_state = "beartrap" + desc = "A crude and rusty spring trap, used to snare interlopers, or prey on a hunt. Looks almost like falling apart." + var/rusty = TRUE // Is it an old trap? Will most likely be destroyed if not handled right + var/armed = FALSE // Is it armed? + var/trap_damage = 90 // How much brute damage the trap will do to its victim + var/used_time = 12 SECONDS // How many seconds it takes to disarm the trap + max_integrity = 100 + +/obj/item/restraints/legcuffs/beartrap/attack_hand(mob/user) + var/boon = user?.mind?.get_learning_boon(/datum/skill/craft/traps) + if(iscarbon(user) && armed && isturf(loc)) + var/mob/living/carbon/C = user + var/def_zone = "[(C.active_hand_index == 2) ? "r" : "l" ]_arm" + var/obj/item/bodypart/BP = C.get_bodypart(def_zone) + if(!BP) + return FALSE + if(C.badluck(5)) // UNLUCKY + add_mob_blood(C) + if(!BP.is_object_embedded(src)) + BP.add_embedded_object(src) + close_trap() + C.visible_message("[C] triggers \the [src].", \ + "I trigger \the [src]!") + C.emote("agony") + C.Stun(80) + BP.add_wound(/datum/wound/fracture) + BP.update_disabled() + C.apply_damage(trap_damage, BRUTE, def_zone, C.run_armor_check(def_zone, "melee", damage = trap_damage)) + C.consider_ambush() + return FALSE + else + if(C.mind) + used_time -= max((C.mind.get_skill_level(/datum/skill/craft/traps) * 2 SECONDS), 2 SECONDS) + if(do_after(user, used_time, target = src)) + armed = FALSE + anchored = FALSE + update_icon() + src.alpha = 255 + C.visible_message("[C] disarms \the [src].", \ + "I disarm \the [src].") + C.mind?.adjust_experience(/datum/skill/craft/traps, C.STAINT * boon, FALSE) + return FALSE + else + add_mob_blood(C) + if(!BP.is_object_embedded(src)) + BP.add_embedded_object(src) + close_trap() + C.visible_message("[C] triggers \the [src].", \ + "I trigger \the [src]!") + C.emote("agony") + BP.add_wound(/datum/wound/fracture) + BP.update_disabled() + C.apply_damage(trap_damage, BRUTE, def_zone, C.run_armor_check(def_zone, "melee", damage = trap_damage)) + C.consider_ambush() + return FALSE + ..() + +/obj/item/restraints/legcuffs/beartrap/attackby(obj/item/W, mob/user) + if(W.force && armed) + user.visible_message("[user] triggers \the [src] with [W].", \ + "I trigger \the [src] with [W]!") + W.take_damage(20) + close_trap() + if(isliving(user)) + var/mob/living/L = user + L.consider_ambush() + return + ..() + +/obj/item/restraints/legcuffs/beartrap/armed + armed = TRUE + anchored = TRUE // Pre mapped traps (bad mapping btw, don't) start anchored + +/obj/item/restraints/legcuffs/beartrap/armed/camouflage + armed = TRUE + alpha = 80 + +/obj/item/restraints/legcuffs/beartrap/Initialize() + . = ..() + update_icon() + +/obj/item/restraints/legcuffs/beartrap/update_icon() + . = ..() + icon_state = "[initial(icon_state)][armed]" + +/obj/item/restraints/legcuffs/beartrap/suicide_act(mob/user) + user.visible_message("[user] is sticking [user.p_their()] head in the [src.name]! It looks like [user.p_theyre()] trying to commit suicide!") + playsound(loc, 'sound/blank.ogg', 50, TRUE, -1) + return (BRUTELOSS) + +/obj/item/restraints/legcuffs/beartrap/attack_self(mob/user) + ..() + var/boon = user?.mind?.get_learning_boon(/datum/skill/craft/traps) + if(ishuman(user) && !user.stat && !user.restrained()) + var/mob/living/L = user + if(do_after(user, 50 - (L.STASTR*2), target = user)) + if(prob(50 + (L.mind.get_skill_level(/datum/skill/craft/traps) * 10))) // 100% chance to set traps properly at Master trapping + armed = TRUE // Impossible to use in hand if it's armed + L.dropItemToGround(src) // We drop it instantly on the floor beneath us + anchored = TRUE // And anchor it so that it can't be carried inside chests (prevents exploit) + update_icon() + src.alpha = 80 // Set lower visibility for everyone + L.mind?.adjust_experience(/datum/skill/craft/traps, L.STAINT * boon, FALSE) // We learn how to set them better, little by little. + to_chat(user, "I arm |the [src].") + else + if(rusty) + user.visible_message("The rusty [src.name] breaks under stress!") + playsound(src.loc, 'sound/foley/breaksound.ogg', 100, TRUE, -1) + qdel(src) + else + user.visible_message("Curses! I couldn't keep [src.name] open tight enough!") + playsound(src.loc, 'sound/items/beartrap.ogg', 300, TRUE, -1) + return + +/obj/item/restraints/legcuffs/beartrap/proc/close_trap() + armed = FALSE + anchored = FALSE // Take it off the ground + alpha = 255 + update_icon() + playsound(src.loc, 'sound/items/beartrap.ogg', 300, TRUE, -1) + +/obj/item/restraints/legcuffs/beartrap/Crossed(AM as mob|obj) + if(armed && isturf(loc)) + if(isliving(AM)) + var/mob/living/L = AM + var/snap = TRUE + if(istype(L.buckled, /obj/vehicle)) + var/obj/vehicle/ridden_vehicle = L.buckled + if(!ridden_vehicle.are_legs_exposed) //close the trap without injuring/trapping the rider if their legs are inside the vehicle at all times. + close_trap() + ridden_vehicle.visible_message("[ridden_vehicle] triggers \the [src].") + return ..() + if(L.throwing) + return ..() + + if(L.movement_type & (FLYING|FLOATING)) //don't close the trap if they're flying/floating over it. + return ..() + + var/def_zone = BODY_ZONE_CHEST + if(snap && iscarbon(L)) + var/mob/living/carbon/C = L + if(C.mobility_flags & MOBILITY_STAND) + def_zone = pick(BODY_ZONE_PRECISE_L_FOOT, BODY_ZONE_PRECISE_R_FOOT) + var/obj/item/bodypart/BP = C.get_bodypart(def_zone) + if(BP) + add_mob_blood(C) + if(!BP.is_object_embedded(src)) + BP.add_embedded_object(src) + C.emote("agony") + //BP.set_disabled(BODYPART_DISABLED_WOUND) + // BP.add_wound(/datum/wound/fracture) + else if(snap && isanimal(L)) + var/mob/living/simple_animal/SA = L + if(SA.mob_size <= MOB_SIZE_TINY) //don't close the trap if they're as small as a mouse. + snap = FALSE + if(snap) + close_trap() + L.visible_message("[L] triggers \the [src].", \ + "I trigger \the [src]!") + if(L.apply_damage(trap_damage, BRUTE, def_zone, L.run_armor_check(def_zone, "melee", damage = trap_damage))) + L.Stun(80) + L.consider_ambush() + ..() + +// When craftable beartraps get added, make these the ones crafted. +/obj/item/restraints/legcuffs/beartrap/crafted + rusty = FALSE + desc = "Curious is the trapmaker's art. Their efficacy unwitnessed by their own eyes." + smeltresult = /obj/item/ingot/iron diff --git a/code/game/objects/items/bedsheets.dm b/code/game/objects/items/bedsheets.dm new file mode 100644 index 0000000000..0c6569400d --- /dev/null +++ b/code/game/objects/items/bedsheets.dm @@ -0,0 +1,85 @@ +/* +CONTAINS: +BEDSHEETS +LINEN BINS +*/ + +/obj/item/bedsheet + name = "bedsheet" + desc = "" + icon = 'icons/obj/bedsheets.dmi' + lefthand_file = 'icons/mob/inhands/misc/bedsheet_lefthand.dmi' + righthand_file = 'icons/mob/inhands/misc/bedsheet_righthand.dmi' + icon_state = "sheetwhite" + item_state = "sheetwhite" + layer = MOB_LAYER + throwforce = 0 + throw_speed = 1 + throw_range = 2 + w_class = WEIGHT_CLASS_TINY + resistance_flags = FLAMMABLE + dying_key = DYE_REGISTRY_BEDSHEET + + dog_fashion = /datum/dog_fashion/head/ghost + var/list/dream_messages = list("white") + +/obj/item/bedsheet/attack_self(mob/user) + if(!user.CanReach(src)) //No telekenetic grabbing. + return + if(!user.dropItemToGround(src)) + return + if(layer == initial(layer)) + layer = ABOVE_MOB_LAYER + to_chat(user, "I cover myself with [src].") + pixel_x = 0 + pixel_y = 0 + else + layer = initial(layer) + to_chat(user, "I smooth [src] out beneath you.") + add_fingerprint(user) + return + +/obj/item/bedsheet/rogue/cloth + desc = "" + icon = 'icons/roguetown/misc/structure.dmi' + icon_state = "cloth_bedsheet" + item_state = "cloth_bedsheet" + pixel_y = 5 + +/obj/item/bedsheet/rogue/pelt + desc = "" + icon = 'icons/roguetown/misc/structure.dmi' + icon_state = "pelt_bedsheet" + item_state = "pelt_bedsheet" + pixel_y = 5 + +/obj/item/bedsheet/rogue/wool + desc = "" + icon = 'icons/roguetown/misc/structure.dmi' + icon_state = "wool_bedsheet" + item_state = "wool_bedsheet" + pixel_y = 5 + +/obj/item/bedsheet/rogue/double_pelt + desc = "" + icon = 'icons/roguetown/misc/structure.dmi' + icon_state = "double_pelt_bedsheet" + item_state = "double_pelt_bedsheet" + +/obj/item/bedsheet/rogue/fabric + desc = "" + icon = 'icons/roguetown/misc/structure.dmi' + icon_state = "fabric_bedsheet" + item_state = "fabric_bedsheet" + pixel_y = 5 + +/obj/item/bedsheet/rogue/fabric_double + desc = "" + icon = 'icons/roguetown/misc/structure.dmi' + icon_state = "double_fabric_bedsheet" + item_state = "double_fabric_bedsheet" + +/obj/item/bedsheet/random + icon_state = "random_bedsheet" + name = "random bedsheet" + desc = "" diff --git a/code/game/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm deleted file mode 100644 index 37c74ff5f3..0000000000 --- a/code/game/objects/items/bodybag.dm +++ /dev/null @@ -1,92 +0,0 @@ - -/obj/item/bodybag - name = "body bag" - desc = "" - icon = 'icons/obj/bodybag.dmi' - icon_state = "bodybag_folded" - w_class = WEIGHT_CLASS_SMALL - var/unfoldedbag_path = /obj/structure/closet/body_bag - -/obj/item/bodybag/attack_self(mob/user) - deploy_bodybag(user, user.loc) - -/obj/item/bodybag/afterattack(atom/target, mob/user, proximity) - . = ..() - if(proximity) - if(isopenturf(target)) - deploy_bodybag(user, target) - -/obj/item/bodybag/proc/deploy_bodybag(mob/user, atom/location) - var/obj/structure/closet/body_bag/R = new unfoldedbag_path(location) - R.open(user) - R.add_fingerprint(user) - R.foldedbag_instance = src - moveToNullspace() - -/obj/item/bodybag/suicide_act(mob/user) - if(isopenturf(user.loc)) - user.visible_message("[user] is crawling into [src]! It looks like [user.p_theyre()] trying to commit suicide!") - var/obj/structure/closet/body_bag/R = new unfoldedbag_path(user.loc) - R.add_fingerprint(user) - qdel(src) - user.forceMove(R) - playsound(src, 'sound/blank.ogg', 15, TRUE, -3) - return (OXYLOSS) - ..() - - -// Bluespace bodybag - -/obj/item/bodybag/bluespace - name = "bluespace body bag" - desc = "" - icon = 'icons/obj/bodybag.dmi' - icon_state = "bluebodybag_folded" - unfoldedbag_path = /obj/structure/closet/body_bag/bluespace - w_class = WEIGHT_CLASS_SMALL - item_flags = NO_MAT_REDEMPTION - -/obj/item/bodybag/bluespace/Initialize() - . = ..() - RegisterSignal(src, COMSIG_ATOM_CANREACH, PROC_REF(CanReachReact)) - -/obj/item/bodybag/bluespace/examine(mob/user) - . = ..() - if(contents.len) - var/s = contents.len == 1 ? "" : "s" - . += "I can make out the shape[s] of [contents.len] object[s] through the fabric." - -/obj/item/bodybag/bluespace/Destroy() - for(var/atom/movable/A in contents) - A.forceMove(get_turf(src)) - if(isliving(A)) - to_chat(A, "I suddenly feel the space around you torn apart! You're free!") - return ..() - -/obj/item/bodybag/bluespace/proc/CanReachReact(atom/movable/source, list/next) - return COMPONENT_BLOCK_REACH - -/obj/item/bodybag/bluespace/deploy_bodybag(mob/user, atom/location) - var/obj/structure/closet/body_bag/R = new unfoldedbag_path(location) - for(var/atom/movable/A in contents) - A.forceMove(R) - if(isliving(A)) - to_chat(A, "I suddenly feel air around you! You're free!") - R.open(user) - R.add_fingerprint(user) - R.foldedbag_instance = src - moveToNullspace() - -/obj/item/bodybag/bluespace/container_resist(mob/living/user) - if(user.incapacitated()) - to_chat(user, "I can't get out while you're restrained like this!") - return - user.changeNext_move(CLICK_CD_BREAKOUT) - user.last_special = world.time + CLICK_CD_BREAKOUT - to_chat(user, "I claw at the fabric of [src], trying to tear it open...") - to_chat(loc, "Someone starts trying to break free of [src]!") - if(!do_after(user, 200, target = src)) - to_chat(loc, "The pressure subsides. It seems that they've stopped resisting...") - return - loc.visible_message("[user] suddenly appears in front of [loc]!", "[user] breaks free of [src]!") - qdel(src) diff --git a/code/game/objects/items/boxes.dm b/code/game/objects/items/boxes.dm new file mode 100644 index 0000000000..803ff0e275 --- /dev/null +++ b/code/game/objects/items/boxes.dm @@ -0,0 +1,75 @@ +/obj/item/storage/box + name = "box" + desc = "" + icon_state = "box" + item_state = "syringe_kit" + lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' + resistance_flags = FLAMMABLE + drop_sound = 'sound/items/matchboxdrop.ogg' + pickup_sound = 'sound/blank.ogg' + var/foldable + var/illustration = "writing" + +/obj/item/storage/box/Initialize(mapload) + . = ..() + update_icon() + +/obj/item/storage/box/suicide_act(mob/living/carbon/user) + var/obj/item/bodypart/head/myhead = user.get_bodypart(BODY_ZONE_HEAD) + if(myhead) + user.visible_message("[user] puts [user.p_their()] head into \the [src], and begins closing it! It looks like [user.p_theyre()] trying to commit suicide!") + myhead.dismember() + myhead.forceMove(src)//force your enemies to kill themselves with your head collection box! + playsound(user, "desceration-01.ogg", 50, TRUE, -1) + return BRUTELOSS + user.visible_message("[user] beating [user.p_them()]self with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!") + return BRUTELOSS + +/obj/item/storage/box/update_icon() + . = ..() + if(illustration) + cut_overlays() + add_overlay(illustration) + +/obj/item/storage/box/attack_self(mob/user) + ..() + + if(!foldable) + return + if(contents.len) + to_chat(user, "I can't fold this box with items still inside!") + return + if(!ispath(foldable)) + return + + to_chat(user, "I fold [src] flat.") + var/obj/item/I = new foldable + qdel(src) + user.put_in_hands(I) + +/obj/item/storage/box/matches + name = "matchbox" + desc = "" + icon = 'icons/obj/cigarettes.dmi' + icon_state = "matchbox" + item_state = "zippo" + w_class = WEIGHT_CLASS_TINY + slot_flags = ITEM_SLOT_BELT + foldable = FALSE + +/obj/item/storage/box/matches/ComponentInitialize() + . = ..() + var/datum/component/storage/STR = GetComponent(/datum/component/storage) + STR.max_items = 10 + STR.set_holdable(list(/obj/item/match)) + +/obj/item/storage/box/matches/PopulateContents() + SEND_SIGNAL(src, COMSIG_TRY_STORAGE_FILL_TYPE, /obj/item/match) + +/obj/item/storage/box/matches/attackby(obj/item/match/W as obj, mob/user as mob, params) + if(istype(W, /obj/item/match)) + if(prob(30)) + W.matchignite() + else + playsound(src, "sound/items/match_fail.ogg", 100, FALSE) diff --git a/code/game/objects/items/cardboard_cutouts.dm b/code/game/objects/items/cardboard_cutouts.dm deleted file mode 100644 index 8e79a368e2..0000000000 --- a/code/game/objects/items/cardboard_cutouts.dm +++ /dev/null @@ -1,187 +0,0 @@ -//Cardboard cutouts! They're man-shaped and can be colored with a crayon to look like a human in a certain outfit, although it's limited, discolored, and obvious to more than a cursory glance. -/obj/item/cardboard_cutout - name = "cardboard cutout" - desc = "" - icon = 'icons/obj/cardboard_cutout.dmi' - icon_state = "cutout_basic" - w_class = WEIGHT_CLASS_BULKY - resistance_flags = FLAMMABLE - // Possible restyles for the cutout; - // add an entry in change_appearance() if you add to here - var/list/possible_appearances = list("Assistant", "Clown", "Mime", - "Traitor", "Nuke Op", "Cultist", "Clockwork Cultist", - "Revolutionary", "Wizard", "Shadowling", "Xenomorph", "Xenomorph Maid", "Swarmer", - "Ash Walker", "Deathsquad Officer", "Ian", "Slaughter Demon", - "Laughter Demon", "Private Security Officer") - var/pushed_over = FALSE //If the cutout is pushed over and has to be righted - var/deceptive = FALSE //If the cutout actually appears as what it portray and not a discolored version - - var/lastattacker = null - -//ATTACK HAND IGNORING PARENT RETURN VALUE -/obj/item/cardboard_cutout/attack_hand(mob/living/user) - if(user.used_intent.type == INTENT_HELP || pushed_over) - return ..() - user.visible_message("[user] pushes over [src]!", "I push over [src]!") - playsound(src, 'sound/blank.ogg', 50, TRUE) - push_over() - -/obj/item/cardboard_cutout/proc/push_over() - name = initial(name) - desc = "" - icon = initial(icon) - icon_state = "cutout_pushed_over" - remove_atom_colour(FIXED_COLOUR_PRIORITY) - alpha = initial(alpha) - pushed_over = TRUE - -/obj/item/cardboard_cutout/attack_self(mob/living/user) - if(!pushed_over) - return - to_chat(user, "I right [src].") - desc = initial(desc) - icon = initial(icon) - icon_state = initial(icon_state) //This resets a cutout to its blank state - this is intentional to allow for resetting - pushed_over = FALSE - -/obj/item/cardboard_cutout/attackby(obj/item/I, mob/living/user, params) - if(istype(I, /obj/item/toy/crayon)) - change_appearance(I, user) - return - // Why yes, this does closely resemble mob and object attack code. - if(I.item_flags & NOBLUDGEON) - return - if(!I.force) - playsound(loc, 'sound/blank.ogg', get_clamped_volume(), TRUE, -1) - else if(I.hitsound) - playsound(loc, pick(I.hitsound), get_clamped_volume(), TRUE, -1) - - user.changeNext_move(CLICK_CD_MELEE) - user.do_attack_animation(src) - - if(I.force) - user.visible_message("[user] hits [src] with [I]!", \ - "I hit [src] with [I]!") - if(prob(I.force)) - push_over() - -/obj/item/cardboard_cutout/bullet_act(obj/projectile/P) - if(istype(P, /obj/projectile/bullet/reusable)) - P.on_hit(src, 0) - visible_message("[src] is hit by [P]!") - playsound(src, 'sound/blank.ogg', 50, TRUE) - if(prob(P.damage)) - push_over() - return BULLET_ACT_HIT - -/obj/item/cardboard_cutout/proc/change_appearance(obj/item/toy/crayon/crayon, mob/living/user) - if(!crayon || !user) - return - if(pushed_over) - to_chat(user, "Right [src] first!") - return - if(crayon.check_empty(user)) - return - if(crayon.is_capped) - to_chat(user, "Take the cap off first!") - return - var/new_appearance = input(user, "Choose a new appearance for [src].", "26th Century Deception") as null|anything in sortList(possible_appearances) - if(!new_appearance || !crayon || !user.canUseTopic(src, BE_CLOSE)) - return - if(!do_after(user, 10, FALSE, src, TRUE)) - return - user.visible_message("[user] gives [src] a new look.", "Voila! You give [src] a new look.") - crayon.use_charges(1) - crayon.check_empty(user) - alpha = 255 - icon = initial(icon) - if(!deceptive) - add_atom_colour("#FFD7A7", FIXED_COLOUR_PRIORITY) - switch(new_appearance) - if("Assistant") - name = "[pick(GLOB.first_names_male)] [pick(GLOB.last_names)]" - desc = "" - icon_state = "cutout_greytide" - if("Clown") - name = pick(GLOB.clown_names) - desc = "" - icon_state = "cutout_clown" - if("Mime") - name = pick(GLOB.mime_names) - desc = "" - icon_state = "cutout_mime" - if("Traitor") - name = "[pick("Unknown", "Captain")]" - desc = "" - icon_state = "cutout_traitor" - if("Nuke Op") - name = "[pick("Unknown", "COMMS", "Telecomms", "AI", "stealthy op", "STEALTH", "sneakybeaky", "MEDIC", "Medic")]" - desc = "" - icon_state = "cutout_fluke" - if("Cultist") - name = "Unknown" - desc = "" - icon_state = "cutout_cultist" - if("Clockwork Cultist") - name = "[pick(GLOB.first_names_male)] [pick(GLOB.last_names)]" - desc = "" - icon_state = "cutout_servant" - if("Revolutionary") - name = "Unknown" - desc = "" - icon_state = "cutout_viva" - if("Wizard") - name = "[pick(GLOB.wizard_first)], [pick(GLOB.wizard_second)]" - desc = "" - icon_state = "cutout_wizard" - if("Shadowling") - name = "Unknown" - desc = "" - icon_state = "cutout_shadowling" - if("Xenomorph") - name = "alien hunter ([rand(1, 999)])" - desc = "" - icon_state = "cutout_fukken_xeno" - if(prob(25)) - alpha = 75 //Spooky sneaking! - if("Xenomorph Maid") - name = "lusty xenomorph maid ([rand(1, 999)])" - desc = "" - icon_state = "cutout_lusty" - if("Swarmer") - name = "Swarmer ([rand(1, 999)])" - desc = "" - icon_state = "cutout_swarmer" - if("Ash Walker") - name = lizard_name(pick(MALE, FEMALE)) - desc = "" - icon_state = "cutout_free_antag" - if("Deathsquad Officer") - name = pick(GLOB.commando_names) - desc = "" - icon_state = "cutout_deathsquad" - if("Ian") - name = "Ian" - desc = "" - icon_state = "cutout_ian" - if("Slaughter Demon") - name = "slaughter demon" - desc = "" - icon = 'icons/mob/mob.dmi' - icon_state = "daemon" - if("Laughter Demon") - name = "laughter demon" - desc = "" - icon = 'icons/mob/mob.dmi' - icon_state = "bowmon" - if("Private Security Officer") - name = "Private Security Officer" - desc = "" - icon_state = "cutout_ntsec" - return 1 - -/obj/item/cardboard_cutout/setDir(newdir) - dir = SOUTH - -/obj/item/cardboard_cutout/adaptive //Purchased by Syndicate agents, these cutouts are indistinguishable from normal cutouts but aren't discolored when their appearance is changed - deceptive = TRUE diff --git a/code/game/objects/items/charter.dm b/code/game/objects/items/charter.dm deleted file mode 100644 index 223ca3b26a..0000000000 --- a/code/game/objects/items/charter.dm +++ /dev/null @@ -1,119 +0,0 @@ -#define STATION_RENAME_TIME_LIMIT 3000 - -/obj/item/station_charter - name = "station charter" - icon = 'icons/obj/wizard.dmi' - icon_state = "scroll2" - desc = "An official document entrusting the governance of the station \ - and surrounding space to the Captain." - var/used = FALSE - var/name_type = "station" - - var/unlimited_uses = FALSE - var/ignores_timeout = FALSE - var/response_timer_id = null - var/approval_time = 600 - - var/static/regex/standard_station_regex - -/obj/item/station_charter/Initialize() - . = ..() - if(!standard_station_regex) - var/prefixes = jointext(GLOB.station_prefixes, "|") - var/names = jointext(GLOB.station_names, "|") - var/suffixes = jointext(GLOB.station_suffixes, "|") - var/numerals = jointext(GLOB.station_numerals, "|") - var/regexstr = "^(([prefixes]) )?(([names]) ?)([suffixes]) ([numerals])$" - standard_station_regex = new(regexstr) - -/obj/item/station_charter/attack_self(mob/living/user) - if(used) - to_chat(user, "The [name_type] has already been named!") - return - if(!ignores_timeout && (world.time-SSticker.round_start_time > STATION_RENAME_TIME_LIMIT)) //5 minutes - to_chat(user, "The crew has already settled into the shift. It probably wouldn't be good to rename the [name_type] right now.") - return - if(response_timer_id) - to_chat(user, "You're still waiting for approval from my employers about my proposed name change, it'd be best to wait for now.") - return - - var/new_name = stripped_input(user, message="What do you want to name \ - [station_name()]? Keep in mind particularly terrible names may be \ - rejected by my employers, while names using the standard format, \ - will automatically be accepted.", max_length=MAX_CHARTER_LEN) - - if(response_timer_id) - to_chat(user, "You're still waiting for approval from my employers about my proposed name change, it'd be best to wait for now.") - return - - if(!new_name) - return - log_game("[key_name(user)] has proposed to name the station as \ - [new_name]") - - if(standard_station_regex.Find(new_name)) - to_chat(user, "My name has been automatically approved.") - rename_station(new_name, user.name, user.real_name, key_name(user)) - return - - to_chat(user, "My name has been sent to my employers for approval.") - // Autoapproves after a certain time - response_timer_id = addtimer(CALLBACK(src, PROC_REF(rename_station), new_name, user.name, user.real_name, key_name(user)), approval_time, TIMER_STOPPABLE) - to_chat(GLOB.admins, "CUSTOM STATION RENAME:[ADMIN_LOOKUPFLW(user)] proposes to rename the [name_type] to [new_name] (will autoapprove in [DisplayTimeText(approval_time)]). [ADMIN_SMITE(user)] (REJECT) [ADMIN_CENTCOM_REPLY(user)]") - -/obj/item/station_charter/proc/reject_proposed(user) - if(!user) - return - if(!response_timer_id) - return - var/turf/T = get_turf(src) - T.visible_message("The proposed changes disappear \ - from [src]; it looks like they've been rejected.") - var/m = "[key_name(user)] has rejected the proposed station name." - - message_admins(m) - log_admin(m) - - deltimer(response_timer_id) - response_timer_id = null - -/obj/item/station_charter/proc/rename_station(designation, uname, ureal_name, ukey) - set_station_name(designation) - minor_announce("[ureal_name] has designated my station as [station_name()]", "Captain's Charter", 0) - log_game("[ukey] has renamed the station as [station_name()].") - - name = "station charter for [station_name()]" - desc = "An official document entrusting the governance of \ - [station_name()] and surrounding space to Captain [uname]." - SSblackbox.record_feedback("text", "station_renames", 1, "[station_name()]") - if(!unlimited_uses) - used = TRUE - -/obj/item/station_charter/admin - unlimited_uses = TRUE - ignores_timeout = TRUE - - -/obj/item/station_charter/flag - name = "nanotrasen banner" - icon = 'icons/obj/banner.dmi' - name_type = "planet" - icon_state = "banner" - item_state = "banner" - lefthand_file = 'icons/mob/inhands/equipment/banners_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/banners_righthand.dmi' - desc = "" - w_class = 5 - force = 15 - -/obj/item/station_charter/flag/rename_station(designation, uname, ureal_name, ukey) - set_station_name(designation) - minor_announce("[ureal_name] has designated the planet as [station_name()]", "Captain's Banner", 0) - log_game("[ukey] has renamed the planet as [station_name()].") - name = "banner of [station_name()]" - desc = "" - SSblackbox.record_feedback("text", "station_renames", 1, "[station_name()]") - if(!unlimited_uses) - used = TRUE - -#undef STATION_RENAME_TIME_LIMIT diff --git a/code/game/objects/items/clown_items.dm b/code/game/objects/items/clown_items.dm deleted file mode 100644 index ac8a39b01f..0000000000 --- a/code/game/objects/items/clown_items.dm +++ /dev/null @@ -1,216 +0,0 @@ -/* Clown Items - * Contains: - * Soap - * Bike Horns - * Air Horns - * Canned Laughter - */ - -/* - * Soap - */ - -/obj/item/soap - name = "soap" - desc = "" - gender = PLURAL - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "soap" - lefthand_file = 'icons/mob/inhands/equipment/custodial_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/custodial_righthand.dmi' - w_class = WEIGHT_CLASS_TINY - item_flags = NOBLUDGEON - throwforce = 0 - throw_speed = 1 - throw_range = 7 - grind_results = list(/datum/reagent/lye = 10) - var/cleanspeed = 35 //slower than mop - force_string = "robust... against germs" - var/uses = 100 - -/* -/obj/item/soap/ComponentInitialize() - . = ..() - AddComponent(/datum/component/slippery, 80) -*/ - -/obj/item/soap/cult - name = "accursed soap" - desc = "It is pulsating." - uses = 9 - cleanspeed = 1 - -/obj/item/soap/examine(mob/user) - . = ..() - var/max_uses = initial(uses) - var/msg = "It looks like it was just made." - if(uses != max_uses) - var/percentage_left = uses / max_uses - switch(percentage_left) - if(0 to 0.15) - msg = "There's just a tiny bit left of what it used to be, you're not sure it'll last much longer." - if(0.15 to 0.30) - msg = "It's dissolved quite a bit, but there's still some life to it." - if(0.30 to 0.50) - msg = "It's past its prime, but it's definitely still good." - if(0.50 to 0.75) - msg = "It's started to get a little smaller than it used to be, but it'll definitely still last for a while." - else - msg = "It's seen some light use, but it's still pretty fresh." - . += "[msg]" - -/obj/item/soap/nanotrasen - desc = "" - grind_results = list(/datum/reagent/toxin/plasma = 10, /datum/reagent/lye = 10) - icon_state = "soapnt" - cleanspeed = 28 //janitor gets this - uses = 300 - -/obj/item/soap/homemade - desc = "" - icon_state = "soapgibs" - cleanspeed = 30 // faster to reward chemists for going to the effort - -/obj/item/soap/deluxe - desc = "" - icon_state = "soapdeluxe" - cleanspeed = 20 //captain gets one of these - -/obj/item/soap/syndie - desc = "" - icon_state = "soapsyndie" - cleanspeed = 5 //faster than mop so it is useful for traitors who want to clean crime scenes - -/obj/item/soap/suicide_act(mob/user) - user.say(";FFFFFFFFFFFFFFFFUUUUUUUDGE!!", forced="soap suicide") - user.visible_message("[user] lifts [src] to [user.p_their()] mouth and gnaws on it furiously, producing a thick froth! [user.p_they(TRUE)]'ll never get that BB gun now!") - new /obj/effect/particle_effect/foam(loc) - return (TOXLOSS) - -/obj/item/soap/proc/decreaseUses(mob/user) - uses-- - if(uses <= 0) - to_chat(user, "[src] crumbles into tiny bits!") - qdel(src) - -/obj/item/soap/afterattack(atom/target, mob/user, proximity) - . = ..() - if(!proximity || !check_allowed_items(target)) - return - //I couldn't feasibly fix the overlay bugs caused by cleaning items we are wearing. - //So this is a workaround. This also makes more sense from an IC standpoint. ~Carn - if(user.client && ((target in user.client.screen) && !user.is_holding(target))) - to_chat(user, "I need to take that [target.name] off before cleaning it!") - else if(istype(target, /obj/effect/decal/cleanable)) - user.visible_message("[user] begins to scrub \the [target.name] out with [src].", "I begin to scrub \the [target.name] out with [src]...") - if(do_after(user, src.cleanspeed, target = target)) - to_chat(user, "I scrub \the [target.name] out.") - qdel(target) - decreaseUses(user) - - else if(ishuman(target) && user.zone_selected == BODY_ZONE_PRECISE_MOUTH) - var/mob/living/carbon/human/H = user - user.visible_message("\the [user] washes \the [target]'s mouth out with [src.name]!", "I wash \the [target]'s mouth out with [src.name]!") //washes mouth out with soap sounds better than 'the soap' here if(user.zone_selected == "mouth") - H.lip_style = null //removes lipstick - H.update_body() - decreaseUses(user) - return - else if(istype(target, /obj/structure/window)) - user.visible_message("[user] begins to clean \the [target.name] with [src]...", "I begin to clean \the [target.name] with [src]...") - if(do_after(user, src.cleanspeed, target = target)) - to_chat(user, "I clean \the [target.name].") - target.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) - target.set_opacity(initial(target.opacity)) - decreaseUses(user) - else - user.visible_message("[user] begins to clean \the [target.name] with [src]...", "I begin to clean \the [target.name] with [src]...") - if(do_after(user, src.cleanspeed, target = target)) - to_chat(user, "I clean \the [target.name].") - for(var/obj/effect/decal/cleanable/C in target) - qdel(C) - target.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) - SEND_SIGNAL(target, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_MEDIUM) - decreaseUses(user) - return - - -/* - * Bike Horns - */ - -/obj/item/bikehorn - name = "bike horn" - desc = "" - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "bike_horn" - item_state = "bike_horn" - lefthand_file = 'icons/mob/inhands/equipment/horns_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/horns_righthand.dmi' - throwforce = 0 - hitsound = null //To prevent tap.ogg playing, as the item lacks of force - w_class = WEIGHT_CLASS_TINY - slot_flags = ITEM_SLOT_BACK|ITEM_SLOT_BELT - throw_speed = 1 - throw_range = 7 - attack_verb = list("HONKED") - -/obj/item/bikehorn/Initialize() - . = ..() - AddComponent(/datum/component/squeak, list('sound/blank.ogg'=1), 50) - -/obj/item/bikehorn/attack(mob/living/carbon/M, mob/living/carbon/user) - if(user != M && ishuman(user)) - var/mob/living/carbon/human/H = user - if (HAS_TRAIT(H, TRAIT_CLUMSY)) //only clowns can unlock its true powers - SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "honk", /datum/mood_event/honk) - return ..() - -/obj/item/bikehorn/suicide_act(mob/user) - user.visible_message("[user] solemnly points [src] at [user.p_their()] temple! It looks like [user.p_theyre()] trying to commit suicide!") - playsound(src, 'sound/blank.ogg', 50, TRUE) - return (BRUTELOSS) - -//air horn -/obj/item/bikehorn/airhorn - name = "air horn" - desc = "" - icon_state = "air_horn" - -/obj/item/bikehorn/airhorn/Initialize() - . = ..() - AddComponent(/datum/component/squeak, list('sound/blank.ogg'=1), 50) - -//golden bikehorn -/obj/item/bikehorn/golden - name = "golden bike horn" - desc = "" - icon_state = "gold_horn" - item_state = "gold_horn" - var/flip_cooldown = 0 - -/obj/item/bikehorn/golden/attack() - if(flip_cooldown < world.time) - flip_mobs() - return ..() - -/obj/item/bikehorn/golden/attack_self(mob/user) - if(flip_cooldown < world.time) - flip_mobs() - ..() - -/obj/item/bikehorn/golden/proc/flip_mobs(mob/living/carbon/M, mob/user) - var/turf/T = get_turf(src) - for(M in ohearers(7, T)) - if(ishuman(M) && M.can_hear()) - var/mob/living/carbon/human/H = M - if(istype(H.ears, /obj/item/clothing/ears/earmuffs)) - continue - M.emote("flip") - flip_cooldown = world.time + 7 - -//canned laughter -/obj/item/reagent_containers/food/drinks/soda_cans/canned_laughter - name = "Canned Laughter" - desc = "" - icon_state = "laughter" - list_reagents = list(/datum/reagent/consumable/laughter = 50) diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm deleted file mode 100644 index 34e321f3df..0000000000 --- a/code/game/objects/items/crayons.dm +++ /dev/null @@ -1,758 +0,0 @@ -#define RANDOM_GRAFFITI "Random Graffiti" -#define RANDOM_LETTER "Random Letter" -#define RANDOM_PUNCTUATION "Random Punctuation" -#define RANDOM_NUMBER "Random Number" -#define RANDOM_SYMBOL "Random Symbol" -#define RANDOM_DRAWING "Random Drawing" -#define RANDOM_ORIENTED "Random Oriented" -#define RANDOM_RUNE "Random Rune" -#define RANDOM_ANY "Random Anything" - -#define PAINT_NORMAL 1 -#define PAINT_LARGE_HORIZONTAL 2 -#define PAINT_LARGE_HORIZONTAL_ICON 'icons/effects/96x32.dmi' - -/* - * Crayons - */ - -/obj/item/toy/crayon - name = "crayon" - desc = "" - icon = 'icons/obj/crayons.dmi' - icon_state = "crayonred" - - var/icon_capped - var/icon_uncapped - var/use_overlays = FALSE - - var/crayon_color = "red" - w_class = WEIGHT_CLASS_TINY - attack_verb = list("attacked", "coloured") - grind_results = list() - var/paint_color = "#FF0000" //RGB - - var/drawtype - var/text_buffer = "" - - var/static/list/graffiti = list("amyjon","face","matt","revolution","engie","guy","end","dwarf","uboa","body","cyka","star","poseur tag","prolizard","antilizard") - var/static/list/symbols = list("danger","firedanger","electricdanger","biohazard","radiation","safe","evac","space","med","trade","shop","food","peace","like","skull","nay","heart","credit") - var/static/list/drawings = list("smallbrush","brush","largebrush","splatter","snake","stickman","carp","ghost","clown","taser","disk","fireaxe","toolbox","corgi","cat","toilet","blueprint","beepsky","scroll","bottle","shotgun") - var/static/list/oriented = list("arrow","line","thinline","shortline","body","chevron","footprint","clawprint","pawprint") // These turn to face the same way as the drawer - var/static/list/runes = list("rune1","rune2","rune3","rune4","rune5","rune6") - var/static/list/randoms = list(RANDOM_ANY, RANDOM_RUNE, RANDOM_ORIENTED, - RANDOM_NUMBER, RANDOM_GRAFFITI, RANDOM_LETTER, RANDOM_SYMBOL, RANDOM_PUNCTUATION, RANDOM_DRAWING) - var/static/list/graffiti_large_h = list("yiffhell", "secborg", "paint") - - var/static/list/all_drawables = graffiti + symbols + drawings + oriented + runes + graffiti_large_h - - var/paint_mode = PAINT_NORMAL - - var/charges = 30 //-1 or less for unlimited uses - var/charges_left - var/volume_multiplier = 1 // Increases reagent effect - - var/actually_paints = TRUE - - var/instant = FALSE - var/self_contained = TRUE // If it deletes itself when it is empty - - var/edible = TRUE // That doesn't mean eating it is a good idea - - var/list/reagent_contents = list(/datum/reagent/consumable/nutriment = 0.5) - // If the user can toggle the colour, a la vanilla spraycan - var/can_change_colour = FALSE - - var/has_cap = FALSE - var/is_capped = FALSE - - var/pre_noise = FALSE - var/post_noise = FALSE - -/obj/item/toy/crayon/proc/isValidSurface(surface) - return istype(surface, /turf/open/floor) - -/obj/item/toy/crayon/suicide_act(mob/user) - user.visible_message("[user] is jamming [src] up [user.p_their()] nose and into [user.p_their()] brain. It looks like [user.p_theyre()] trying to commit suicide!") - return (BRUTELOSS|OXYLOSS) - -/obj/item/toy/crayon/Initialize() - . = ..() - // Makes crayons identifiable in things like grinders - if(name == "crayon") - name = "[crayon_color] crayon" - - dye_color = crayon_color - - drawtype = pick(all_drawables) - - refill() - -/obj/item/toy/crayon/proc/refill() - if(charges == -1) - charges_left = 100 - else - charges_left = charges - - if(!reagents) - create_reagents(charges_left * volume_multiplier) - reagents.clear_reagents() - - var/total_weight = 0 - for(var/key in reagent_contents) - total_weight += reagent_contents[key] - - var/units_per_weight = reagents.maximum_volume / total_weight - for(var/reagent in reagent_contents) - var/weight = reagent_contents[reagent] - var/amount = weight * units_per_weight - reagents.add_reagent(reagent, amount) - -/obj/item/toy/crayon/proc/use_charges(mob/user, amount = 1, requires_full = TRUE) - // Returns number of charges actually used - if(charges == -1) - . = amount - refill() - else - if(check_empty(user, amount, requires_full)) - return 0 - else - . = min(charges_left, amount) - charges_left -= . - -/obj/item/toy/crayon/proc/check_empty(mob/user, amount = 1, requires_full = TRUE) - // When eating a crayon, check_empty() can be called twice producing - // two messages unless we check for being deleted first - if(QDELETED(src)) - return TRUE - - . = FALSE - // -1 is unlimited charges - if(charges == -1) - . = FALSE - else if(!charges_left) - to_chat(user, "There is no more of [src] left!") - if(self_contained) - qdel(src) - . = TRUE - else if(charges_left < amount && requires_full) - to_chat(user, "There is not enough of [src] left!") - . = TRUE - -/obj/item/toy/crayon/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.hands_state) - // tgui is a plague upon this codebase - - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "crayon", name, 600, 600, - master_ui, state) - ui.open() - -/obj/item/toy/crayon/spraycan/AltClick(mob/user) - if(user.canUseTopic(src, BE_CLOSE, ismonkey(user))) - if(has_cap) - is_capped = !is_capped - to_chat(user, "The cap on [src] is now [is_capped ? "on" : "off"].") - update_icon() - -/obj/item/toy/crayon/proc/staticDrawables() - - . = list() - - var/list/g_items = list() - . += list(list("name" = "Graffiti", "items" = g_items)) - for(var/g in graffiti) - g_items += list(list("item" = g)) - - var/list/glh_items = list() - . += list(list("name" = "Graffiti Large Horizontal", "items" = glh_items)) - for(var/glh in graffiti_large_h) - glh_items += list(list("item" = glh)) - - var/list/S_items = list() - . += list(list("name" = "Symbols", "items" = S_items)) - for(var/S in symbols) - S_items += list(list("item" = S)) - - var/list/D_items = list() - . += list(list("name" = "Drawings", "items" = D_items)) - for(var/D in drawings) - D_items += list(list("item" = D)) - - var/list/O_items = list() - . += list(list(name = "Oriented", "items" = O_items)) - for(var/O in oriented) - O_items += list(list("item" = O)) - - var/list/R_items = list() - . += list(list(name = "Runes", "items" = R_items)) - for(var/R in runes) - R_items += list(list("item" = R)) - - var/list/rand_items = list() - . += list(list(name = "Random", "items" = rand_items)) - for(var/i in randoms) - rand_items += list(list("item" = i)) - - -/obj/item/toy/crayon/ui_data() - - var/static/list/crayon_drawables - - if (!crayon_drawables) - crayon_drawables = staticDrawables() - - . = list() - .["drawables"] = crayon_drawables - .["selected_stencil"] = drawtype - .["text_buffer"] = text_buffer - - .["has_cap"] = has_cap - .["is_capped"] = is_capped - .["can_change_colour"] = can_change_colour - .["current_colour"] = paint_color - -/obj/item/toy/crayon/ui_act(action, list/params) - if(..()) - return - switch(action) - if("toggle_cap") - if(has_cap) - is_capped = !is_capped - . = TRUE - if("select_stencil") - var/stencil = params["item"] - if(stencil in (all_drawables + randoms)) - drawtype = stencil - . = TRUE - text_buffer = "" - if(stencil in graffiti_large_h) - paint_mode = PAINT_LARGE_HORIZONTAL - text_buffer = "" - else - paint_mode = PAINT_NORMAL - if("select_colour") - if(can_change_colour) - var/chosen_colour = input(usr,"","Choose Color",paint_color) as color|null - - if (!isnull(chosen_colour)) - paint_color = chosen_colour - . = TRUE - else - . = FALSE - if("enter_text") - var/txt = stripped_input(usr,"Choose what to write.", - "Scribbles",default = text_buffer) - text_buffer = crayon_text_strip(txt) - . = TRUE - paint_mode = PAINT_NORMAL - drawtype = "a" - update_icon() - -/obj/item/toy/crayon/proc/crayon_text_strip(text) - var/static/regex/crayon_r = new /regex(@"[^\w!?,.=%#&+\/\-]") - return replacetext(lowertext(text), crayon_r, "") - -/obj/item/toy/crayon/afterattack(atom/target, mob/user, proximity, params) - . = ..() - if(!proximity || !check_allowed_items(target)) - return - - var/static/list/punctuation = list("!","?",".",",","/","+","-","=","%","#","&") - var/istagger = HAS_TRAIT(user, TRAIT_TAGGER) - - var/cost = 1 - if(paint_mode == PAINT_LARGE_HORIZONTAL) - cost = 5 - if(istype(target, /obj/item/canvas)) - cost = 0 - if(ishuman(user)) - if (istagger) - cost *= 0.5 - var/charges_used = use_charges(user, cost) - if(!charges_used) - return - . = charges_used - - if(istype(target, /obj/effect/decal/cleanable)) - target = target.loc - - if(!isValidSurface(target)) - return - - var/drawing = drawtype - switch(drawtype) - if(RANDOM_LETTER) - drawing = ascii2text(rand(97, 122)) // a-z - if(RANDOM_PUNCTUATION) - drawing = pick(punctuation) - if(RANDOM_SYMBOL) - drawing = pick(symbols) - if(RANDOM_DRAWING) - drawing = pick(drawings) - if(RANDOM_GRAFFITI) - drawing = pick(graffiti) - if(RANDOM_RUNE) - drawing = pick(runes) - if(RANDOM_ORIENTED) - drawing = pick(oriented) - if(RANDOM_NUMBER) - drawing = ascii2text(rand(48, 57)) // 0-9 - if(RANDOM_ANY) - drawing = pick(all_drawables) - - - var/temp = "rune" - var/ascii = (length(drawing) == 1) - if(ascii && is_alpha(drawing)) - temp = "letter" - else if(ascii && is_digit(drawing)) - temp = "number" - else if(drawing in punctuation) - temp = "punctuation mark" - else if(drawing in symbols) - temp = "symbol" - else if(drawing in drawings) - temp = "drawing" - else if((drawing in graffiti) || (drawing in oriented)) - temp = "graffiti" - - - var/graf_rot - if(drawing in oriented) - switch(user.dir) - if(EAST) - graf_rot = 90 - if(SOUTH) - graf_rot = 180 - if(WEST) - graf_rot = 270 - else - graf_rot = 0 - - var/list/click_params = params2list(params) - var/clickx - var/clicky - - if(click_params && click_params["icon-x"] && click_params["icon-y"]) - clickx = CLAMP(text2num(click_params["icon-x"]) - 16, -(world.icon_size/2), world.icon_size/2) - clicky = CLAMP(text2num(click_params["icon-y"]) - 16, -(world.icon_size/2), world.icon_size/2) - - if(!instant) - to_chat(user, "I start drawing a [temp] on the [target.name]...") - - if(pre_noise) - audible_message("I hear spraying.") - playsound(user.loc, 'sound/blank.ogg', 5, TRUE, 5) - - var/wait_time = 50 - if(paint_mode == PAINT_LARGE_HORIZONTAL) - wait_time *= 3 - - if(!instant) - if(!do_after(user, 50, target = target)) - return - - if(length(text_buffer)) - drawing = text_buffer[1] - - - var/list/turf/affected_turfs = list() - - if(actually_paints) - var/obj/effect/decal/cleanable/crayon/C - switch(paint_mode) - if(PAINT_NORMAL) - C = new(target, paint_color, drawing, temp, graf_rot) - C.pixel_x = clickx - C.pixel_y = clicky - affected_turfs += target - if(PAINT_LARGE_HORIZONTAL) - var/turf/left = locate(target.x-1,target.y,target.z) - var/turf/right = locate(target.x+1,target.y,target.z) - if(isValidSurface(left) && isValidSurface(right)) - C = new(left, paint_color, drawing, temp, graf_rot, PAINT_LARGE_HORIZONTAL_ICON) - affected_turfs += left - affected_turfs += right - affected_turfs += target - else - to_chat(user, "There isn't enough space to paint!") - return - C.add_hiddenprint(user) - if(istagger) - C.AddComponent(/datum/component/art, GOOD_ART) - else - C.AddComponent(/datum/component/art, BAD_ART) - - if(!instant) - to_chat(user, "I finish drawing \the [temp].") - else - to_chat(user, "I spray a [temp] on \the [target.name]") - - if(length(text_buffer) > 1) - text_buffer = copytext(text_buffer,2) - SStgui.update_uis(src) - - if(post_noise) - audible_message("I hear spraying.") - playsound(user.loc, 'sound/blank.ogg', 5, TRUE, 5) - - var/fraction = min(1, . / reagents.maximum_volume) - if(affected_turfs.len) - fraction /= affected_turfs.len - for(var/t in affected_turfs) - reagents.reaction(t, TOUCH, fraction * volume_multiplier) - reagents.trans_to(t, ., volume_multiplier, transfered_by = user) - check_empty(user) - -/obj/item/toy/crayon/attack(mob/M, mob/user) - if(edible && (M == user)) - if(iscarbon(M)) - var/mob/living/carbon/C = M - var/covered = "" - if(C.is_mouth_covered(head_only = 1)) - covered = "headgear" - else if(C.is_mouth_covered(mask_only = 1)) - covered = "mask" - if(covered) - to_chat(C, "I have to remove your [covered] first!") - return - to_chat(user, "I take a bite of the [src.name]. Delicious!") - var/eaten = use_charges(user, 5, FALSE) - if(check_empty(user)) //Prevents divsion by zero - return - var/fraction = min(eaten / reagents.total_volume, 1) - reagents.reaction(M, INGEST, fraction * volume_multiplier) - reagents.trans_to(M, eaten, volume_multiplier, transfered_by = user) - // check_empty() is called during afterattack - else - ..() - -/obj/item/toy/crayon/red - icon_state = "crayonred" - paint_color = "#DA0000" - crayon_color = "red" - reagent_contents = list(/datum/reagent/consumable/nutriment = 0.5, /datum/reagent/colorful_reagent/powder/red/crayon = 1.5) - dye_color = DYE_RED - -/obj/item/toy/crayon/orange - icon_state = "crayonorange" - paint_color = "#FF9300" - crayon_color = "orange" - reagent_contents = list(/datum/reagent/consumable/nutriment = 0.5, /datum/reagent/colorful_reagent/powder/orange/crayon = 1.5) - dye_color = DYE_ORANGE - -/obj/item/toy/crayon/yellow - icon_state = "crayonyellow" - paint_color = "#FFF200" - crayon_color = "yellow" - reagent_contents = list(/datum/reagent/consumable/nutriment = 0.5, /datum/reagent/colorful_reagent/powder/yellow/crayon = 1.5) - dye_color = DYE_YELLOW - -/obj/item/toy/crayon/green - icon_state = "crayongreen" - paint_color = "#A8E61D" - crayon_color = "green" - reagent_contents = list(/datum/reagent/consumable/nutriment = 0.5, /datum/reagent/colorful_reagent/powder/green/crayon = 1.5) - dye_color = DYE_GREEN - -/obj/item/toy/crayon/blue - icon_state = "crayonblue" - paint_color = "#00B7EF" - crayon_color = "blue" - reagent_contents = list(/datum/reagent/consumable/nutriment = 0.5, /datum/reagent/colorful_reagent/powder/blue/crayon = 1.5) - dye_color = DYE_BLUE - -/obj/item/toy/crayon/purple - icon_state = "crayonpurple" - paint_color = "#DA00FF" - crayon_color = "purple" - reagent_contents = list(/datum/reagent/consumable/nutriment = 0.5, /datum/reagent/colorful_reagent/powder/purple/crayon = 1.5) - dye_color = DYE_PURPLE - -/obj/item/toy/crayon/black - icon_state = "crayonblack" - paint_color = "#1C1C1C" //Not completely black because total black looks bad. So Mostly Black. - crayon_color = "black" - reagent_contents = list(/datum/reagent/consumable/nutriment = 0.5, /datum/reagent/colorful_reagent/powder/black/crayon = 1.5) - dye_color = DYE_BLACK - -/obj/item/toy/crayon/white - icon_state = "crayonwhite" - paint_color = "#FFFFFF" - crayon_color = "white" - reagent_contents = list(/datum/reagent/consumable/nutriment = 0.5, /datum/reagent/colorful_reagent/powder/white/crayon = 1.5) - dye_color = DYE_WHITE - -/obj/item/toy/crayon/mime - icon_state = "crayonmime" - desc = "" - paint_color = "#FFFFFF" - crayon_color = "mime" - reagent_contents = list(/datum/reagent/consumable/nutriment = 0.5, /datum/reagent/colorful_reagent/powder/invisible = 1.5) - charges = -1 - dye_color = DYE_MIME - -/obj/item/toy/crayon/rainbow - icon_state = "crayonrainbow" - paint_color = "#FFF000" - crayon_color = "rainbow" - reagent_contents = list(/datum/reagent/consumable/nutriment = 0.5, /datum/reagent/colorful_reagent = 1.5) - drawtype = RANDOM_ANY // just the default starter. - charges = -1 - dye_color = DYE_RAINBOW - -/obj/item/toy/crayon/rainbow/afterattack(atom/target, mob/user, proximity, params) - paint_color = rgb(rand(0,255), rand(0,255), rand(0,255)) - . = ..() - -/* - * Crayon Box - */ - -/obj/item/storage/crayons - name = "box of crayons" - desc = "" - icon = 'icons/obj/crayons.dmi' - icon_state = "crayonbox" - w_class = WEIGHT_CLASS_SMALL - -/obj/item/storage/crayons/Initialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_items = 7 - STR.set_holdable(list(/obj/item/toy/crayon)) - -/obj/item/storage/crayons/PopulateContents() - new /obj/item/toy/crayon/red(src) - new /obj/item/toy/crayon/orange(src) - new /obj/item/toy/crayon/yellow(src) - new /obj/item/toy/crayon/green(src) - new /obj/item/toy/crayon/blue(src) - new /obj/item/toy/crayon/purple(src) - new /obj/item/toy/crayon/black(src) - update_icon() - -/obj/item/storage/crayons/update_icon() - cut_overlays() - for(var/obj/item/toy/crayon/crayon in contents) - add_overlay(mutable_appearance('icons/obj/crayons.dmi', crayon.crayon_color)) - -/obj/item/storage/crayons/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/toy/crayon)) - var/obj/item/toy/crayon/C = W - switch(C.crayon_color) - if("mime") - to_chat(usr, "This crayon is too sad to be contained in this box!") - return - if("rainbow") - to_chat(usr, "This crayon is too powerful to be contained in this box!") - return - if(istype(W, /obj/item/toy/crayon/spraycan)) - to_chat(user, "Spraycans are not crayons!") - return - return ..() - -//Spraycan stuff - -/obj/item/toy/crayon/spraycan - name = "spray can" - icon_state = "spraycan" - - icon_capped = "spraycan_cap" - icon_uncapped = "spraycan" - use_overlays = TRUE - paint_color = null - - item_state = "spraycan" - lefthand_file = 'icons/mob/inhands/equipment/hydroponics_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/hydroponics_righthand.dmi' - desc = "" - - instant = TRUE - edible = FALSE - has_cap = TRUE - is_capped = TRUE - self_contained = FALSE // Don't disappear when they're empty - can_change_colour = TRUE - - reagent_contents = list(/datum/reagent/fuel = 1, /datum/reagent/consumable/ethanol = 1) - - pre_noise = TRUE - post_noise = FALSE - -/obj/item/toy/crayon/spraycan/isValidSurface(surface) - return (istype(surface, /turf/open/floor) || istype(surface, /turf/closed/wall)) - - -/obj/item/toy/crayon/spraycan/suicide_act(mob/user) - var/mob/living/carbon/human/H = user - if(is_capped || !actually_paints) - user.visible_message("[user] shakes up [src] with a rattle and lifts it to [user.p_their()] mouth, but nothing happens!") - user.say("MEDIOCRE!!", forced="spraycan suicide") - return SHAME - else - user.visible_message("[user] shakes up [src] with a rattle and lifts it to [user.p_their()] mouth, spraying paint across [user.p_their()] teeth!") - user.say("WITNESS ME!!", forced="spraycan suicide") - if(pre_noise || post_noise) - playsound(src, 'sound/blank.ogg', 5, TRUE, 5) - if(can_change_colour) - paint_color = "#C0C0C0" - update_icon() - if(actually_paints) - H.lip_style = "spray_face" - H.lip_color = paint_color - H.update_body() - var/used = use_charges(user, 10, FALSE) - var/fraction = min(1, used / reagents.maximum_volume) - reagents.reaction(user, VAPOR, fraction * volume_multiplier) - reagents.trans_to(user, used, volume_multiplier, transfered_by = user) - - return (OXYLOSS) - -/obj/item/toy/crayon/spraycan/Initialize() - . = ..() - // If default crayon red colour, pick a more fun spraycan colour - if(!paint_color) - paint_color = pick("#DA0000","#FF9300","#FFF200","#A8E61D","#00B7EF", - "#DA00FF") - refill() - update_icon() - - -/obj/item/toy/crayon/spraycan/examine(mob/user) - . = ..() - if(charges_left) - . += "It has [charges_left] use\s left." - else - . += "It is empty." - . += "Alt-click [src] to [ is_capped ? "take the cap off" : "put the cap on"]." - -/obj/item/toy/crayon/spraycan/afterattack(atom/target, mob/user, proximity, params) - if(!proximity) - return - - if(is_capped) - to_chat(user, "Take the cap off first!") - return - - if(check_empty(user)) - return - - if(iscarbon(target)) - if(pre_noise || post_noise) - playsound(user.loc, 'sound/blank.ogg', 25, TRUE, 5) - - var/mob/living/carbon/C = target - user.visible_message("[user] sprays [src] into the face of [target]!") - to_chat(target, "[user] sprays [src] into your face!") - - if(C.client) - C.blur_eyes(3) - C.blind_eyes(1) - if(C.get_eye_protection() <= 0) // no eye protection? ARGH IT BURNS. Warning: don't add a stun here. It's a roundstart item with some quirks. - C.apply_effects(eyeblur = 5, jitter = 10) - flash_color(C, flash_color=paint_color, flash_time=40) - if(ishuman(C) && actually_paints) - var/mob/living/carbon/human/H = C - H.lip_style = "spray_face" - H.lip_color = paint_color - H.update_body() - - . = use_charges(user, 10, FALSE) - var/fraction = min(1, . / reagents.maximum_volume) - reagents.reaction(C, VAPOR, fraction * volume_multiplier) - - return - - if(isobj(target)) - if(actually_paints) - if(color_hex2num(paint_color) < 350 && !istype(target, /obj/structure/window) && !istype(target, /obj/effect/decal/cleanable/crayon)) //Colors too dark are rejected - to_chat(usr, "A color that dark on an object like this? Surely not...") - return FALSE - - target.add_atom_colour(paint_color, WASHABLE_COLOUR_PRIORITY) - - if(istype(target, /obj/structure/window)) - if(color_hex2num(paint_color) < 255) - target.set_opacity(255) - else - target.set_opacity(initial(target.opacity)) - - . = use_charges(user, 2) - var/fraction = min(1, . / reagents.maximum_volume) - reagents.reaction(target, TOUCH, fraction * volume_multiplier) - reagents.trans_to(target, ., volume_multiplier, transfered_by = user) - - if(pre_noise || post_noise) - playsound(user.loc, 'sound/blank.ogg', 5, TRUE, 5) - user.visible_message("[user] coats [target] with spray paint!", "I coat [target] with spray paint.") - return - - . = ..() - -/obj/item/toy/crayon/spraycan/update_icon() - icon_state = is_capped ? icon_capped : icon_uncapped - if(use_overlays) - cut_overlays() - var/mutable_appearance/spray_overlay = mutable_appearance('icons/obj/crayons.dmi', "[is_capped ? "spraycan_cap_colors" : "spraycan_colors"]") - spray_overlay.color = paint_color - add_overlay(spray_overlay) - -/obj/item/toy/crayon/spraycan/hellcan - name = "hellcan" - desc = "" - icon_state = "deathcan2_cap" - icon_capped = "deathcan2_cap" - icon_uncapped = "deathcan2" - use_overlays = FALSE - - volume_multiplier = 25 - charges = 100 - reagent_contents = list(/datum/reagent/clf3 = 1) - actually_paints = FALSE - paint_color = "#000000" - -/obj/item/toy/crayon/spraycan/lubecan - name = "slippery spraycan" - desc = "" - icon_state = "clowncan2_cap" - icon_capped = "clowncan2_cap" - icon_uncapped = "clowncan2" - use_overlays = FALSE - - reagent_contents = list(/datum/reagent/lube = 1, /datum/reagent/consumable/banana = 1) - volume_multiplier = 5 - -/obj/item/toy/crayon/spraycan/lubecan/isValidSurface(surface) - return istype(surface, /turf/open/floor) - -/obj/item/toy/crayon/spraycan/mimecan - name = "silent spraycan" - desc = "" - icon_state = "mimecan_cap" - icon_capped = "mimecan_cap" - icon_uncapped = "mimecan" - use_overlays = FALSE - - can_change_colour = FALSE - paint_color = "#FFFFFF" //RGB - - pre_noise = FALSE - post_noise = FALSE - reagent_contents = list(/datum/reagent/consumable/nothing = 1, /datum/reagent/toxin/mutetoxin = 1) - -/obj/item/toy/crayon/spraycan/infinite - name = "infinite spraycan" - charges = -1 - desc = "" - -#undef RANDOM_GRAFFITI -#undef RANDOM_LETTER -#undef RANDOM_PUNCTUATION -#undef RANDOM_SYMBOL -#undef RANDOM_DRAWING -#undef RANDOM_NUMBER -#undef RANDOM_ORIENTED -#undef RANDOM_RUNE -#undef RANDOM_ANY diff --git a/code/game/objects/items/dehy_carp.dm b/code/game/objects/items/dehy_carp.dm deleted file mode 100644 index c38251f448..0000000000 --- a/code/game/objects/items/dehy_carp.dm +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Dehydrated Carp - * Instant carp, just add water - */ - -//Child of carpplushie because this should do everything the toy does and more -/obj/item/toy/plush/carpplushie/dehy_carp - var/mob/owner = null //Carp doesn't attack owner, set when using in hand - var/owned = 0 //Boolean, no owner to begin with - var/mobtype = /mob/living/simple_animal/hostile/carp //So admins can change what mob spawns via var fuckery - -//Attack self -/obj/item/toy/plush/carpplushie/dehy_carp/attack_self(mob/user) - src.add_fingerprint(user) //Anyone can add their fingerprints to it with this - if(!owned) - to_chat(user, "I pet [src]. You swear it looks up at you.") - owner = user - owned = 1 - else - return ..() - -/obj/item/toy/plush/carpplushie/dehy_carp/plop(obj/item/toy/plush/Daddy) - return FALSE - -/obj/item/toy/plush/carpplushie/dehy_carp/proc/Swell() - desc = "" - visible_message("[src] swells up!") - - //Animation - icon = 'icons/mob/carp.dmi' - flick("carp_swell", src) - //Wait for animation to end - sleep(6) - if(!src || QDELETED(src))//we got toasted while animating - return - //Make space carp - var/mob/living/M = new mobtype(get_turf(src)) - //Make carp non-hostile to user, and their allies - if(owner) - var/list/factions = owner.faction.Copy() - for(var/F in factions) - if(F == "neutral") - factions -= F - M.faction = factions - if (!owner || owner.faction != M.faction) - visible_message("I have a bad feeling about this.") //welcome to the hostile carp enjoy your die - else - visible_message("The newly grown [M.name] looks up at you with friendly eyes.") - qdel(src) - -/obj/item/toy/plush/carpplushie/dehy_carp/suicide_act(mob/user) - var/mob/living/carbon/human/H = user - user.visible_message("[user] starts eating [src]. It looks like [user.p_theyre()] trying to commit suicide!") - playsound(src, 'sound/blank.ogg', 50, TRUE) - if(istype(H)) - H.Paralyze(30) - forceMove(H) //we move it AWAAAYY - sleep(20) - - if(QDELETED(src)) - return SHAME - if(!QDELETED(H)) - H.spawn_gibs() - H.apply_damage(200, def_zone = BODY_ZONE_CHEST) - forceMove(get_turf(H)) //we move it back - icon = 'icons/mob/carp.dmi' - flick("carp_swell", src) - sleep(6) //let the animation play out - - if(!QDELETED(src)) - var/mob/living/M = new mobtype(get_turf(src)) - M.faction = list("neutral") - qdel(src) - return BRUTELOSS diff --git a/code/game/objects/items/devices/beacon.dm b/code/game/objects/items/devices/beacon.dm deleted file mode 100644 index f4c2a1c696..0000000000 --- a/code/game/objects/items/devices/beacon.dm +++ /dev/null @@ -1,44 +0,0 @@ -/obj/item/beacon - name = "\improper tracking beacon" - desc = "" - icon = 'icons/obj/device.dmi' - icon_state = "beacon" - item_state = "beacon" - lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - var/enabled = TRUE - var/renamed = FALSE - -/obj/item/beacon/Initialize() - . = ..() - if (enabled) - GLOB.teleportbeacons += src - else - icon_state = "beacon-off" - -/obj/item/beacon/Destroy() - GLOB.teleportbeacons.Remove(src) - return ..() - -/obj/item/beacon/attack_self(mob/user) - enabled = !enabled - if (enabled) - icon_state = "beacon" - GLOB.teleportbeacons += src - else - icon_state = "beacon-off" - GLOB.teleportbeacons.Remove(src) - to_chat(user, "I [enabled ? "enable" : "disable"] the beacon.") - return - -/obj/item/beacon/attackby(obj/item/W, mob/user) - if(istype(W, /obj/item/pen)) // needed for things that use custom names like the locator - var/new_name = stripped_input(user, "What would you like the name to be?") - if(!user.canUseTopic(src, BE_CLOSE)) - return - if(new_name) - name = new_name - renamed = TRUE - return - else - return ..() diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm deleted file mode 100644 index 0eaab89b80..0000000000 --- a/code/game/objects/items/devices/chameleonproj.dm +++ /dev/null @@ -1,174 +0,0 @@ -/obj/item/chameleon - name = "chameleon projector" - icon = 'icons/obj/device.dmi' - icon_state = "shield0" - flags_1 = CONDUCT_1 - item_flags = NOBLUDGEON - slot_flags = ITEM_SLOT_BELT - item_state = "electronic" - lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - throwforce = 5 - throw_speed = 1 - throw_range = 5 - w_class = WEIGHT_CLASS_SMALL - var/can_use = 1 - var/obj/effect/dummy/chameleon/active_dummy = null - var/saved_appearance = null - -/obj/item/chameleon/Initialize() - . = ..() - var/obj/item/cigbutt/butt = /obj/item/cigbutt - saved_appearance = initial(butt.appearance) - -/obj/item/chameleon/dropped() - ..() - disrupt() - -/obj/item/chameleon/equipped() - ..() - disrupt() - -/obj/item/chameleon/attack_self(mob/user) - if (isturf(user.loc) || istype(user.loc, /obj/structure) || active_dummy) - toggle(user) - else - to_chat(user, "I can't use [src] while inside something!") - -/obj/item/chameleon/afterattack(atom/target, mob/user , proximity) - . = ..() - if(!proximity) - return - if(!check_sprite(target)) - return - if(active_dummy)//I now present you the blackli(f)st - return - if(isturf(target)) - return - if(ismob(target)) - return - if(istype(target, /obj/structure/falsewall)) - return - if(target.alpha != 255) - return - if(target.invisibility != 0) - return - if(iseffect(target)) - if(!(istype(target, /obj/effect/decal))) //be a footprint - return - playsound(get_turf(src), 'sound/blank.ogg', 100, TRUE, -6) - to_chat(user, "Scanned [target].") - var/obj/temp = new/obj() - temp.appearance = target.appearance - temp.layer = initial(target.layer) // scanning things in my inventory - temp.plane = initial(target.plane) - saved_appearance = temp.appearance - -/obj/item/chameleon/proc/check_sprite(atom/target) - if(target.icon_state in icon_states(target.icon)) - return TRUE - return FALSE - -/obj/item/chameleon/proc/toggle(mob/user) - if(!can_use || !saved_appearance) - return - if(active_dummy) - eject_all() - playsound(get_turf(src), 'sound/blank.ogg', 100, TRUE, -6) - qdel(active_dummy) - active_dummy = null - to_chat(user, "I deactivate \the [src].") - new /obj/effect/temp_visual/emp/pulse(get_turf(src)) - else - playsound(get_turf(src), 'sound/blank.ogg', 100, TRUE, -6) - var/obj/effect/dummy/chameleon/C = new/obj/effect/dummy/chameleon(user.drop_location()) - C.activate(user, saved_appearance, src) - to_chat(user, "I activate \the [src].") - new /obj/effect/temp_visual/emp/pulse(get_turf(src)) - user.cancel_camera() - -/obj/item/chameleon/proc/disrupt(delete_dummy = 1) - if(active_dummy) - for(var/mob/M in active_dummy) - to_chat(M, "My chameleon projector deactivates.") - var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread - spark_system.set_up(5, 0, src) - spark_system.attach(src) - spark_system.start() - eject_all() - if(delete_dummy) - qdel(active_dummy) - active_dummy = null - can_use = FALSE - addtimer(VARSET_CALLBACK(src, can_use, TRUE), 5 SECONDS) - -/obj/item/chameleon/proc/eject_all() - for(var/atom/movable/A in active_dummy) - A.forceMove(active_dummy.loc) - if(ismob(A)) - var/mob/M = A - M.reset_perspective(null) - -/obj/effect/dummy/chameleon - name = "" - desc = "" - density = FALSE - var/can_move = 0 - var/obj/item/chameleon/master = null - -/obj/effect/dummy/chameleon/proc/activate(mob/M, saved_appearance, obj/item/chameleon/C) - appearance = saved_appearance - if(istype(M.buckled, /obj/vehicle)) - var/obj/vehicle/V = M.buckled - var/datum/component/riding/VRD = V.GetComponent(/datum/component/riding) - if(VRD) - VRD.force_dismount(M) - else - V.unbuckle_mob(M, force = TRUE) - M.forceMove(src) - master = C - master.active_dummy = src - -/obj/effect/dummy/chameleon/attackby() - master.disrupt() - -//ATTACK HAND IGNORING PARENT RETURN VALUE -/obj/effect/dummy/chameleon/attack_hand() - master.disrupt() - -/obj/effect/dummy/chameleon/attack_animal() - master.disrupt() - -/obj/effect/dummy/chameleon/ex_act(S, T) - contents_explosion(S, T) - master.disrupt() - -/obj/effect/dummy/chameleon/bullet_act() - . = ..() - master.disrupt() - -/obj/effect/dummy/chameleon/relaymove(mob/user, direction) - if(isspaceturf(loc) || !direction) - return //No magical space movement! - - if(can_move < world.time) - var/amount - switch(user.bodytemperature) - if(300 to INFINITY) - amount = 10 - if(295 to 300) - amount = 13 - if(280 to 295) - amount = 16 - if(260 to 280) - amount = 20 - else - amount = 25 - - can_move = world.time + amount - step(src, direction) - return - -/obj/effect/dummy/chameleon/Destroy() - master?.disrupt(0) - return ..() diff --git a/code/game/objects/items/devices/desynchronizer.dm b/code/game/objects/items/devices/desynchronizer.dm deleted file mode 100644 index 94e5d96365..0000000000 --- a/code/game/objects/items/devices/desynchronizer.dm +++ /dev/null @@ -1,88 +0,0 @@ -/obj/item/desynchronizer - name = "desynchronizer" - desc = "" - icon = 'icons/obj/device.dmi' - icon_state = "desynchronizer" - item_state = "electronic" - w_class = WEIGHT_CLASS_SMALL - item_flags = NOBLUDGEON - lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - custom_materials = list(/datum/material/iron=250, /datum/material/glass=500) - var/max_duration = 3000 - var/duration = 300 - var/last_use = 0 - var/next_use = 0 - var/obj/effect/abstract/sync_holder/sync_holder - -/obj/item/desynchronizer/attack_self(mob/living/user) - if(world.time < next_use) - to_chat(user, "[src] is still recharging.") - return - if(!sync_holder) - desync(user) - else - resync() - -/obj/item/desynchronizer/examine(mob/user) - . = ..() - if(world.time < next_use) - . += "Time left to recharge: [DisplayTimeText(next_use - world.time)]" - . += "Alt-click to customize the duration. Current duration: [DisplayTimeText(duration)]." - . += "Can be used again to interrupt the effect early. The recharge time is the same as the time spent in desync." - -/obj/item/desynchronizer/AltClick(mob/living/user) - if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) - return - var/new_duration = input(user, "Set the duration (5-300):", "Desynchronizer", duration / 10) as null|num - if(new_duration) - new_duration = new_duration SECONDS - new_duration = CLAMP(new_duration, 50, max_duration) - duration = new_duration - to_chat(user, "I set the duration to [DisplayTimeText(duration)].") - -/obj/item/desynchronizer/proc/desync(mob/living/user) - if(sync_holder) - return - sync_holder = new(drop_location()) - new /obj/effect/temp_visual/desynchronizer(drop_location()) - to_chat(user, "I activate [src], desynchronizing myself from the present. You can still see your surroundings, but you feel eerily dissociated from reality.") - user.forceMove(sync_holder) - SEND_SIGNAL(user, COMSIG_MOVABLE_SECLUDED_LOCATION) - for(var/thing in user) - var/atom/movable/AM = thing - SEND_SIGNAL(AM, COMSIG_MOVABLE_SECLUDED_LOCATION) - last_use = world.time - icon_state = "desynchronizer-on" - addtimer(CALLBACK(src, PROC_REF(resync)), duration) - -/obj/item/desynchronizer/proc/resync() - if(sync_holder) - new /obj/effect/temp_visual/desynchronizer(sync_holder.drop_location()) - QDEL_NULL(sync_holder) - icon_state = initial(icon_state) - next_use = world.time + (world.time - last_use) // Could be 2*world.time-last_use but that would just be confusing - -/obj/item/desynchronizer/Destroy() - resync() - return ..() - -/obj/effect/abstract/sync_holder - name = "desyncronized pocket" - desc = "" - icon = null - icon_state = null - alpha = 0 - invisibility = INVISIBILITY_ABSTRACT - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - anchored = TRUE - resistance_flags = INDESTRUCTIBLE - -/obj/effect/abstract/sync_holder/Destroy() - for(var/I in contents) - var/atom/movable/AM = I - AM.forceMove(drop_location()) - return ..() - -/obj/effect/abstract/sync_holder/AllowDrop() - return TRUE //no dropping spaghetti out of your spacetime pocket diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index c265940a27..b473a3a000 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -14,8 +14,6 @@ light_power = 1 slot_flags = ITEM_SLOT_BELT possible_item_intents = list(INTENT_GENERIC) - custom_materials = list(/datum/material/iron=50, /datum/material/glass=20) -// actions_types = list(/datum/action/item_action/toggle_light) var/on = FALSE /obj/item/flashlight/Initialize() @@ -49,200 +47,6 @@ /obj/item/flashlight/attack(mob/living/carbon/M, mob/living/carbon/human/user) add_fingerprint(user) return ..() -/* if(istype(M) && on && user.zone_selected in list(BODY_ZONE_PRECISE_R_EYE, BODY_ZONE_PRECISE_MOUTH)) - - if((HAS_TRAIT(user, TRAIT_CLUMSY) || HAS_TRAIT(user, TRAIT_DUMB)) && prob(50)) //too dumb to use flashlight properly - return ..() //just hit them in the head - - if(!user.IsAdvancedToolUser()) - to_chat(user, "I don't have the dexterity to do this!") - return - - if(!M.get_bodypart(BODY_ZONE_HEAD)) - to_chat(user, "[M] doesn't have a head!") - return - - if(flashlight_power < 1) - to_chat(user, "\The [src] isn't bright enough to see anything! ") - return - - switch(user.zone_selected) - if(BODY_ZONE_PRECISE_R_EYE) - if((M.head && M.head.flags_cover & HEADCOVERSEYES) || (M.wear_mask && M.wear_mask.flags_cover & MASKCOVERSEYES) || (M.glasses && M.glasses.flags_cover & GLASSESCOVERSEYES)) - to_chat(user, "You're going to need to remove that [(M.head && M.head.flags_cover & HEADCOVERSEYES) ? "helmet" : (M.wear_mask && M.wear_mask.flags_cover & MASKCOVERSEYES) ? "mask": "glasses"] first!") - return - - var/obj/item/organ/eyes/E = M.getorganslot(ORGAN_SLOT_EYES) - if(!E) - to_chat(user, "[M] doesn't have any eyes!") - return - - if(M == user) //they're using it on themselves - if(M.flash_act(visual = 1)) - M.visible_message("[M] directs [src] to [M.p_their()] eyes.", "I wave the light in front of your eyes! Trippy!") - else - M.visible_message("[M] directs [src] to [M.p_their()] eyes.", "I wave the light in front of your eyes.") - else - user.visible_message("[user] directs [src] to [M]'s eyes.", \ - "I direct [src] to [M]'s eyes.") - if(M.stat == DEAD || (HAS_TRAIT(M, TRAIT_BLIND)) || !M.flash_act(visual = 1)) //mob is dead or fully blind - to_chat(user, "[M]'s pupils don't react to the light!") - else if(M.dna && M.dna.check_mutation(XRAY)) //mob has X-ray vision - to_chat(user, "[M]'s pupils give an eerie glow!") - else //they're okay! - to_chat(user, "[M]'s pupils narrow.") - - if(BODY_ZONE_PRECISE_MOUTH) - - if(M.is_mouth_covered()) - to_chat(user, "You're going to need to remove that [(M.head && M.head.flags_cover & HEADCOVERSMOUTH) ? "helmet" : "mask"] first!") - return - - var/their = M.p_their() - - var/list/mouth_organs = new - for(var/obj/item/organ/O in M.internal_organs) - if(O.zone == BODY_ZONE_PRECISE_MOUTH) - mouth_organs.Add(O) - var/organ_list = "" - var/organ_count = LAZYLEN(mouth_organs) - if(organ_count) - for(var/I in 1 to organ_count) - if(I > 1) - if(I == mouth_organs.len) - organ_list += ", and " - else - organ_list += ", " - var/obj/item/organ/O = mouth_organs[I] - organ_list += (O.gender == "plural" ? O.name : "\an [O.name]") - - var/pill_count = 0 - for(var/datum/action/item_action/hands_free/activate_pill/AP in M.actions) - pill_count++ - - if(M == user) - var/can_use_mirror = FALSE - if(isturf(user.loc)) - var/obj/structure/mirror/mirror = locate(/obj/structure/mirror, user.loc) - if(mirror) - switch(user.dir) - if(NORTH) - can_use_mirror = mirror.pixel_y > 0 - if(SOUTH) - can_use_mirror = mirror.pixel_y < 0 - if(EAST) - can_use_mirror = mirror.pixel_x > 0 - if(WEST) - can_use_mirror = mirror.pixel_x < 0 - - M.visible_message("[M] directs [src] to [their] mouth.", \ - "I point [src] into your mouth.") - if(!can_use_mirror) - to_chat(user, "I can't see anything without a mirror.") - return - if(organ_count) - to_chat(user, "Inside your mouth [organ_count > 1 ? "are" : "is"] [organ_list].") - else - to_chat(user, "There's nothing inside your mouth.") - if(pill_count) - to_chat(user, "I have [pill_count] implanted pill[pill_count > 1 ? "s" : ""].") - - else - user.visible_message("[user] directs [src] to [M]'s mouth.",\ - "I direct [src] to [M]'s mouth.") - if(organ_count) - to_chat(user, "Inside [their] mouth [organ_count > 1 ? "are" : "is"] [organ_list].") - else - to_chat(user, "[M] doesn't have any organs in [their] mouth.") - if(pill_count) - to_chat(user, "[M] has [pill_count] pill[pill_count > 1 ? "s" : ""] implanted in [their] teeth.") - - else - return ..()*/ - -/obj/item/flashlight/pen - name = "penlight" - desc = "" - icon_state = "penlight" - item_state = "" - flags_1 = CONDUCT_1 - light_outer_range = 2 - var/holo_cooldown = 0 - -/obj/item/flashlight/pen/afterattack(atom/target, mob/user, proximity_flag) - . = ..() - if(!proximity_flag) - if(holo_cooldown > world.time) - to_chat(user, "[src] is not ready yet!") - return - var/T = get_turf(target) - if(locate(/mob/living) in T) - new /obj/effect/temp_visual/medical_holosign(T,user) //produce a holographic glow - holo_cooldown = world.time + 100 - return - -/obj/effect/temp_visual/medical_holosign - name = "medical holosign" - desc = "" - icon_state = "medi_holo" - duration = 30 - -/obj/effect/temp_visual/medical_holosign/Initialize(mapload, creator) - . = ..() - playsound(loc, 'sound/blank.ogg', 50, FALSE) //make some noise! - if(creator) - visible_message("[creator] created a medical hologram!") - - -/obj/item/flashlight/seclite - name = "seclite" - desc = "" - icon_state = "seclite" - item_state = "seclite" - lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' - force = 9 // Not as good as a stun baton. - light_outer_range = 5 // A little better than the standard flashlight. - hitsound = 'sound/blank.ogg' - -// the desk lamps are a bit special -/obj/item/flashlight/lamp - name = "desk lamp" - desc = "" - icon_state = "lamp" - item_state = "lamp" - lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' - righthand_file = 'icons/mob/inhands/items_righthand.dmi' - force = 10 - light_outer_range = 5 - w_class = WEIGHT_CLASS_BULKY - flags_1 = CONDUCT_1 - custom_materials = null - on = TRUE - - -// green-shaded desk lamp -/obj/item/flashlight/lamp/green - desc = "" - icon_state = "lampgreen" - item_state = "lampgreen" - - - -/obj/item/flashlight/lamp/verb/toggle_light() - set name = "Toggle light" - set hidden = 1 - set src in oview(1) - - if(!usr.stat) - attack_self(usr) - -//Bananalamp -/obj/item/flashlight/lamp/bananalamp - name = "banana lamp" - desc = "" - icon_state = "bananalamp" - item_state = "bananalamp" // FLARES @@ -254,13 +58,14 @@ icon_state = "flare" item_state = "flare" actions_types = list() + heat = 1000 + light_color = LIGHT_COLOR_FLARE + grind_results = list(/datum/reagent/sulfur = 15) + var/fuel = 12000 var/on_damage = 7 var/produce_heat = 1500 var/times_used = 0 - heat = 1000 - light_color = LIGHT_COLOR_FLARE - grind_results = list(/datum/reagent/sulfur = 15) /obj/item/flashlight/flare/process() open_flame(heat) @@ -539,205 +344,3 @@ righthand_file = 'icons/mob/inhands/equipment/mining_righthand.dmi' desc = "" light_outer_range = 6 // luminosity when on - - - -/obj/item/flashlight/lantern/heirloom_moth - name = "old lantern" - desc = "" - light_outer_range = 4 - -/obj/item/flashlight/lantern/syndicate - name = "suspicious lantern" - desc = "" - icon_state = "syndilantern" - item_state = "syndilantern" - light_outer_range = 10 - -/obj/item/flashlight/slime - gender = PLURAL - name = "glowing slime extract" - desc = "" - icon = 'icons/obj/lighting.dmi' - icon_state = "slime" - item_state = "slime" - w_class = WEIGHT_CLASS_SMALL - slot_flags = ITEM_SLOT_BELT - custom_materials = null - light_outer_range = 6 //luminosity when on - -/obj/item/flashlight/emp - var/emp_max_charges = 4 - var/emp_cur_charges = 4 - var/charge_tick = 0 - -/obj/item/flashlight/emp/New() - ..() - START_PROCESSING(SSobj, src) - -/obj/item/flashlight/emp/Destroy() - STOP_PROCESSING(SSobj, src) - . = ..() - -/obj/item/flashlight/emp/process() - charge_tick++ - if(charge_tick < 10) - return FALSE - charge_tick = 0 - emp_cur_charges = min(emp_cur_charges+1, emp_max_charges) - return TRUE - -/obj/item/flashlight/emp/attack(mob/living/M, mob/living/user) - if(on && (user.zone_selected in list(BODY_ZONE_PRECISE_R_EYE, BODY_ZONE_PRECISE_MOUTH))) // call original attack when examining organs - ..() - return - -/obj/item/flashlight/emp/afterattack(atom/movable/A, mob/user, proximity) - . = ..() - if(!proximity) - return - - if(emp_cur_charges > 0) - emp_cur_charges -= 1 - - if(ismob(A)) - var/mob/M = A - log_combat(user, M, "attacked", "EMP-light") - M.visible_message("[user] blinks \the [src] at \the [A].", \ - "[user] blinks \the [src] at you.") - else - A.visible_message("[user] blinks \the [src] at \the [A].") - to_chat(user, "\The [src] now has [emp_cur_charges] charge\s.") - A.emp_act(EMP_HEAVY) - else - to_chat(user, "\The [src] needs time to recharge!") - return - -/obj/item/flashlight/emp/debug //for testing emp_act() - name = "debug EMP flashlight" - emp_max_charges = 100 - emp_cur_charges = 100 - -// Glowsticks, in the uncomfortable range of similar to flares, -// but not similar enough to make it worth a refactor -/obj/item/flashlight/glowstick - name = "glowstick" - desc = "" - custom_price = 10 - w_class = WEIGHT_CLASS_SMALL - light_outer_range = 4 - color = LIGHT_COLOR_GREEN - icon_state = "glowstick" - item_state = "glowstick" - grind_results = list(/datum/reagent/phenol = 15, /datum/reagent/hydrogen = 10, /datum/reagent/oxygen = 5) //Meth-in-a-stick - var/fuel = 0 - -/obj/item/flashlight/glowstick/Initialize() - fuel = rand(1600, 2000) - light_color = color - . = ..() - -/obj/item/flashlight/glowstick/Destroy() - STOP_PROCESSING(SSobj, src) - . = ..() - -/obj/item/flashlight/glowstick/process() - fuel = max(fuel - 1, 0) - if(!fuel) - turn_off() - STOP_PROCESSING(SSobj, src) - update_icon() - -/obj/item/flashlight/glowstick/proc/turn_off() - on = FALSE - update_icon() - -/obj/item/flashlight/glowstick/update_icon() - item_state = "glowstick" - cut_overlays() - if(!fuel) - icon_state = "glowstick-empty" - cut_overlays() - set_light(0) - else if(on) - var/mutable_appearance/glowstick_overlay = mutable_appearance(icon, "glowstick-glow") - glowstick_overlay.color = color - add_overlay(glowstick_overlay) - item_state = "glowstick-on" - set_light(light_outer_range) - else - icon_state = "glowstick" - cut_overlays() - -/obj/item/flashlight/glowstick/attack_self(mob/user) - if(!fuel) - to_chat(user, "[src] is spent.") - return - if(on) - to_chat(user, "[src] is already lit!") - return - - . = ..() - if(.) - user.visible_message("[user] cracks and shakes [src].", "I crack and shake [src], turning it on!") - START_PROCESSING(SSobj, src) - -/obj/item/flashlight/glowstick/suicide_act(mob/living/carbon/human/user) - if(!fuel) - user.visible_message("[user] is trying to squirt [src]'s fluids into [user.p_their()] eyes... but it's empty!") - return SHAME - var/obj/item/organ/eyes/eyes = user.getorganslot(ORGAN_SLOT_EYES) - if(!eyes) - user.visible_message("[user] is trying to squirt [src]'s fluids into [user.p_their()] eyes... but [user.p_they()] don't have any!") - return SHAME - user.visible_message("[user] is squirting [src]'s fluids into [user.p_their()] eyes! It looks like [user.p_theyre()] trying to commit suicide!") - fuel = 0 - return (FIRELOSS) - -/obj/item/flashlight/glowstick/red - name = "red glowstick" - color = LIGHT_COLOR_RED - -/obj/item/flashlight/glowstick/blue - name = "blue glowstick" - color = LIGHT_COLOR_BLUE - -/obj/item/flashlight/glowstick/cyan - name = "cyan glowstick" - color = LIGHT_COLOR_CYAN - -/obj/item/flashlight/glowstick/orange - name = "orange glowstick" - color = LIGHT_COLOR_ORANGE - -/obj/item/flashlight/glowstick/yellow - name = "yellow glowstick" - color = LIGHT_COLOR_YELLOW - -/obj/item/flashlight/glowstick/pink - name = "pink glowstick" - color = LIGHT_COLOR_PINK - -/obj/effect/spawner/lootdrop/glowstick - name = "random colored glowstick" - icon = 'icons/obj/lighting.dmi' - icon_state = "random_glowstick" - -/obj/effect/spawner/lootdrop/glowstick/Initialize() - loot = typesof(/obj/item/flashlight/glowstick) - . = ..() - -/obj/item/flashlight/spotlight //invisible lighting source - name = "disco light" - desc = "" - icon_state = null - light_color = null - light_outer_range = 0 - light_outer_range = 0 - light_power = 10 - alpha = 0 - layer = 0 - on = TRUE - anchored = TRUE - var/range = null - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF diff --git a/code/game/objects/items/devices/forcefieldprojector.dm b/code/game/objects/items/devices/forcefieldprojector.dm deleted file mode 100644 index cca87053ff..0000000000 --- a/code/game/objects/items/devices/forcefieldprojector.dm +++ /dev/null @@ -1,112 +0,0 @@ -/obj/item/forcefield_projector - name = "forcefield projector" - desc = "" - icon = 'icons/obj/device.dmi' - icon_state = "signmaker_forcefield" - slot_flags = ITEM_SLOT_BELT - w_class = WEIGHT_CLASS_SMALL - item_flags = NOBLUDGEON - item_state = "electronic" - lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - custom_materials = list(/datum/material/iron=250, /datum/material/glass=500) - var/max_shield_integrity = 250 - var/shield_integrity = 250 - var/max_fields = 3 - var/list/current_fields - var/field_distance_limit = 7 - -/obj/item/forcefield_projector/afterattack(atom/target, mob/user, proximity_flag) - . = ..() - if(!check_allowed_items(target, 1)) - return - if(istype(target, /obj/structure/projected_forcefield)) - var/obj/structure/projected_forcefield/F = target - if(F.generator == src) - to_chat(user, "I deactivate [F].") - qdel(F) - return - var/turf/T = get_turf(target) - var/obj/structure/projected_forcefield/found_field = locate() in T - if(found_field) - to_chat(user, "There is already a forcefield in that location!") - return - if(T.density) - return - if(get_dist(T,src) > field_distance_limit) - return - if(LAZYLEN(current_fields) >= max_fields) - to_chat(user, "[src] cannot sustain any more forcefields!") - return - - playsound(src,'sound/blank.ogg',50,TRUE) - user.visible_message("[user] projects a forcefield!","I project a forcefield.") - var/obj/structure/projected_forcefield/F = new(T, src) - current_fields += F - user.changeNext_move(CLICK_CD_MELEE) - -/obj/item/forcefield_projector/attack_self(mob/user) - if(LAZYLEN(current_fields)) - to_chat(user, "I deactivate [src], disabling all active forcefields.") - for(var/obj/structure/projected_forcefield/F in current_fields) - qdel(F) - -/obj/item/forcefield_projector/examine(mob/user) - . = ..() - . += "It is currently sustaining [LAZYLEN(current_fields)]/[max_fields] fields, and it's [round((shield_integrity/max_shield_integrity)*100)]% charged." - -/obj/item/forcefield_projector/Initialize(mapload) - . = ..() - current_fields = list() - START_PROCESSING(SSobj, src) - -/obj/item/forcefield_projector/Destroy() - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/item/forcefield_projector/process() - if(!LAZYLEN(current_fields)) - shield_integrity = min(shield_integrity + 4, max_shield_integrity) - else - shield_integrity = max(shield_integrity - LAZYLEN(current_fields), 0) //fields degrade slowly over time - for(var/obj/structure/projected_forcefield/F in current_fields) - if(shield_integrity <= 0 || get_dist(F,src) > field_distance_limit) - qdel(F) - -/obj/structure/projected_forcefield - name = "forcefield" - desc = "" - icon = 'icons/effects/effects.dmi' - icon_state = "forcefield" - layer = ABOVE_ALL_MOB_LAYER - anchored = TRUE - density = TRUE - mouse_opacity = MOUSE_OPACITY_OPAQUE - resistance_flags = INDESTRUCTIBLE - CanAtmosPass = ATMOS_PASS_DENSITY - armor = list("melee" = 0, "bullet" = 25, "laser" = 50, "energy" = 50, "bomb" = 25, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100) - var/obj/item/forcefield_projector/generator - -/obj/structure/projected_forcefield/Initialize(mapload, obj/item/forcefield_projector/origin) - . = ..() - generator = origin - -/obj/structure/projected_forcefield/Destroy() - visible_message("[src] flickers and disappears!") - playsound(src,'sound/blank.ogg',25,TRUE) - generator.current_fields -= src - generator = null - return ..() - -/obj/structure/projected_forcefield/CanPass(atom/movable/mover, turf/target) - if(istype(mover) && (mover.pass_flags & PASSGLASS)) - return 1 - return !density - -/obj/structure/projected_forcefield/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) - playsound(loc, 'sound/blank.ogg', 80, TRUE) - -/obj/structure/projected_forcefield/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) - if(sound_effect) - play_attack_sound(damage_amount, damage_type, damage_flag) - generator.shield_integrity = max(generator.shield_integrity - damage_amount, 0) diff --git a/code/game/objects/items/devices/geiger_counter.dm b/code/game/objects/items/devices/geiger_counter.dm deleted file mode 100644 index 738b878a77..0000000000 --- a/code/game/objects/items/devices/geiger_counter.dm +++ /dev/null @@ -1,207 +0,0 @@ -#define RAD_LEVEL_NORMAL 9 -#define RAD_LEVEL_MODERATE 100 -#define RAD_LEVEL_HIGH 400 -#define RAD_LEVEL_VERY_HIGH 800 -#define RAD_LEVEL_CRITICAL 1500 - -#define RAD_MEASURE_SMOOTHING 5 - -#define RAD_GRACE_PERIOD 2 - -/obj/item/geiger_counter //DISCLAIMER: I know nothing about how real-life Geiger counters work. This will not be realistic. ~Xhuis - name = "\improper Geiger counter" - desc = "" - icon = 'icons/obj/device.dmi' - icon_state = "geiger_off" - item_state = "multitool" - lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' - w_class = WEIGHT_CLASS_SMALL - slot_flags = ITEM_SLOT_BELT - custom_materials = list(/datum/material/iron = 150, /datum/material/glass = 150) - - var/grace = RAD_GRACE_PERIOD - var/datum/looping_sound/geiger/soundloop - - var/scanning = FALSE - var/radiation_count = 0 - var/current_tick_amount = 0 - var/last_tick_amount = 0 - var/fail_to_receive = 0 - var/current_warning = 1 - -/obj/item/geiger_counter/Initialize() - . = ..() - START_PROCESSING(SSobj, src) - - soundloop = new(list(src), FALSE) - -/obj/item/geiger_counter/Destroy() - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/item/geiger_counter/process() - update_icon() - update_sound() - - if(!scanning) - current_tick_amount = 0 - return - - radiation_count -= radiation_count/RAD_MEASURE_SMOOTHING - radiation_count += current_tick_amount/RAD_MEASURE_SMOOTHING - - if(current_tick_amount) - grace = RAD_GRACE_PERIOD - last_tick_amount = current_tick_amount - - else if(!(obj_flags & EMAGGED)) - grace-- - if(grace <= 0) - radiation_count = 0 - - current_tick_amount = 0 - -/obj/item/geiger_counter/examine(mob/user) - . = ..() - if(!scanning) - return - . += "Alt-click it to clear stored radiation levels." - if(obj_flags & EMAGGED) - . += "The display seems to be incomprehensible." - return - switch(radiation_count) - if(-INFINITY to RAD_LEVEL_NORMAL) - . += "Ambient radiation level count reports that all is well." - if(RAD_LEVEL_NORMAL + 1 to RAD_LEVEL_MODERATE) - . += "Ambient radiation levels slightly above average." - if(RAD_LEVEL_MODERATE + 1 to RAD_LEVEL_HIGH) - . += "Ambient radiation levels above average." - if(RAD_LEVEL_HIGH + 1 to RAD_LEVEL_VERY_HIGH) - . += "Ambient radiation levels highly above average." - if(RAD_LEVEL_VERY_HIGH + 1 to RAD_LEVEL_CRITICAL) - . += "Ambient radiation levels nearing critical level." - if(RAD_LEVEL_CRITICAL + 1 to INFINITY) - . += "Ambient radiation levels above critical level!" - - . += "The last radiation amount detected was [last_tick_amount]" - -/obj/item/geiger_counter/update_icon() - if(!scanning) - icon_state = "geiger_off" - return 1 - if(obj_flags & EMAGGED) - icon_state = "geiger_on_emag" - return 1 - switch(radiation_count) - if(-INFINITY to RAD_LEVEL_NORMAL) - icon_state = "geiger_on_1" - if(RAD_LEVEL_NORMAL + 1 to RAD_LEVEL_MODERATE) - icon_state = "geiger_on_2" - if(RAD_LEVEL_MODERATE + 1 to RAD_LEVEL_HIGH) - icon_state = "geiger_on_3" - if(RAD_LEVEL_HIGH + 1 to RAD_LEVEL_VERY_HIGH) - icon_state = "geiger_on_4" - if(RAD_LEVEL_VERY_HIGH + 1 to RAD_LEVEL_CRITICAL) - icon_state = "geiger_on_4" - if(RAD_LEVEL_CRITICAL + 1 to INFINITY) - icon_state = "geiger_on_5" - ..() - -/obj/item/geiger_counter/proc/update_sound() - var/datum/looping_sound/geiger/loop = soundloop - if(!scanning) - loop.stop() - return - if(!radiation_count) - loop.stop() - return - loop.last_radiation = radiation_count - loop.start() - -/obj/item/geiger_counter/rad_act(amount) - . = ..() - if(amount <= RAD_BACKGROUND_RADIATION || !scanning) - return - current_tick_amount += amount - update_icon() - -/obj/item/geiger_counter/attack_self(mob/user) - scanning = !scanning - update_icon() - to_chat(user, "[icon2html(src, user)] You switch [scanning ? "on" : "off"] [src].") - -/obj/item/geiger_counter/afterattack(atom/target, mob/user) - . = ..() - if(user.used_intent.type == INTENT_HELP) - if(!(obj_flags & EMAGGED)) - user.visible_message("[user] scans [target] with [src].", "I scan [target]'s radiation levels with [src]...") - addtimer(CALLBACK(src, PROC_REF(scan), target, user), 20, TIMER_UNIQUE) // Let's not have spamming GetAllContents - else - user.visible_message("[user] scans [target] with [src].", "I project [src]'s stored radiation into [target]!") - target.rad_act(radiation_count) - radiation_count = 0 - return TRUE - -/obj/item/geiger_counter/proc/scan(atom/A, mob/user) - var/rad_strength = 0 - for(var/i in get_rad_contents(A)) // Yes it's intentional that you can't detect radioactive things under rad protection. Gives traitors a way to hide their glowing green rocks. - var/atom/thing = i - if(!thing) - continue - var/datum/component/radioactive/radiation = thing.GetComponent(/datum/component/radioactive) - if(radiation) - rad_strength += radiation.strength - - if(isliving(A)) - var/mob/living/M = A - if(!M.radiation) - to_chat(user, "[icon2html(src, user)] Radiation levels within normal boundaries.") - else - to_chat(user, "[icon2html(src, user)] Subject is irradiated. Radiation levels: [M.radiation].") - - if(rad_strength) - to_chat(user, "[icon2html(src, user)] Target contains radioactive contamination. Radioactive strength: [rad_strength]") - else - to_chat(user, "[icon2html(src, user)] Target is free of radioactive contamination.") - -/obj/item/geiger_counter/attackby(obj/item/I, mob/user, params) - if(I.tool_behaviour == TOOL_SCREWDRIVER && (obj_flags & EMAGGED)) - if(scanning) - to_chat(user, "Turn off [src] before you perform this action!") - return 0 - user.visible_message("[user] unscrews [src]'s maintenance panel and begins fiddling with its innards...", "I begin resetting [src]...") - if(!I.use_tool(src, user, 40, volume=50)) - return 0 - user.visible_message("[user] refastens [src]'s maintenance panel!", "I reset [src] to its factory settings!") - obj_flags &= ~EMAGGED - radiation_count = 0 - update_icon() - return 1 - else - return ..() - -/obj/item/geiger_counter/AltClick(mob/living/user) - if(!istype(user) || !user.canUseTopic(src, BE_CLOSE)) - return ..() - if(!scanning) - to_chat(usr, "[src] must be on to reset its radiation level!") - return 0 - radiation_count = 0 - to_chat(usr, "I flush [src]'s radiation counts, resetting it to normal.") - update_icon() - -/obj/item/geiger_counter/emag_act(mob/user) - if(obj_flags & EMAGGED) - return - if(scanning) - to_chat(user, "Turn off [src] before you perform this action!") - return 0 - to_chat(user, "I override [src]'s radiation storing protocols. It will now generate small doses of radiation, and stored rads are now projected into creatures you scan.") - obj_flags |= EMAGGED - -#undef RAD_LEVEL_NORMAL -#undef RAD_LEVEL_MODERATE -#undef RAD_LEVEL_HIGH -#undef RAD_LEVEL_VERY_HIGH -#undef RAD_LEVEL_CRITICAL diff --git a/code/game/objects/items/devices/gps.dm b/code/game/objects/items/devices/gps.dm deleted file mode 100644 index 687f87f657..0000000000 --- a/code/game/objects/items/devices/gps.dm +++ /dev/null @@ -1,76 +0,0 @@ - -/obj/item/gps - name = "global positioning system" - desc = "" - icon = 'icons/obj/telescience.dmi' - icon_state = "gps-c" - w_class = WEIGHT_CLASS_SMALL - slot_flags = ITEM_SLOT_BELT - obj_flags = UNIQUE_RENAME - var/gpstag - -/obj/item/gps/Initialize() - . = ..() - AddComponent(/datum/component/gps/item, gpstag) - -/obj/item/gps/science - icon_state = "gps-s" - gpstag = "SCI0" - -/obj/item/gps/engineering - icon_state = "gps-e" - gpstag = "ENG0" - -/obj/item/gps/mining - icon_state = "gps-m" - gpstag = "MINE0" - desc = "" - -/obj/item/gps/cyborg - icon_state = "gps-b" - gpstag = "BORG0" - desc = "" - -/obj/item/gps/cyborg/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, CYBORG_ITEM_TRAIT) - -/obj/item/gps/mining/internal - icon_state = "gps-m" - gpstag = "MINER" - desc = "" - -/obj/item/gps/visible_debug - name = "visible GPS" - gpstag = "ADMIN" - desc = "This admin-spawn GPS unit leaves the coordinates visible \ - on any turf that it passes over, for debugging. Especially useful \ - for marking the area around the transition edges." - var/list/turf/tagged - -/obj/item/gps/visible_debug/Initialize() - . = ..() - tagged = list() - START_PROCESSING(SSfastprocess, src) - -/obj/item/gps/visible_debug/process() - var/turf/T = get_turf(src) - if(T) - // I assume it's faster to color,tag and OR the turf in, rather - // then checking if its there - T.color = RANDOM_COLOUR - T.maptext = "[T.x],[T.y],[T.z]" - tagged |= T - -/obj/item/gps/visible_debug/proc/clear() - while(tagged.len) - var/turf/T = pop(tagged) - T.color = initial(T.color) - T.maptext = initial(T.maptext) - -/obj/item/gps/visible_debug/Destroy() - if(tagged) - clear() - tagged = null - STOP_PROCESSING(SSfastprocess, src) - . = ..() diff --git a/code/game/objects/items/devices/instruments.dm b/code/game/objects/items/devices/instruments.dm deleted file mode 100644 index 282e5a8edf..0000000000 --- a/code/game/objects/items/devices/instruments.dm +++ /dev/null @@ -1,271 +0,0 @@ -//copy pasta of the space piano, don't hurt me -Pete -/obj/item/instrument - name = "generic instrument" - resistance_flags = FLAMMABLE - force = 10 - max_integrity = 100 - icon = 'icons/obj/musician.dmi' - lefthand_file = 'icons/mob/inhands/equipment/instruments_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/instruments_righthand.dmi' - var/datum/song/handheld/song - var/instrumentId = "generic" - var/instrumentExt = "mid" - -/obj/item/instrument/Initialize() - . = ..() - song = new(instrumentId, src, instrumentExt) - -/obj/item/instrument/Destroy() - QDEL_NULL(song) - . = ..() - -/obj/item/instrument/suicide_act(mob/user) - user.visible_message("[user] begins to play 'Gloomy Sunday'! It looks like [user.p_theyre()] trying to commit suicide!") - return (BRUTELOSS) - -/obj/item/instrument/Initialize(mapload) - . = ..() - if(mapload) - song.tempo = song.sanitize_tempo(song.tempo) // tick_lag isn't set when the map is loaded - -/obj/item/instrument/attack_self(mob/user) - if(!user.IsAdvancedToolUser()) - to_chat(user, "I don't have the dexterity to do this!") - return 1 - interact(user) - -/obj/item/instrument/interact(mob/user) - ui_interact(user) - -/obj/item/instrument/ui_interact(mob/living/user) - if(!isliving(user) || user.stat || user.restrained() || !(user.mobility_flags & MOBILITY_STAND)) - return - - user.set_machine(src) - song.interact(user) - -/obj/item/instrument/violin - name = "space violin" - desc = "" - icon_state = "violin" - item_state = "violin" - hitsound = "swing_hit" - instrumentId = "violin" - -/obj/item/instrument/violin/golden - name = "golden violin" - desc = "" - icon_state = "golden_violin" - item_state = "golden_violin" - resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF - -/obj/item/instrument/piano_synth - name = "synthesizer" - desc = "" - icon_state = "synth" - item_state = "synth" - instrumentId = "piano" - instrumentExt = "ogg" - var/static/list/insTypes = list("accordion" = "mid", "bikehorn" = "ogg", "glockenspiel" = "mid", "banjo" = "ogg", "guitar" = "ogg", "harmonica" = "mid", "piano" = "ogg", "recorder" = "mid", "saxophone" = "mid", "trombone" = "mid", "violin" = "mid", "xylophone" = "mid") //No eguitar you ear-rapey fuckers. - actions_types = list(/datum/action/item_action/synthswitch) - -/obj/item/instrument/piano_synth/proc/changeInstrument(name = "piano") - song.instrumentDir = name - song.instrumentExt = insTypes[name] - -/obj/item/instrument/piano_synth/proc/selectInstrument() // Moved here so it can be used by the action and PAI software panel without copypasta - var/chosen = input("Choose the type of instrument you want to use", "Instrument Selection", song.instrumentDir) as null|anything in sortList(insTypes) - if(!insTypes[chosen]) - return - return changeInstrument(chosen) - -/obj/item/instrument/banjo - name = "banjo" - desc = "" - icon_state = "banjo" - item_state = "banjo" - instrumentExt = "ogg" - attack_verb = list("scruggs-styled", "hum-diggitied", "shin-digged", "clawhammered") - hitsound = 'sound/blank.ogg' - instrumentId = "banjo" - -/obj/item/instrument/guitar - name = "guitar" - desc = "" - icon_state = "guitar" - item_state = "guitar" - instrumentExt = "ogg" - attack_verb = list("played metal on", "serenaded", "crashed", "smashed") - hitsound = 'sound/blank.ogg' - instrumentId = "guitar" - -/obj/item/instrument/eguitar - name = "electric guitar" - desc = "" - icon_state = "eguitar" - item_state = "eguitar" - force = 12 - attack_verb = list("played metal on", "shredded", "crashed", "smashed") - hitsound = 'sound/blank.ogg' - instrumentId = "eguitar" - instrumentExt = "ogg" - -/obj/item/instrument/glockenspiel - name = "glockenspiel" - desc = "" - icon_state = "glockenspiel" - item_state = "glockenspiel" - instrumentId = "glockenspiel" - -/obj/item/instrument/accordion - name = "accordion" - desc = "" - icon_state = "accordion" - item_state = "accordion" - instrumentId = "accordion" - -/obj/item/instrument/trumpet - name = "trumpet" - desc = "" - icon_state = "trumpet" - item_state = "trombone" - instrumentId = "trombone" - -/obj/item/instrument/trumpet/spectral - name = "spectral trumpet" - desc = "" - icon_state = "trumpet" - item_state = "trombone" - force = 0 - instrumentId = "trombone" - attack_verb = list("played","jazzed","trumpeted","mourned","dooted","spooked") - -/obj/item/instrument/trumpet/spectral/Initialize() - . = ..() - AddComponent(/datum/component/spooky) - -/obj/item/instrument/trumpet/spectral/attack(mob/living/carbon/C, mob/user) - ..() - -/obj/item/instrument/saxophone - name = "saxophone" - desc = "" - icon_state = "saxophone" - item_state = "saxophone" - instrumentId = "saxophone" - -/obj/item/instrument/saxophone/spectral - name = "spectral saxophone" - desc = "" - icon_state = "saxophone" - item_state = "saxophone" - instrumentId = "saxophone" - force = 0 - attack_verb = list("played","jazzed","saxxed","mourned","dooted","spooked") - -/obj/item/instrument/saxophone/spectral/Initialize() - . = ..() - AddComponent(/datum/component/spooky) - -/obj/item/instrument/saxophone/spectral/attack(mob/living/carbon/C, mob/user) - ..() - -/obj/item/instrument/trombone - name = "trombone" - desc = "" - icon_state = "trombone" - item_state = "trombone" - instrumentId = "trombone" - -/obj/item/instrument/trombone/spectral - name = "spectral trombone" - desc = "" - instrumentId = "trombone" - icon_state = "trombone" - item_state = "trombone" - force = 0 - attack_verb = list("played","jazzed","tromboned","mourned","dooted","spooked") - -/obj/item/instrument/trombone/spectral/Initialize() - . = ..() - AddComponent(/datum/component/spooky) - -/obj/item/instrument/trombone/spectral/attack(mob/living/carbon/C, mob/user) - ..() - -/obj/item/instrument/recorder - name = "recorder" - desc = "" - force = 5 - icon_state = "recorder" - item_state = "recorder" - instrumentId = "recorder" - -/obj/item/instrument/harmonica - name = "harmonica" - desc = "" - icon_state = "harmonica" - item_state = "harmonica" - instrumentId = "harmonica" - slot_flags = ITEM_SLOT_MASK - force = 5 - w_class = WEIGHT_CLASS_SMALL - actions_types = list(/datum/action/item_action/instrument) - -/obj/item/instrument/harmonica/proc/handle_speech(datum/source, list/speech_args) - if(song.playing && ismob(loc)) - to_chat(loc, "I stop playing the harmonica to talk...") - song.playing = FALSE - -/obj/item/instrument/harmonica/equipped(mob/M, slot) - . = ..() - RegisterSignal(M, COMSIG_MOB_SAY, PROC_REF(handle_speech), override = TRUE) - -/obj/item/instrument/harmonica/dropped(mob/M) - . = ..() - UnregisterSignal(M, COMSIG_MOB_SAY) - -/obj/item/instrument/bikehorn - name = "gilded bike horn" - desc = "" - icon_state = "bike_horn" - item_state = "bike_horn" - lefthand_file = 'icons/mob/inhands/equipment/horns_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/horns_righthand.dmi' - attack_verb = list("beautifully honks") - instrumentId = "bikehorn" - instrumentExt = "ogg" - w_class = WEIGHT_CLASS_TINY - force = 0 - throw_speed = 1 - throw_range = 15 - hitsound = 'sound/blank.ogg' - -/// - -/obj/item/choice_beacon/music - name = "instrument delivery beacon" - desc = "" - icon_state = "gangtool-red" - -/obj/item/choice_beacon/music/generate_display_names() - var/static/list/instruments - if(!instruments) - instruments = list() - var/list/templist = list(/obj/item/instrument/violin, - /obj/item/instrument/piano_synth, - /obj/item/instrument/banjo, - /obj/item/instrument/guitar, - /obj/item/instrument/eguitar, - /obj/item/instrument/glockenspiel, - /obj/item/instrument/accordion, - /obj/item/instrument/trumpet, - /obj/item/instrument/saxophone, - /obj/item/instrument/trombone, - /obj/item/instrument/recorder, - /obj/item/instrument/harmonica - ) - for(var/V in templist) - var/atom/A = V - instruments[initial(A.name)] = A - return instruments diff --git a/code/game/objects/items/devices/lightreplacer.dm b/code/game/objects/items/devices/lightreplacer.dm deleted file mode 100644 index ded8700f87..0000000000 --- a/code/game/objects/items/devices/lightreplacer.dm +++ /dev/null @@ -1,266 +0,0 @@ - -// Light Replacer (LR) -// -// ABOUT THE DEVICE -// -// This is a device supposedly to be used by Janitors and Janitor Cyborgs which will -// allow them to easily replace lights. This was mostly designed for Janitor Cyborgs since -// they don't have hands or a way to replace lightbulbs. -// -// HOW IT WORKS -// -// You attack a light fixture with it, if the light fixture is broken it will replace the -// light fixture with a working light; the broken light is then placed on the floor for the -// user to then pickup with a trash bag. If it's empty then it will just place a light in the fixture. -// -// HOW TO REFILL THE DEVICE -// -// It will need to be manually refilled with lights. -// If it's part of a robot module, it will charge when the Robot is inside a Recharge Station. -// -// EMAGGED FEATURES -// -// NOTICE: The Cyborg cannot use the emagged Light Replacer and the light's explosion was nerfed. It cannot create holes in the station anymore. -// -// I'm not sure everyone will react the emag's features so please say what your opinions are of it. -// -// When emagged it will rig every light it replaces, which will explode when the light is on. -// This is VERY noticable, even the device's name changes when you emag it so if anyone -// examines you when you're holding it in your hand, you will be discovered. -// It will also be very obvious who is setting all these lights off, since only Janitor Borgs and Janitors have easy -// access to them, and only one of them can emag their device. -// -// The explosion cannot insta-kill anyone with 30% or more health. - -#define LIGHT_OK 0 -#define LIGHT_EMPTY 1 -#define LIGHT_BROKEN 2 -#define LIGHT_BURNED 3 - - -/obj/item/lightreplacer - - name = "light replacer" - desc = "" - - icon = 'icons/obj/janitor.dmi' - icon_state = "lightreplacer0" - item_state = "electronic" - lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - w_class = WEIGHT_CLASS_SMALL - flags_1 = CONDUCT_1 - slot_flags = ITEM_SLOT_BELT - force = 8 - - var/max_uses = 20 - var/uses = 10 - // How much to increase per each glass? - var/increment = 5 - // How much to take from the glass? - var/decrement = 1 - var/charge = 1 - - // Eating used bulbs gives us bulb shards - var/bulb_shards = 0 - // when we get this many shards, we get a free bulb. - var/shards_required = 4 - -/obj/item/lightreplacer/examine(mob/user) - . = ..() - . += status_string() - -/obj/item/lightreplacer/attackby(obj/item/W, mob/user, params) - - if(istype(W, /obj/item/stack/sheet/glass)) - var/obj/item/stack/sheet/glass/G = W - if(uses >= max_uses) - to_chat(user, "[src.name] is full.") - return - else if(G.use(decrement)) - AddUses(increment) - to_chat(user, "I insert a piece of glass into \the [src.name]. You have [uses] light\s remaining.") - return - else - to_chat(user, "I need one sheet of glass to replace lights!") - - if(istype(W, /obj/item/shard)) - if(uses >= max_uses) - to_chat(user, "\The [src] is full.") - return - if(!user.temporarilyRemoveItemFromInventory(W)) - return - AddUses(round(increment*0.75)) - to_chat(user, "I insert a shard of glass into \the [src]. You have [uses] light\s remaining.") - qdel(W) - return - - if(istype(W, /obj/item/light)) - var/obj/item/light/L = W - if(L.status == 0) // LIGHT OKAY - if(uses < max_uses) - if(!user.temporarilyRemoveItemFromInventory(W)) - return - AddUses(1) - qdel(L) - else - if(!user.temporarilyRemoveItemFromInventory(W)) - return - to_chat(user, "I insert [L] into \the [src].") - AddShards(1, user) - qdel(L) - return - - if(istype(W, /obj/item/storage)) - var/obj/item/storage/S = W - var/found_lightbulbs = FALSE - var/replaced_something = TRUE - - for(var/obj/item/I in S.contents) - if(istype(I, /obj/item/light)) - var/obj/item/light/L = I - found_lightbulbs = TRUE - if(src.uses >= max_uses) - break - if(L.status == LIGHT_OK) - replaced_something = TRUE - AddUses(1) - qdel(L) - - else if(L.status == LIGHT_BROKEN || L.status == LIGHT_BURNED) - replaced_something = TRUE - AddShards(1, user) - qdel(L) - - if(!found_lightbulbs) - to_chat(user, "\The [S] contains no bulbs.") - return - - if(!replaced_something && src.uses == max_uses) - to_chat(user, "\The [src] is full!") - return - - to_chat(user, "I fill \the [src] with lights from \the [S]. " + status_string() + "") - -/obj/item/lightreplacer/emag_act() - if(obj_flags & EMAGGED) - return - Emag() - -/obj/item/lightreplacer/attack_self(mob/user) - for(var/obj/machinery/light/target in user.loc) - ReplaceLight(target, user) - to_chat(user, status_string()) - -/obj/item/lightreplacer/update_icon() - icon_state = "lightreplacer[(obj_flags & EMAGGED ? 1 : 0)]" - -/obj/item/lightreplacer/proc/status_string() - return "It has [uses] light\s remaining (plus [bulb_shards] fragment\s)." - -/obj/item/lightreplacer/proc/Use(mob/user) - playsound(src.loc, 'sound/blank.ogg', 50, TRUE) - AddUses(-1) - return 1 - -// Negative numbers will subtract -/obj/item/lightreplacer/proc/AddUses(amount = 1) - uses = CLAMP(uses + amount, 0, max_uses) - -/obj/item/lightreplacer/proc/AddShards(amount = 1, user) - bulb_shards += amount - var/new_bulbs = round(bulb_shards / shards_required) - if(new_bulbs > 0) - AddUses(new_bulbs) - bulb_shards = bulb_shards % shards_required - if(new_bulbs != 0) - to_chat(user, "\The [src] has fabricated a new bulb from the broken glass it has stored. It now has [uses] uses.") - playsound(src.loc, 'sound/blank.ogg', 50, TRUE) - return new_bulbs - -/obj/item/lightreplacer/proc/Charge(mob/user) - charge += 1 - if(charge > 3) - AddUses(1) - charge = 1 - -/obj/item/lightreplacer/proc/ReplaceLight(obj/machinery/light/target, mob/living/U) - - if(target.status != LIGHT_OK) - if(CanUse(U)) - if(!Use(U)) - return - to_chat(U, "I replace \the [target.fitting] with \the [src].") - - if(target.status != LIGHT_EMPTY) - AddShards(1, U) - target.status = LIGHT_EMPTY - target.update() - - var/obj/item/light/L2 = new target.light_type() - - target.status = L2.status - target.switchcount = L2.switchcount - target.rigged = (obj_flags & EMAGGED ? 1 : 0) - target.brightness = L2.brightness - target.on = target.has_power() - target.update() - qdel(L2) - - if(target.on && target.rigged) - target.explode() - return - - else - to_chat(U, "\The [src]'s refill light blinks red.") - return - else - to_chat(U, "There is a working [target.fitting] already inserted!") - return - -/obj/item/lightreplacer/proc/Emag() - obj_flags ^= EMAGGED - playsound(src.loc, "sparks", 100, TRUE) - if(obj_flags & EMAGGED) - name = "shortcircuited [initial(name)]" - else - name = initial(name) - update_icon() - -/obj/item/lightreplacer/proc/CanUse(mob/living/user) - src.add_fingerprint(user) - if(uses > 0) - return 1 - else - return 0 - -/obj/item/lightreplacer/afterattack(atom/T, mob/U, proximity) - . = ..() - if(!proximity) - return - if(!isturf(T)) - return - - var/used = FALSE - for(var/atom/A in T) - if(!CanUse(U)) - break - used = TRUE - if(istype(A, /obj/machinery/light)) - ReplaceLight(A, U) - - if(!used) - to_chat(U, "\The [src]'s refill light blinks red.") - -/obj/item/lightreplacer/proc/janicart_insert(mob/user, obj/structure/janitorialcart/J) - J.put_in_cart(src, user) - J.myreplacer = src - J.update_icon() - -/obj/item/lightreplacer/cyborg/janicart_insert(mob/user, obj/structure/janitorialcart/J) - return - -#undef LIGHT_OK -#undef LIGHT_EMPTY -#undef LIGHT_BROKEN -#undef LIGHT_BURNED diff --git a/code/game/objects/items/devices/megaphone.dm b/code/game/objects/items/devices/megaphone.dm deleted file mode 100644 index 9c1a22a6ea..0000000000 --- a/code/game/objects/items/devices/megaphone.dm +++ /dev/null @@ -1,67 +0,0 @@ -/obj/item/megaphone - name = "megaphone" - desc = "" - icon = 'icons/obj/device.dmi' - icon_state = "megaphone" - item_state = "megaphone" - lefthand_file = 'icons/mob/inhands/misc/megaphone_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/megaphone_righthand.dmi' - w_class = WEIGHT_CLASS_SMALL - siemens_coefficient = 1 - var/spamcheck = 0 - var/list/voicespan = list(SPAN_COMMAND) - -/obj/item/megaphone/suicide_act(mob/living/carbon/user) - user.visible_message("[user] is uttering [user.p_their()] last words into \the [src]! It looks like [user.p_theyre()] trying to commit suicide!") - spamcheck = 0//so they dont have to worry about recharging - user.say("AAAAAAAAAAAARGHHHHH", forced="megaphone suicide")//he must have died while coding this - return OXYLOSS - -/obj/item/megaphone/equipped(mob/M, slot) - . = ..() - if (slot == SLOT_HANDS) - RegisterSignal(M, COMSIG_MOB_SAY, PROC_REF(handle_speech)) - else - UnregisterSignal(M, COMSIG_MOB_SAY) - -/obj/item/megaphone/dropped(mob/M) - . = ..() - UnregisterSignal(M, COMSIG_MOB_SAY) - -/obj/item/megaphone/proc/handle_speech(mob/living/carbon/user, list/speech_args) - if (user.get_active_held_item() == src) - if(spamcheck > world.time) - to_chat(user, "\The [src] needs to recharge!") - else - playsound(loc, 'sound/blank.ogg', 100, FALSE, TRUE) - spamcheck = world.time + 50 - speech_args[SPEECH_SPANS] |= voicespan - -/obj/item/megaphone/emag_act(mob/user) - if(obj_flags & EMAGGED) - return - to_chat(user, "I overload \the [src]'s voice synthesizer.") - obj_flags |= EMAGGED - voicespan = list(SPAN_REALLYBIG, "danger") - -/obj/item/megaphone/sec - name = "security megaphone" - icon_state = "megaphone-sec" - item_state = "megaphone-sec" - -/obj/item/megaphone/command - name = "command megaphone" - icon_state = "megaphone-command" - item_state = "megaphone-command" - -/obj/item/megaphone/cargo - name = "supply megaphone" - icon_state = "megaphone-cargo" - item_state = "megaphone-cargo" - -/obj/item/megaphone/clown - name = "clown's megaphone" - desc = "" - icon_state = "megaphone-clown" - item_state = "megaphone-clown" - voicespan = list(SPAN_CLOWN) diff --git a/code/game/objects/items/devices/swapper.dm b/code/game/objects/items/devices/swapper.dm deleted file mode 100644 index 6a703b512d..0000000000 --- a/code/game/objects/items/devices/swapper.dm +++ /dev/null @@ -1,114 +0,0 @@ -/obj/item/swapper - name = "quantum spin inverter" - desc = "" - icon = 'icons/obj/device.dmi' - icon_state = "swapper" - item_state = "electronic" - w_class = WEIGHT_CLASS_SMALL - item_flags = NOBLUDGEON - lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - - var/cooldown = 300 - var/next_use = 0 - var/obj/item/swapper/linked_swapper - -/obj/item/swapper/Destroy() - if(linked_swapper) - linked_swapper.linked_swapper = null //*inception music* - linked_swapper.update_icon() - linked_swapper = null - return ..() - -/obj/item/swapper/update_icon() - if(linked_swapper) - icon_state = "swapper-linked" - else - icon_state = "swapper" - ..() - -/obj/item/swapper/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/swapper)) - var/obj/item/swapper/other_swapper = I - if(other_swapper.linked_swapper) - to_chat(user, "[other_swapper] is already linked. Break the current link to establish a new one.") - return - if(linked_swapper) - to_chat(user, "[src] is already linked. Break the current link to establish a new one.") - return - to_chat(user, "I establish a quantum link between the two devices.") - linked_swapper = other_swapper - other_swapper.linked_swapper = src - update_icon() - linked_swapper.update_icon() - else - return ..() - -/obj/item/swapper/attack_self(mob/living/user) - if(world.time < next_use) - to_chat(user, "[src] is still recharging.") - return - if(QDELETED(linked_swapper)) - to_chat(user, "[src] is not linked with another swapper.") - return - playsound(src, 'sound/blank.ogg', 25, TRUE) - to_chat(user, "I activate [src].") - playsound(linked_swapper, 'sound/blank.ogg', 25, TRUE) - if(ismob(linked_swapper.loc)) - var/mob/holder = linked_swapper.loc - to_chat(holder, "[linked_swapper] starts buzzing.") - next_use = world.time + cooldown //only the one used goes on cooldown - addtimer(CALLBACK(src, PROC_REF(swap), user), 25) - -/obj/item/swapper/examine(mob/user) - . = ..() - if(world.time < next_use) - . += "Time left to recharge: [DisplayTimeText(next_use - world.time)]." - if(linked_swapper) - . += "Linked. Alt-Click to break the quantum link." - else - . += "Not Linked. Use on another quantum spin inverter to establish a quantum link." - -/obj/item/swapper/AltClick(mob/living/user) - if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) - return - to_chat(user, "I break the current quantum link.") - if(!QDELETED(linked_swapper)) - linked_swapper.linked_swapper = null - linked_swapper.update_icon() - linked_swapper = null - update_icon() - -//Gets the topmost teleportable container -/obj/item/swapper/proc/get_teleportable_container() - var/atom/movable/teleportable = src - while(ismovableatom(teleportable.loc)) - var/atom/movable/AM = teleportable.loc - if(AM.anchored) - break - if(isliving(AM)) - var/mob/living/L = AM - if(L.buckled) - if(L.buckled.anchored) - break - else - var/obj/buckled_obj = L.buckled - buckled_obj.unbuckle_mob(L) - teleportable = AM - return teleportable - -/obj/item/swapper/proc/swap(mob/user) - if(QDELETED(linked_swapper) || world.time < linked_swapper.cooldown) - return - - var/atom/movable/A = get_teleportable_container() - var/atom/movable/B = linked_swapper.get_teleportable_container() - var/target_A = A.drop_location() - var/target_B = B.drop_location() - - //TODO: add a sound effect or visual effect - if(do_teleport(A, target_B, forceMove = TRUE, channel = TELEPORT_CHANNEL_QUANTUM)) - do_teleport(B, target_A, forceMove = TRUE, channel = TELEPORT_CHANNEL_QUANTUM) - if(ismob(B)) - var/mob/M = B - to_chat(M, "[linked_swapper] activates, and you find myself somewhere else.") diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm deleted file mode 100644 index 1cf124f8bb..0000000000 --- a/code/game/objects/items/devices/taperecorder.dm +++ /dev/null @@ -1,290 +0,0 @@ -/obj/item/taperecorder - name = "universal recorder" - desc = "" - icon = 'icons/obj/device.dmi' - icon_state = "taperecorder_empty" - item_state = "analyzer" - lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' - w_class = WEIGHT_CLASS_SMALL - flags_1 = HEAR_1 - slot_flags = ITEM_SLOT_BELT - custom_materials = list(/datum/material/iron=60, /datum/material/glass=30) - force = 2 - throwforce = 0 - var/recording = 0 - var/playing = 0 - var/playsleepseconds = 0 - var/obj/item/tape/mytape - var/starting_tape_type = /obj/item/tape/random - var/open_panel = 0 - var/canprint = 1 - - -/obj/item/taperecorder/Initialize(mapload) - . = ..() - if(starting_tape_type) - mytape = new starting_tape_type(src) - update_icon() - - -/obj/item/taperecorder/examine(mob/user) - . = ..() - . += "The wire panel is [open_panel ? "opened" : "closed"]." - - -/obj/item/taperecorder/attackby(obj/item/I, mob/user, params) - if(!mytape && istype(I, /obj/item/tape)) - if(!user.transferItemToLoc(I,src)) - return - mytape = I - to_chat(user, "I insert [I] into [src].") - update_icon() - - -/obj/item/taperecorder/proc/eject(mob/user) - if(mytape) - to_chat(user, "I remove [mytape] from [src].") - stop() - user.put_in_hands(mytape) - mytape = null - update_icon() - -/obj/item/taperecorder/fire_act(added, maxstacks) - mytape.ruin() //Fires destroy the tape - ..() - -//ATTACK HAND IGNORING PARENT RETURN VALUE -/obj/item/taperecorder/attack_hand(mob/user) - if(loc == user) - if(mytape) - if(!user.is_holding(src)) - return ..() - eject(user) - else - return ..() - -/obj/item/taperecorder/proc/can_use(mob/user) - if(user && ismob(user)) - if(!user.incapacitated()) - return TRUE - return FALSE - - -/obj/item/taperecorder/verb/ejectverb() - set name = "Eject Tape" - set hidden = 1 - - if(!can_use(usr)) - return - if(!mytape) - return - - eject(usr) - - -/obj/item/taperecorder/update_icon() - if(!mytape) - icon_state = "taperecorder_empty" - else if(recording) - icon_state = "taperecorder_recording" - else if(playing) - icon_state = "taperecorder_playing" - else - icon_state = "taperecorder_idle" - - -/obj/item/taperecorder/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, spans, message_mode) - . = ..() - if(mytape && recording) - mytape.timestamp += mytape.used_capacity - mytape.storedinfo += "\[[time2text(mytape.used_capacity * 10,"mm:ss")]\] [message]" - -/obj/item/taperecorder/verb/record() - set name = "Start Recording" - set hidden = 1 - - if(!can_use(usr)) - return - if(!mytape || mytape.ruined) - return - if(recording) - return - if(playing) - return - - if(mytape.used_capacity < mytape.max_capacity) - to_chat(usr, "Recording started.") - recording = 1 - update_icon() - mytape.timestamp += mytape.used_capacity - mytape.storedinfo += "\[[time2text(mytape.used_capacity * 10,"mm:ss")]\] Recording started." - var/used = mytape.used_capacity //to stop runtimes when you eject the tape - var/max = mytape.max_capacity - while(recording && used < max) - mytape.used_capacity++ - used++ - sleep(10) - recording = 0 - update_icon() - else - to_chat(usr, "The tape is full.") - - -/obj/item/taperecorder/verb/stop() - set name = "Stop" - set hidden = 1 - - if(!can_use(usr)) - return - - if(recording) - recording = 0 - mytape.timestamp += mytape.used_capacity - mytape.storedinfo += "\[[time2text(mytape.used_capacity * 10,"mm:ss")]\] Recording stopped." - to_chat(usr, "Recording stopped.") - return - else if(playing) - playing = 0 - var/turf/T = get_turf(src) - T.visible_message("Tape Recorder: Playback stopped.") - update_icon() - - -/obj/item/taperecorder/verb/play() - set name = "Play Tape" - set hidden = 1 - - if(!can_use(usr)) - return - if(!mytape || mytape.ruined) - return - if(recording) - return - if(playing) - return - - playing = 1 - update_icon() - to_chat(usr, "Playing started.") - var/used = mytape.used_capacity //to stop runtimes when you eject the tape - var/max = mytape.max_capacity - for(var/i = 1, used < max, sleep(10 * playsleepseconds)) - if(!mytape) - break - if(playing == 0) - break - if(mytape.storedinfo.len < i) - break - say(mytape.storedinfo[i]) - if(mytape.storedinfo.len < i + 1) - playsleepseconds = 1 - sleep(10) - say("End of recording.") - else - playsleepseconds = mytape.timestamp[i + 1] - mytape.timestamp[i] - if(playsleepseconds > 14) - sleep(10) - say("Skipping [playsleepseconds] seconds of silence") - playsleepseconds = 1 - i++ - - playing = 0 - update_icon() - - -/obj/item/taperecorder/attack_self(mob/user) - if(!mytape || mytape.ruined) - return - if(recording) - stop() - else - record() - - -/obj/item/taperecorder/verb/print_transcript() - set name = "Print Transcript" - set hidden = 1 - - if(!can_use(usr)) - return - if(!mytape) - return - if(!canprint) - to_chat(usr, "The recorder can't print that fast!") - return - if(recording || playing) - return - - to_chat(usr, "Transcript printed.") - var/obj/item/paper/P = new /obj/item/paper(get_turf(src)) - var/t1 = "Transcript:

" - for(var/i = 1, mytape.storedinfo.len >= i, i++) - t1 += "[mytape.storedinfo[i]]
" - P.info = t1 - P.name = "paper- 'Transcript'" - usr.put_in_hands(P) - canprint = FALSE - addtimer(VARSET_CALLBACK(src, canprint, TRUE), 30 SECONDS) - - -//empty tape recorders -/obj/item/taperecorder/empty - starting_tape_type = null - - -/obj/item/tape - name = "tape" - desc = "" - icon_state = "tape_white" - icon = 'icons/obj/device.dmi' - item_state = "analyzer" - lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' - w_class = WEIGHT_CLASS_TINY - custom_materials = list(/datum/material/iron=20, /datum/material/glass=5) - force = 1 - throwforce = 0 - var/max_capacity = 600 - var/used_capacity = 0 - var/list/storedinfo = list() - var/list/timestamp = list() - var/ruined = 0 - -/obj/item/tape/fire_act(added, maxstacks) - ruin() - ..() - -/obj/item/tape/attack_self(mob/user) - if(!ruined) - to_chat(user, "I pull out all the tape!") - ruin() - - -/obj/item/tape/proc/ruin() - //Lets not add infinite amounts of overlays when our fireact is called - //repeatedly - if(!ruined) - add_overlay("ribbonoverlay") - ruined = 1 - - -/obj/item/tape/proc/fix() - cut_overlay("ribbonoverlay") - ruined = 0 - - -/obj/item/tape/attackby(obj/item/I, mob/user, params) - if(ruined && I.tool_behaviour == TOOL_SCREWDRIVER || istype(I, /obj/item/pen)) - to_chat(user, "I start winding the tape back in...") - if(I.use_tool(src, user, 120)) - to_chat(user, "I wound the tape back in.") - fix() - -//Random colour tapes -/obj/item/tape/random - icon_state = "random_tape" - -/obj/item/tape/random/Initialize() - . = ..() - icon_state = "tape_[pick("white", "blue", "red", "yellow", "purple")]" diff --git a/code/game/objects/items/dna_injector.dm b/code/game/objects/items/dna_injector.dm index 9c21756585..865d4a4578 100644 --- a/code/game/objects/items/dna_injector.dm +++ b/code/game/objects/items/dna_injector.dm @@ -376,22 +376,6 @@ name = "\improper DNA injector (Anti-Two Left Feet)" remove_mutations = list(EXTRASTUN) -/obj/item/dnainjector/geladikinesis - name = "\improper DNA injector (Geladikinesis)" - add_mutations = list(GELADIKINESIS) - -/obj/item/dnainjector/antigeladikinesis - name = "\improper DNA injector (Anti-Geladikinesis)" - remove_mutations = list(GELADIKINESIS) - -/obj/item/dnainjector/cryokinesis - name = "\improper DNA injector (Cryokinesis)" - add_mutations = list(CRYOKINESIS) - -/obj/item/dnainjector/anticryokinesis - name = "\improper DNA injector (Anti-Cryokinesis)" - remove_mutations = list(CRYOKINESIS) - /obj/item/dnainjector/thermal name = "\improper DNA injector (Thermal Vision)" add_mutations = list(THERMAL) diff --git a/code/game/objects/items/documents.dm b/code/game/objects/items/documents.dm deleted file mode 100644 index de2200adfa..0000000000 --- a/code/game/objects/items/documents.dm +++ /dev/null @@ -1,58 +0,0 @@ -/obj/item/documents - name = "secret documents" - desc = "" - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "docs_generic" - item_state = "paper" - throwforce = 0 - w_class = WEIGHT_CLASS_TINY - throw_range = 1 - throw_speed = 1 - layer = MOB_LAYER - pressure_resistance = 2 - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF - -/obj/item/documents/nanotrasen - desc = "" - icon_state = "docs_verified" - -/obj/item/documents/syndicate - desc = "" - -/obj/item/documents/syndicate/red - name = "red secret documents" - desc = "" - icon_state = "docs_red" - -/obj/item/documents/syndicate/blue - name = "blue secret documents" - desc = "" - icon_state = "docs_blue" - -/obj/item/documents/syndicate/mining - desc = "" - -/obj/item/documents/photocopy - desc = "" - var/forgedseal = 0 - var/copy_type = null - -/obj/item/documents/photocopy/New(loc, obj/item/documents/copy=null) - ..() - if(copy) - copy_type = copy.type - if(istype(copy, /obj/item/documents/photocopy)) // Copy Of A Copy Of A Copy - var/obj/item/documents/photocopy/C = copy - copy_type = C.copy_type - -/obj/item/documents/photocopy/attackby(obj/item/O, mob/user, params) - if(istype(O, /obj/item/toy/crayon/red) || istype(O, /obj/item/toy/crayon/blue)) - if (forgedseal) - to_chat(user, "I have already forged a seal on [src]!") - else - var/obj/item/toy/crayon/C = O - name = "[C.crayon_color] secret documents" - icon_state = "docs_[C.crayon_color]" - forgedseal = C.crayon_color - to_chat(user, "I forge the official seal with a [C.crayon_color] crayon. No one will notice... right?") - update_icon() diff --git a/code/game/objects/items/extinguisher.dm b/code/game/objects/items/extinguisher.dm deleted file mode 100644 index 593154a4ab..0000000000 --- a/code/game/objects/items/extinguisher.dm +++ /dev/null @@ -1,239 +0,0 @@ -/obj/item/extinguisher - name = "fire extinguisher" - desc = "" - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "fire_extinguisher0" - item_state = "fire_extinguisher" - hitsound = list('sound/blank.ogg') - flags_1 = CONDUCT_1 - throwforce = 10 - w_class = WEIGHT_CLASS_NORMAL - throw_speed = 2 - throw_range = 7 - force = 10 - custom_materials = list(/datum/material/iron = 90) - attack_verb = list("slammed", "whacked", "bashed", "thunked", "battered", "bludgeoned", "thrashed") - dog_fashion = /datum/dog_fashion/back - resistance_flags = FIRE_PROOF - var/max_water = 50 - var/last_use = 1 - var/chem = /datum/reagent/water - var/safety = TRUE - var/refilling = FALSE - var/tanktype = /obj/structure/reagent_dispensers/watertank - var/sprite_name = "fire_extinguisher" - var/power = 5 //Maximum distance launched water will travel - var/precision = FALSE //By default, turfs picked from a spray are random, set to 1 to make it always have at least one water effect per row - var/cooling_power = 2 //Sets the cooling_temperature of the water reagent datum inside of the extinguisher when it is refilled - -/obj/item/extinguisher/mini - name = "pocket fire extinguisher" - desc = "" - icon_state = "miniFE0" - item_state = "miniFE" - hitsound = null //it is much lighter, after all. - flags_1 = null //doesn't CONDUCT_1 - throwforce = 2 - w_class = WEIGHT_CLASS_SMALL - force = 3 - custom_materials = list(/datum/material/iron = 50, /datum/material/glass = 40) - max_water = 30 - sprite_name = "miniFE" - dog_fashion = null - -/obj/item/extinguisher/proc/refill() - create_reagents(max_water, AMOUNT_VISIBLE) - reagents.add_reagent(chem, max_water) - -/obj/item/extinguisher/Initialize() - . = ..() - refill() - -/obj/item/extinguisher/advanced - name = "advanced fire extinguisher" - desc = "" - icon_state = "foam_extinguisher0" - //item_state = "foam_extinguisher" needs sprite - dog_fashion = null - chem = /datum/reagent/firefighting_foam - tanktype = /obj/structure/reagent_dispensers/foamtank - sprite_name = "foam_extinguisher" - precision = TRUE - -/obj/item/extinguisher/suicide_act(mob/living/carbon/user) - if (!safety && (reagents.total_volume >= 1)) - user.visible_message("[user] puts the nozzle to [user.p_their()] mouth. It looks like [user.p_theyre()] trying to extinguish the spark of life!") - afterattack(user,user) - return OXYLOSS - else if (safety && (reagents.total_volume >= 1)) - user.visible_message("[user] puts the nozzle to [user.p_their()] mouth... The safety's still on!") - return SHAME - else - user.visible_message("[user] puts the nozzle to [user.p_their()] mouth... [src] is empty!") - return SHAME - -/obj/item/extinguisher/attack_self(mob/user) - safety = !safety - src.icon_state = "[sprite_name][!safety]" - to_chat(user, "The safety is [safety ? "on" : "off"].") - return - -/obj/item/extinguisher/attack(mob/M, mob/user) - if(user.used_intent.type == INTENT_HELP && !safety) //If we're on help intent and going to spray people, don't bash them. - return FALSE - else - return ..() - -/obj/item/extinguisher/attack_obj(obj/O, mob/living/user) - if(AttemptRefill(O, user)) - refilling = TRUE - return FALSE - else - return ..() - -/obj/item/extinguisher/examine(mob/user) - . = ..() - . += "The safety is [safety ? "on" : "off"]." - - if(reagents.total_volume) - . += "Alt-click to empty it." - -/obj/item/extinguisher/proc/AttemptRefill(atom/target, mob/user) - if(istype(target, tanktype) && target.Adjacent(user)) - var/safety_save = safety - safety = TRUE - if(reagents.total_volume == reagents.maximum_volume) - to_chat(user, "\The [src] is already full!") - safety = safety_save - return 1 - var/obj/structure/reagent_dispensers/W = target //will it work? - var/transferred = W.reagents.trans_to(src, max_water, transfered_by = user) - if(transferred > 0) - to_chat(user, "\The [src] has been refilled by [transferred] units.") - playsound(src.loc, 'sound/blank.ogg', 50, TRUE, -6) - for(var/datum/reagent/water/R in reagents.reagent_list) - R.cooling_temperature = cooling_power - else - to_chat(user, "\The [W] is empty!") - safety = safety_save - return 1 - else - return 0 - -/obj/item/extinguisher/afterattack(atom/target, mob/user , flag) - . = ..() - // Make it so the extinguisher doesn't spray myself when you click your inventory items - if (target.loc == user) - return - //TODO; Add support for reagents in water. - - if(refilling) - refilling = FALSE - return - if (!safety) - - - if (src.reagents.total_volume < 1) - to_chat(usr, "\The [src] is empty!") - return - - if (world.time < src.last_use + 12) - return - - src.last_use = world.time - - playsound(src.loc, 'sound/blank.ogg', 75, TRUE, -3) - - var/direction = get_dir(src,target) - - if(user.buckled && isobj(user.buckled) && !user.buckled.anchored) - var/obj/B = user.buckled - var/movementdirection = turn(direction,180) - addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/item/extinguisher, move_chair), B, movementdirection), 1) - - else user.newtonian_move(turn(direction, 180)) - - //Get all the turfs that can be shot at - var/turf/T = get_turf(target) - var/turf/T1 = get_step(T,turn(direction, 90)) - var/turf/T2 = get_step(T,turn(direction, -90)) - var/list/the_targets = list(T,T1,T2) - if(precision) - var/turf/T3 = get_step(T1, turn(direction, 90)) - var/turf/T4 = get_step(T2,turn(direction, -90)) - the_targets.Add(T3,T4) - - var/list/water_particles=list() - for(var/a=0, a<5, a++) - var/obj/effect/particle_effect/water/W = new /obj/effect/particle_effect/water(get_turf(src)) - var/my_target = pick(the_targets) - water_particles[W] = my_target - // If precise, remove turf from targets so it won't be picked more than once - if(precision) - the_targets -= my_target - var/datum/reagents/R = new/datum/reagents(5) - W.reagents = R - R.my_atom = W - reagents.trans_to(W,1, transfered_by = user) - - //Make em move dat ass, hun - addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/item/extinguisher, move_particles), water_particles), 2) - -//Particle movement loop -/obj/item/extinguisher/proc/move_particles(list/particles, repetition=0) - //Check if there's anything in here first - if(!particles || particles.len == 0) - return - // Second loop: Get all the water particles and make them move to their target - for(var/obj/effect/particle_effect/water/W in particles) - var/turf/my_target = particles[W] - if(!W) - continue - step_towards(W,my_target) - if(!W.reagents) - continue - W.reagents.reaction(get_turf(W)) - for(var/A in get_turf(W)) - W.reagents.reaction(A) - if(W.loc == my_target) - particles -= W - if(repetition < power) - repetition++ - addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/item/extinguisher, move_particles), particles, repetition), 2) - -//Chair movement loop -/obj/item/extinguisher/proc/move_chair(obj/B, movementdirection, repetition=0) - step(B, movementdirection) - - var/timer_seconds - switch(repetition) - if(0 to 2) - timer_seconds = 1 - if(3 to 4) - timer_seconds = 2 - if(5 to 8) - timer_seconds = 3 - else - return - - repetition++ - addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/item/extinguisher, move_chair), B, movementdirection, repetition), timer_seconds) - -/obj/item/extinguisher/AltClick(mob/user) - if(!user.canUseTopic(src, BE_CLOSE, ismonkey(user))) - return - if(!user.is_holding(src)) - to_chat(user, "I must be holding the [src] in your hands do this!") - return - EmptyExtinguisher(user) - -/obj/item/extinguisher/proc/EmptyExtinguisher(mob/user) - if(loc == user && reagents.total_volume) - reagents.clear_reagents() - - var/turf/T = get_turf(loc) - if(isopenturf(T)) - var/turf/open/theturf = T - theturf.MakeSlippery(TURF_WET_WATER, min_wet_time = 10 SECONDS, wet_time_to_add = 5 SECONDS) - - user.visible_message("[user] empties out \the [src] onto the floor using the release valve.", "I quietly empty out \the [src] using its release valve.") diff --git a/code/game/objects/items/gift.dm b/code/game/objects/items/gift.dm deleted file mode 100644 index db85798429..0000000000 --- a/code/game/objects/items/gift.dm +++ /dev/null @@ -1,82 +0,0 @@ -/* Gifts and wrapping paper - * Contains: - * Gifts - * Wrapping Paper - */ - -/* - * Gifts - */ - -GLOBAL_LIST_EMPTY(possible_gifts) - -/obj/item/a_gift - name = "gift" - desc = "" - icon = 'icons/obj/storage.dmi' - icon_state = "giftdeliverypackage3" - item_state = "gift" - resistance_flags = FLAMMABLE - - var/obj/item/contains_type - -/obj/item/a_gift/Initialize() - . = ..() - pixel_x = rand(-10,10) - pixel_y = rand(-10,10) - icon_state = "giftdeliverypackage[rand(1,5)]" - - contains_type = get_gift_type() - -/obj/item/a_gift/suicide_act(mob/user) - user.visible_message("[user] peeks inside [src] and cries [user.p_them()]self to death! It looks like [user.p_they()] [user.p_were()] on the naughty list...") - return (BRUTELOSS) - -/obj/item/a_gift/examine(mob/M) - . = ..() - if(HAS_TRAIT(M, TRAIT_PRESENT_VISION) || isobserver(M)) - . += "It contains \a [initial(contains_type.name)]." - -/obj/item/a_gift/attack_self(mob/M) - if(HAS_TRAIT(M, TRAIT_CANNOT_OPEN_PRESENTS)) - to_chat(M, "You're supposed to be spreading gifts, not opening them yourself!") - return - - qdel(src) - - var/obj/item/I = new contains_type(get_turf(M)) - M.visible_message("[M] unwraps \the [src], finding \a [I] inside!") - I.investigate_log("([I.type]) was found in a present by [key_name(M)].", INVESTIGATE_PRESENTS) - M.put_in_hands(I) - I.add_fingerprint(M) - -/obj/item/a_gift/proc/get_gift_type() - var/gift_type_list = list(/obj/item/sord, - /obj/item/clothing/suit/poncho/red, - /obj/item/clothing/suit/snowman, - /obj/item/clothing/head/snowman, - /obj/item/stack/sheet/mineral/coal) - - gift_type_list += subtypesof(/obj/item/clothing/head/collectable) - gift_type_list += subtypesof(/obj/item/toy) - (((typesof(/obj/item/toy/cards) - /obj/item/toy/cards/deck) + /obj/item/toy/figure + /obj/item/toy/ammo)) //All toys, except for abstract types and syndicate cards. - - var/gift_type = pick(gift_type_list) - - return gift_type - - -/obj/item/a_gift/anything - name = "christmas gift" - desc = "" - -/obj/item/a_gift/anything/get_gift_type() - if(!GLOB.possible_gifts.len) - var/list/gift_types_list = subtypesof(/obj/item) - for(var/V in gift_types_list) - var/obj/item/I = V - if((!initial(I.icon_state)) || (!initial(I.item_state)) || (initial(I.item_flags) & ABSTRACT)) - gift_types_list -= V - GLOB.possible_gifts = gift_types_list - var/gift_type = pick(GLOB.possible_gifts) - - return gift_type diff --git a/code/game/objects/items/glass_shard.dm b/code/game/objects/items/glass_shard.dm new file mode 100644 index 0000000000..f9bbdc0c3f --- /dev/null +++ b/code/game/objects/items/glass_shard.dm @@ -0,0 +1,77 @@ +/obj/item/shard + name = "shard" + desc = "" + icon = 'icons/obj/shards.dmi' + icon_state = "large" + w_class = WEIGHT_CLASS_TINY + force = 5 + throwforce = 10 + item_state = "shard-glass" + lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' + attack_verb = list("stabbed", "slashed", "sliced", "cut") + hitsound = 'sound/blank.ogg' + resistance_flags = ACID_PROOF + armor = list("melee" = 100, "bullet" = 0, "laser" = 0, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 100) + max_integrity = 40 + sharpness = IS_SHARP + var/icon_prefix + + +/obj/item/shard/suicide_act(mob/user) + user.visible_message("[user] is slitting [user.p_their()] [pick("wrists", "throat")] with the shard of glass! It looks like [user.p_theyre()] trying to commit suicide.") + return (BRUTELOSS) + +/obj/item/shard/Initialize() + . = ..() + AddComponent(/datum/component/caltrop, force) + AddComponent(/datum/component/butchering, 150, 65) + icon_state = pick("large", "medium", "small") + switch(icon_state) + if("small") + pixel_x = rand(-12, 12) + pixel_y = rand(-12, 12) + if("medium") + pixel_x = rand(-8, 8) + pixel_y = rand(-8, 8) + if("large") + pixel_x = rand(-5, 5) + pixel_y = rand(-5, 5) + if (icon_prefix) + icon_state = "[icon_prefix][icon_state]" + + var/turf/T = get_turf(src) + if(T && is_station_level(T.z)) + SSblackbox.record_feedback("tally", "station_mess_created", 1, name) + +/obj/item/shard/Destroy() + . = ..() + + var/turf/T = get_turf(src) + if(T && is_station_level(T.z)) + SSblackbox.record_feedback("tally", "station_mess_destroyed", 1, name) + +/obj/item/shard/afterattack(atom/A as mob|obj, mob/user, proximity) + . = ..() + if(!proximity || !(src in user)) + return + if(isturf(A)) + return + if(istype(A, /obj/item/storage)) + return + var/hit_hand = ((user.active_hand_index % 2 == 0) ? "r_" : "l_") + "arm" + if(ishuman(user)) + var/mob/living/carbon/human/H = user + if(!H.gloves && !HAS_TRAIT(H, TRAIT_PIERCEIMMUNE)) // golems, etc + to_chat(H, "[src] cuts into your hand!") + H.apply_damage(force*0.5, BRUTE, hit_hand) + else if(ismonkey(user)) + var/mob/living/carbon/monkey/M = user + if(!HAS_TRAIT(M, TRAIT_PIERCEIMMUNE)) + to_chat(M, "[src] cuts into your hand!") + M.apply_damage(force*0.5, BRUTE, hit_hand) + +/obj/item/shard/Crossed(mob/living/L) + if(istype(L) && has_gravity(loc)) + playsound(loc, 'sound/foley/glass_step.ogg', HAS_TRAIT(L, TRAIT_LIGHT_STEP) ? 30 : 50, TRUE) + return ..() diff --git a/code/game/objects/items/granters.dm b/code/game/objects/items/granters.dm index e97038255e..91aaf871bb 100644 --- a/code/game/objects/items/granters.dm +++ b/code/game/objects/items/granters.dm @@ -86,34 +86,36 @@ G.Grant(user) onlearned(user) -/obj/item/book/granter/action/origami - granted_action = /datum/action/innate/origami - name = "The Art of Origami" - desc = "" - icon_state = "origamibook" - actionname = "origami" - oneuse = TRUE - remarks = list("Dead-stick stability...", "Symmetry seems to play a rather large factor...", "Accounting for crosswinds... really?", "Drag coefficients of various paper types...", "Thrust to weight ratios?", "Positive dihedral angle?", "Center of gravity forward of the center of lift...") +//Crafting Recipe books -/datum/action/innate/origami - name = "Origami Folding" - desc = "" - button_icon_state = "origami_off" - check_flags = NONE +/obj/item/book/granter/crafting_recipe + var/list/crafting_recipe_types = list() -/datum/action/innate/origami/Activate() - to_chat(owner, "I will now fold origami planes.") - button_icon_state = "origami_on" - active = TRUE - UpdateButtonIcon() +/obj/item/book/granter/crafting_recipe/on_reading_finished(mob/user) + . = ..() + if(!user.mind) + return + for(var/crafting_recipe_type in crafting_recipe_types) + var/datum/crafting_recipe/R = crafting_recipe_type + user.mind.teach_crafting_recipe(crafting_recipe_type) + to_chat(user,"I learned how to make [initial(R.name)].") -/datum/action/innate/origami/Deactivate() - to_chat(owner, "I will no longer fold origami planes.") - button_icon_state = "origami_off" - active = FALSE - UpdateButtonIcon() +/obj/item/book/granter/crafting_recipe/cooking_sweets_101 + name = "Cooking Desserts 101" + desc = "" +/* crafting_recipe_types = list( + /datum/crafting_recipe/food/mimetart, + /datum/crafting_recipe/food/berrytart, + /datum/crafting_recipe/food/cocolavatart, + /datum/crafting_recipe/food/clowncake, + /datum/crafting_recipe/food/vanillacake + ) +*/ + icon_state = "cooking_learing_sweets" + oneuse = FALSE + remarks = list("So that is how icing is made!", "Placing fruit on top? How simple...", "Huh layering cake seems harder then this...", "This book smells like candy", "A clown must have made this page, or they forgot to spell check it before printing...", "Wait, a way to cook slime to be safe?") -///SPELLS/// +//! --MAGICK SCROLLS-- !/ /obj/item/book/granter/spell var/spell @@ -147,271 +149,6 @@ if(oneuse) user.visible_message("[src] glows dark for a second!") -/obj/item/book/granter/spell/fireball - spell = /obj/effect/proc_holder/spell/aimed/fireball - spellname = "fireball" - icon_state ="bookfireball" - desc = "" - remarks = list("Aim...AIM, FOOL!", "Just catching them on fire won't do...", "Accounting for crosswinds... really?", "I think I just burned my hand...", "Why the dumb stance? It's just a flick of the hand...", "OMEE... ONI... Ugh...", "What's the difference between a fireball and a pyroblast...") - -/obj/item/book/granter/spell/fireball/recoil(mob/user) - ..() - explosion(user.loc, 1, 0, 2, 3, FALSE, FALSE, 2) - qdel(src) - -/obj/item/book/granter/spell/sacredflame - spell = /obj/effect/proc_holder/spell/targeted/sacred_flame - spellname = "sacred flame" - icon_state ="booksacredflame" - desc = "" - remarks = list("Well, it's one way to stop an attacker...", "I'm gonna need some good gear to stop myself from burning to death...", "Keep a fire extinguisher handy, got it...", "I think I just burned my hand...", "Apply flame directly to chest for proper ignition...", "No pain, no gain...", "One with the flame...") - -/obj/item/book/granter/spell/smoke - spell = /obj/effect/proc_holder/spell/targeted/smoke - spellname = "smoke" - icon_state ="booksmoke" - desc = "" - remarks = list("Smoke Bomb! Heh...", "Smoke bomb would do just fine too...", "Wait, there's a machine that does the same thing in chemistry?", "This book smells awful...", "Why all these weed jokes? Just tell me how to cast it...", "Wind will ruin the whole spell, good thing we're in space... Right?", "So this is how the spider clan does it...") - -/obj/item/book/granter/spell/smoke/lesser //Chaplain smoke book - spell = /obj/effect/proc_holder/spell/targeted/smoke/lesser - -/obj/item/book/granter/spell/smoke/recoil(mob/user) - ..() - to_chat(user,"My stomach rumbles...") - if(user.nutrition) - user.set_nutrition(200) - if(user.nutrition <= 0) - user.set_nutrition(0) - -/obj/item/book/granter/spell/blind - spell = /obj/effect/proc_holder/spell/targeted/trigger/blind - spellname = "blind" - icon_state ="bookblind" - desc = "" - remarks = list("Well I can't learn anything if I can't read the damn thing!", "Why would you use a dark font on a dark background...", "Ah, I can't see an Oh, I'm fine...", "I can't see my hand...!", "I'm manually blinking, damn you book...", "I can't read this page, but somehow I feel like I learned something from it...", "Hey, who turned off the lights?") - -/obj/item/book/granter/spell/blind/recoil(mob/user) - ..() - to_chat(user,"I go blind!") - user.blind_eyes(10) - -/obj/item/book/granter/spell/mindswap - spell = /obj/effect/proc_holder/spell/targeted/mind_transfer - spellname = "mindswap" - icon_state ="bookmindswap" - desc = "" - var/mob/stored_swap //Used in used book recoils to store an identity for mindswaps - remarks = list("If you mindswap from a mouse, they will be helpless when you recover...", "Wait, where am I...?", "This book is giving me a horrible headache...", "This page is blank, but I feel words popping into my head...", "GYNU... GYRO... Ugh...", "The voices in my head need to stop, I'm trying to read here...", "I don't think anyone will be happy when I cast this spell...") - -/obj/item/book/granter/spell/mindswap/onlearned() - spellname = pick("fireball","smoke","blind","forcewall","knock","barnyard","charge") - icon_state = "book[spellname]" - name = "spellbook of [spellname]" //Note, desc doesn't change by design - ..() - -/obj/item/book/granter/spell/mindswap/recoil(mob/user) - ..() - if(stored_swap in GLOB.dead_mob_list) - stored_swap = null - if(!stored_swap) - stored_swap = user - to_chat(user,"For a moment you feel like you don't even know who you are anymore.") - return - if(stored_swap == user) - to_chat(user,"I stare at the book some more, but there doesn't seem to be anything else to learn...") - return - var/obj/effect/proc_holder/spell/targeted/mind_transfer/swapper = new - if(swapper.cast(list(stored_swap), user, TRUE, TRUE)) - to_chat(user,"You're suddenly somewhere else... and someone else?!") - to_chat(stored_swap,"Suddenly you're staring at [src] again... where are you, who are you?!") - else - user.visible_message("[src] fizzles slightly as it stops glowing!") //if the mind_transfer failed to transfer mobs, likely due to the target being catatonic. - - stored_swap = null - -/obj/item/book/granter/spell/forcewall - spell = /obj/effect/proc_holder/spell/targeted/forcewall - spellname = "forcewall" - icon_state ="bookforcewall" - desc = "" - remarks = list("I can go through the wall! Neat.", "Why are there so many mime references...?", "This would cause much grief in a hallway...", "This is some surprisingly strong magic to create a wall nobody can pass through...", "Why the dumb stance? It's just a flick of the hand...", "Why are the pages so hard to turn, is this even paper?", "I can't mo Oh, i'm fine...") - -/obj/item/book/granter/spell/forcewall/recoil(mob/living/user) - ..() - to_chat(user,"I suddenly feel very solid!") - user.Stun(40, ignore_canstun = TRUE) - user.petrify(30) - -/obj/item/book/granter/spell/knock - spell = /obj/effect/proc_holder/spell/aoe_turf/knock - spellname = "knock" - icon_state ="bookknock" - desc = "" - remarks = list("Open Sesame!", "So THAT'S the magic password!", "Slow down, book. I still haven't finished this page...", "The book won't stop moving!", "I think this is hurting the spine of the book...", "I can't get to the next page, it's stuck t- I'm good, it just turned to the next page on it's own.", "Yeah, staff of doors does the same thing. Go figure...") - -/obj/item/book/granter/spell/knock/recoil(mob/living/user) - ..() - to_chat(user,"You're knocked down!") - user.Paralyze(40) - -/obj/item/book/granter/spell/barnyard - spell = /obj/effect/proc_holder/spell/targeted/barnyardcurse - spellname = "barnyard" - icon_state ="bookhorses" - desc = "" - remarks = list("Moooooooo!","Moo!","Moooo!", "NEEIIGGGHHHH!", "NEEEIIIIGHH!", "NEIIIGGHH!", "HAAWWWWW!", "HAAAWWW!", "Oink!", "Squeeeeeeee!", "Oink Oink!", "Ree!!", "Reee!!", "REEE!!", "REEEEE!!") - -/obj/item/book/granter/spell/barnyard/recoil(mob/living/carbon/user) - if(ishuman(user)) - to_chat(user,"HORSIE HAS RISEN") - var/obj/item/clothing/magichead = new /obj/item/clothing/mask/horsehead/cursed(user.drop_location()) - if(!user.dropItemToGround(user.wear_mask)) - qdel(user.wear_mask) - user.equip_to_slot_if_possible(magichead, SLOT_WEAR_MASK, TRUE, TRUE) - qdel(src) - else - to_chat(user,"I say thee neigh") //It still lives here - -/obj/item/book/granter/spell/summonitem - spell = /obj/effect/proc_holder/spell/targeted/summonitem - spellname = "instant summons" - icon_state ="booksummons" - desc = "" - remarks = list("I can't look away from the book!", "The words seem to pop around the page...", "I just need to focus on one item...", "Make sure to have a good grip on it when casting...", "Slow down, book. I still haven't finished this page...", "Sounds pretty great with some other magical artifacts...", "Magicians must love this one.") - -/obj/item/book/granter/spell/summonitem/recoil(mob/user) - ..() - to_chat(user,"[src] suddenly vanishes!") - qdel(src) - -/obj/item/book/granter/spell/random - icon_state = "random_book" - -/obj/item/book/granter/spell/random/Initialize() - . = ..() - var/static/banned_spells = list(/obj/item/book/granter/spell/mimery_blockade, /obj/item/book/granter/spell/mimery_guns) - var/real_type = pick(subtypesof(/obj/item/book/granter/spell) - banned_spells) - new real_type(loc) - return INITIALIZE_HINT_QDEL - -///MARTIAL ARTS/// - -/obj/item/book/granter/martial - var/martial - var/martialname = "bug jitsu" - var/greet = "You feel like you have mastered the art in breaking code. Nice work, jackass." - - -/obj/item/book/granter/martial/already_known(mob/user) - if(!martial) - return TRUE - var/datum/martial_art/MA = martial - if(user.mind.has_martialart(initial(MA.id))) - to_chat(user,"I already know [martialname]!") - return TRUE - return FALSE - -/obj/item/book/granter/martial/on_reading_start(mob/user) - to_chat(user, "I start reading about [martialname]...") - -/obj/item/book/granter/martial/on_reading_finished(mob/user) - to_chat(user, "[greet]") - var/datum/martial_art/MA = new martial - MA.teach(user) - user.log_message("learned the martial art [martialname] ([MA])", LOG_ATTACK, color="orange") - onlearned(user) - -/obj/item/book/granter/martial/cqc - martial = /datum/martial_art/cqc - name = "old manual" - martialname = "close quarters combat" - desc = "" - greet = "You've mastered the basics of CQC." - icon_state = "cqcmanual" - remarks = list("Kick... Slam...", "Lock... Kick...", "Strike their abdomen, neck and back for critical damage...", "Slam... Lock...", "I could probably combine this with some other martial arts!", "Words that kill...", "The last and final moment is yours...") - -/obj/item/book/granter/martial/cqc/onlearned(mob/living/carbon/user) - ..() - if(oneuse == TRUE) - to_chat(user, "[src] beeps ominously...") - -/obj/item/book/granter/martial/cqc/recoil(mob/living/carbon/user) - to_chat(user, "[src] explodes!") - playsound(src,'sound/blank.ogg',40,TRUE) - user.flash_act(1, 1) - user.adjustBruteLoss(6) - user.adjustFireLoss(6) - qdel(src) - -/obj/item/book/granter/martial/carp - martial = /datum/martial_art/the_sleeping_carp - name = "mysterious scroll" - martialname = "sleeping carp" - desc = "" - greet = "I have learned the ancient martial art of the Sleeping Carp! Your hand-to-hand combat has become much more effective, and you are now able to deflect any projectiles \ - directed toward you. However, you are also unable to use any ranged weaponry. You can learn more about my newfound art by using the Recall Teachings verb in the Sleeping Carp tab." - icon = 'icons/obj/wizard.dmi' - icon_state = "scroll2" - remarks = list("I must prove myself worthy to the masters of the sleeping carp...", "Stance means everything...", "Focus... And you'll be able to incapacitate any foe in seconds...", "I must pierce armor for maximum damage...", "I don't think this would combine with other martial arts...", "Grab them first so they don't retaliate...", "I must prove myself worthy of this power...") - -/obj/item/book/granter/martial/carp/onlearned(mob/living/carbon/user) - ..() - if(oneuse == TRUE) - desc = "" - name = "empty scroll" - icon_state = "blankscroll" - -/obj/item/book/granter/martial/plasma_fist - martial = /datum/martial_art/plasma_fist - name = "frayed scroll" - martialname = "plasma fist" - desc = "" - greet = "I have learned the ancient martial art of Plasma Fist. Your combos are extremely hard to pull off, but include some of the most deadly moves ever seen including \ - the plasma fist, which when pulled off will make someone violently explode." - icon = 'icons/obj/wizard.dmi' - icon_state ="scroll2" - remarks = list("Balance...", "Power...", "Control...", "Mastery...", "Vigilance...", "Skill...") - -/obj/item/book/granter/martial/plasma_fist/onlearned(mob/living/carbon/user) - ..() - if(oneuse == TRUE) - desc = "" - name = "empty scroll" - icon_state = "blankscroll" - -// I did not include mushpunch's grant, it is not a book and the item does it just fine. - -//Crafting Recipe books - -/obj/item/book/granter/crafting_recipe - var/list/crafting_recipe_types = list() - -/obj/item/book/granter/crafting_recipe/on_reading_finished(mob/user) - . = ..() - if(!user.mind) - return - for(var/crafting_recipe_type in crafting_recipe_types) - var/datum/crafting_recipe/R = crafting_recipe_type - user.mind.teach_crafting_recipe(crafting_recipe_type) - to_chat(user,"I learned how to make [initial(R.name)].") - -/obj/item/book/granter/crafting_recipe/cooking_sweets_101 - name = "Cooking Desserts 101" - desc = "" -/* crafting_recipe_types = list( - /datum/crafting_recipe/food/mimetart, - /datum/crafting_recipe/food/berrytart, - /datum/crafting_recipe/food/cocolavatart, - /datum/crafting_recipe/food/clowncake, - /datum/crafting_recipe/food/vanillacake - ) -*/ - icon_state = "cooking_learing_sweets" - oneuse = FALSE - remarks = list("So that is how icing is made!", "Placing fruit on top? How simple...", "Huh layering cake seems harder then this...", "This book smells like candy", "A clown must have made this page, or they forgot to spell check it before printing...", "Wait, a way to cook slime to be safe?") - -//! --MAGICK SCROLLS-- !/ /obj/item/book/granter/spell/magick/ desc = "A scroll of potential known only to those that can decipher its secrets." icon = 'icons/roguetown/items/misc.dmi' diff --git a/code/game/objects/items/grenades/antigravity.dm b/code/game/objects/items/grenades/antigravity.dm deleted file mode 100644 index 43b2f94986..0000000000 --- a/code/game/objects/items/grenades/antigravity.dm +++ /dev/null @@ -1,17 +0,0 @@ -/obj/item/grenade/antigravity - name = "antigravity grenade" - icon_state = "emp" - item_state = "emp" - - var/range = 7 - var/forced_value = 0 - var/duration = 300 - -/obj/item/grenade/antigravity/prime() - update_mob() - - for(var/turf/T in view(range,src)) - var/datum/component/C = T.AddComponent(/datum/component/forced_gravity,forced_value) - QDEL_IN(C,duration) - - qdel(src) diff --git a/code/game/objects/items/grenades/clusterbuster.dm b/code/game/objects/items/grenades/clusterbuster.dm deleted file mode 100644 index 843210fa38..0000000000 --- a/code/game/objects/items/grenades/clusterbuster.dm +++ /dev/null @@ -1,123 +0,0 @@ -//////////////////// -//Clusterbang -//////////////////// -/obj/item/grenade/clusterbuster - desc = "" - name = "clusterbang" - icon = 'icons/obj/grenade.dmi' - icon_state = "clusterbang" - var/base_state = "clusterbang" - var/payload = /obj/item/grenade/flashbang/cluster - var/payload_spawner = /obj/effect/payload_spawner - var/prime_sound = 'sound/blank.ogg' - var/min_spawned = 4 - var/max_spawned = 8 - var/segment_chance = 35 - -/obj/item/grenade/clusterbuster/prime() - update_mob() - var/numspawned = rand(min_spawned,max_spawned) - var/again = 0 - - for(var/more = numspawned,more > 0,more--) - if(prob(segment_chance)) - again++ - numspawned-- - - for(var/loop in 1 to again) - new /obj/item/grenade/clusterbuster/segment(drop_location(), src)//Creates 'segments' that launches a few more payloads - - new payload_spawner(drop_location(), payload, numspawned)//Launches payload - playsound(src, prime_sound, 75, TRUE, -3) - qdel(src) - -////////////////////// -//Clusterbang segment -////////////////////// -/obj/item/grenade/clusterbuster/segment - desc = "" - name = "clusterbang segment" - icon = 'icons/obj/grenade.dmi' - icon_state = "clusterbang_segment" - base_state = "clusterbang_segment" - -/obj/item/grenade/clusterbuster/segment/Initialize(mapload, obj/item/grenade/clusterbuster/base) - . = ..() - if(base) - name = "[base.name] segment" - base_state = "[base.base_state]_segment" - icon_state = base_state - payload_spawner = base.payload_spawner - payload = base.payload - prime_sound = base.prime_sound - min_spawned = base.min_spawned - max_spawned = base.max_spawned - icon_state = "[base_state]_active" - active = TRUE - var/steps = rand(1,4) - for(var/i in 1 to steps) - step_away(src,loc) - addtimer(CALLBACK(src, PROC_REF(prime)), rand(15,60)) - -/obj/item/grenade/clusterbuster/segment/prime() - new payload_spawner(drop_location(), payload, rand(min_spawned,max_spawned)) - playsound(src, prime_sound, 75, TRUE, -3) - qdel(src) - -////////////////////////////////// -//The payload spawner effect -///////////////////////////////// -/obj/effect/payload_spawner/Initialize(mapload, type, numspawned) - ..() - spawn_payload(type, numspawned) - return INITIALIZE_HINT_QDEL - -/obj/effect/payload_spawner/proc/spawn_payload(type, numspawned = 0) - for(var/loop in 1 to numspawned) - var/obj/item/grenade/P = new type(loc) - if(istype(P)) - P.active = TRUE - addtimer(CALLBACK(P, TYPE_PROC_REF(/obj/item/grenade, prime)), rand(15,60)) - var/steps = rand(1,4) - for(var/i in 1 to steps) - step_away(src,loc) - -////////////////////////////////// -//Custom payload clusterbusters -///////////////////////////////// -/obj/item/grenade/flashbang/cluster - icon_state = "flashbang_active" - -/obj/item/grenade/clusterbuster/emp - name = "Electromagnetic Storm" - payload = /obj/item/grenade/empgrenade - -/obj/item/grenade/clusterbuster/smoke - name = "Ninja Vanish" - payload = /obj/item/grenade/smokebomb - -/obj/item/grenade/clusterbuster/syndieminibomb - name = "SyndiWrath" - payload = /obj/item/grenade/syndieminibomb - -/obj/item/grenade/clusterbuster/spawner_manhacks - name = "iViscerator" - payload = /obj/item/grenade/spawnergrenade/manhacks - -/obj/item/grenade/clusterbuster/spawner_spesscarp - name = "Invasion of the Space Carps" - payload = /obj/item/grenade/spawnergrenade/spesscarp - -/obj/item/grenade/clusterbuster/soap - name = "Slipocalypse" - payload = /obj/item/grenade/spawnergrenade/syndiesoap - -//random clusterbuster spawner -/obj/item/grenade/clusterbuster/random - icon_state = "random_clusterbang" - -/obj/item/grenade/clusterbuster/random/Initialize() - ..() - var/real_type = pick(subtypesof(/obj/item/grenade/clusterbuster)) - new real_type(loc) - return INITIALIZE_HINT_QDEL diff --git a/code/game/objects/items/grenades/emgrenade.dm b/code/game/objects/items/grenades/emgrenade.dm deleted file mode 100644 index 7311875de0..0000000000 --- a/code/game/objects/items/grenades/emgrenade.dm +++ /dev/null @@ -1,10 +0,0 @@ -/obj/item/grenade/empgrenade - name = "classic EMP grenade" - desc = "" - icon_state = "emp" - item_state = "emp" - -/obj/item/grenade/empgrenade/prime() - update_mob() - empulse(src, 4, 10) - qdel(src) diff --git a/code/game/objects/items/grenades/flashbang.dm b/code/game/objects/items/grenades/flashbang.dm deleted file mode 100644 index ee4686e7b6..0000000000 --- a/code/game/objects/items/grenades/flashbang.dm +++ /dev/null @@ -1,41 +0,0 @@ -/obj/item/grenade/flashbang - name = "flashbang" - icon_state = "flashbang" - item_state = "flashbang" - lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' - var/flashbang_range = 7 //how many tiles away the mob will be stunned. - -/obj/item/grenade/flashbang/prime() - update_mob() - var/flashbang_turf = get_turf(src) - if(!flashbang_turf) - return - do_sparks(rand(5, 9), FALSE, src) - playsound(flashbang_turf, 'sound/blank.ogg', 100, TRUE, 8, 0.9) - new /obj/effect/dummy/lighting_obj (flashbang_turf, LIGHT_COLOR_WHITE, (flashbang_range + 2), 4, 2) - for(var/mob/living/M in get_hearers_in_view(flashbang_range, flashbang_turf)) - bang(get_turf(M), M) - qdel(src) - -/obj/item/grenade/flashbang/proc/bang(turf/T , mob/living/M) - if(M.stat == DEAD) //They're dead! - return - M.show_message("BANG", MSG_AUDIBLE) - var/distance = max(0,get_dist(get_turf(src),T)) - -//Flash - if(M.flash_act(affect_silicon = 1)) - M.Paralyze(max(20/max(1,distance), 5)) - M.Knockdown(max(200/max(1,distance), 60)) - -//Bang - if(!distance || loc == M || loc == M.loc) //Stop allahu akbarring rooms with this. - M.Paralyze(20) - M.Knockdown(200) - M.soundbang_act(1, 200, 10, 15) - else - if(distance <= 1) // Adds more stun as to not prime n' pull (#45381) - M.Paralyze(5) - M.Knockdown(30) - M.soundbang_act(1, max(200/max(1,distance), 60), rand(0, 5)) diff --git a/code/game/objects/items/grenades/ghettobomb.dm b/code/game/objects/items/grenades/ghettobomb.dm deleted file mode 100644 index 680fdbc288..0000000000 --- a/code/game/objects/items/grenades/ghettobomb.dm +++ /dev/null @@ -1,63 +0,0 @@ -//improvised explosives// - -/obj/item/grenade/iedcasing - name = "improvised firebomb" - desc = "" - w_class = WEIGHT_CLASS_SMALL - icon = 'icons/obj/grenade.dmi' - icon_state = "improvised_grenade" - item_state = "flashbang" - lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' - throw_speed = 1 - throw_range = 7 - flags_1 = CONDUCT_1 - slot_flags = ITEM_SLOT_BELT - active = 0 - det_time = 50 - display_timer = 0 - var/range = 3 - var/list/times - -/obj/item/grenade/iedcasing/Initialize() - . = ..() - add_overlay("improvised_grenade_filled") - add_overlay("improvised_grenade_wired") - times = list("5" = 10, "-1" = 20, "[rand(30,80)]" = 50, "[rand(65,180)]" = 20)// "Premature, Dud, Short Fuse, Long Fuse"=[weighting value] - det_time = text2num(pickweight(times)) - if(det_time < 0) //checking for 'duds' - range = 1 - det_time = rand(30,80) - else - range = pick(2,2,2,3,3,3,4) - -/obj/item/grenade/iedcasing/CheckParts(list/parts_list) - ..() - var/obj/item/reagent_containers/food/drinks/soda_cans/can = locate() in contents - if(can) - can.pixel_x = 0 //Reset the sprite's position to make it consistent with the rest of the IED - can.pixel_y = 0 - var/mutable_appearance/can_underlay = new(can) - can_underlay.layer = FLOAT_LAYER - can_underlay.plane = FLOAT_PLANE - underlays += can_underlay - - -/obj/item/grenade/iedcasing/attack_self(mob/user) // - if(!active) - if(clown_check(user)) - to_chat(user, "I light the [name]!") - cut_overlay("improvised_grenade_filled") - preprime(user, null, FALSE) - -/obj/item/grenade/iedcasing/prime() //Blowing that can up - update_mob() - explosion(src.loc,-1,-1,2, flame_range = 4) // small explosion, plus a very large fireball. - qdel(src) - -/obj/item/grenade/iedcasing/change_det_time() - return //always be random. - -/obj/item/grenade/iedcasing/examine(mob/user) - . = ..() - . += "You can't tell when it will explode!" diff --git a/code/game/objects/items/grenades/grenade.dm b/code/game/objects/items/grenades/grenade.dm deleted file mode 100644 index 39e0e028f1..0000000000 --- a/code/game/objects/items/grenades/grenade.dm +++ /dev/null @@ -1,135 +0,0 @@ -/obj/item/grenade - name = "grenade" - desc = "" - w_class = WEIGHT_CLASS_SMALL - icon = 'icons/obj/grenade.dmi' - icon_state = "grenade" - item_state = "flashbang" - lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' - throw_speed = 1 - throw_range = 7 - flags_1 = CONDUCT_1 - slot_flags = ITEM_SLOT_BELT - resistance_flags = FLAMMABLE - max_integrity = 40 - var/active = 0 - var/det_time = 50 - var/display_timer = 1 - var/clumsy_check = GRENADE_CLUMSY_FUMBLE - -/obj/item/grenade/suicide_act(mob/living/carbon/user) - user.visible_message("[user] primes [src], then eats it! It looks like [user.p_theyre()] trying to commit suicide!") - playsound(src, 'sound/blank.ogg', 50, TRUE) - preprime(user, det_time) - user.transferItemToLoc(src, user, TRUE)//>eat a grenade set to 5 seconds >rush captain - sleep(det_time)//so you dont die instantly - return BRUTELOSS - -/obj/item/grenade/deconstruct(disassembled = TRUE) - if(!disassembled) - prime() - if(!QDELETED(src)) - qdel(src) - -/obj/item/grenade/proc/clown_check(mob/living/carbon/human/user) - var/clumsy = HAS_TRAIT(user, TRAIT_CLUMSY) - if(clumsy && (clumsy_check == GRENADE_CLUMSY_FUMBLE)) - if(prob(50)) - to_chat(user, "Huh? How does this thing work?") - preprime(user, 5, FALSE) - return FALSE - else if(!clumsy && (clumsy_check == GRENADE_NONCLUMSY_FUMBLE)) - to_chat(user, "I pull the pin on [src]. Attached to it is a pink ribbon that says, \"HONK\"") - preprime(user, 5, FALSE) - return FALSE - return TRUE - - -/obj/item/grenade/examine(mob/user) - . = ..() - if(display_timer) - if(det_time > 0) - . += "The timer is set to [DisplayTimeText(det_time)]." - else - . += "\The [src] is set for instant detonation." - - -/obj/item/grenade/attack_self(mob/user) - if(!active) - if(clown_check(user)) - preprime(user) - -/obj/item/grenade/proc/log_grenade(mob/user, turf/T) - log_bomber(user, "has primed a", src, "for detonation") - -/obj/item/grenade/proc/preprime(mob/user, delayoverride, msg = TRUE, volume = 60) - var/turf/T = get_turf(src) - log_grenade(user, T) //Inbuilt admin procs already handle null users - if(user) - add_fingerprint(user) - if(msg) - to_chat(user, "I prime [src]! [capitalize(DisplayTimeText(det_time))]!") - playsound(src, 'sound/blank.ogg', volume, TRUE) - active = TRUE - icon_state = initial(icon_state) + "_active" - addtimer(CALLBACK(src, PROC_REF(prime)), isnull(delayoverride)? det_time : delayoverride) - -/obj/item/grenade/proc/prime() - -/obj/item/grenade/proc/update_mob() - if(ismob(loc)) - var/mob/M = loc - M.dropItemToGround(src) - -/obj/item/grenade/attackby(obj/item/W, mob/user, params) - if(!active) - if(W.tool_behaviour == TOOL_MULTITOOL) - var/newtime = text2num(stripped_input(user, "Please enter a new detonation time", name)) - if (newtime != null && user.canUseTopic(src, BE_CLOSE)) - if(change_det_time(newtime)) - to_chat(user, "I modify the time delay. It's set for [DisplayTimeText(det_time)].") - if (round(newtime * 10) != det_time) - to_chat(user, "The new value is out of bounds. The lowest possible time is 3 seconds and highest is 5 seconds. Instant detonations are also possible.") - return - else if(W.tool_behaviour == TOOL_SCREWDRIVER) - if(change_det_time()) - to_chat(user, "I modify the time delay. It's set for [DisplayTimeText(det_time)].") - else - return ..() - -/obj/item/grenade/proc/change_det_time(time) //Time uses real time. - . = TRUE - if(time != null) - if(time < 3) - time = 3 - det_time = round(CLAMP(time * 10, 0, 50)) - else - var/previous_time = det_time - switch(det_time) - if (0) - det_time = 30 - if (30) - det_time = 50 - if (50) - det_time = 0 - if(det_time == previous_time) - det_time = 50 - -/obj/item/grenade/attack_paw(mob/user) - return attack_hand(user) - -/obj/item/grenade/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - var/obj/projectile/P = hitby - if(damage && attack_type == PROJECTILE_ATTACK && P.damage_type != STAMINA && prob(15)) - owner.visible_message("[attack_text] hits [owner]'s [src], setting it off! What a shot!") - var/turf/T = get_turf(src) - log_game("A projectile ([hitby]) detonated a grenade held by [key_name(owner)] at [COORD(T)]") - message_admins("A projectile ([hitby]) detonated a grenade held by [key_name_admin(owner)] at [ADMIN_COORDJMP(T)]") - prime() - return TRUE //It hit the grenade, not them - -/obj/item/grenade/afterattack(atom/target, mob/user) - . = ..() - if(active) - user.throw_item(target) diff --git a/code/game/objects/items/grenades/smokebomb.dm b/code/game/objects/items/grenades/smokebomb.dm deleted file mode 100644 index 9c1e4a8cee..0000000000 --- a/code/game/objects/items/grenades/smokebomb.dm +++ /dev/null @@ -1,29 +0,0 @@ -/** - *This is smoke bomb, mezum koman. It is a grenade subtype. All craftmanship is of the highest quality. - *It menaces with spikes of iron. On it is a depiction of an assistant. - *The assistant is bleeding. The assistant has a painful expression. The assistant is dead. - */ -/obj/item/grenade/smokebomb - name = "smoke grenade" - desc = "" - icon = 'icons/obj/grenade.dmi' - icon_state = "smokewhite" - item_state = "smoke" - slot_flags = ITEM_SLOT_BELT - ///It's extremely important to keep this list up to date. It helps to generate the insightful description of the smokebomb - var/static/list/bruh_moment = list("Dank", "Hip", "Lit", "Based", "Robust", "Bruh", "Nyagger") - -///Here we generate the extremely insightful description. -/obj/item/grenade/smokebomb/Initialize() - . = ..() - desc = "" - -///Here we generate some smoke and also damage blobs??? for some reason. Honestly not sure why we do that. -/obj/item/grenade/smokebomb/prime() - update_mob() - playsound(src, 'sound/blank.ogg', 50, TRUE, -3) - var/datum/effect_system/smoke_spread/bad/smoke = new - smoke.set_up(4, src) - smoke.start() - qdel(smoke) //And deleted again. Sad really. - qdel(src) diff --git a/code/game/objects/items/grenades/spawnergrenade.dm b/code/game/objects/items/grenades/spawnergrenade.dm deleted file mode 100644 index abcbe6649b..0000000000 --- a/code/game/objects/items/grenades/spawnergrenade.dm +++ /dev/null @@ -1,56 +0,0 @@ -/obj/item/grenade/spawnergrenade - desc = "" - name = "delivery grenade" - icon = 'icons/obj/grenade.dmi' - icon_state = "delivery" - item_state = "flashbang" - var/spawner_type = null // must be an object path - var/deliveryamt = 1 // amount of type to deliver - -/obj/item/grenade/spawnergrenade/prime() // Prime now just handles the two loops that query for people in lockers and people who can see it. - update_mob() - if(spawner_type && deliveryamt) - // Make a quick flash - var/turf/T = get_turf(src) - playsound(T, 'sound/blank.ogg', 100, TRUE) - for(var/mob/living/carbon/C in viewers(T, null)) - C.flash_act() - - // Spawn some hostile syndicate critters and spread them out - var/list/spawned = spawn_and_random_walk(spawner_type, T, deliveryamt, walk_chance=50, admin_spawn=((flags_1 & ADMIN_SPAWNED_1) ? TRUE : FALSE)) - afterspawn(spawned) - - qdel(src) - -/obj/item/grenade/spawnergrenade/proc/afterspawn(list/mob/spawned) - return - -/obj/item/grenade/spawnergrenade/manhacks - name = "viscerator delivery grenade" - spawner_type = /mob/living/simple_animal/hostile/viscerator - deliveryamt = 10 - -/obj/item/grenade/spawnergrenade/spesscarp - name = "carp delivery grenade" - spawner_type = /mob/living/simple_animal/hostile/carp - deliveryamt = 5 - -/obj/item/grenade/spawnergrenade/syndiesoap - name = "Mister Scrubby" - spawner_type = /obj/item/soap/syndie - -/obj/item/grenade/spawnergrenade/clown - name = "C.L.U.W.N.E." - desc = "" - icon_state = "clown_ball" - item_state = "clown_ball" - spawner_type = list(/mob/living/simple_animal/hostile/retaliate/clown/fleshclown, /mob/living/simple_animal/hostile/retaliate/clown/clownhulk, /mob/living/simple_animal/hostile/retaliate/clown/longface, /mob/living/simple_animal/hostile/retaliate/clown/clownhulk/chlown, /mob/living/simple_animal/hostile/retaliate/clown/clownhulk/honcmunculus, /mob/living/simple_animal/hostile/retaliate/clown/mutant/blob, /mob/living/simple_animal/hostile/retaliate/clown/banana, /mob/living/simple_animal/hostile/retaliate/clown/honkling, /mob/living/simple_animal/hostile/retaliate/clown/lube) - deliveryamt = 1 - -/obj/item/grenade/spawnergrenade/clown_broken - name = "stuffed C.L.U.W.N.E." - desc = "" - icon_state = "clown_broken" - item_state = "clown_broken" - spawner_type = /mob/living/simple_animal/hostile/retaliate/clown/mutant - deliveryamt = 5 diff --git a/code/game/objects/items/grenades/syndieminibomb.dm b/code/game/objects/items/grenades/syndieminibomb.dm deleted file mode 100644 index d78175e5e1..0000000000 --- a/code/game/objects/items/grenades/syndieminibomb.dm +++ /dev/null @@ -1,50 +0,0 @@ -/obj/item/grenade/syndieminibomb - desc = "" - name = "syndicate minibomb" - icon = 'icons/obj/grenade.dmi' - icon_state = "syndicate" - item_state = "flashbang" - - -/obj/item/grenade/syndieminibomb/prime() - update_mob() - explosion(src.loc,1,2,4,flame_range = 2) - qdel(src) - -/obj/item/grenade/syndieminibomb/concussion - name = "HE Grenade" - desc = "" - icon_state = "concussion" - -/obj/item/grenade/syndieminibomb/concussion/prime() - update_mob() - explosion(src.loc,0,2,3,flame_range = 3) - qdel(src) - -/obj/item/grenade/syndieminibomb/concussion/frag - name = "frag grenade" - desc = "" - icon_state = "frag" - -/obj/item/grenade/gluon - desc = "" - name = "gluon frag grenade" - icon = 'icons/obj/grenade.dmi' - icon_state = "bluefrag" - item_state = "flashbang" - var/freeze_range = 4 - var/rad_damage = 350 - var/stamina_damage = 30 - -/obj/item/grenade/gluon/prime() - update_mob() - playsound(loc, 'sound/blank.ogg', 50, TRUE) - radiation_pulse(src, rad_damage) - for(var/turf/T in view(freeze_range,loc)) - if(isfloorturf(T)) - var/turf/open/floor/F = T - F.MakeSlippery(TURF_WET_PERMAFROST, 6 MINUTES) - for(var/mob/living/carbon/L in T) - L.adjustStaminaLoss(stamina_damage) - L.adjust_bodytemperature(-230) - qdel(src) diff --git a/code/game/objects/items/handcuffs.dm b/code/game/objects/items/handcuffs.dm deleted file mode 100644 index 1ba99ae646..0000000000 --- a/code/game/objects/items/handcuffs.dm +++ /dev/null @@ -1,523 +0,0 @@ -/obj/item/restraints - breakouttime = 600 - -/obj/item/restraints/suicide_act(mob/living/carbon/user) - user.visible_message("[user] is strangling [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to commit suicide!") - return(OXYLOSS) - -/obj/item/restraints/Destroy() - if(iscarbon(loc)) - var/mob/living/carbon/M = loc - if(M.handcuffed == src) - M.handcuffed = null - M.update_handcuffed() - if(M.buckled && M.buckled.buckle_requires_restraints) - M.buckled.unbuckle_mob(M) - if(M.legcuffed == src) - M.legcuffed = null - M.update_inv_legcuffed() - return ..() - -//Handcuffs - -/obj/item/restraints/handcuffs - name = "handcuffs" - desc = "" - gender = PLURAL - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "handcuff" - lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' - flags_1 = CONDUCT_1 - slot_flags = ITEM_SLOT_BELT - throwforce = 0 - w_class = WEIGHT_CLASS_NORMAL - throw_speed = 1 - throw_range = 5 - custom_materials = list(/datum/material/iron=500) - breakouttime = 1 MINUTES - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) - var/cuffsound = 'sound/blank.ogg' - var/trashtype = null //for disposable cuffs - max_integrity = 1000 - -/obj/item/restraints/handcuffs/cable/attackby(obj/item/I, mob/user, params) - ..() - if(istype(I, /obj/item/stack/rods)) - var/obj/item/stack/rods/R = I - if (R.use(1)) - var/obj/item/wirerod/W = new /obj/item/wirerod - remove_item_from_storage(user) - user.put_in_hands(W) - to_chat(user, "I wrap [src] around the top of [I].") - qdel(src) - else - to_chat(user, "I need one rod to make a wired rod!") - return - else if(istype(I, /obj/item/stack/sheet/metal)) - var/obj/item/stack/sheet/metal/M = I - if(M.get_amount() < 6) - to_chat(user, "I need at least six metal sheets to make good enough weights!") - return - to_chat(user, "I begin to apply [I] to [src]...") - if(do_after(user, 35, target = src)) - if(M.get_amount() < 6 || !M) - return - var/obj/item/restraints/legcuffs/bola/S = new /obj/item/restraints/legcuffs/bola - M.use(6) - user.put_in_hands(S) - to_chat(user, "I make some weights out of [I] and tie them to [src].") - remove_item_from_storage(user) - qdel(src) - else - return ..() - -/obj/item/restraints/handcuffs/attack(mob/living/carbon/C, mob/living/user) - if(!istype(C)) - return - - if(iscarbon(user) && (HAS_TRAIT(user, TRAIT_CLUMSY) && prob(50))) - to_chat(user, "Uh... how do those things work?!") - apply_cuffs(user,user) - return - - // chance of monkey retaliation - if(ismonkey(C) && prob(MONKEY_CUFF_RETALIATION_PROB)) - var/mob/living/carbon/monkey/M - M = C - M.retaliate(user) - - if(!C.handcuffed) - if(C.get_num_arms(FALSE) >= 2 || C.get_arm_ignore()) - C.visible_message("[user] is trying to put [src.name] on [C]!", \ - "[user] is trying to put [src.name] on you!") - - playsound(loc, cuffsound, 30, TRUE, -2) - if(do_mob(user, C, 30) && (C.get_num_arms(FALSE) >= 2 || C.get_arm_ignore())) - apply_cuffs(C, user) - C.visible_message("[user] handcuffs [C].", \ - "[user] handcuffs you.") - SSblackbox.record_feedback("tally", "handcuffs", 1, type) - - log_combat(user, C, "handcuffed") - else - to_chat(user, "I fail to handcuff [C]!") - else - to_chat(user, "[C] doesn't have two hands...") - -/obj/item/restraints/handcuffs/proc/apply_cuffs(mob/living/carbon/target, mob/user, dispense = 0) - if(target.handcuffed) - return - - if(!user.temporarilyRemoveItemFromInventory(src) && !dispense) - return - - var/obj/item/restraints/handcuffs/cuffs = src - if(trashtype) - cuffs = new trashtype() - else if(dispense) - cuffs = new type() - - cuffs.forceMove(target) - target.handcuffed = cuffs - - target.update_handcuffed() - if(trashtype && !dispense) - qdel(src) - return - -/obj/item/restraints/handcuffs/cable/sinew - name = "sinew restraints" - desc = "" - icon = 'icons/obj/mining.dmi' - icon_state = "sinewcuff" - item_state = "sinewcuff" - custom_materials = null - color = null - -/obj/item/restraints/handcuffs/cable - name = "cable restraints" - desc = "" - icon_state = "cuff" - item_state = "coil" - color = "#ff0000" - lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' - custom_materials = list(/datum/material/iron=150, /datum/material/glass=75) - breakouttime = 30 SECONDS - cuffsound = 'sound/blank.ogg' - -/obj/item/restraints/handcuffs/cable/red - color = "#ff0000" - -/obj/item/restraints/handcuffs/cable/yellow - color = "#ffff00" - -/obj/item/restraints/handcuffs/cable/blue - color = "#1919c8" - -/obj/item/restraints/handcuffs/cable/green - color = "#00aa00" - -/obj/item/restraints/handcuffs/cable/pink - color = "#ff3ccd" - -/obj/item/restraints/handcuffs/cable/orange - color = "#ff8000" - -/obj/item/restraints/handcuffs/cable/cyan - color = "#00ffff" - -/obj/item/restraints/handcuffs/cable/white - color = null - -/obj/item/restraints/handcuffs/alien - icon_state = "handcuffAlien" - -/obj/item/restraints/handcuffs/fake - name = "fake handcuffs" - desc = "" - breakouttime = 1 SECONDS - -/obj/item/restraints/handcuffs/cable/attackby(obj/item/I, mob/user, params) - ..() - if(istype(I, /obj/item/stack/rods)) - var/obj/item/stack/rods/R = I - if (R.use(1)) - var/obj/item/wirerod/W = new /obj/item/wirerod - remove_item_from_storage(user) - user.put_in_hands(W) - to_chat(user, "I wrap [src] around the top of [I].") - qdel(src) - else - to_chat(user, "I need one rod to make a wired rod!") - return - else if(istype(I, /obj/item/stack/sheet/metal)) - var/obj/item/stack/sheet/metal/M = I - if(M.get_amount() < 6) - to_chat(user, "I need at least six metal sheets to make good enough weights!") - return - to_chat(user, "I begin to apply [I] to [src]...") - if(do_after(user, 35, target = src)) - if(M.get_amount() < 6 || !M) - return - var/obj/item/restraints/legcuffs/bola/S = new /obj/item/restraints/legcuffs/bola - M.use(6) - user.put_in_hands(S) - to_chat(user, "I make some weights out of [I] and tie them to [src].") - remove_item_from_storage(user) - qdel(src) - else - return ..() - -/obj/item/restraints/handcuffs/cable/zipties - name = "zipties" - desc = "" - icon_state = "cuff" - lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' - custom_materials = null - breakouttime = 45 SECONDS - trashtype = /obj/item/restraints/handcuffs/cable/zipties/used - color = null - -/obj/item/restraints/handcuffs/cable/zipties/used - desc = "" - icon_state = "cuff_used" - item_state = "cuff" - -/obj/item/restraints/handcuffs/cable/zipties/used/attack() - return - -//Legcuffs - -/obj/item/restraints/legcuffs - name = "leg cuffs" - desc = "" - gender = PLURAL - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "handcuff" - lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' - flags_1 = CONDUCT_1 - throwforce = 0 - w_class = WEIGHT_CLASS_NORMAL - slowdown = 7 - breakouttime = 30 SECONDS - -/obj/item/restraints/legcuffs/beartrap - icon = 'icons/roguetown/items/misc.dmi' - name = "mantrap" - gender = NEUTER - throw_speed = 1 - throw_range = 1 - icon_state = "beartrap" - desc = "A crude and rusty spring trap, used to snare interlopers, or prey on a hunt. Looks almost like falling apart." - var/rusty = TRUE // Is it an old trap? Will most likely be destroyed if not handled right - var/armed = FALSE // Is it armed? - var/trap_damage = 90 // How much brute damage the trap will do to its victim - var/used_time = 12 SECONDS // How many seconds it takes to disarm the trap - max_integrity = 100 - -/obj/item/restraints/legcuffs/beartrap/attack_hand(mob/user) - var/boon = user?.mind?.get_learning_boon(/datum/skill/craft/traps) - if(iscarbon(user) && armed && isturf(loc)) - var/mob/living/carbon/C = user - var/def_zone = "[(C.active_hand_index == 2) ? "r" : "l" ]_arm" - var/obj/item/bodypart/BP = C.get_bodypart(def_zone) - if(!BP) - return FALSE - if(C.badluck(5)) // UNLUCKY - add_mob_blood(C) - if(!BP.is_object_embedded(src)) - BP.add_embedded_object(src) - close_trap() - C.visible_message("[C] triggers \the [src].", \ - "I trigger \the [src]!") - C.emote("agony") - C.Stun(80) - BP.add_wound(/datum/wound/fracture) - BP.update_disabled() - C.apply_damage(trap_damage, BRUTE, def_zone, C.run_armor_check(def_zone, "melee", damage = trap_damage)) - C.consider_ambush() - return FALSE - else - if(C.mind) - used_time -= max((C.mind.get_skill_level(/datum/skill/craft/traps) * 2 SECONDS), 2 SECONDS) - if(do_after(user, used_time, target = src)) - armed = FALSE - anchored = FALSE - update_icon() - src.alpha = 255 - C.visible_message("[C] disarms \the [src].", \ - "I disarm \the [src].") - C.mind?.adjust_experience(/datum/skill/craft/traps, C.STAINT * boon, FALSE) - return FALSE - else - add_mob_blood(C) - if(!BP.is_object_embedded(src)) - BP.add_embedded_object(src) - close_trap() - C.visible_message("[C] triggers \the [src].", \ - "I trigger \the [src]!") - C.emote("agony") - BP.add_wound(/datum/wound/fracture) - BP.update_disabled() - C.apply_damage(trap_damage, BRUTE, def_zone, C.run_armor_check(def_zone, "melee", damage = trap_damage)) - C.consider_ambush() - return FALSE - ..() - -/obj/item/restraints/legcuffs/beartrap/attackby(obj/item/W, mob/user) - if(W.force && armed) - user.visible_message("[user] triggers \the [src] with [W].", \ - "I trigger \the [src] with [W]!") - W.take_damage(20) - close_trap() - if(isliving(user)) - var/mob/living/L = user - L.consider_ambush() - return - ..() - -/obj/item/restraints/legcuffs/beartrap/armed - armed = TRUE - anchored = TRUE // Pre mapped traps (bad mapping btw, don't) start anchored - -/obj/item/restraints/legcuffs/beartrap/armed/camouflage - armed = TRUE - alpha = 80 - -/obj/item/restraints/legcuffs/beartrap/Initialize() - . = ..() - update_icon() - -/obj/item/restraints/legcuffs/beartrap/update_icon() - . = ..() - icon_state = "[initial(icon_state)][armed]" - -/obj/item/restraints/legcuffs/beartrap/suicide_act(mob/user) - user.visible_message("[user] is sticking [user.p_their()] head in the [src.name]! It looks like [user.p_theyre()] trying to commit suicide!") - playsound(loc, 'sound/blank.ogg', 50, TRUE, -1) - return (BRUTELOSS) - -/obj/item/restraints/legcuffs/beartrap/attack_self(mob/user) - ..() - var/boon = user?.mind?.get_learning_boon(/datum/skill/craft/traps) - if(ishuman(user) && !user.stat && !user.restrained()) - var/mob/living/L = user - if(do_after(user, 50 - (L.STASTR*2), target = user)) - if(prob(50 + (L.mind.get_skill_level(/datum/skill/craft/traps) * 10))) // 100% chance to set traps properly at Master trapping - armed = TRUE // Impossible to use in hand if it's armed - L.dropItemToGround(src) // We drop it instantly on the floor beneath us - anchored = TRUE // And anchor it so that it can't be carried inside chests (prevents exploit) - update_icon() - src.alpha = 80 // Set lower visibility for everyone - L.mind?.adjust_experience(/datum/skill/craft/traps, L.STAINT * boon, FALSE) // We learn how to set them better, little by little. - to_chat(user, "I arm |the [src].") - else - if(rusty) - user.visible_message("The rusty [src.name] breaks under stress!") - playsound(src.loc, 'sound/foley/breaksound.ogg', 100, TRUE, -1) - qdel(src) - else - user.visible_message("Curses! I couldn't keep [src.name] open tight enough!") - playsound(src.loc, 'sound/items/beartrap.ogg', 300, TRUE, -1) - return - -/obj/item/restraints/legcuffs/beartrap/proc/close_trap() - armed = FALSE - anchored = FALSE // Take it off the ground - alpha = 255 - update_icon() - playsound(src.loc, 'sound/items/beartrap.ogg', 300, TRUE, -1) - -/obj/item/restraints/legcuffs/beartrap/Crossed(AM as mob|obj) - if(armed && isturf(loc)) - if(isliving(AM)) - var/mob/living/L = AM - var/snap = TRUE - if(istype(L.buckled, /obj/vehicle)) - var/obj/vehicle/ridden_vehicle = L.buckled - if(!ridden_vehicle.are_legs_exposed) //close the trap without injuring/trapping the rider if their legs are inside the vehicle at all times. - close_trap() - ridden_vehicle.visible_message("[ridden_vehicle] triggers \the [src].") - return ..() - if(L.throwing) - return ..() - - if(L.movement_type & (FLYING|FLOATING)) //don't close the trap if they're flying/floating over it. - return ..() - - var/def_zone = BODY_ZONE_CHEST - if(snap && iscarbon(L)) - var/mob/living/carbon/C = L - if(C.mobility_flags & MOBILITY_STAND) - def_zone = pick(BODY_ZONE_PRECISE_L_FOOT, BODY_ZONE_PRECISE_R_FOOT) - var/obj/item/bodypart/BP = C.get_bodypart(def_zone) - if(BP) - add_mob_blood(C) - if(!BP.is_object_embedded(src)) - BP.add_embedded_object(src) - C.emote("agony") - //BP.set_disabled(BODYPART_DISABLED_WOUND) - // BP.add_wound(/datum/wound/fracture) - else if(snap && isanimal(L)) - var/mob/living/simple_animal/SA = L - if(SA.mob_size <= MOB_SIZE_TINY) //don't close the trap if they're as small as a mouse. - snap = FALSE - if(snap) - close_trap() - L.visible_message("[L] triggers \the [src].", \ - "I trigger \the [src]!") - if(L.apply_damage(trap_damage, BRUTE, def_zone, L.run_armor_check(def_zone, "melee", damage = trap_damage))) - L.Stun(80) - L.consider_ambush() - ..() - -// When craftable beartraps get added, make these the ones crafted. -/obj/item/restraints/legcuffs/beartrap/crafted - rusty = FALSE - desc = "Curious is the trapmaker's art. Their efficacy unwitnessed by their own eyes." - smeltresult = /obj/item/ingot/iron - -/obj/item/restraints/legcuffs/beartrap/energy - name = "energy snare" - armed = 1 - icon_state = "e_snare" - trap_damage = 0 - breakouttime = 30 - item_flags = DROPDEL - flags_1 = NONE - -/obj/item/restraints/legcuffs/beartrap/energy/Initialize() - . = ..() - addtimer(CALLBACK(src, PROC_REF(dissipate)), 100) - -/obj/item/restraints/legcuffs/beartrap/energy/proc/dissipate() - if(!ismob(loc)) - do_sparks(1, TRUE, src) - qdel(src) - -/obj/item/restraints/legcuffs/beartrap/energy/attack_hand(mob/user) - Crossed(user) //honk - return ..() - -/obj/item/restraints/legcuffs/beartrap/energy/cyborg - breakouttime = 20 // Cyborgs shouldn't have a strong restraint - -/obj/item/restraints/legcuffs/bola - name = "bola" - desc = "" - icon_state = "bola" - breakouttime = 35//easy to apply, easy to break out of - gender = NEUTER - var/knockdown = 0 - -/obj/item/restraints/legcuffs/bola/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback) - if(!..()) - return - playsound(src.loc,'sound/blank.ogg', 75, TRUE) - -/obj/item/restraints/legcuffs/bola/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) - if(..() || !iscarbon(hit_atom))//if it gets caught or the target can't be cuffed, - return//abort - ensnare(hit_atom) - -/** - * Attempts to legcuff someone with the bola - * - * Arguments: - * * C - the carbon that we will try to ensnare - */ -/obj/item/restraints/legcuffs/bola/proc/ensnare(mob/living/carbon/C) - if(!C.legcuffed && C.get_num_legs(FALSE) >= 2) - visible_message("\The [src] ensnares [C]!") - C.legcuffed = src - forceMove(C) - C.update_inv_legcuffed() - SSblackbox.record_feedback("tally", "handcuffs", 1, type) - to_chat(C, "\The [src] ensnares you!") - C.Knockdown(knockdown) - playsound(src, 'sound/blank.ogg', 50, TRUE) - -/obj/item/restraints/legcuffs/bola/tactical//traitor variant - name = "reinforced bola" - desc = "" - icon_state = "bola_r" - breakouttime = 70 - knockdown = 35 - -/obj/item/restraints/legcuffs/bola/energy //For Security - name = "energy bola" - desc = "" - icon_state = "ebola" - hitsound = list('sound/blank.ogg') - w_class = WEIGHT_CLASS_SMALL - breakouttime = 60 - -/obj/item/restraints/legcuffs/bola/energy/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) - if(iscarbon(hit_atom)) - var/obj/item/restraints/legcuffs/beartrap/B = new /obj/item/restraints/legcuffs/beartrap/energy/cyborg(get_turf(hit_atom)) - B.Crossed(hit_atom) - qdel(src) - ..() - -/obj/item/restraints/legcuffs/bola/gonbola - name = "gonbola" - desc = "" - icon_state = "gonbola" - breakouttime = 300 - slowdown = 0 - var/datum/status_effect/gonbolaPacify/effectReference - -/obj/item/restraints/legcuffs/bola/gonbola/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) - . = ..() - if(iscarbon(hit_atom)) - var/mob/living/carbon/C = hit_atom - effectReference = C.apply_status_effect(STATUS_EFFECT_GONBOLAPACIFY) - -/obj/item/restraints/legcuffs/bola/gonbola/dropped(mob/user) - . = ..() - if(effectReference) - QDEL_NULL(effectReference) diff --git a/code/game/objects/items/his_grace.dm b/code/game/objects/items/his_grace.dm deleted file mode 100644 index efe11607bc..0000000000 --- a/code/game/objects/items/his_grace.dm +++ /dev/null @@ -1,254 +0,0 @@ -//His Grace is a very special weapon granted only to traitor chaplains. -//When awakened, He thirsts for blood and begins ticking a "bloodthirst" counter. -//The wielder of His Grace is immune to stuns and gradually heals. -//If the wielder fails to feed His Grace in time, He will devour them and become incredibly aggressive. -//Leaving His Grace alone for some time will reset His thirst and put Him to sleep. -//Using His Grace effectively requires extreme speed and care. -/obj/item/his_grace - name = "artistic toolbox" - desc = "" - icon_state = "his_grace" - item_state = "artistic_toolbox" - lefthand_file = 'icons/mob/inhands/equipment/toolbox_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/toolbox_righthand.dmi' - icon = 'icons/obj/items_and_weapons.dmi' - w_class = WEIGHT_CLASS_GIGANTIC - force = 12 - attack_verb = list("robusted") - hitsound = list('sound/blank.ogg') - var/awakened = FALSE - var/bloodthirst = HIS_GRACE_SATIATED - var/prev_bloodthirst = HIS_GRACE_SATIATED - var/force_bonus = 0 - var/ascended = FALSE - var/victims_needed = 25 - var/ascend_bonus = 15 - -/obj/item/his_grace/Initialize() - . = ..() - START_PROCESSING(SSprocessing, src) - GLOB.poi_list += src - RegisterSignal(src, COMSIG_MOVABLE_POST_THROW, PROC_REF(move_gracefully)) - -/obj/item/his_grace/Destroy() - STOP_PROCESSING(SSprocessing, src) - GLOB.poi_list -= src - for(var/mob/living/L in src) - L.forceMove(get_turf(src)) - return ..() - -/obj/item/his_grace/attack_self(mob/living/user) - if(!awakened) - INVOKE_ASYNC(src, PROC_REF(awaken), user) - -/obj/item/his_grace/attack(mob/living/M, mob/user) - if(awakened && M.stat) - consume(M) - else - ..() - -/obj/item/his_grace/CtrlClick(mob/user) //you can't pull his grace - return - -/obj/item/his_grace/examine(mob/user) - . = ..() - if(awakened) - switch(bloodthirst) - if(HIS_GRACE_SATIATED to HIS_GRACE_PECKISH) - . += "[src] isn't very hungry. Not yet." - if(HIS_GRACE_PECKISH to HIS_GRACE_HUNGRY) - . += "[src] would like a snack." - if(HIS_GRACE_HUNGRY to HIS_GRACE_FAMISHED) - . += "[src] is quite hungry now." - if(HIS_GRACE_FAMISHED to HIS_GRACE_STARVING) - . += "[src] is openly salivating at the sight of you. Be careful." - if(HIS_GRACE_STARVING to HIS_GRACE_CONSUME_OWNER) - . += "I walk a fine line. [src] is very close to devouring you." - if(HIS_GRACE_CONSUME_OWNER to HIS_GRACE_FALL_ASLEEP) - . += "[src] is shaking violently and staring directly at you." - else - . += "[src] is latched closed." - -/obj/item/his_grace/relaymove(mob/living/user) //Allows changelings, etc. to climb out of Him after they revive, provided He isn't active - if(!awakened) - user.forceMove(get_turf(src)) - user.visible_message("[user] scrambles out of [src]!", "I climb out of [src]!") - -/obj/item/his_grace/process() - if(!bloodthirst) - drowse() - return - if(bloodthirst < HIS_GRACE_CONSUME_OWNER && !ascended) - adjust_bloodthirst(1 + FLOOR(LAZYLEN(contents) * 0.5, 1)) //Maybe adjust this? - else - adjust_bloodthirst(1) //don't cool off rapidly once we're at the point where His Grace consumes all. - var/mob/living/master = get_atom_on_turf(src, /mob/living) - if(istype(master) && (src in master.held_items)) - switch(bloodthirst) - if(HIS_GRACE_CONSUME_OWNER to HIS_GRACE_FALL_ASLEEP) - master.visible_message("[src] turns on [master]!", "[src] turns on you!") - do_attack_animation(master, null, src) - master.emote("scream") - master.remove_status_effect(STATUS_EFFECT_HISGRACE) - REMOVE_TRAIT(src, TRAIT_NODROP, HIS_GRACE_TRAIT) - master.Paralyze(60) - master.adjustBruteLoss(master.maxHealth) - playsound(master, 'sound/blank.ogg', 100, FALSE) - else - master.apply_status_effect(STATUS_EFFECT_HISGRACE) - return - forceMove(get_turf(src)) //no you can't put His Grace in a locker you just have to deal with Him - if(bloodthirst < HIS_GRACE_CONSUME_OWNER) - return - if(bloodthirst >= HIS_GRACE_FALL_ASLEEP) - drowse() - return - var/list/targets = list() - for(var/mob/living/L in oview(2, src)) - targets += L - if(!LAZYLEN(targets)) - return - var/mob/living/L = pick(targets) - step_to(src, L) - if(Adjacent(L)) - if(!L.stat) - L.visible_message("[src] lunges at [L]!", "[src] lunges at you!") - do_attack_animation(L, null, src) - playsound(L, 'sound/blank.ogg', 50, TRUE) - playsound(L, 'sound/blank.ogg', 50, TRUE) - L.adjustBruteLoss(force) - adjust_bloodthirst(-5) //Don't stop attacking they're right there! - else - consume(L) - -/obj/item/his_grace/proc/awaken(mob/user) //Good morning, Mr. Grace. - if(awakened) - return - awakened = TRUE - user.visible_message("[src] begins to rattle. He thirsts.", "I flick [src]'s latch up. You hope this is a good idea.") - name = "His Grace" - desc = "" - gender = MALE - adjust_bloodthirst(1) - force_bonus = HIS_GRACE_FORCE_BONUS * LAZYLEN(contents) - playsound(user, 'sound/blank.ogg', 100) - icon_state = "his_grace_awakened" - move_gracefully() - -/obj/item/his_grace/proc/move_gracefully() - if(!awakened) - return - var/static/list/transforms - if(!transforms) - var/matrix/M1 = matrix() - var/matrix/M2 = matrix() - var/matrix/M3 = matrix() - var/matrix/M4 = matrix() - M1.Translate(-1, 0) - M2.Translate(0, 1) - M3.Translate(1, 0) - M4.Translate(0, -1) - transforms = list(M1, M2, M3, M4) - - animate(src, transform=transforms[1], time=0.2, loop=-1) - animate(transform=transforms[2], time=0.1) - animate(transform=transforms[3], time=0.2) - animate(transform=transforms[4], time=0.3) - -/obj/item/his_grace/proc/drowse() //Good night, Mr. Grace. - if(!awakened || ascended) - return - var/turf/T = get_turf(src) - T.visible_message("[src] slowly stops rattling and falls still, His latch snapping shut.") - playsound(loc, 'sound/blank.ogg', 100, TRUE) - name = initial(name) - desc = initial(desc) - icon_state = initial(icon_state) - animate(src, transform=matrix()) - gender = initial(gender) - force = initial(force) - force_bonus = initial(force_bonus) - awakened = FALSE - bloodthirst = 0 - -/obj/item/his_grace/proc/consume(mob/living/meal) //Here's my dinner, Mr. Grace. - if(!meal) - return - var/victims = 0 - meal.visible_message("[src] swings open and devours [meal]!", "[src] consumes you!") - meal.adjustBruteLoss(200) - playsound(meal, 'sound/blank.ogg', 75, TRUE) - playsound(src, 'sound/blank.ogg', 100, TRUE) - meal.forceMove(src) - force_bonus += HIS_GRACE_FORCE_BONUS - prev_bloodthirst = bloodthirst - if(prev_bloodthirst < HIS_GRACE_CONSUME_OWNER) - bloodthirst = max(LAZYLEN(contents), 1) //Never fully sated, and His hunger will only grow. - else - bloodthirst = HIS_GRACE_CONSUME_OWNER - for(var/mob/living/C in contents) - if(C.mind) - victims++ - if(victims >= victims_needed) - ascend() - update_stats() - -/obj/item/his_grace/proc/adjust_bloodthirst(amt) - prev_bloodthirst = bloodthirst - if(prev_bloodthirst < HIS_GRACE_CONSUME_OWNER && !ascended) - bloodthirst = CLAMP(bloodthirst + amt, HIS_GRACE_SATIATED, HIS_GRACE_CONSUME_OWNER) - else if(!ascended) - bloodthirst = CLAMP(bloodthirst + amt, HIS_GRACE_CONSUME_OWNER, HIS_GRACE_FALL_ASLEEP) - update_stats() - -/obj/item/his_grace/proc/update_stats() - REMOVE_TRAIT(src, TRAIT_NODROP, HIS_GRACE_TRAIT) - var/mob/living/master = get_atom_on_turf(src, /mob/living) - switch(bloodthirst) - if(HIS_GRACE_CONSUME_OWNER to HIS_GRACE_FALL_ASLEEP) - if(HIS_GRACE_CONSUME_OWNER > prev_bloodthirst) - master.visible_message("[src] enters a frenzy!") - if(HIS_GRACE_STARVING to HIS_GRACE_CONSUME_OWNER) - ADD_TRAIT(src, TRAIT_NODROP, HIS_GRACE_TRAIT) - if(HIS_GRACE_STARVING > prev_bloodthirst) - master.visible_message("[src] is starving!", "[src]'s bloodlust overcomes you. [src] must be fed, or you will become His meal.\ - [force_bonus < 15 ? " And still, His power grows.":""]") - force_bonus = max(force_bonus, 15) - if(HIS_GRACE_FAMISHED to HIS_GRACE_STARVING) - ADD_TRAIT(src, TRAIT_NODROP, HIS_GRACE_TRAIT) - if(HIS_GRACE_FAMISHED > prev_bloodthirst) - master.visible_message("[src] is very hungry!", "Spines sink into my hand. [src] must feed immediately.\ - [force_bonus < 10 ? " His power grows.":""]") - force_bonus = max(force_bonus, 10) - if(prev_bloodthirst >= HIS_GRACE_STARVING) - master.visible_message("[src] is now only very hungry!", "My bloodlust recedes.") - if(HIS_GRACE_HUNGRY to HIS_GRACE_FAMISHED) - if(HIS_GRACE_HUNGRY > prev_bloodthirst) - master.visible_message("[src] is getting hungry.", "I feel [src]'s hunger within you.\ - [force_bonus < 5 ? " His power grows.":""]") - force_bonus = max(force_bonus, 5) - if(prev_bloodthirst >= HIS_GRACE_FAMISHED) - master.visible_message("[src] is now only somewhat hungry.", "[src]'s hunger recedes a little...") - if(HIS_GRACE_PECKISH to HIS_GRACE_HUNGRY) - if(HIS_GRACE_PECKISH > prev_bloodthirst) - master.visible_message("[src] is feeling snackish.", "[src] begins to hunger.") - if(prev_bloodthirst >= HIS_GRACE_HUNGRY) - master.visible_message("[src] is now only a little peckish.", "[src]'s hunger recedes somewhat...") - if(HIS_GRACE_SATIATED to HIS_GRACE_PECKISH) - if(prev_bloodthirst >= HIS_GRACE_PECKISH) - master.visible_message("[src] is satiated.", "[src]'s hunger recedes...") - force = initial(force) + force_bonus - -/obj/item/his_grace/proc/ascend() - if(ascended) - return - var/mob/living/carbon/human/master = loc - force_bonus += ascend_bonus - desc = "" - icon_state = "his_grace_ascended" - item_state = "toolbox_gold" - ascended = TRUE - playsound(src, 'sound/blank.ogg', 100) - if(istype(master)) - master.visible_message("Gods will be watching.") - name = "[master]'s mythical toolbox of three powers" diff --git a/code/game/objects/items/holy_weapons.dm b/code/game/objects/items/holy_weapons.dm deleted file mode 100644 index 563880ca33..0000000000 --- a/code/game/objects/items/holy_weapons.dm +++ /dev/null @@ -1,705 +0,0 @@ -// CHAPLAIN CUSTOM ARMORS // - -/obj/item/clothing/head/helmet/chaplain - name = "crusader helmet" - desc = "" - icon_state = "knight_templar" - item_state = "knight_templar" - armor = list("melee" = 50, "bullet" = 10, "laser" = 10, "energy" = 10, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 80) - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR - flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH - strip_delay = 80 - dog_fashion = null - -/obj/item/clothing/suit/armor/riot/chaplain - name = "crusader armour" - desc = "" - icon_state = "knight_templar" - item_state = "knight_templar" - allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) - slowdown = 0 - clothing_flags = NONE - -/obj/item/choice_beacon/holy - name = "armaments beacon" - desc = "" - -/obj/item/choice_beacon/holy/canUseBeacon(mob/living/user) - if(user.mind && user.mind.isholy) - return ..() - else - playsound(src, 'sound/blank.ogg', 40, TRUE) - return FALSE - -/obj/item/choice_beacon/holy/generate_display_names() - var/static/list/holy_item_list - if(!holy_item_list) - holy_item_list = list() - var/list/templist = typesof(/obj/item/storage/box/holy) - for(var/V in templist) - var/atom/A = V - holy_item_list[initial(A.name)] = A - return holy_item_list - -/obj/item/choice_beacon/holy/spawn_option(obj/choice,mob/living/M) - if(!GLOB.holy_armor_type) - ..() - playsound(src, 'sound/blank.ogg', 40, TRUE) - SSblackbox.record_feedback("tally", "chaplain_armor", 1, "[choice]") - GLOB.holy_armor_type = choice - else - to_chat(M, "A selection has already been made. Self-Destructing...") - return - - -/obj/item/storage/box/holy - name = "Templar Kit" - -/obj/item/storage/box/holy/PopulateContents() - new /obj/item/clothing/head/helmet/chaplain(src) - new /obj/item/clothing/suit/armor/riot/chaplain(src) - -/obj/item/storage/box/holy/student - name = "Profane Scholar Kit" - -/obj/item/storage/box/holy/student/PopulateContents() - new /obj/item/clothing/suit/armor/riot/chaplain/studentuni(src) - new /obj/item/clothing/head/helmet/chaplain/cage(src) - -/obj/item/clothing/suit/armor/riot/chaplain/studentuni - name = "student robe" - desc = "" - icon_state = "studentuni" - item_state = "studentuni" - body_parts_covered = ARMS|CHEST - allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) - -/obj/item/clothing/head/helmet/chaplain/cage - name = "cage" - desc = "" - flags_inv = HIDEHAIR //bald - mob_overlay_icon = 'icons/mob/large-worn-icons/64x64/head.dmi' - icon_state = "cage" - item_state = "cage" - worn_x_dimension = 64 - worn_y_dimension = 64 - dynamic_hair_suffix = "" - -/obj/item/storage/box/holy/sentinel - name = "Stone Sentinel Kit" - -/obj/item/storage/box/holy/sentinel/PopulateContents() - new /obj/item/clothing/suit/armor/riot/chaplain/ancient(src) - new /obj/item/clothing/head/helmet/chaplain/ancient(src) - -/obj/item/clothing/head/helmet/chaplain/ancient - name = "ancient helmet" - desc = "" - icon_state = "knight_ancient" - item_state = "knight_ancient" - -/obj/item/clothing/suit/armor/riot/chaplain/ancient - name = "ancient armour" - desc = "" - icon_state = "knight_ancient" - item_state = "knight_ancient" - -/obj/item/storage/box/holy/witchhunter - name = "Witchhunter Kit" - -/obj/item/storage/box/holy/witchhunter/PopulateContents() - new /obj/item/clothing/suit/armor/riot/chaplain/witchhunter(src) - new /obj/item/clothing/head/helmet/chaplain/witchunter_hat(src) - -/obj/item/clothing/suit/armor/riot/chaplain/witchhunter - name = "witchunter garb" - desc = "" - icon_state = "witchhunter" - item_state = "witchhunter" - body_parts_covered = CHEST|GROIN|LEGS|ARMS - -/obj/item/clothing/head/helmet/chaplain/witchunter_hat - name = "witchunter hat" - desc = "" - icon_state = "witchhunterhat" - item_state = "witchhunterhat" - flags_cover = HEADCOVERSEYES - flags_inv = HIDEEYES|HIDEHAIR - -/obj/item/storage/box/holy/adept - name = "Divine Adept Kit" - -/obj/item/storage/box/holy/adept/PopulateContents() - new /obj/item/clothing/suit/armor/riot/chaplain/adept(src) - new /obj/item/clothing/head/helmet/chaplain/adept(src) - -/obj/item/clothing/head/helmet/chaplain/adept - name = "adept hood" - desc = "" - icon_state = "crusader" - item_state = "crusader" - flags_cover = HEADCOVERSEYES - flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS - -/obj/item/clothing/suit/armor/riot/chaplain/adept - name = "adept robes" - desc = "" - icon_state = "crusader" - item_state = "crusader" - -/obj/item/storage/box/holy/follower - name = "Followers of the Chaplain Kit" - -/obj/item/storage/box/holy/follower/PopulateContents() - new /obj/item/clothing/suit/hooded/chaplain_hoodie/leader(src) - new /obj/item/clothing/suit/hooded/chaplain_hoodie(src) - new /obj/item/clothing/suit/hooded/chaplain_hoodie(src) - new /obj/item/clothing/suit/hooded/chaplain_hoodie(src) - new /obj/item/clothing/suit/hooded/chaplain_hoodie(src) - -/obj/item/clothing/suit/hooded/chaplain_hoodie - name = "follower hoodie" - desc = "" - icon_state = "chaplain_hoodie" - item_state = "chaplain_hoodie" - body_parts_covered = CHEST|GROIN|LEGS|ARMS - allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) - hoodtype = /obj/item/clothing/head/hooded/chaplain_hood - -/obj/item/clothing/head/hooded/chaplain_hood - name = "follower hood" - desc = "" - icon_state = "chaplain_hood" - body_parts_covered = HEAD - flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS - -/obj/item/clothing/suit/hooded/chaplain_hoodie/leader - name = "leader hoodie" - desc = "" - icon_state = "chaplain_hoodie_leader" - item_state = "chaplain_hoodie_leader" - hoodtype = /obj/item/clothing/head/hooded/chaplain_hood/leader - -/obj/item/clothing/head/hooded/chaplain_hood/leader - name = "leader hood" - desc = "" - icon_state = "chaplain_hood_leader" - - -// CHAPLAIN NULLROD AND CUSTOM WEAPONS // - -/obj/item/nullrod - name = "null rod" - desc = "" - icon_state = "nullrod" - item_state = "nullrod" - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' - force = 18 - throw_speed = 1 - throw_range = 4 - throwforce = 10 - w_class = WEIGHT_CLASS_TINY - obj_flags = UNIQUE_RENAME - var/reskinned = FALSE - var/chaplain_spawnable = TRUE - -/obj/item/nullrod/Initialize() - . = ..() - AddComponent(/datum/component/anti_magic, TRUE, TRUE, FALSE, null, null, FALSE) - -/obj/item/nullrod/suicide_act(mob/user) - user.visible_message("[user] is killing [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to get closer to god!") - return (BRUTELOSS|FIRELOSS) - -/obj/item/nullrod/attack_self(mob/user) - if(user.mind && (user.mind.isholy) && !reskinned) - reskin_holy_weapon(user) - -/obj/item/nullrod/proc/reskin_holy_weapon(mob/M) - if(GLOB.holy_weapon_type) - return - var/obj/item/nullrod/holy_weapon - var/list/holy_weapons_list = typesof(/obj/item/nullrod) - var/list/display_names = list() - for(var/V in holy_weapons_list) - var/obj/item/nullrod/rodtype = V - if (initial(rodtype.chaplain_spawnable)) - display_names[initial(rodtype.name)] = rodtype - - var/choice = input(M,"What theme would you like for my holy weapon?","Holy Weapon Theme") as null|anything in sortList(display_names, GLOBAL_PROC_REF(cmp_typepaths_asc)) - if(QDELETED(src) || !choice || M.stat || !in_range(M, src) || M.incapacitated() || reskinned) - return - - var/A = display_names[choice] // This needs to be on a separate var as list member access is not allowed for new - holy_weapon = new A - - GLOB.holy_weapon_type = holy_weapon.type - - SSblackbox.record_feedback("tally", "chaplain_weapon", 1, "[choice]") - - if(holy_weapon) - holy_weapon.reskinned = TRUE - qdel(src) - M.put_in_active_hand(holy_weapon) - -/obj/item/nullrod/godhand - icon_state = "disintegrate" - item_state = "disintegrate" - lefthand_file = 'icons/mob/inhands/misc/touchspell_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/touchspell_righthand.dmi' - name = "god hand" - desc = "" - item_flags = ABSTRACT | DROPDEL - w_class = WEIGHT_CLASS_HUGE - hitsound = list('sound/blank.ogg') - damtype = BURN - attack_verb = list("punched", "cross countered", "pummeled") - -/obj/item/nullrod/godhand/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, HAND_REPLACEMENT_TRAIT) - -/obj/item/nullrod/staff - icon_state = "godstaff-red" - item_state = "godstaff-red" - lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi' - name = "red holy staff" - desc = "" - w_class = WEIGHT_CLASS_HUGE - force = 5 - slot_flags = ITEM_SLOT_BACK - block_chance = 50 - var/shield_icon = "shield-red" - -/obj/item/nullrod/staff/worn_overlays(isinhands) - . = list() - if(isinhands) - . += mutable_appearance('icons/effects/effects.dmi', shield_icon, MOB_LAYER + 0.01) - -/obj/item/nullrod/staff/blue - name = "blue holy staff" - icon_state = "godstaff-blue" - item_state = "godstaff-blue" - shield_icon = "shield-old" - -/obj/item/nullrod/claymore - icon_state = "claymore" - item_state = "claymore" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - name = "holy claymore" - desc = "" - w_class = WEIGHT_CLASS_HUGE - slot_flags = ITEM_SLOT_BACK|ITEM_SLOT_BELT - block_chance = 30 - sharpness = IS_SHARP - hitsound = list('sound/blank.ogg') - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - -/obj/item/nullrod/claymore/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 //Don't bring a sword to a gunfight - return ..() - -/obj/item/nullrod/claymore/darkblade - icon_state = "cultblade" - item_state = "cultblade" - lefthand_file = 'icons/mob/inhands/64x64_lefthand.dmi' - righthand_file = 'icons/mob/inhands/64x64_righthand.dmi' - inhand_x_dimension = 64 - inhand_y_dimension = 64 - name = "dark blade" - desc = "" - slot_flags = ITEM_SLOT_BELT - hitsound = list('sound/blank.ogg') - -/obj/item/nullrod/claymore/chainsaw_sword - icon_state = "chainswordon" - item_state = "chainswordon" - name = "sacred chainsaw sword" - desc = "" - slot_flags = ITEM_SLOT_BELT - attack_verb = list("sawed", "torn", "cut", "chopped", "diced") - hitsound = list('sound/blank.ogg') - tool_behaviour = TOOL_SAW - toolspeed = 1.5 //slower than a real saw - -/obj/item/nullrod/claymore/glowing - icon_state = "swordon" - item_state = "swordon" - name = "force weapon" - desc = "" - slot_flags = ITEM_SLOT_BELT - -/obj/item/nullrod/claymore/katana - name = "\improper Hanzo steel" - desc = "" - icon_state = "katana" - item_state = "katana" - slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK - -/obj/item/nullrod/claymore/multiverse - name = "extradimensional blade" - desc = "" - icon_state = "multiverse" - item_state = "multiverse" - slot_flags = ITEM_SLOT_BELT - -/obj/item/nullrod/claymore/multiverse/attack(mob/living/carbon/M, mob/living/carbon/user) - force = rand(1, 30) - ..() - -/obj/item/nullrod/claymore/saber - name = "light energy sword" - hitsound = 'sound/blank.ogg' - icon = 'icons/obj/transforming_energy.dmi' - icon_state = "swordblue" - item_state = "swordblue" - desc = "" - slot_flags = ITEM_SLOT_BELT - -/obj/item/nullrod/claymore/saber/red - name = "dark energy sword" - icon_state = "swordred" - item_state = "swordred" - desc = "" - -/obj/item/nullrod/claymore/saber/pirate - name = "nautical energy sword" - icon_state = "cutlass1" - item_state = "cutlass1" - desc = "" - -/obj/item/nullrod/sord - name = "\improper UNREAL SORD" - desc = "" - icon_state = "sord" - item_state = "sord" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - slot_flags = ITEM_SLOT_BELT - force = 4.13 - throwforce = 1 - hitsound = 'sound/blank.ogg' - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - -/obj/item/nullrod/scythe - icon_state = "scythe1" - item_state = "scythe1" - lefthand_file = 'icons/mob/inhands/weapons/polearms_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/polearms_righthand.dmi' - name = "reaper scythe" - desc = "" - w_class = WEIGHT_CLASS_BULKY - armor_penetration = 35 - slot_flags = ITEM_SLOT_BACK - sharpness = IS_SHARP - attack_verb = list("chopped", "sliced", "cut", "reaped") - -/obj/item/nullrod/scythe/Initialize() - . = ..() - AddComponent(/datum/component/butchering, 70, 110) //the harvest gives a high bonus chance - -/obj/item/nullrod/scythe/vibro - icon_state = "hfrequency0" - item_state = "hfrequency1" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - name = "high frequency blade" - desc = "" - attack_verb = list("chopped", "sliced", "cut", "zandatsu'd") - hitsound = 'sound/blank.ogg' - -/obj/item/nullrod/scythe/spellblade - icon_state = "spellblade" - item_state = "spellblade" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - icon = 'icons/obj/guns/magic.dmi' - name = "dormant spellblade" - desc = "" - hitsound = 'sound/blank.ogg' - -/obj/item/nullrod/scythe/talking - icon_state = "talking_sword" - item_state = "talking_sword" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - name = "possessed blade" - desc = "" - attack_verb = list("chopped", "sliced", "cut") - hitsound = 'sound/blank.ogg' - var/possessed = FALSE - -/obj/item/nullrod/scythe/talking/relaymove(mob/user) - return //stops buckled message spam for the ghost. - -/obj/item/nullrod/scythe/talking/attack_self(mob/living/user) - if(possessed) - return - - to_chat(user, "I attempt to wake the spirit of the blade...") - - possessed = TRUE - - var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you want to play as the spirit of [user.real_name]'s blade?", ROLE_PAI, null, FALSE, 100, POLL_IGNORE_POSSESSED_BLADE) - - if(LAZYLEN(candidates)) - var/mob/dead/observer/C = pick(candidates) - var/mob/living/simple_animal/shade/S = new(src) - S.ckey = C.ckey - S.fully_replace_character_name(null, "The spirit of [name]") - S.status_flags |= GODMODE - S.language_holder = user.language_holder.copy(S) - var/input = sanitize_name(stripped_input(S,"What are you named?", ,"", MAX_NAME_LEN)) - - if(src && input) - name = input - S.fully_replace_character_name(null, "The spirit of [input]") - else - to_chat(user, "The blade is dormant. Maybe you can try again later.") - possessed = FALSE - -/obj/item/nullrod/scythe/talking/Destroy() - for(var/mob/living/simple_animal/shade/S in contents) - to_chat(S, "I were destroyed!") - qdel(S) - return ..() - -/obj/item/nullrod/scythe/talking/chainsword - icon_state = "chainswordon" - item_state = "chainswordon" - name = "possessed chainsaw sword" - desc = "" - chaplain_spawnable = FALSE - force = 30 - slot_flags = ITEM_SLOT_BELT - attack_verb = list("sawed", "torn", "cut", "chopped", "diced") - hitsound = 'sound/blank.ogg' - tool_behaviour = TOOL_SAW - toolspeed = 0.5 //faster than normal saw - -/obj/item/nullrod/hammmer - icon_state = "hammeron" - item_state = "hammeron" - lefthand_file = 'icons/mob/inhands/weapons/hammers_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/hammers_righthand.dmi' - name = "relic war hammer" - desc = "" - slot_flags = ITEM_SLOT_BELT - w_class = WEIGHT_CLASS_HUGE - attack_verb = list("smashed", "bashed", "hammered", "crunched") - -/obj/item/nullrod/chainsaw - name = "chainsaw hand" - desc = "" - icon_state = "chainsaw_on" - item_state = "mounted_chainsaw" - lefthand_file = 'icons/mob/inhands/weapons/chainsaw_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/chainsaw_righthand.dmi' - w_class = WEIGHT_CLASS_HUGE - item_flags = ABSTRACT - sharpness = IS_SHARP - attack_verb = list("sawed", "torn", "cut", "chopped", "diced") - hitsound = 'sound/blank.ogg' - tool_behaviour = TOOL_SAW - toolspeed = 2 //slower than a real saw - -/obj/item/nullrod/chainsaw/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, HAND_REPLACEMENT_TRAIT) - AddComponent(/datum/component/butchering, 30, 100, 0, hitsound) - -/obj/item/nullrod/clown - icon = 'icons/obj/wizard.dmi' - icon_state = "clownrender" - item_state = "render" - name = "clown dagger" - desc = "" - hitsound = 'sound/blank.ogg' - sharpness = IS_SHARP - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - -/obj/item/nullrod/pride_hammer - icon_state = "pride" - name = "Pride-struck Hammer" - desc = "" - force = 16 - throwforce = 15 - w_class = 4 - slot_flags = ITEM_SLOT_BACK - attack_verb = list("attacked", "smashed", "crushed", "splattered", "cracked") - hitsound = 'sound/blank.ogg' - -/obj/item/nullrod/pride_hammer/afterattack(atom/A as mob|obj|turf|area, mob/user, proximity) - . = ..() - if(!proximity) - return - if(prob(30) && ishuman(A)) - var/mob/living/carbon/human/H = A - user.reagents.trans_to(H, user.reagents.total_volume, 1, 1, 0, transfered_by = user) - to_chat(user, "My pride reflects on [H].") - to_chat(H, "I feel insecure, taking on [user]'s burden.") - -/obj/item/nullrod/whip - name = "holy whip" - desc = "" - icon_state = "chain" - item_state = "chain" - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' - slot_flags = ITEM_SLOT_BELT - attack_verb = list("whipped", "lashed") - hitsound = 'sound/blank.ogg' - -/obj/item/nullrod/fedora - name = "atheist's fedora" - desc = "" - icon_state = "fedora" - item_state = "fedora" - slot_flags = ITEM_SLOT_HEAD - icon = 'icons/obj/clothing/hats.dmi' - force = 0 - throw_speed = 4 - throw_range = 7 - throwforce = 30 - sharpness = IS_SHARP - attack_verb = list("enlightened", "redpilled") - -/obj/item/nullrod/armblade - name = "dark blessing" - desc = "" - icon = 'icons/obj/changeling_items.dmi' - icon_state = "arm_blade" - item_state = "arm_blade" - lefthand_file = 'icons/mob/inhands/antag/changeling_lefthand.dmi' - righthand_file = 'icons/mob/inhands/antag/changeling_righthand.dmi' - item_flags = ABSTRACT - w_class = WEIGHT_CLASS_HUGE - sharpness = IS_SHARP - -/obj/item/nullrod/armblade/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, HAND_REPLACEMENT_TRAIT) - AddComponent(/datum/component/butchering, 80, 70) - -/obj/item/nullrod/armblade/tentacle - name = "unholy blessing" - icon_state = "tentacle" - item_state = "tentacle" - -/obj/item/nullrod/carp - name = "carp-sie plushie" - desc = "" - icon = 'icons/obj/plushes.dmi' - icon_state = "carpplush" - item_state = "carp_plushie" - lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' - righthand_file = 'icons/mob/inhands/items_righthand.dmi' - force = 15 - attack_verb = list("bitten", "eaten", "fin slapped") - hitsound = 'sound/blank.ogg' - var/used_blessing = FALSE - -/obj/item/nullrod/carp/attack_self(mob/living/user) - if(used_blessing) - else if(user.mind && (user.mind.isholy)) - to_chat(user, "I are blessed by Carp-Sie. Wild space carp will no longer attack you.") - user.faction |= "carp" - used_blessing = TRUE - -/obj/item/nullrod/claymore/bostaff //May as well make it a "claymore" and inherit the blocking - name = "monk's staff" - desc = "" - w_class = WEIGHT_CLASS_BULKY - force = 15 - block_chance = 40 - slot_flags = ITEM_SLOT_BACK - sharpness = IS_BLUNT - hitsound = "swing_hit" - attack_verb = list("smashed", "slammed", "whacked", "thwacked") - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "bostaff0" - item_state = "bostaff0" - lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi' - -/obj/item/nullrod/tribal_knife - icon_state = "crysknife" - item_state = "crysknife" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - name = "arrhythmic knife" - w_class = WEIGHT_CLASS_HUGE - desc = "" - sharpness = IS_SHARP - slot_flags = null - hitsound = 'sound/blank.ogg' - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - item_flags = SLOWS_WHILE_IN_HAND - -/obj/item/nullrod/tribal_knife/Initialize(mapload) - . = ..() - START_PROCESSING(SSobj, src) - AddComponent(/datum/component/butchering, 50, 100) - -/obj/item/nullrod/tribal_knife/Destroy() - STOP_PROCESSING(SSobj, src) - . = ..() - -/obj/item/nullrod/tribal_knife/process() - slowdown = rand(-2, 2) - - -/obj/item/nullrod/pitchfork - icon_state = "pitchfork0" - lefthand_file = 'icons/mob/inhands/weapons/polearms_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/polearms_righthand.dmi' - name = "unholy pitchfork" - w_class = WEIGHT_CLASS_NORMAL - desc = "" - attack_verb = list("poked", "impaled", "pierced", "jabbed") - hitsound = 'sound/blank.ogg' - sharpness = IS_SHARP - -/obj/item/nullrod/egyptian - name = "egyptian staff" - desc = "" - icon = 'icons/obj/guns/magic.dmi' - icon_state = "pharoah_sceptre" - item_state = "pharoah_sceptre" - lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi' - w_class = WEIGHT_CLASS_NORMAL - attack_verb = list("bashes", "smacks", "whacks") - -/obj/item/nullrod/hypertool - icon = 'icons/obj/device.dmi' - icon_state = "hypertool" - item_state = "hypertool" - lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' - slot_flags = ITEM_SLOT_BELT - name = "hypertool" - desc = "" - armor_penetration = 35 - damtype = BRAIN - attack_verb = list("pulsed", "mended", "cut") - hitsound = 'sound/blank.ogg' - -/obj/item/nullrod/spear - name = "ancient spear" - desc = "" - icon_state = "ratvarian_spear" - item_state = "ratvarian_spear" - lefthand_file = 'icons/mob/inhands/antag/clockwork_lefthand.dmi' - righthand_file = 'icons/mob/inhands/antag/clockwork_righthand.dmi' - icon = 'icons/obj/clockwork_objects.dmi' - slot_flags = ITEM_SLOT_BELT - armor_penetration = 10 - sharpness = IS_SHARP_ACCURATE - w_class = WEIGHT_CLASS_BULKY - attack_verb = list("stabbed", "poked", "slashed", "clocked") - hitsound = 'sound/blank.ogg' diff --git a/code/game/objects/items/implants/implant.dm b/code/game/objects/items/implants/implant.dm deleted file mode 100644 index 170199f196..0000000000 --- a/code/game/objects/items/implants/implant.dm +++ /dev/null @@ -1,111 +0,0 @@ -/obj/item/implant - name = "implant" - icon = 'icons/obj/implants.dmi' - icon_state = "generic" //Shows up as the action button icon - actions_types = list(/datum/action/item_action/hands_free/activate) - var/activated = TRUE //1 for implant types that can be activated, 0 for ones that are "always on" like mindshield implants - var/mob/living/imp_in = null - var/implant_color = "b" - var/allow_multiple = FALSE - var/uses = -1 - item_flags = DROPDEL - - -/obj/item/implant/proc/trigger(emote, mob/living/carbon/source) - return - -/obj/item/implant/proc/on_death(emote, mob/living/carbon/source) - return - -/obj/item/implant/proc/activate() - SEND_SIGNAL(src, COMSIG_IMPLANT_ACTIVATED) - -/obj/item/implant/ui_action_click() - activate("action_button") - -/obj/item/implant/proc/can_be_implanted_in(mob/living/target) // for human-only and other special requirements - return TRUE - -/mob/living/proc/can_be_implanted() - return TRUE - -/mob/living/simple_animal/can_be_implanted() - return healable //Applies to robots and most non-organics, exceptions can override. - - - -//What does the implant do upon injection? -//return 1 if the implant injects -//return 0 if there is no room for implant / it fails -/obj/item/implant/proc/implant(mob/living/target, mob/user, silent = FALSE, force = FALSE) - if(SEND_SIGNAL(src, COMSIG_IMPLANT_IMPLANTING, args) & COMPONENT_STOP_IMPLANTING) - return - LAZYINITLIST(target.implants) - if(!force && (!target.can_be_implanted() || !can_be_implanted_in(target))) - return FALSE - for(var/X in target.implants) - var/obj/item/implant/imp_e = X - var/flags = SEND_SIGNAL(imp_e, COMSIG_IMPLANT_OTHER, args, src) - if(flags & COMPONENT_DELETE_NEW_IMPLANT) - UNSETEMPTY(target.implants) - qdel(src) - return TRUE - if(flags & COMPONENT_DELETE_OLD_IMPLANT) - qdel(imp_e) - continue - if(flags & COMPONENT_STOP_IMPLANTING) - UNSETEMPTY(target.implants) - return FALSE - - if(istype(imp_e, type)) - if(!allow_multiple) - if(imp_e.uses < initial(imp_e.uses)*2) - if(uses == -1) - imp_e.uses = -1 - else - imp_e.uses = min(imp_e.uses + uses, initial(imp_e.uses)*2) - qdel(src) - return TRUE - else - return FALSE - - forceMove(target) - imp_in = target - target.implants += src - if(activated) - for(var/X in actions) - var/datum/action/A = X - A.Grant(target) - if(ishuman(target)) - var/mob/living/carbon/human/H = target - H.sec_hud_set_implants() - - if(user) - log_combat(user, target, "implanted", "\a [name]") - - return TRUE - -/obj/item/implant/proc/removed(mob/living/source, silent = FALSE, special = 0) - moveToNullspace() - imp_in = null - source.implants -= src - for(var/X in actions) - var/datum/action/A = X - A.Grant(source) - if(ishuman(source)) - var/mob/living/carbon/human/H = source - H.sec_hud_set_implants() - - return 1 - -/obj/item/implant/Destroy() - if(imp_in) - removed(imp_in) - return ..() - -/obj/item/implant/proc/get_data() - return "No information available" - -/obj/item/implant/dropped(mob/user) - . = 1 - ..() diff --git a/code/game/objects/items/implants/implant_chem.dm b/code/game/objects/items/implants/implant_chem.dm deleted file mode 100644 index 4312a11e6b..0000000000 --- a/code/game/objects/items/implants/implant_chem.dm +++ /dev/null @@ -1,65 +0,0 @@ -/obj/item/implant/chem - name = "chem implant" - desc = "" - icon_state = "reagents" - activated = FALSE - -/obj/item/implant/chem/get_data() - var/dat = {"Implant Specifications:
- Name: Robust Corp MJ-420 Prisoner Management Implant
- Life: Deactivates upon death but remains within the body.
- Important Notes: Due to the system functioning off of nutrients in the implanted subject's body, the subject
- will suffer from an increased appetite.

-
- Implant Details:
- Function: Contains a small capsule that can contain various chemicals. Upon receiving a specially encoded signal
- the implant releases the chemicals directly into the blood stream.
- Special Features: - Micro-Capsule- Can be loaded with any sort of chemical agent via the common syringe and can hold 50 units.
- Can only be loaded while still in its original case.
- Integrity: Implant will last so long as the subject is alive."} - return dat - -/obj/item/implant/chem/Initialize() - . = ..() - create_reagents(50, OPENCONTAINER) - GLOB.tracked_chem_implants += src - -/obj/item/implant/chem/Destroy() - GLOB.tracked_chem_implants -= src - return ..() - -/obj/item/implant/chem/trigger(emote, mob/living/source) - if(emote == "deathgasp") - if(istype(source) && !(source.stat == DEAD)) - return - activate(reagents.total_volume) - -/obj/item/implant/chem/activate(cause) - . = ..() - if(!cause || !imp_in) - return 0 - var/mob/living/carbon/R = imp_in - var/injectamount = null - if (cause == "action_button") - injectamount = reagents.total_volume - else - injectamount = cause - reagents.trans_to(R, injectamount) - to_chat(R, "I hear a faint beep.") - if(!reagents.total_volume) - to_chat(R, "I hear a faint click from your chest.") - qdel(src) - - -/obj/item/implantcase/chem - name = "implant case - 'Remote Chemical'" - desc = "" - imp_type = /obj/item/implant/chem - -/obj/item/implantcase/chem/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/reagent_containers/syringe) && imp) - W.afterattack(imp, user, TRUE, params) - return TRUE - else - return ..() diff --git a/code/game/objects/items/implants/implant_clown.dm b/code/game/objects/items/implants/implant_clown.dm deleted file mode 100644 index 7d105acfab..0000000000 --- a/code/game/objects/items/implants/implant_clown.dm +++ /dev/null @@ -1,23 +0,0 @@ -/obj/item/implant/sad_trombone - name = "sad trombone implant" - activated = 0 - -/obj/item/implant/sad_trombone/get_data() - var/dat = {"Implant Specifications:
- Name: Honk Co. Sad Trombone Implant
- Life: Activates upon death.
- "} - return dat - -/obj/item/implant/sad_trombone/trigger(emote, mob/source) - if(emote == "deathgasp") - playsound(loc, 'sound/blank.ogg', 50, FALSE) - -/obj/item/implanter/sad_trombone - name = "implanter (sad trombone)" - imp_type = /obj/item/implant/sad_trombone - -/obj/item/implantcase/sad_trombone - name = "implant case - 'Sad Trombone'" - desc = "" - imp_type = /obj/item/implant/sad_trombone diff --git a/code/game/objects/items/implants/implant_exile.dm b/code/game/objects/items/implants/implant_exile.dm deleted file mode 100644 index 9e36d26da3..0000000000 --- a/code/game/objects/items/implants/implant_exile.dm +++ /dev/null @@ -1,22 +0,0 @@ -//Exile implants will allow you to use the station gate, but not return home. -//This will allow security to exile badguys/for badguys to exile their kill targets - -/obj/item/implant/exile - name = "exile implant" - desc = "" - activated = 0 - -/obj/item/implant/exile/get_data() - var/dat = {"Implant Specifications:
- Name: Nanotrasen Employee Exile Implant
- Implant Details: The onboard gateway system has been modified to reject entry by individuals containing this implant
"} - return dat - -/obj/item/implanter/exile - name = "implanter (exile)" - imp_type = /obj/item/implant/exile - -/obj/item/implantcase/exile - name = "implant case - 'Exile'" - desc = "" - imp_type = /obj/item/implant/exile diff --git a/code/game/objects/items/implants/implant_explosive.dm b/code/game/objects/items/implants/implant_explosive.dm deleted file mode 100644 index cc768d39d3..0000000000 --- a/code/game/objects/items/implants/implant_explosive.dm +++ /dev/null @@ -1,124 +0,0 @@ -/obj/item/implant/explosive - name = "microbomb implant" - desc = "" - icon_state = "explosive" - actions_types = list(/datum/action/item_action/explosive_implant) - // Explosive implant action is always available. - var/weak = 2 - var/medium = 0.8 - var/heavy = 0.4 - var/delay = 7 - var/popup = FALSE // is the DOUWANNABLOWUP window open? - var/active = FALSE - -/obj/item/implant/explosive/on_mob_death(mob/living/L, gibbed) - activate("death") - -/obj/item/implant/explosive/get_data() - var/dat = {"Implant Specifications:
- Name: Robust Corp RX-78 Employee Management Implant
- Life: Activates upon death.
- Important Notes: Explodes
-
- Implant Details:
- Function: Contains a compact, electrically detonated explosive that detonates upon receiving a specially encoded signal or upon host death.
- Special Features: Explodes
- "} - return dat - -/obj/item/implant/explosive/activate(cause) - . = ..() - if(!cause || !imp_in || active) - return 0 - if(cause == "action_button" && !popup) - popup = TRUE - var/response = alert(imp_in, "Are you sure you want to activate your [name]? This will cause you to explode!", "[name] Confirmation", "Yes", "No") - popup = FALSE - if(response == "No") - return 0 - heavy = round(heavy) - medium = round(medium) - weak = round(weak) - to_chat(imp_in, "I activate your [name].") - active = TRUE - var/turf/boomturf = get_turf(imp_in) - message_admins("[ADMIN_LOOKUPFLW(imp_in)] has activated their [name] at [ADMIN_VERBOSEJMP(boomturf)], with cause of [cause].") -//If the delay is short, just blow up already jeez - if(delay <= 7) - explosion(src,heavy,medium,weak,weak, flame_range = weak) - if(imp_in) - imp_in.gib(1) - qdel(src) - return - timed_explosion() - -/obj/item/implant/explosive/implant(mob/living/target, mob/user, silent = FALSE, force = FALSE) - for(var/X in target.implants) - if(istype(X, type)) - var/obj/item/implant/explosive/imp_e = X - imp_e.heavy += heavy - imp_e.medium += medium - imp_e.weak += weak - imp_e.delay += delay - qdel(src) - return 1 - - return ..() - -/obj/item/implant/explosive/proc/timed_explosion() - imp_in.visible_message("[imp_in] starts beeping ominously!") - playsound(loc, 'sound/blank.ogg', 30, FALSE) - sleep(delay*0.25) - if(imp_in && !imp_in.stat) - imp_in.visible_message("[imp_in] doubles over in pain!") - imp_in.Paralyze(140) - playsound(loc, 'sound/blank.ogg', 30, FALSE) - sleep(delay*0.25) - playsound(loc, 'sound/blank.ogg', 30, FALSE) - sleep(delay*0.25) - playsound(loc, 'sound/blank.ogg', 30, FALSE) - sleep(delay*0.25) - explosion(src,heavy,medium,weak,weak, flame_range = weak) - if(imp_in) - imp_in.gib(1) - qdel(src) - -/obj/item/implant/explosive/macro - name = "macrobomb implant" - desc = "" - icon_state = "explosive" - weak = 16 - medium = 8 - heavy = 4 - delay = 70 - -/obj/item/implant/explosive/macro/implant(mob/living/target, mob/user, silent = FALSE, force = FALSE) - for(var/X in target.implants) - if(istype(X, type)) - return 0 - - for(var/Y in target.implants) - if(istype(Y, /obj/item/implant/explosive)) - var/obj/item/implant/explosive/imp_e = Y - heavy += imp_e.heavy - medium += imp_e.medium - weak += imp_e.weak - delay += imp_e.delay - qdel(imp_e) - break - - return ..() - - -/obj/item/implanter/explosive - name = "implanter (microbomb)" - imp_type = /obj/item/implant/explosive - -/obj/item/implantcase/explosive - name = "implant case - 'Explosive'" - desc = "" - imp_type = /obj/item/implant/explosive - -/obj/item/implanter/explosive_macro - name = "implanter (macrobomb)" - imp_type = /obj/item/implant/explosive/macro diff --git a/code/game/objects/items/implants/implant_freedom.dm b/code/game/objects/items/implants/implant_freedom.dm deleted file mode 100644 index 1b13f003b0..0000000000 --- a/code/game/objects/items/implants/implant_freedom.dm +++ /dev/null @@ -1,44 +0,0 @@ -/obj/item/implant/freedom - name = "freedom implant" - desc = "" - icon_state = "freedom" - implant_color = "r" - uses = 4 - - -/obj/item/implant/freedom/activate() - . = ..() - uses-- - to_chat(imp_in, "I feel a faint click.") - if(iscarbon(imp_in)) - var/mob/living/carbon/C_imp_in = imp_in - C_imp_in.uncuff() - if(!uses) - qdel(src) - - -/obj/item/implant/freedom/get_data() - var/dat = {" -Implant Specifications:
-Name: Freedom Beacon
-Life: optimum 5 uses
-Important Notes: Illegal
-
-Implant Details:
-Function: Transmits a specialized cluster of signals to override handcuff locking -mechanisms
-Special Features:
-Neuro-Scan- Analyzes certain shadow signals in the nervous system
-
-No Implant Specifics"} - return dat - - -/obj/item/implanter/freedom - name = "implanter (freedom)" - imp_type = /obj/item/implant/freedom - -/obj/item/implantcase/freedom - name = "implant case - 'Freedom'" - desc = "" - imp_type = /obj/item/implant/freedom diff --git a/code/game/objects/items/implants/implant_krav_maga.dm b/code/game/objects/items/implants/implant_krav_maga.dm deleted file mode 100644 index f2bc2fc3d2..0000000000 --- a/code/game/objects/items/implants/implant_krav_maga.dm +++ /dev/null @@ -1,37 +0,0 @@ -/obj/item/implant/krav_maga - name = "krav maga implant" - desc = "" - icon = 'icons/obj/wizard.dmi' - icon_state ="scroll2" - activated = 1 - var/datum/martial_art/krav_maga/style = new - -/obj/item/implant/krav_maga/get_data() - var/dat = {"Implant Specifications:
- Name: Krav Maga Implant
- Life: 4 hours after death of host
- Implant Details:
- Function: Teaches even the clumsiest host the arts of Krav Maga."} - return dat - -/obj/item/implant/krav_maga/activate() - . = ..() - var/mob/living/carbon/human/H = imp_in - if(!ishuman(H)) - return - if(!H.mind) - return - if(H.mind.has_martialart(MARTIALART_KRAVMAGA)) - style.remove(H) - else - style.teach(H,1) - -/obj/item/implanter/krav_maga - name = "implanter (krav maga)" - imp_type = /obj/item/implant/krav_maga - -/obj/item/implantcase/krav_maga - name = "implant case - 'Krav Maga'" - desc = "" - imp_type = /obj/item/implant/krav_maga - diff --git a/code/game/objects/items/implants/implant_misc.dm b/code/game/objects/items/implants/implant_misc.dm deleted file mode 100644 index e89ae4c9cb..0000000000 --- a/code/game/objects/items/implants/implant_misc.dm +++ /dev/null @@ -1,81 +0,0 @@ -/obj/item/implant/weapons_auth - name = "firearms authentication implant" - desc = "" - icon_state = "auth" - activated = 0 - -/obj/item/implant/weapons_auth/get_data() - var/dat = {"Implant Specifications:
- Name: Firearms Authentication Implant
- Life: 4 hours after death of host
- Implant Details:
- Function: Allows operation of implant-locked weaponry, preventing equipment from falling into enemy hands."} - return dat - - -/obj/item/implant/adrenalin - name = "adrenal implant" - desc = "" - icon_state = "adrenal" - uses = 3 - -/obj/item/implant/adrenalin/get_data() - var/dat = {"Implant Specifications:
- Name: Cybersun Industries Adrenaline Implant
- Life: Five days.
- Important Notes: Illegal
-
- Implant Details: Subjects injected with implant can activate an injection of medical cocktails.
- Function: Pushes the body past the normal limits, assisting in escape from sticky situations.
- Integrity: Implant can only be used three times before reserves are depleted."} - return dat - -/obj/item/implant/adrenalin/activate() - . = ..() - uses-- - to_chat(imp_in, "I feel a sudden surge of energy!") - imp_in.set_resting(FALSE) - imp_in.reagents.add_reagent(/datum/reagent/medicine/badstims, 6) - if(!uses) - qdel(src) - -/obj/item/implanter/adrenalin - name = "implanter (adrenalin)" - imp_type = /obj/item/implant/adrenalin - - -/obj/item/implant/emp - name = "emp implant" - desc = "" - icon_state = "emp" - uses = 3 - -/obj/item/implant/emp/activate() - . = ..() - uses-- - empulse(imp_in, 3, 5) - if(!uses) - qdel(src) - -/obj/item/implanter/emp - name = "implanter (EMP)" - imp_type = /obj/item/implant/emp - - -//Health Tracker Implant - -/obj/item/implant/health - name = "health implant" - activated = 0 - var/healthstring = "" - -/obj/item/implant/health/proc/sensehealth() - if (!imp_in) - return "ERROR" - else - if(isliving(imp_in)) - var/mob/living/L = imp_in - healthstring = "Oxygen Deprivation Damage => [round(L.getOxyLoss())]
Fire Damage => [round(L.getFireLoss())]
Toxin Damage => [round(L.getToxLoss())]
Brute Force Damage => [round(L.getBruteLoss())]
" - if (!healthstring) - healthstring = "ERROR" - return healthstring diff --git a/code/game/objects/items/implants/implant_spell.dm b/code/game/objects/items/implants/implant_spell.dm deleted file mode 100644 index ea984fc917..0000000000 --- a/code/game/objects/items/implants/implant_spell.dm +++ /dev/null @@ -1,42 +0,0 @@ -/obj/item/implant/spell - name = "spell implant" - desc = "" - activated = FALSE - - var/autorobeless = TRUE // Whether to automagically make the spell robeless on implant - var/obj/effect/proc_holder/spell/spell - - -/obj/item/implant/spell/get_data() - var/dat = {"Implant Specifications:
- Name: Spell Implant
- Life: 4 hours after death of host
- Implant Details:
- Function: [spell ? "Allows a non-wizard to cast [spell] as if they were a wizard." : "None"]"} - return dat - -/obj/item/implant/spell/implant(mob/living/target, mob/user, silent = FALSE, force = FALSE) - . = ..() - if (.) - if (!spell) - return FALSE - if (autorobeless && spell.clothes_req) - spell.clothes_req = FALSE - target.AddSpell(spell) - return TRUE - -/obj/item/implant/spell/removed(mob/target, silent = FALSE, special = 0) - . = ..() - if (.) - target.RemoveSpell(spell) - if(target.stat != DEAD && !silent) - to_chat(target, "The knowledge of how to cast [spell] slips out from your mind.") - -/obj/item/implanter/spell - name = "implanter (spell)" - imp_type = /obj/item/implant/spell - -/obj/item/implantcase/spell - name = "implant case - 'Wizardry'" - desc = "" - imp_type = /obj/item/implant/spell diff --git a/code/game/objects/items/implants/implant_stealth.dm b/code/game/objects/items/implants/implant_stealth.dm deleted file mode 100644 index ae46eb0c7d..0000000000 --- a/code/game/objects/items/implants/implant_stealth.dm +++ /dev/null @@ -1,46 +0,0 @@ -/obj/item/implant/stealth - name = "S3 implant" - desc = "" - actions_types = list(/datum/action/item_action/agent_box) - -/obj/item/implanter/stealth - name = "implanter (stealth)" - imp_type = /obj/item/implant/stealth - -//Box Object - -/obj/structure/closet/cardboard/agent - name = "inconspicious box" - desc = "" - icon_state = "agentbox" - max_integrity = 1 // "This dumb box shouldn't take more than one hit to make it vanish." - move_speed_multiplier = 0.5 - -/obj/structure/closet/cardboard/agent/proc/go_invisible() - animate(src, , alpha = 0, time = 20) - -/obj/structure/closet/cardboard/agent/Initialize() - . = ..() - go_invisible() - - -/obj/structure/closet/cardboard/agent/open() - . = ..() - qdel(src) - -/obj/structure/closet/cardboard/agent/process() - alpha = max(0, alpha - 50) - -/obj/structure/closet/cardboard/agent/proc/reveal() - alpha = 255 - addtimer(CALLBACK(src, PROC_REF(go_invisible)), 10, TIMER_OVERRIDE|TIMER_UNIQUE) - -/obj/structure/closet/cardboard/agent/Bump(atom/movable/A) - . = ..() - if(isliving(A)) - reveal() - -/obj/structure/closet/cardboard/agent/Bumped(atom/movable/A) - . = ..() - if(isliving(A)) - reveal() diff --git a/code/game/objects/items/implants/implant_storage.dm b/code/game/objects/items/implants/implant_storage.dm deleted file mode 100644 index c407a9a7ac..0000000000 --- a/code/game/objects/items/implants/implant_storage.dm +++ /dev/null @@ -1,40 +0,0 @@ -/obj/item/implant/storage - name = "storage implant" - desc = "" - icon_state = "storage" - implant_color = "r" - var/max_slot_stacking = 4 - -/obj/item/implant/storage/activate() - . = ..() - SEND_SIGNAL(src, COMSIG_TRY_STORAGE_SHOW, imp_in, TRUE) - -/obj/item/implant/storage/removed(source, silent = FALSE, special = 0) - if(!special) - var/datum/component/storage/lostimplant = GetComponent(/datum/component/storage/concrete/implant) - var/mob/living/implantee = source - for (var/obj/item/I in lostimplant.contents()) - I.add_mob_blood(implantee) - lostimplant.do_quick_empty() - implantee.visible_message("A bluespace pocket opens around [src] as it exits [implantee], spewing out its contents and rupturing the surrounding tissue!") - implantee.apply_damage(20, BRUTE, BODY_ZONE_CHEST) - qdel(lostimplant) - return ..() - -/obj/item/implant/storage/implant(mob/living/target, mob/user, silent = FALSE, force = FALSE) - for(var/X in target.implants) - if(istype(X, type)) - var/obj/item/implant/storage/imp_e = X - var/datum/component/storage/STR = imp_e.GetComponent(/datum/component/storage) - if(!STR || (STR && STR.max_items < max_slot_stacking)) - imp_e.AddComponent(/datum/component/storage/concrete/implant) - qdel(src) - return TRUE - return FALSE - AddComponent(/datum/component/storage/concrete/implant) - - return ..() - -/obj/item/implanter/storage - name = "implanter (storage)" - imp_type = /obj/item/implant/storage diff --git a/code/game/objects/items/implants/implant_track.dm b/code/game/objects/items/implants/implant_track.dm deleted file mode 100644 index 63ff5fdc18..0000000000 --- a/code/game/objects/items/implants/implant_track.dm +++ /dev/null @@ -1,46 +0,0 @@ -/obj/item/implant/tracking - name = "tracking implant" - desc = "" - activated = FALSE - var/lifespan_postmortem = 6000 //for how many deciseconds after user death will the implant work? - var/allow_teleport = TRUE //will people implanted with this act as teleporter beacons? - -/obj/item/implant/tracking/c38 - name = "TRAC implant" - desc = "" - var/lifespan = 3000 //how many deciseconds does the implant last? - allow_teleport = FALSE - -/obj/item/implant/tracking/c38/Initialize() - . = ..() - QDEL_IN(src, lifespan) - -/obj/item/implant/tracking/New() - ..() - GLOB.tracked_implants += src - -/obj/item/implant/tracking/Destroy() - . = ..() - GLOB.tracked_implants -= src - -/obj/item/implanter/tracking - imp_type = /obj/item/implant/tracking - -/obj/item/implanter/tracking/gps - imp_type = /obj/item/gps/mining/internal - -/obj/item/implant/tracking/get_data() - var/dat = {"Implant Specifications:
- Name: Tracking Beacon
- Life: 10 minutes after death of host.
- Important Notes: Implant also works as a teleporter beacon.
-
- Implant Details:
- Function: Continuously transmits low power signal. Useful for tracking.
- Special Features:
- Neuro-Safe- Specialized shell absorbs excess voltages self-destructing the chip if - a malfunction occurs thereby securing safety of subject. The implant will melt and - disintegrate into bio-safe elements.
- Integrity: Gradient creates slight risk of being overcharged and frying the - circuitry. As a result neurotoxins can cause massive damage."} - return dat diff --git a/code/game/objects/items/implants/implantcase.dm b/code/game/objects/items/implants/implantcase.dm deleted file mode 100644 index bc1a461ab3..0000000000 --- a/code/game/objects/items/implants/implantcase.dm +++ /dev/null @@ -1,83 +0,0 @@ -/obj/item/implantcase - name = "implant case" - desc = "" - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "implantcase-0" - item_state = "implantcase" - lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' - throw_speed = 2 - throw_range = 5 - w_class = WEIGHT_CLASS_TINY - custom_materials = list(/datum/material/glass=500) - var/obj/item/implant/imp = null - var/imp_type - - -/obj/item/implantcase/update_icon() - if(imp) - icon_state = "implantcase-[imp.implant_color]" - reagents = imp.reagents - else - icon_state = "implantcase-0" - reagents = null - - -/obj/item/implantcase/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/pen)) - if(!user.is_literate()) - to_chat(user, "I scribble illegibly on the side of [src]!") - return - var/t = stripped_input(user, "What would you like the label to be?", name, null) - if(user.get_active_held_item() != W) - return - if(!user.canUseTopic(src, BE_CLOSE)) - return - if(t) - name = "implant case - '[t]'" - else - name = "implant case" - else if(istype(W, /obj/item/implanter)) - var/obj/item/implanter/I = W - if(I.imp) - if(imp || I.imp.imp_in) - return - I.imp.forceMove(src) - imp = I.imp - I.imp = null - update_icon() - I.update_icon() - else - if(imp) - if(I.imp) - return - imp.forceMove(I) - I.imp = imp - imp = null - update_icon() - I.update_icon() - - else - return ..() - -/obj/item/implantcase/Initialize(mapload) - . = ..() - if(imp_type) - imp = new imp_type(src) - update_icon() - - -/obj/item/implantcase/tracking - name = "implant case - 'Tracking'" - desc = "" - imp_type = /obj/item/implant/tracking - -/obj/item/implantcase/weapons_auth - name = "implant case - 'Firearms Authentication'" - desc = "" - imp_type = /obj/item/implant/weapons_auth - -/obj/item/implantcase/adrenaline - name = "implant case - 'Adrenaline'" - desc = "" - imp_type = /obj/item/implant/adrenalin diff --git a/code/game/objects/items/implants/implanter.dm b/code/game/objects/items/implants/implanter.dm deleted file mode 100644 index 31b4f73390..0000000000 --- a/code/game/objects/items/implants/implanter.dm +++ /dev/null @@ -1,65 +0,0 @@ -/obj/item/implanter - name = "implanter" - desc = "" - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "implanter0" - item_state = "syringe_0" - lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' - throw_speed = 1 - throw_range = 5 - w_class = WEIGHT_CLASS_SMALL - custom_materials = list(/datum/material/iron=600, /datum/material/glass=200) - var/obj/item/implant/imp = null - var/imp_type = null - - -/obj/item/implanter/update_icon() - if(imp) - icon_state = "implanter1" - else - icon_state = "implanter0" - - -/obj/item/implanter/attack(mob/living/M, mob/user) - if(!istype(M)) - return - if(user && imp) - if(M != user) - M.visible_message("[user] is attempting to implant [M].") - - var/turf/T = get_turf(M) - if(T && (M == user || do_mob(user, M, 50))) - if(src && imp) - if(imp.implant(M, user)) - if (M == user) - to_chat(user, "I implant myself.") - else - M.visible_message("[user] has implanted [M].", "[user] implants you.") - imp = null - update_icon() - else - to_chat(user, "[src] fails to implant [M].") - -/obj/item/implanter/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/pen)) - if(!user.is_literate()) - to_chat(user, "I prod at [src] with [W]!") - return - var/t = stripped_input(user, "What would you like the label to be?", name, null) - if(user.get_active_held_item() != W) - return - if(!user.canUseTopic(src, BE_CLOSE)) - return - if(t) - name = "implanter ([t])" - else - name = "implanter" - else - return ..() - -/obj/item/implanter/Initialize(mapload) - . = ..() - if(imp_type) - imp = new imp_type(src) - update_icon() diff --git a/code/game/objects/items/implants/implantpad.dm b/code/game/objects/items/implants/implantpad.dm deleted file mode 100644 index e1019864f3..0000000000 --- a/code/game/objects/items/implants/implantpad.dm +++ /dev/null @@ -1,78 +0,0 @@ -/obj/item/implantpad - name = "implant pad" - desc = "" - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "implantpad-0" - item_state = "electronic" - lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - throw_speed = 1 - throw_range = 5 - w_class = WEIGHT_CLASS_SMALL - var/obj/item/implantcase/case = null - -/obj/item/implantpad/update_icon() - icon_state = "implantpad-[!QDELETED(case)]" - -/obj/item/implantpad/examine(mob/user) - . = ..() - if(Adjacent(user)) - . += "It [case ? "contains \a [case]" : "is currently empty"]." - if(case) - . += "Alt-click to remove [case]." - else - if(case) - . += "There seems to be something inside it, but you can't quite tell what from here..." - -/obj/item/implantpad/handle_atom_del(atom/A) - if(A == case) - case = null - update_icon() - updateSelfDialog() - . = ..() - -/obj/item/implantpad/AltClick(mob/user) - ..() - if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) - return - if(!case) - to_chat(user, "There's no implant to remove from [src].") - return - - user.put_in_hands(case) - - add_fingerprint(user) - case.add_fingerprint(user) - case = null - - updateSelfDialog() - update_icon() - -/obj/item/implantpad/attackby(obj/item/implantcase/C, mob/user, params) - if(istype(C, /obj/item/implantcase) && !case) - if(!user.transferItemToLoc(C, src)) - return - case = C - updateSelfDialog() - update_icon() - else - return ..() - -/obj/item/implantpad/ui_interact(mob/user) - if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) - user.unset_machine(src) - user << browse(null, "window=implantpad") - return - - user.set_machine(src) - var/dat = "Implant Mini-Computer:
" - if(case) - if(case.imp) - if(istype(case.imp, /obj/item/implant)) - dat += case.imp.get_data() - else - dat += "The implant casing is empty." - else - dat += "Please insert an implant casing!" - user << browse(dat, "window=implantpad") - onclose(user, "implantpad") diff --git a/code/game/objects/items/kitchen.dm b/code/game/objects/items/kitchen.dm index c849eced65..c72fc77ca6 100644 --- a/code/game/objects/items/kitchen.dm +++ b/code/game/objects/items/kitchen.dm @@ -23,7 +23,6 @@ throwforce = 0 throw_speed = 1 throw_range = 5 - custom_materials = list(/datum/material/iron=80) flags_1 = CONDUCT_1 attack_verb = list("attacked", "stabbed", "poked") hitsound = 'sound/blank.ogg' @@ -56,157 +55,6 @@ else return ..() -/obj/item/kitchen/fork/plastic - name = "plastic fork" - desc = "" - icon_state = "plastic_fork" - force = 0 - w_class = WEIGHT_CLASS_TINY - throwforce = 0 - custom_materials = list(/datum/material/plastic=80) - custom_price = 5 - var/break_chance = 25 - -/obj/item/kitchen/fork/plastic/afterattack(mob/living/carbon/user) - .=..() - if(prob(break_chance)) - user.visible_message("[user]'s fork snaps into tiny pieces in their hand.") - qdel(src) - -/obj/item/kitchen/knife - name = "kitchen knife" - icon_state = "knife" - item_state = "knife" - desc = "" - flags_1 = CONDUCT_1 - force = 10 - w_class = WEIGHT_CLASS_SMALL - throwforce = 10 - hitsound = 'sound/blank.ogg' - throw_speed = 1 - throw_range = 6 - custom_materials = list(/datum/material/iron=12000) - attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - sharpness = IS_SHARP_ACCURATE - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) - var/bayonet = FALSE //Can this be attached to a gun? - custom_price = 30 - -/obj/item/kitchen/knife/Initialize() - . = ..() - AddComponent(/datum/component/butchering, 80 - force, 100, force - 10) //bonus chance increases depending on force - -/obj/item/kitchen/knife/attack(mob/living/carbon/M, mob/living/carbon/user) - if(user.zone_selected == BODY_ZONE_PRECISE_R_EYE) - if(HAS_TRAIT(user, TRAIT_CLUMSY) && prob(50)) - M = user - return eyestab(M,user) - else - return ..() - -/obj/item/kitchen/knife/suicide_act(mob/user) - user.visible_message(pick("[user] is slitting [user.p_their()] wrists with the [src.name]! It looks like [user.p_theyre()] trying to commit suicide.", \ - "[user] is slitting [user.p_their()] throat with the [src.name]! It looks like [user.p_theyre()] trying to commit suicide.", \ - "[user] is slitting [user.p_their()] stomach open with the [src.name]! It looks like [user.p_theyre()] trying to commit seppuku.")) - return (BRUTELOSS) - -/obj/item/kitchen/knife/plastic - name = "plastic knife" - icon_state = "plastic_knife" - item_state = "knife" - desc = "" - force = 0 - w_class = WEIGHT_CLASS_TINY - throwforce = 0 - throw_range = 5 - custom_materials = list(/datum/material/plastic = 100) - attack_verb = list("prodded", "whiffed","scratched", "poked") - sharpness = IS_SHARP - custom_price = 5 - var/break_chance = 25 - -/obj/item/kitchen/knife/plastic/afterattack(mob/living/carbon/user) - .=..() - if(prob(break_chance)) - user.visible_message("[user]'s knife snaps into tiny pieces in their hand.") - qdel(src) - -/obj/item/kitchen/knife/ritual - name = "ritual knife" - desc = "" - icon = 'icons/obj/wizard.dmi' - icon_state = "render" - lefthand_file = 'icons/mob/inhands/equipment/kitchen_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/kitchen_righthand.dmi' - w_class = WEIGHT_CLASS_NORMAL - -/obj/item/kitchen/knife/butcher - name = "butcher's cleaver" - icon_state = "butch" - item_state = "butch" - desc = "" - flags_1 = CONDUCT_1 - force = 15 - throwforce = 10 - custom_materials = list(/datum/material/iron=18000) - attack_verb = list("cleaved", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - w_class = WEIGHT_CLASS_NORMAL - custom_price = 60 - -/obj/item/kitchen/knife/combat - name = "combat knife" - icon_state = "buckknife" - desc = "" - embedding = list("embedded_pain_multiplier" = 4, "embed_chance" = 65, "embedded_fall_chance" = 10, "embedded_ignore_throwspeed_threshold" = TRUE) - force = 20 - throwforce = 20 - attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "cut") - bayonet = TRUE - -/obj/item/kitchen/knife/combat/survival - name = "survival knife" - icon_state = "survivalknife" - embedding = list("embedded_pain_multiplier" = 4, "embed_chance" = 35, "embedded_fall_chance" = 10) - desc = "" - force = 15 - throwforce = 15 - bayonet = TRUE - -/obj/item/kitchen/knife/combat/bone - name = "bone dagger" - item_state = "bone_dagger" - icon_state = "bone_dagger" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - desc = "" - embedding = list("embedded_pain_multiplier" = 4, "embed_chance" = 35, "embedded_fall_chance" = 10) - force = 15 - throwforce = 15 - custom_materials = null - -/obj/item/kitchen/knife/combat/cyborg - name = "cyborg knife" - icon = 'icons/obj/items_cyborg.dmi' - icon_state = "knife_cyborg" - desc = "" - -/obj/item/kitchen/knife/carrotshiv - name = "carrot shiv" - icon_state = "carrotshiv" - item_state = "carrotshiv" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - desc = "" - force = 8 - throwforce = 12//fuck git - custom_materials = null - attack_verb = list("shanked", "shivved") - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - -/obj/item/kitchen/knife/carrotshiv/suicide_act(mob/living/carbon/user) - user.visible_message("[user] forcefully drives \the [src] into [user.p_their()] eye! It looks like [user.p_theyre()] trying to commit suicide!") - return BRUTELOSS - /obj/item/kitchen/rollingpin name = "rolling pin" desc = "" @@ -222,20 +70,3 @@ /obj/item/kitchen/rollingpin/suicide_act(mob/living/carbon/user) user.visible_message("[user] begins flattening [user.p_their()] head with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!") return BRUTELOSS -/* Trays moved to /obj/item/storage/bag */ - -/obj/item/kitchen/spoon/plastic - name = "wooden spoon" - desc = "Good for soup." - icon_state = "spoon" - force = 0 - w_class = WEIGHT_CLASS_TINY - throwforce = 0 - custom_price = 5 - var/break_chance = 25 - -/obj/item/kitchen/knife/plastic/afterattack(mob/living/carbon/user) - .=..() - if(prob(break_chance)) - user.visible_message("[user]'s spoon snaps into tiny pieces in their hand.") - qdel(src) diff --git a/code/game/objects/items/latexballoon.dm b/code/game/objects/items/latexballoon.dm deleted file mode 100644 index c4010a62a3..0000000000 --- a/code/game/objects/items/latexballoon.dm +++ /dev/null @@ -1,58 +0,0 @@ -/obj/item/latexballon - name = "latex glove" - desc = "" - icon_state = "latexballon" - item_state = "lgloves" - force = 0 - throwforce = 0 - w_class = WEIGHT_CLASS_TINY - throw_speed = 1 - throw_range = 7 - var/state - var/datum/gas_mixture/air_contents = null - -/obj/item/latexballon/proc/blow(obj/item/tank/tank, mob/user) - if (icon_state == "latexballon_bursted") - return - icon_state = "latexballon_blow" - item_state = "latexballon" - user.update_inv_hands() - to_chat(user, "I blow up [src] with [tank].") - air_contents = tank.remove_air_volume(3) - -/obj/item/latexballon/proc/burst() - if (!air_contents || icon_state != "latexballon_blow") - return - playsound(src, 'sound/blank.ogg', 100, TRUE) - icon_state = "latexballon_bursted" - item_state = "lgloves" - if(isliving(loc)) - var/mob/living/user = src.loc - user.update_inv_hands() - loc.assume_air(air_contents) - -/obj/item/latexballon/ex_act(severity, target) - burst() - switch(severity) - if (1) - qdel(src) - if (2) - if (prob(50)) - qdel(src) - -/obj/item/latexballon/bullet_act(obj/projectile/P) - if(!P.nodamage) - burst() - return ..() - -/obj/item/latexballon/temperature_expose(datum/gas_mixture/air, temperature, volume) - if(temperature > T0C+100) - burst() - -/obj/item/latexballon/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/tank)) - var/obj/item/tank/T = W - blow(T, user) - return - if (W.get_sharpness() || W.get_temperature() || is_pointed(W)) - burst() diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm index 0f5ce66d2d..be40afab20 100644 --- a/code/game/objects/items/melee/misc.dm +++ b/code/game/objects/items/melee/misc.dm @@ -8,159 +8,6 @@ user.Stun(40) return TRUE - -/obj/item/melee/chainofcommand - name = "chain of command" - desc = "" - icon_state = "chain" - item_state = "chain" - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' - flags_1 = CONDUCT_1 - slot_flags = ITEM_SLOT_BELT - force = 10 - throwforce = 7 - w_class = WEIGHT_CLASS_NORMAL - attack_verb = list("flogged", "whipped", "lashed", "disciplined") - hitsound = 'sound/blank.ogg' - custom_materials = list(/datum/material/iron = 1000) - -/obj/item/melee/chainofcommand/suicide_act(mob/user) - user.visible_message("[user] is strangling [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to commit suicide!") - return (OXYLOSS) - -/obj/item/melee/synthetic_arm_blade - name = "synthetic arm blade" - desc = "" - icon = 'icons/obj/changeling_items.dmi' - icon_state = "arm_blade" - item_state = "arm_blade" - lefthand_file = 'icons/mob/inhands/antag/changeling_lefthand.dmi' - righthand_file = 'icons/mob/inhands/antag/changeling_righthand.dmi' - w_class = WEIGHT_CLASS_HUGE - force = 20 - throwforce = 10 - hitsound = 'sound/blank.ogg' - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - sharpness = IS_SHARP - -/obj/item/melee/synthetic_arm_blade/Initialize() - . = ..() - AddComponent(/datum/component/butchering, 60, 80) //very imprecise - -/obj/item/melee/sabre - name = "officer's sabre" - desc = "" - icon_state = "sabre" - item_state = "sabre" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - flags_1 = CONDUCT_1 - obj_flags = UNIQUE_RENAME - force = 15 - throwforce = 10 - w_class = WEIGHT_CLASS_BULKY - block_chance = 50 - armor_penetration = 75 - sharpness = IS_SHARP - attack_verb = list("slashed", "cut") - hitsound = 'sound/blank.ogg' - custom_materials = list(/datum/material/iron = 1000) - -/obj/item/melee/sabre/Initialize() - . = ..() - AddComponent(/datum/component/butchering, 30, 95, 5) //fast and effective, but as a sword, it might damage the results. - -/obj/item/melee/sabre/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 //Don't bring a sword to a gunfight - return ..() - -/obj/item/melee/sabre/on_exit_storage(datum/component/storage/concrete/S) - var/obj/item/storage/belt/sabre/B = S.real_location() - if(istype(B)) - playsound(B, 'sound/blank.ogg', 25, TRUE) - -/obj/item/melee/sabre/on_enter_storage(datum/component/storage/concrete/S) - var/obj/item/storage/belt/sabre/B = S.real_location() - if(istype(B)) - playsound(B, 'sound/blank.ogg', 25, TRUE) - -/obj/item/melee/sabre/suicide_act(mob/living/user) - user.visible_message("[user] is trying to cut off all [user.p_their()] limbs with [src]! it looks like [user.p_theyre()] trying to commit suicide!") - var/i = 0 - ADD_TRAIT(src, TRAIT_NODROP, SABRE_SUICIDE_TRAIT) - if(iscarbon(user)) - var/mob/living/carbon/Cuser = user - var/obj/item/bodypart/holding_bodypart = Cuser.get_holding_bodypart_of_item(src) - var/list/limbs_to_dismember - var/list/arms = list() - var/list/legs = list() - var/obj/item/bodypart/bodypart - - for(bodypart in Cuser.bodyparts) - if(bodypart == holding_bodypart) - continue - if(bodypart.body_part & ARMS) - arms += bodypart - else if (bodypart.body_part & LEGS) - legs += bodypart - - limbs_to_dismember = arms + legs - if(holding_bodypart) - limbs_to_dismember += holding_bodypart - - var/speedbase = abs((4 SECONDS) / limbs_to_dismember.len) - for(bodypart in limbs_to_dismember) - i++ - addtimer(CALLBACK(src, PROC_REF(suicide_dismember), user, bodypart), speedbase * i) - addtimer(CALLBACK(src, PROC_REF(manual_suicide), user), (5 SECONDS) * i) - return MANUAL_SUICIDE - -/obj/item/melee/sabre/proc/suicide_dismember(mob/living/user, obj/item/bodypart/affecting) - if(!QDELETED(affecting) && affecting.dismemberable && affecting.owner == user && !QDELETED(user)) - playsound(user, pick(hitsound), 25, TRUE) - affecting.dismember(BRUTE) - user.adjustBruteLoss(20) - -/obj/item/melee/sabre/proc/manual_suicide(mob/living/user, originally_nodropped) - if(!QDELETED(user)) - user.adjustBruteLoss(200) - user.death(FALSE) - REMOVE_TRAIT(src, TRAIT_NODROP, SABRE_SUICIDE_TRAIT) - -/obj/item/melee/beesword - name = "The Stinger" - desc = "" - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "beesword" - item_state = "stinger" - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' - slot_flags = ITEM_SLOT_BELT - force = 5 - w_class = WEIGHT_CLASS_BULKY - sharpness = IS_SHARP - throwforce = 10 - block_chance = 20 - armor_penetration = 65 - attack_verb = list("slashed", "stung", "prickled", "poked") - hitsound = 'sound/blank.ogg' - -/obj/item/melee/beesword/afterattack(atom/target, mob/user, proximity) - . = ..() - if(!proximity) - return - user.changeNext_move(CLICK_CD_RAPID) - if(iscarbon(target)) - var/mob/living/carbon/H = target - H.reagents.add_reagent(/datum/reagent/toxin, 4) - -/obj/item/melee/beesword/suicide_act(mob/living/user) - user.visible_message("[user] is stabbing [user.p_them()]self in the throat with [src]! It looks like [user.p_theyre()] trying to commit suicide!") - playsound(get_turf(src), hitsound, 75, TRUE, -1) - return TOXLOSS - /obj/item/melee/classic_baton name = "police baton" desc = "" @@ -287,145 +134,3 @@ var/wait_desc = get_wait_description() if (wait_desc) to_chat(user, wait_desc) - -/obj/item/melee/classic_baton/telescopic - name = "telescopic baton" - desc = "" - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "telebaton_0" - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' - item_state = null - slot_flags = ITEM_SLOT_BELT - w_class = WEIGHT_CLASS_SMALL - item_flags = NONE - force = 0 - on = FALSE - on_sound = 'sound/blank.ogg' - - on_icon_state = "telebaton_1" - off_icon_state = "telebaton_0" - on_item_state = "nullrod" - force_on = 10 - force_off = 0 - weight_class_on = WEIGHT_CLASS_BULKY - -/obj/item/melee/classic_baton/telescopic/suicide_act(mob/user) - var/mob/living/carbon/human/H = user - var/obj/item/organ/brain/B = H.getorgan(/obj/item/organ/brain) - - user.visible_message("[user] stuffs [src] up [user.p_their()] nose and presses the 'extend' button! It looks like [user.p_theyre()] trying to clear [user.p_their()] mind.") - if(!on) - src.attack_self(user) - else - playsound(src, on_sound, 50, TRUE) - add_fingerprint(user) - sleep(3) - if (!QDELETED(H)) - if(!QDELETED(B)) - H.internal_organs -= B - qdel(B) - new /obj/effect/gibspawner/generic(H.drop_location(), H) - return (BRUTELOSS) - -/obj/item/melee/classic_baton/telescopic/attack_self(mob/user) - on = !on - var/list/desc = get_on_description() - - if(on) - to_chat(user, desc["local_on"]) - icon_state = on_icon_state - item_state = on_item_state - w_class = weight_class_on - force = force_on - attack_verb = list("smacked", "struck", "cracked", "beaten") - else - to_chat(user, desc["local_off"]) - icon_state = off_icon_state - item_state = null //no sprite for concealment even when in hand - slot_flags = ITEM_SLOT_BELT - w_class = WEIGHT_CLASS_SMALL - force = force_off - attack_verb = list("hit", "poked") - - playsound(src.loc, on_sound, 50, TRUE) - add_fingerprint(user) - -/obj/item/melee/classic_baton/telescopic/contractor_baton - name = "contractor baton" - desc = "" - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "contractor_baton_0" - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' - item_state = null - slot_flags = ITEM_SLOT_BELT - w_class = WEIGHT_CLASS_SMALL - item_flags = NONE - force = 5 - - cooldown = 25 - stamina_damage = 85 - affect_silicon = TRUE - on_sound = 'sound/blank.ogg' - on_stun_sound = 'sound/blank.ogg' - - on_icon_state = "contractor_baton_1" - off_icon_state = "contractor_baton_0" - on_item_state = "contractor_baton" - force_on = 16 - force_off = 5 - weight_class_on = WEIGHT_CLASS_NORMAL - -/obj/item/melee/classic_baton/telescopic/contractor_baton/get_wait_description() - return "The baton is still charging!" - -/obj/item/melee/classic_baton/telescopic/contractor_baton/additional_effects_carbon(mob/living/target, mob/living/user) - target.Jitter(20) - target.stuttering += 20 - -/obj/item/melee/curator_whip - name = "curator's whip" - desc = "" - icon_state = "whip" - item_state = "chain" - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' - slot_flags = ITEM_SLOT_BELT - force = 15 - w_class = WEIGHT_CLASS_NORMAL - attack_verb = list("flogged", "whipped", "lashed", "disciplined") - hitsound = 'sound/blank.ogg' - -/obj/item/melee/curator_whip/afterattack(target, mob/user, proximity_flag) - . = ..() - if(ishuman(target) && proximity_flag) - var/mob/living/carbon/human/H = target - H.drop_all_held_items() - H.visible_message("[user] disarms [H]!", "[user] disarmed you!") - -/obj/item/melee/cleric_mace - name = "cleric mace" - desc = "" - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "mace_greyscale" - item_state = "mace_greyscale" - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' - material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR //Material type changes the prefix as well as the color. - custom_materials = list(/datum/material/iron = 12000) //Defaults to an Iron Mace. - slot_flags = ITEM_SLOT_BELT - force = 14 - w_class = WEIGHT_CLASS_BULKY - throwforce = 8 - block_chance = 10 - armor_penetration = 50 - attack_verb = list("smacked", "struck", "cracked", "beaten") - var/overlay_state = "mace_handle" - var/mutable_appearance/overlay - -/obj/item/melee/cleric_mace/Initialize() - . = ..() - overlay = mutable_appearance(icon, overlay_state) - overlay.appearance_flags = RESET_COLOR - add_overlay(overlay) diff --git a/code/game/objects/items/miscellaneous.dm b/code/game/objects/items/miscellaneous.dm deleted file mode 100644 index e34a4928e3..0000000000 --- a/code/game/objects/items/miscellaneous.dm +++ /dev/null @@ -1,138 +0,0 @@ -/obj/item/caution - desc = "" - name = "wet floor sign" - icon = 'icons/obj/janitor.dmi' - icon_state = "caution" - lefthand_file = 'icons/mob/inhands/equipment/custodial_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/custodial_righthand.dmi' - force = 1 - throwforce = 3 - throw_speed = 2 - throw_range = 5 - w_class = WEIGHT_CLASS_SMALL - attack_verb = list("warned", "cautioned", "smashed") - -/obj/item/choice_beacon - name = "choice beacon" - desc = "" - icon = 'icons/obj/device.dmi' - icon_state = "gangtool-blue" - item_state = "radio" - var/uses = 1 - -/obj/item/choice_beacon/attack_self(mob/user) - if(canUseBeacon(user)) - generate_options(user) - -/obj/item/choice_beacon/proc/generate_display_names() // return the list that will be used in the choice selection. entries should be in (type.name = type) fashion. see choice_beacon/hero for how this is done. - return list() - -/obj/item/choice_beacon/proc/canUseBeacon(mob/living/user) - if(user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) - return TRUE - else - playsound(src, 'sound/blank.ogg', 40, TRUE) - return FALSE - -/obj/item/choice_beacon/proc/generate_options(mob/living/M) - var/list/display_names = generate_display_names() - if(!display_names.len) - return - var/choice = input(M,"Which item would you like to order?","Select an Item") as null|anything in sortList(display_names) - if(!choice || !M.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) - return - - spawn_option(display_names[choice],M) - uses-- - if(!uses) - qdel(src) - else - to_chat(M, "[uses] use[uses > 1 ? "s" : ""] remaining on the [src].") - -/obj/item/choice_beacon/proc/spawn_option(obj/choice,mob/living/M) - var/obj/new_item = new choice() - var/obj/structure/closet/supplypod/bluespacepod/pod = new() - pod.explosionSize = list(0,0,0,0) - new_item.forceMove(pod) - var/msg = "After making your selection, you notice a strange target on the ground. It might be best to step back!" - to_chat(M, msg) - - new /obj/effect/DPtarget(get_turf(src), pod) - -/obj/item/choice_beacon/hero - name = "heroic beacon" - desc = "" - -/obj/item/choice_beacon/hero/generate_display_names() - var/static/list/hero_item_list - if(!hero_item_list) - hero_item_list = list() - var/list/templist = typesof(/obj/item/storage/box/hero) //we have to convert type = name to name = type, how lovely! - for(var/V in templist) - var/atom/A = V - hero_item_list[initial(A.name)] = A - return hero_item_list - - -/obj/item/storage/box/hero - name = "Courageous Tomb Raider - 1940's." - -/obj/item/storage/box/hero/PopulateContents() - new /obj/item/clothing/head/fedora/curator(src) - new /obj/item/clothing/under/rank/civilian/curator/treasure_hunter(src) - new /obj/item/clothing/shoes/workboots/mining(src) - new /obj/item/melee/curator_whip(src) - -/obj/item/storage/box/hero/astronaut - name = "First Man on the Moon - 1960's." - -/obj/item/storage/box/hero/astronaut/PopulateContents() - new /obj/item/tank/internals/oxygen(src) - new /obj/item/gps(src) - -/obj/item/storage/box/hero/scottish - name = "Braveheart, the Scottish rebel - 1300's." - -/obj/item/storage/box/hero/scottish/PopulateContents() - new /obj/item/clothing/under/costume/kilt(src) - new /obj/item/claymore/weak/ceremonial(src) - new /obj/item/toy/crayon/spraycan(src) - new /obj/item/clothing/shoes/sandal(src) - -/obj/item/choice_beacon/augments - name = "augment beacon" - desc = "" - uses = 3 - -/obj/item/choice_beacon/augments/generate_display_names() - var/static/list/augment_list - if(!augment_list) - augment_list = list() - var/list/templist = list( - /obj/item/organ/cyberimp/brain/anti_drop, - /obj/item/organ/cyberimp/chest/thrusters, - /obj/item/organ/lungs/cybernetic/upgraded, - /obj/item/organ/liver/cybernetic/upgraded) //cyberimplants range from a nice bonus to fucking broken bullshit so no subtypesof - for(var/V in templist) - var/atom/A = V - augment_list[initial(A.name)] = A - return augment_list - -/obj/item/choice_beacon/augments/spawn_option(obj/choice,mob/living/M) - new choice(get_turf(M)) - to_chat(M, "I hear something crackle from the beacon for a moment before a voice speaks. \"Please stand by for a message from S.E.L.F. Message as follows: Item request received. Your package has been transported, use the autosurgeon supplied to apply the upgrade. Message ends.\"") - -/obj/item/skub - desc = "" - name = "skub" - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "skub" - w_class = WEIGHT_CLASS_BULKY - attack_verb = list("skubbed") - -/obj/item/skub/suicide_act(mob/living/user) - user.visible_message("[user] has declared themself as anti-skub! The skub tears them apart!") - - user.gib() - playsound(src, 'sound/blank.ogg', 50, TRUE, -1) - return MANUAL_SUICIDE diff --git a/code/game/objects/items/mop.dm b/code/game/objects/items/mop.dm deleted file mode 100644 index 9ae6d0e06e..0000000000 --- a/code/game/objects/items/mop.dm +++ /dev/null @@ -1,121 +0,0 @@ -/obj/item/mop - desc = "" - name = "mop" - icon = 'icons/obj/janitor.dmi' - icon_state = "mop" - lefthand_file = 'icons/mob/inhands/equipment/custodial_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/custodial_righthand.dmi' - force = 8 - throwforce = 10 - throw_speed = 1 - throw_range = 7 - w_class = WEIGHT_CLASS_NORMAL - attack_verb = list("mopped", "bashed", "bludgeoned", "whacked") - resistance_flags = FLAMMABLE - var/mopping = 0 - var/mopcount = 0 - var/mopcap = 15 - var/mopspeed = 15 - force_string = "robust... against germs" - var/insertable = TRUE - -/obj/item/mop/Initialize() - . = ..() - create_reagents(mopcap) - - -/obj/item/mop/proc/clean(turf/A) - if(reagents.has_reagent(/datum/reagent/water, 1) || reagents.has_reagent(/datum/reagent/water/holywater, 1) || reagents.has_reagent(/datum/reagent/consumable/ethanol/vodka, 1) || reagents.has_reagent(/datum/reagent/space_cleaner, 1)) - SEND_SIGNAL(A, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_MEDIUM) - for(var/obj/effect/O in A) - if(is_cleanable(O)) - qdel(O) -// reagents.reaction(A, TOUCH, 10) //Needed for proper floor wetting. -// reagents.remove_any(1) //reaction() doesn't use up the reagents - -/obj/item/mop/afterattack(atom/A, mob/user, proximity) - . = ..() - if(!proximity) - return - - if(reagents.total_volume < 1) - to_chat(user, "My mop is dry!") - return - - var/turf/T = get_turf(A) - - if(istype(A, /obj/item/reagent_containers/glass/bucket) || istype(A, /obj/structure/janitorialcart)) - return - - if(T) - user.visible_message("[user] begins to clean \the [T] with [src].", "I begin to clean \the [T] with [src]...") - - if(do_after(user, src.mopspeed, target = T)) - to_chat(user, "I finish mopping.") - clean(T) - - -/obj/effect/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/mop) || istype(I, /obj/item/soap)) - return - else - return ..() - - -/obj/item/mop/proc/janicart_insert(mob/user, obj/structure/janitorialcart/J) - if(insertable) - J.put_in_cart(src, user) - J.mymop=src - J.update_icon() - else - to_chat(user, "I are unable to fit my [name] into the [J.name].") - return - -/obj/item/mop/cyborg - insertable = FALSE - -/obj/item/mop/advanced - desc = "" - name = "advanced mop" - mopcap = 10 - icon_state = "advmop" - item_state = "mop" - lefthand_file = 'icons/mob/inhands/equipment/custodial_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/custodial_righthand.dmi' - force = 12 - throwforce = 14 - throw_range = 4 - mopspeed = 8 - var/refill_enabled = TRUE //Self-refill toggle for when a janitor decides to mop with something other than water. - var/refill_rate = 1 //Rate per process() tick mop refills itself - var/refill_reagent = /datum/reagent/water //Determins what reagent to use for refilling, just in case someone wanted to make a HOLY MOP OF PURGING - -/obj/item/mop/advanced/New() - ..() - START_PROCESSING(SSobj, src) - -/obj/item/mop/advanced/attack_self(mob/user) - refill_enabled = !refill_enabled - if(refill_enabled) - START_PROCESSING(SSobj, src) - else - STOP_PROCESSING(SSobj,src) - to_chat(user, "I set the condenser switch to the '[refill_enabled ? "ON" : "OFF"]' position.") - playsound(user, 'sound/blank.ogg', 30, TRUE) - -/obj/item/mop/advanced/process() - - if(reagents.total_volume < mopcap) - reagents.add_reagent(refill_reagent, refill_rate) - -/obj/item/mop/advanced/examine(mob/user) - . = ..() - . += "The condenser switch is set to [refill_enabled ? "ON" : "OFF"]." - -/obj/item/mop/advanced/Destroy() - if(refill_enabled) - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/item/mop/advanced/cyborg - insertable = FALSE diff --git a/code/game/objects/items/paint.dm b/code/game/objects/items/paint.dm index 2a67db095c..ca4d3ac009 100644 --- a/code/game/objects/items/paint.dm +++ b/code/game/objects/items/paint.dm @@ -85,7 +85,7 @@ if(paintleft <= 0) icon_state = "paint_empty" return - if(!isturf(target) || isspaceturf(target)) + if(!isturf(target)) return var/newcolor = "#" + paint_color target.add_atom_colour(newcolor, WASHABLE_COLOUR_PRIORITY) diff --git a/code/game/objects/items/paiwire.dm b/code/game/objects/items/paiwire.dm deleted file mode 100644 index 334c2aafb1..0000000000 --- a/code/game/objects/items/paiwire.dm +++ /dev/null @@ -1,13 +0,0 @@ -/obj/item/pai_cable - desc = "" - name = "data cable" - icon = 'icons/obj/power.dmi' - icon_state = "wire1" - item_flags = NOBLUDGEON - var/obj/machinery/machine - -/obj/item/pai_cable/proc/plugin(obj/machinery/M, mob/living/user) - if(!user.transferItemToLoc(src, M)) - return - user.visible_message("[user] inserts [src] into a data port on [M].", "I insert [src] into a data port on [M].", "I hear the satisfying click of a wire jack fastening into place.") - machine = M diff --git a/code/game/objects/items/pet_carrier.dm b/code/game/objects/items/pet_carrier.dm deleted file mode 100644 index f226938d9c..0000000000 --- a/code/game/objects/items/pet_carrier.dm +++ /dev/null @@ -1,195 +0,0 @@ -#define pet_carrier_full(carrier) carrier.occupants.len >= carrier.max_occupants || carrier.occupant_weight >= carrier.max_occupant_weight - -//Used to transport little animals without having to drag them across the station. -//Comes with a handy lock to prevent them from running off. -/obj/item/pet_carrier - name = "pet carrier" - desc = "" - icon = 'icons/obj/pet_carrier.dmi' - icon_state = "pet_carrier_open" - item_state = "pet_carrier" - lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' - righthand_file = 'icons/mob/inhands/items_righthand.dmi' - force = 5 - attack_verb = list("bashed", "carried") - w_class = WEIGHT_CLASS_BULKY - throw_speed = 2 - throw_range = 3 - custom_materials = list(/datum/material/iron = 7500, /datum/material/glass = 100) - var/open = TRUE - var/locked = FALSE - var/list/occupants = list() - var/occupant_weight = 0 - var/max_occupants = 3 //Hard-cap so you can't have infinite mice or something in one carrier - var/max_occupant_weight = MOB_SIZE_SMALL //This is calculated from the mob sizes of occupants - -/obj/item/pet_carrier/Destroy() - if(occupants.len) - for(var/V in occupants) - remove_occupant(V) - return ..() - -/obj/item/pet_carrier/Exited(atom/movable/occupant) - if((occupant in occupants) && isliving(occupant)) - var/mob/living/L = occupant - occupants -= occupant - occupant_weight -= L.mob_size - -/obj/item/pet_carrier/handle_atom_del(atom/A) - if((A in occupants) && isliving(A)) - var/mob/living/L = A - occupants -= L - occupant_weight -= L.mob_size - ..() - -/obj/item/pet_carrier/examine(mob/user) - . = ..() - if(occupants.len) - for(var/V in occupants) - var/mob/living/L = V - . += "It has [L] inside." - else - . += "It has nothing inside." - if(user.canUseTopic(src)) - . += "Activate it in your hand to [open ? "close" : "open"] its door." - if(!open) - . += "Alt-click to [locked ? "unlock" : "lock"] its door." - -/obj/item/pet_carrier/attack_self(mob/living/user) - if(open) - to_chat(user, "I close [src]'s door.") - playsound(user, 'sound/blank.ogg', 50, TRUE) - open = FALSE - else - if(locked) - to_chat(user, "[src] is locked!") - return - to_chat(user, "I open [src]'s door.") - playsound(user, 'sound/blank.ogg', 50, TRUE) - open = TRUE - update_icon() - -/obj/item/pet_carrier/AltClick(mob/living/user) - if(open || !user.canUseTopic(src, BE_CLOSE)) - return - locked = !locked - to_chat(user, "I flip the lock switch [locked ? "down" : "up"].") - if(locked) - playsound(user, 'sound/blank.ogg', 30, TRUE) - else - playsound(user, 'sound/blank.ogg', 30, TRUE) - update_icon() - -/obj/item/pet_carrier/attack(mob/living/target, mob/living/user) - if(user.used_intent.type == INTENT_HARM) - return ..() - if(!open) - to_chat(user, "I need to open [src]'s door!") - return - if(target.mob_size > max_occupant_weight) - if(ishuman(target)) - var/mob/living/carbon/human/H = target - if(isfelinid(H)) - to_chat(user, "You'd need a lot of catnip and treats, plus maybe a laser pointer, for that to work.") - else - to_chat(user, "Humans, generally, do not fit into pet carriers.") - else - to_chat(user, "I get the feeling [target] isn't meant for a [name].") - return - if(user == target) - to_chat(user, "Why would you ever do that?") - return - load_occupant(user, target) - -/obj/item/pet_carrier/relaymove(mob/living/user, direction) - if(open) - loc.visible_message("[user] climbs out of [src]!", \ - "[user] jumps out of [src]!") - remove_occupant(user) - return - else if(!locked) - loc.visible_message("[user] pushes open the door to [src]!", \ - "[user] pushes open the door of [src]!") - open = TRUE - update_icon() - return - else if(user.client) - container_resist(user) - -/obj/item/pet_carrier/container_resist(mob/living/user) - user.changeNext_move(CLICK_CD_BREAKOUT) - user.last_special = world.time + CLICK_CD_BREAKOUT - if(user.mob_size <= MOB_SIZE_SMALL) - to_chat(user, "I poke a limb through [src]'s bars and start fumbling for the lock switch... (This will take some time.)") - to_chat(loc, "I see [user] reach through the bars and fumble for the lock switch!") - if(!do_after(user, rand(300, 400), target = user) || open || !locked || !(user in occupants)) - return - loc.visible_message("[user] flips the lock switch on [src] by reaching through!", null, null, null, user) - to_chat(user, "Bingo! The lock pops open!") - locked = FALSE - playsound(src, 'sound/blank.ogg', 30, TRUE) - update_icon() - else - loc.visible_message("[src] starts rattling as something pushes against the door!", null, null, null, user) - to_chat(user, "I start pushing out of [src]... (This will take about 20 seconds.)") - if(!do_after(user, 200, target = user) || open || !locked || !(user in occupants)) - return - loc.visible_message("[user] shoves out of [src]!", null, null, null, user) - to_chat(user, "I shove open [src]'s door against the lock's resistance and fall out!") - locked = FALSE - open = TRUE - update_icon() - remove_occupant(user) - -/obj/item/pet_carrier/update_icon() - cut_overlay("unlocked") - cut_overlay("locked") - if(open) - icon_state = initial(icon_state) - else - icon_state = "pet_carrier_[!occupants.len ? "closed" : "occupied"]" - add_overlay("[locked ? "" : "un"]locked") - -/obj/item/pet_carrier/MouseDrop(atom/over_atom) - . = ..() - if(isopenturf(over_atom) && usr.canUseTopic(src, BE_CLOSE, ismonkey(usr)) && usr.Adjacent(over_atom) && open && occupants.len) - usr.visible_message("[usr] unloads [src].", \ - "I unload [src] onto [over_atom].") - for(var/V in occupants) - remove_occupant(V, over_atom) - -/obj/item/pet_carrier/proc/load_occupant(mob/living/user, mob/living/target) - if(pet_carrier_full(src)) - to_chat(user, "[src] is already carrying too much!") - return - user.visible_message("[user] starts loading [target] into [src].", \ - "I start loading [target] into [src]...", null, null, target) - to_chat(target, "[user] starts loading you into [user.p_their()] [name]!") - if(!do_mob(user, target, 30)) - return - if(target in occupants) - return - if(pet_carrier_full(src)) //Run the checks again, just in case - to_chat(user, "[src] is already carrying too much!") - return - user.visible_message("[user] loads [target] into [src]!", \ - "I load [target] into [src].", null, null, target) - to_chat(target, "[user] loads you into [user.p_their()] [name]!") - add_occupant(target) - -/obj/item/pet_carrier/proc/add_occupant(mob/living/occupant) - if((occupant in occupants) || !istype(occupant)) - return - occupant.forceMove(src) - occupants += occupant - occupant_weight += occupant.mob_size - -/obj/item/pet_carrier/proc/remove_occupant(mob/living/occupant, turf/new_turf) - if(!(occupant in occupants) || !istype(occupant)) - return - occupant.forceMove(new_turf ? new_turf : drop_location()) - occupants -= occupant - occupant_weight -= occupant.mob_size - occupant.setDir(SOUTH) - -#undef pet_carrier_full diff --git a/code/game/objects/items/plushes.dm b/code/game/objects/items/plushes.dm deleted file mode 100644 index 90ffa7a07c..0000000000 --- a/code/game/objects/items/plushes.dm +++ /dev/null @@ -1,544 +0,0 @@ -/obj/item/toy/plush - name = "plush" - desc = "" - icon = 'icons/obj/plushes.dmi' - icon_state = "debug" - attack_verb = list("thumped", "whomped", "bumped") - w_class = WEIGHT_CLASS_SMALL - resistance_flags = FLAMMABLE - var/list/squeak_override //Weighted list; If you want your plush to have different squeak sounds use this - var/stuffed = TRUE //If the plushie has stuffing in it - var/obj/item/grenade/grenade //You can remove the stuffing from a plushie and add a grenade to it for *nefarious uses* - //--love ~<3-- - gender = NEUTER - var/obj/item/toy/plush/lover - var/obj/item/toy/plush/partner - var/obj/item/toy/plush/plush_child - var/obj/item/toy/plush/paternal_parent //who initiated creation - var/obj/item/toy/plush/maternal_parent //who owns, see love() - var/static/list/breeding_blacklist = typecacheof(/obj/item/toy/plush/carpplushie/dehy_carp) // you cannot have sexual relations with this plush - var/list/scorned = list() //who the plush hates - var/list/scorned_by = list() //who hates the plush, to remove external references on Destroy() - var/heartbroken = FALSE - var/vowbroken = FALSE - var/young = FALSE - var/divine = FALSE - var/mood_message - var/list/love_message - var/list/partner_message - var/list/heartbroken_message - var/list/vowbroken_message - var/list/parent_message - var/normal_desc - //--end of love :'(-- - -/obj/item/toy/plush/Initialize() - . = ..() - AddComponent(/datum/component/squeak, squeak_override) - - //have we decided if Pinocchio goes in the blue or pink aisle yet? - if(gender == NEUTER) - if(prob(50)) - gender = FEMALE - else - gender = MALE - - love_message = list("\n[src] is so happy, \he could rip a seam!") - partner_message = list("\n[src] has a ring on \his finger! It says bound to my dear [partner].") - heartbroken_message = list("\n[src] looks so sad.") - vowbroken_message = list("\n[src] lost \his ring...") - parent_message = list("\n[src] can't remember what sleep is.") - - normal_desc = desc - -/obj/item/toy/plush/Destroy() - QDEL_NULL(grenade) - - //inform next of kin and... acquaintances - if(partner) - partner.bad_news(src) - partner = null - lover = null - else if(lover) - lover.bad_news(src) - lover = null - - if(paternal_parent) - paternal_parent.bad_news(src) - paternal_parent = null - - if(maternal_parent) - maternal_parent.bad_news(src) - maternal_parent = null - - if(plush_child) - plush_child.bad_news(src) - plush_child = null - - var/i - var/obj/item/toy/plush/P - for(i=1, i<=scorned.len, i++) - P = scorned[i] - P.bad_news(src) - scorned = null - - for(i=1, i<=scorned_by.len, i++) - P = scorned_by[i] - P.bad_news(src) - scorned_by = null - - //null remaining lists - squeak_override = null - - love_message = null - partner_message = null - heartbroken_message = null - vowbroken_message = null - parent_message = null - - return ..() - -/obj/item/toy/plush/handle_atom_del(atom/A) - if(A == grenade) - grenade = null - ..() - -/obj/item/toy/plush/attack_self(mob/user) - . = ..() - if(stuffed || grenade) - to_chat(user, "I pet [src]. D'awww.") - if(grenade && !grenade.active) - log_game("[key_name(user)] activated a hidden grenade in [src].") - grenade.preprime(user, msg = FALSE, volume = 10) - else - to_chat(user, "I try to pet [src], but it has no stuffing. Aww...") - -/obj/item/toy/plush/attackby(obj/item/I, mob/living/user, params) - if(I.get_sharpness()) - if(!grenade) - if(!stuffed) - to_chat(user, "I already murdered it!") - return - if(!divine) - user.visible_message("[user] tears out the stuffing from [src]!", "I rip a bunch of the stuffing from [src]. Murderer.") - I.play_tool_sound(src) - stuffed = FALSE - else - to_chat(user, "What a fool you are. [src] is a god, how can you kill a god? What a grand and intoxicating innocence.") - if(iscarbon(user)) - var/mob/living/carbon/C = user - if(C.drunkenness < 50) - C.drunkenness = min(C.drunkenness + 20, 50) - var/turf/current_location = get_turf(user) - var/area/current_area = current_location.loc //copied from hand tele code - if(current_location && current_area && current_area.noteleport) - to_chat(user, "There is no escape. No recall or intervention can work in this place.") - else - to_chat(user, "There is no escape. Although recall or intervention can work in this place, attempting to flee from [src]'s immense power would be futile.") - user.visible_message("[user] lays down their weapons and begs for [src]'s mercy!", "I lay down your weapons and beg for [src]'s mercy.") - user.drop_all_held_items() - else - to_chat(user, "I remove the grenade from [src].") - user.put_in_hands(grenade) - grenade = null - return - if(istype(I, /obj/item/grenade)) - if(stuffed) - to_chat(user, "I need to remove some stuffing first!") - return - if(grenade) - to_chat(user, "[src] already has a grenade!") - return - if(!user.transferItemToLoc(I, src)) - return - user.visible_message("[user] slides [grenade] into [src].", \ - "I slide [I] into [src].") - grenade = I - var/turf/grenade_turf = get_turf(src) - log_game("[key_name(user)] added a grenade ([I.name]) to [src] at [AREACOORD(grenade_turf)].") - return - if(istype(I, /obj/item/toy/plush)) - love(I, user) - return - return ..() - -/obj/item/toy/plush/proc/love(obj/item/toy/plush/Kisser, mob/living/user) //~<3 - var/chance = 100 //to steal a kiss, surely there's a 100% chance no-one would reject a plush such as I? - var/concern = 20 //perhaps something might cloud true love with doubt - var/loyalty = 30 //why should another get between us? - var/duty = 50 //conquering another's is what I live for - - //we are not catholic - if(young == TRUE || Kisser.young == TRUE) - user.show_message("[src] plays tag with [Kisser].", MSG_VISUAL, - "They're happy.", NONE) - Kisser.cheer_up() - cheer_up() - - //never again - else if(Kisser in scorned) - //message, visible, alternate message, neither visible nor audible - user.show_message("[src] rejects the advances of [Kisser]!", MSG_VISUAL, - "That didn't feel like it worked.", NONE) - else if(src in Kisser.scorned) - user.show_message("[Kisser] realises who [src] is and turns away.", MSG_VISUAL, - "That didn't feel like it worked.", NONE) - - //first comes love - else if(Kisser.lover != src && Kisser.partner != src) //cannot be lovers or married - if(Kisser.lover) //if the initiator has a lover - Kisser.lover.heartbreak(Kisser) //the old lover can get over the kiss-and-run whilst the kisser has some fun - chance -= concern //one heart already broken, what does another mean? - if(lover) //if the recipient has a lover - chance -= loyalty //mustn't... but those lips - if(partner) //if the recipient has a partner - chance -= duty //do we mate for life? - - if(prob(chance)) //did we bag a date? - user.visible_message("[user] makes [Kisser] kiss [src]!", - "I make [Kisser] kiss [src]!") - if(lover) //who cares for the past, we live in the present - lover.heartbreak(src) - new_lover(Kisser) - Kisser.new_lover(src) - else - user.show_message("[src] rejects the advances of [Kisser], maybe next time?", MSG_VISUAL, - "That didn't feel like it worked, this time.", NONE) - - //then comes marriage - else if(Kisser.lover == src && Kisser.partner != src) //need to be lovers (assumes loving is a two way street) but not married (also assumes similar) - user.visible_message("[user] pronounces [Kisser] and [src] married! D'aw.", - "I pronounce [Kisser] and [src] married!") - new_partner(Kisser) - Kisser.new_partner(src) - - //then comes a baby in a baby's carriage, or an adoption in an adoption's orphanage - else if(Kisser.partner == src && !plush_child) //the one advancing does not take ownership of the child and we have a one child policy in the toyshop - user.visible_message("[user] is going to break [Kisser] and [src] by bashing them like that.", - "[Kisser] passionately embraces [src] in your hands. Look away you perv!") - if(plop(Kisser)) - user.visible_message("Something drops at the feet of [user].", - "The miracle of oh god did that just come out of [src]?!") - - //then comes protection, or abstinence if we are catholic - else if(Kisser.partner == src && plush_child) - user.visible_message("[user] makes [Kisser] nuzzle [src]!", - "I make [Kisser] nuzzle [src]!") - - //then oh fuck something unexpected happened - else - user.show_message("[Kisser] and [src] don't know what to do with one another.", NONE) - -/obj/item/toy/plush/proc/heartbreak(obj/item/toy/plush/Brutus) - if(lover != Brutus) - to_chat(world, "lover != Brutus") - return //why are we considering someone we don't love? - - scorned.Add(Brutus) - Brutus.scorned_by(src) - - lover = null - Brutus.lover = null //feeling's mutual - - heartbroken = TRUE - mood_message = pick(heartbroken_message) - - if(partner == Brutus) //oh dear... - partner = null - Brutus.partner = null //it'd be weird otherwise - vowbroken = TRUE - mood_message = pick(vowbroken_message) - - update_desc() - -/obj/item/toy/plush/proc/scorned_by(obj/item/toy/plush/Outmoded) - scorned_by.Add(Outmoded) - -/obj/item/toy/plush/proc/new_lover(obj/item/toy/plush/Juliet) - if(lover == Juliet) - return //nice try - lover = Juliet - - cheer_up() - lover.cheer_up() - - mood_message = pick(love_message) - update_desc() - - if(partner) //who? - partner = null //more like who cares - -/obj/item/toy/plush/proc/new_partner(obj/item/toy/plush/Apple_of_my_eye) - if(partner == Apple_of_my_eye) - return //double marriage is just insecurity - if(lover != Apple_of_my_eye) - return //union not born out of love will falter - - partner = Apple_of_my_eye - - heal_memories() - partner.heal_memories() - - mood_message = pick(partner_message) - update_desc() - -/obj/item/toy/plush/proc/plop(obj/item/toy/plush/Daddy) - if(partner != Daddy) - return FALSE //we do not have bastards in our toyshop - - if(is_type_in_typecache(Daddy, breeding_blacklist)) - return FALSE // some love is forbidden - - if(prob(50)) //it has my eyes - plush_child = new type(get_turf(loc)) - else //it has your eyes - plush_child = new Daddy.type(get_turf(loc)) - - plush_child.make_young(src, Daddy) - -/obj/item/toy/plush/proc/make_young(obj/item/toy/plush/Mama, obj/item/toy/plush/Dada) - if(Mama == Dada) - return //cloning is reserved for plants and spacemen - - maternal_parent = Mama - paternal_parent = Dada - young = TRUE - name = "[Mama] Jr" //Icelandic naming convention pending - normal_desc = "" //original desc won't be used so the child can have moods - update_desc() - - Mama.mood_message = pick(Mama.parent_message) - Mama.update_desc() - Dada.mood_message = pick(Dada.parent_message) - Dada.update_desc() - -/obj/item/toy/plush/proc/bad_news(obj/item/toy/plush/Deceased) //cotton to cotton, sawdust to sawdust - var/is_that_letter_for_me = FALSE - if(partner == Deceased) //covers marriage - is_that_letter_for_me = TRUE - partner = null - lover = null - else if(lover == Deceased) //covers lovers - is_that_letter_for_me = TRUE - lover = null - - //covers children - if(maternal_parent == Deceased) - is_that_letter_for_me = TRUE - maternal_parent = null - - if(paternal_parent == Deceased) - is_that_letter_for_me = TRUE - paternal_parent = null - - //covers parents - if(plush_child == Deceased) - is_that_letter_for_me = TRUE - plush_child = null - - //covers bad memories - if(Deceased in scorned) - scorned.Remove(Deceased) - cheer_up() //what cold button eyes you have - - if(Deceased in scorned_by) - scorned_by.Remove(Deceased) - - //all references to the departed should be cleaned up by now - - if(is_that_letter_for_me) - heartbroken = TRUE - mood_message = pick(heartbroken_message) - update_desc() - -/obj/item/toy/plush/proc/cheer_up() //it'll be all right - if(!heartbroken) - return //you cannot make smile what is already - if(vowbroken) - return //it's a pretty big deal - - heartbroken = !heartbroken - - if(mood_message in heartbroken_message) - mood_message = null - update_desc() - -/obj/item/toy/plush/proc/heal_memories() //time fixes all wounds - if(!vowbroken) - vowbroken = !vowbroken - if(mood_message in vowbroken_message) - mood_message = null - cheer_up() - -/obj/item/toy/plush/proc/update_desc() - desc = normal_desc - if(mood_message) - desc += mood_message - -/obj/item/toy/plush/carpplushie - name = "space carp plushie" - desc = "" - icon_state = "carpplush" - item_state = "carp_plushie" - attack_verb = list("bitten", "eaten", "fin slapped") - squeak_override = list('sound/blank.ogg'=1) - -/obj/item/toy/plush/bubbleplush - name = "\improper Bubblegum plushie" - desc = "" - icon_state = "bubbleplush" - attack_verb = list("rent") - squeak_override = list('sound/blank.ogg'=1) - -/obj/item/toy/plush/plushvar - name = "\improper Ratvar plushie" - desc = "" - icon_state = "plushvar" - divine = TRUE - var/obj/item/toy/plush/narplush/clash_target - gender = MALE //he's a boy, right? - -/obj/item/toy/plush/plushvar/Moved() - . = ..() - if(clash_target) - return - var/obj/item/toy/plush/narplush/P = locate() in range(1, src) - if(P && istype(P.loc, /turf/open) && !P.clashing) - clash_of_the_plushies(P) - -/obj/item/toy/plush/plushvar/proc/clash_of_the_plushies(obj/item/toy/plush/narplush/P) - clash_target = P - P.clashing = TRUE - say("YOU.") - P.say("Ratvar?!") - var/obj/item/toy/plush/a_winnar_is - var/victory_chance = 10 - for(var/i in 1 to 10) //We only fight ten times max - if(QDELETED(src)) - P.clashing = FALSE - return - if(QDELETED(P)) - clash_target = null - return - if(!Adjacent(P)) - visible_message("The two plushies angrily flail at each other before giving up.") - clash_target = null - P.clashing = FALSE - return - playsound(src, 'sound/blank.ogg', 50, TRUE, frequency = 2) - sleep(2.4) - if(QDELETED(src)) - P.clashing = FALSE - return - if(QDELETED(P)) - clash_target = null - return - if(prob(victory_chance)) - a_winnar_is = src - break - P.SpinAnimation(5, 0) - sleep(5) - if(QDELETED(src)) - P.clashing = FALSE - return - if(QDELETED(P)) - clash_target = null - return - playsound(P, 'sound/blank.ogg', 50, TRUE, frequency = 2) - sleep(3.3) - if(QDELETED(src)) - P.clashing = FALSE - return - if(QDELETED(P)) - clash_target = null - return - if(prob(victory_chance)) - a_winnar_is = P - break - SpinAnimation(5, 0) - victory_chance += 10 - sleep(5) - if(!a_winnar_is) - a_winnar_is = pick(src, P) - if(a_winnar_is == src) - say(pick("DIE.", "ROT.")) - P.say(pick("Nooooo...", "Not die. To y-", "Die. Ratv-", "Sas tyen re-")) - playsound(src, 'sound/blank.ogg', 50, TRUE, frequency = 2) - playsound(P, 'sound/blank.ogg', 50, TRUE, frequency = 2) - explosion(P, 0, 0, 1) - qdel(P) - clash_target = null - else - say("NO! I will not be banished again...") - P.say(pick("Ha.", "Ra'sha fonn dest.", "You fool. To come here.")) - playsound(src, 'sound/blank.ogg', 62, TRUE, frequency = 2) - playsound(P, 'sound/blank.ogg', 50, TRUE, frequency = 2) - explosion(src, 0, 0, 1) - qdel(src) - P.clashing = FALSE - -/obj/item/toy/plush/narplush - name = "\improper Nar'Sie plushie" - desc = "" - icon_state = "narplush" - divine = TRUE - var/clashing - gender = FEMALE //it's canon if the toy is - -/obj/item/toy/plush/narplush/Moved() - . = ..() - var/obj/item/toy/plush/plushvar/P = locate() in range(1, src) - if(P && istype(P.loc, /turf/open) && !P.clash_target && !clashing) - P.clash_of_the_plushies(src) - -/obj/item/toy/plush/lizardplushie - name = "lizard plushie" - desc = "" - icon_state = "plushie_lizard" - item_state = "plushie_lizard" - attack_verb = list("clawed", "hissed", "tail slapped") - squeak_override = list('sound/blank.ogg' = 1) - -/obj/item/toy/plush/snakeplushie - name = "snake plushie" - desc = "" - icon_state = "plushie_snake" - item_state = "plushie_snake" - attack_verb = list("bitten", "hissed", "tail slapped") - squeak_override = list('sound/blank.ogg' = 1) - -/obj/item/toy/plush/nukeplushie - name = "operative plushie" - desc = "" - icon_state = "plushie_nuke" - item_state = "plushie_nuke" - attack_verb = list("shot", "nuked", "detonated") - squeak_override = list('sound/blank.ogg' = 1) - -/obj/item/toy/plush/slimeplushie - name = "slime plushie" - desc = "" - icon_state = "plushie_slime" - item_state = "plushie_slime" - attack_verb = list("blorbled", "slimed", "absorbed") - squeak_override = list('sound/blank.ogg' = 1) - gender = FEMALE //given all the jokes and drawings, I'm not sure the xenobiologists would make a slimeboy - -/obj/item/toy/plush/awakenedplushie - name = "awakened plushie" - desc = "" - icon_state = "plushie_awake" - item_state = "plushie_awake" - -/obj/item/toy/plush/awakenedplushie/ComponentInitialize() - . = ..() - AddComponent(/datum/component/edit_complainer) - -/obj/item/toy/plush/beeplushie - name = "bee plushie" - desc = "" - icon_state = "plushie_h" - item_state = "plushie_h" - attack_verb = list("stung") - gender = FEMALE - squeak_override = list('sound/blank.ogg'=1) diff --git a/code/game/objects/items/pneumaticCannon.dm b/code/game/objects/items/pneumaticCannon.dm deleted file mode 100644 index 9fbabc93ae..0000000000 --- a/code/game/objects/items/pneumaticCannon.dm +++ /dev/null @@ -1,345 +0,0 @@ - -#define PCANNON_FIREALL 1 -#define PCANNON_FILO 2 -#define PCANNON_FIFO 3 -/obj/item/pneumatic_cannon - name = "pneumatic cannon" - desc = "" - w_class = WEIGHT_CLASS_BULKY - force = 8 //Very heavy - attack_verb = list("bludgeoned", "smashed", "beaten") - icon = 'icons/obj/pneumaticCannon.dmi' - icon_state = "pneumaticCannon" - item_state = "bulldog" - lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi' - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 50) - var/maxWeightClass = 20 //The max weight of items that can fit into the cannon - var/loadedWeightClass = 0 //The weight of items currently in the cannon - var/obj/item/tank/internals/tank = null //The gas tank that is drawn from to fire things - var/gasPerThrow = 3 //How much gas is drawn from a tank's pressure to fire - var/list/loadedItems = list() //The items loaded into the cannon that will be fired out - var/pressureSetting = 1 //How powerful the cannon is - higher pressure = more gas but more powerful throws - var/checktank = TRUE - var/range_multiplier = 1 - var/throw_amount = 1 //How many items to throw per fire - var/fire_mode = PCANNON_FIFO - var/automatic = FALSE - var/clumsyCheck = TRUE - var/list/allowed_typecache //Leave as null to allow all. - var/charge_amount = 1 - var/charge_ticks = 1 - var/charge_tick = 0 - var/charge_type - var/selfcharge = FALSE - var/fire_sound = 'sound/blank.ogg' - var/spin_item = TRUE //Do the projectiles spin when launched? - trigger_guard = TRIGGER_GUARD_NORMAL - - -/obj/item/pneumatic_cannon/Initialize() - . = ..() - if(selfcharge) - init_charge() - -/obj/item/pneumatic_cannon/proc/init_charge() //wrapper so it can be vv'd easier - START_PROCESSING(SSobj, src) - -/obj/item/pneumatic_cannon/process() - if(++charge_tick >= charge_ticks && charge_type) - fill_with_type(charge_type, charge_amount) - -/obj/item/pneumatic_cannon/Destroy() - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/item/pneumatic_cannon/CanItemAutoclick() - return automatic - -/obj/item/pneumatic_cannon/examine(mob/user) - . = ..() - var/list/out = list() - if(!in_range(user, src)) - out += "You'll need to get closer to see any more." - return - for(var/obj/item/I in loadedItems) - out += "[icon2html(I, user)] It has \a [I] loaded." - CHECK_TICK - if(tank) - out += "[icon2html(tank, user)] It has \a [tank] mounted onto it." - . += out.Join("\n") - -/obj/item/pneumatic_cannon/attackby(obj/item/W, mob/user, params) - if(user.used_intent.type == INTENT_HARM) - return ..() - if(istype(W, /obj/item/tank/internals)) - if(!tank) - var/obj/item/tank/internals/IT = W - if(IT.volume <= 3) - to_chat(user, "\The [IT] is too small for \the [src].") - return - updateTank(W, 0, user) - else if(W.type == type) - to_chat(user, "You're fairly certain that putting a pneumatic cannon inside another pneumatic cannon would cause a spacetime disruption.") - else if(W.tool_behaviour == TOOL_WRENCH) - switch(pressureSetting) - if(1) - pressureSetting = 2 - if(2) - pressureSetting = 3 - if(3) - pressureSetting = 1 - to_chat(user, "I tweak \the [src]'s pressure output to [pressureSetting].") - else if(W.tool_behaviour == TOOL_SCREWDRIVER) - if(tank) - updateTank(tank, 1, user) - else if(loadedWeightClass >= maxWeightClass) - to_chat(user, "\The [src] can't hold any more items!") - else if(isitem(W)) - var/obj/item/IW = W - load_item(IW, user) - -/obj/item/pneumatic_cannon/proc/can_load_item(obj/item/I, mob/user) - if(!istype(I)) //Players can't load non items, this allows for admin varedit inserts. - return TRUE - if(allowed_typecache && !is_type_in_typecache(I, allowed_typecache)) - if(user) - to_chat(user, "[I] won't fit into [src]!") - return - if((loadedWeightClass + I.w_class) > maxWeightClass) //Only make messages if there's a user - if(user) - to_chat(user, "\The [I] won't fit into \the [src]!") - return FALSE - if(I.w_class > w_class) - if(user) - to_chat(user, "\The [I] is too large to fit into \the [src]!") - return FALSE - return TRUE - -/obj/item/pneumatic_cannon/proc/load_item(obj/item/I, mob/user) - if(!can_load_item(I, user)) - return FALSE - if(user) //Only use transfer proc if there's a user, otherwise just set loc. - if(!user.transferItemToLoc(I, src)) - return FALSE - to_chat(user, "I load \the [I] into \the [src].") - else - I.forceMove(src) - loadedItems += I - if(isitem(I)) - loadedWeightClass += I.w_class - else - loadedWeightClass++ - return TRUE - -/obj/item/pneumatic_cannon/afterattack(atom/target, mob/living/user, flag, params) - . = ..() - if(flag && user.used_intent.type == INTENT_HARM) //melee attack - return - if(!istype(user)) - return - Fire(user, target) - -/obj/item/pneumatic_cannon/proc/Fire(mob/living/user, atom/target) - if(!istype(user) && !target) - return - var/discharge = 0 - if(!can_trigger_gun(user)) - return - if(!loadedItems || !loadedWeightClass) - to_chat(user, "\The [src] has nothing loaded.") - return - if(!tank && checktank) - to_chat(user, "\The [src] can't fire without a source of gas.") - return - if(tank && !tank.air_contents.remove(gasPerThrow * pressureSetting)) - to_chat(user, "\The [src] lets out a weak hiss and doesn't react!") - return - if(HAS_TRAIT(user, TRAIT_CLUMSY) && prob(75) && clumsyCheck && iscarbon(user)) - var/mob/living/carbon/C = user - C.visible_message("[C] loses [C.p_their()] grip on [src], causing it to go off!", "[src] slips out of your hands and goes off!") - C.dropItemToGround(src, TRUE) - if(prob(10)) - target = get_turf(user) - else - var/list/possible_targets = range(3,src) - target = pick(possible_targets) - discharge = 1 - if(!discharge) - user.visible_message("[user] fires \the [src]!", \ - "I fire \the [src]!") - log_combat(user, target, "fired at", src) - var/turf/T = get_target(target, get_turf(src)) - playsound(src, fire_sound, 50, TRUE) - fire_items(T, user) - if(pressureSetting >= 3 && iscarbon(user)) - var/mob/living/carbon/C = user - C.visible_message("[C] is thrown down by the force of the cannon!", "[src] slams into your shoulder, knocking you down!") - C.Paralyze(60) - -/obj/item/pneumatic_cannon/proc/fire_items(turf/target, mob/user) - if(fire_mode == PCANNON_FIREALL) - for(var/obj/item/ITD in loadedItems) //Item To Discharge - if(!throw_item(target, ITD, user)) - break - else - for(var/i in 1 to throw_amount) - if(!loadedItems.len) - break - var/atom/movable/I - if(fire_mode == PCANNON_FILO) - I = loadedItems[loadedItems.len] - else - I = loadedItems[1] - if(!throw_item(target, I, user)) - break - -/obj/item/pneumatic_cannon/proc/throw_item(turf/target, atom/movable/AM, mob/user) - if(!istype(AM)) - return FALSE - loadedItems -= AM - if(isitem(AM)) - var/obj/item/I = AM - loadedWeightClass -= I.w_class - else - loadedWeightClass-- - AM.forceMove(get_turf(src)) - AM.throw_at(target, pressureSetting * 10 * range_multiplier, pressureSetting * 2, user, spin_item) - return TRUE - -/obj/item/pneumatic_cannon/proc/get_target(turf/target, turf/starting) - if(range_multiplier == 1) - return target - var/x_o = (target.x - starting.x) - var/y_o = (target.y - starting.y) - var/new_x = CLAMP((starting.x + (x_o * range_multiplier)), 0, world.maxx) - var/new_y = CLAMP((starting.y + (y_o * range_multiplier)), 0, world.maxy) - var/turf/newtarget = locate(new_x, new_y, starting.z) - return newtarget - -/obj/item/pneumatic_cannon/handle_atom_del(atom/A) - . = ..() - if (loadedItems.Remove(A)) - var/obj/item/I = A - if(istype(I)) - loadedWeightClass -= I.w_class - else - loadedWeightClass-- - else if (A == tank) - tank = null - update_icon() - -/obj/item/pneumatic_cannon/ghetto //Obtainable by improvised methods; more gas per use, less capacity - name = "improvised pneumatic cannon" - desc = "" - force = 5 - maxWeightClass = 10 - gasPerThrow = 5 - -/obj/item/pneumatic_cannon/proc/updateTank(obj/item/tank/internals/thetank, removing = 0, mob/living/carbon/human/user) - if(removing) - if(!tank) - return - to_chat(user, "I detach \the [thetank] from \the [src].") - tank.forceMove(user.drop_location()) - user.put_in_hands(tank) - tank = null - if(!removing) - if(tank) - to_chat(user, "\The [src] already has a tank.") - return - if(!user.transferItemToLoc(thetank, src)) - return - to_chat(user, "I hook \the [thetank] up to \the [src].") - tank = thetank - update_icon() - -/obj/item/pneumatic_cannon/update_icon() - cut_overlays() - if(!tank) - return - add_overlay(tank.icon_state) - -/obj/item/pneumatic_cannon/proc/fill_with_type(type, amount) - if(!ispath(type, /obj) && !ispath(type, /mob)) - return FALSE - var/loaded = 0 - for(var/i in 1 to amount) - var/obj/item/I = new type - if(!load_item(I, null)) - qdel(I) - return loaded - loaded++ - CHECK_TICK - -/obj/item/pneumatic_cannon/pie - name = "pie cannon" - desc = "" - force = 10 - icon_state = "piecannon" - gasPerThrow = 0 - checktank = FALSE - range_multiplier = 3 - fire_mode = PCANNON_FIFO - throw_amount = 1 - maxWeightClass = 150 //50 pies. :^) - clumsyCheck = FALSE - var/static/list/pie_typecache = typecacheof(/obj/item/reagent_containers/food/snacks/pie) - -/obj/item/pneumatic_cannon/pie/Initialize() - . = ..() - allowed_typecache = pie_typecache - -/obj/item/pneumatic_cannon/pie/selfcharge - automatic = TRUE - selfcharge = TRUE - charge_type = /obj/item/reagent_containers/food/snacks/pie/cream - maxWeightClass = 60 //20 pies. - -/obj/item/pneumatic_cannon/pie/selfcharge/cyborg - name = "low velocity pie cannon" - automatic = FALSE - charge_type = /obj/item/reagent_containers/food/snacks/pie/cream/nostun - maxWeightClass = 6 //2 pies - charge_ticks = 2 //4 second/pie - -/obj/item/pneumatic_cannon/speargun - name = "kinetic speargun" - desc = "" - icon = 'icons/obj/guns/projectile.dmi' - icon_state = "speargun" - item_state = "speargun" - w_class = WEIGHT_CLASS_BULKY - force = 10 - fire_sound = 'sound/blank.ogg' - gasPerThrow = 0 - checktank = FALSE - range_multiplier = 3 - throw_amount = 1 - maxWeightClass = 2 //a single magspear - spin_item = FALSE - var/static/list/magspear_typecache = typecacheof(/obj/item/throwing_star/magspear) - -/obj/item/pneumatic_cannon/speargun/Initialize() - . = ..() - allowed_typecache = magspear_typecache - -/obj/item/storage/backpack/magspear_quiver - name = "quiver" - desc = "" - icon_state = "quiver" - item_state = "quiver" - -/obj/item/storage/backpack/magspear_quiver/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_items = 20 - STR.max_combined_w_class = 40 - STR.display_numerical_stacking = TRUE - STR.set_holdable(list( - /obj/item/throwing_star/magspear - )) - -/obj/item/storage/backpack/magspear_quiver/PopulateContents() - for(var/i in 1 to 20) - new /obj/item/throwing_star/magspear(src) diff --git a/code/game/objects/items/powerfist.dm b/code/game/objects/items/powerfist.dm deleted file mode 100644 index 536a1a18fd..0000000000 --- a/code/game/objects/items/powerfist.dm +++ /dev/null @@ -1,111 +0,0 @@ -/obj/item/melee/powerfist - name = "power-fist" - desc = "" - icon_state = "powerfist" - item_state = "powerfist" - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' - flags_1 = CONDUCT_1 - attack_verb = list("whacked", "fisted", "power-punched") - force = 20 - throwforce = 10 - throw_range = 7 - w_class = WEIGHT_CLASS_NORMAL - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 40) - resistance_flags = FIRE_PROOF - var/click_delay = 1.5 - var/fisto_setting = 1 - var/gasperfist = 3 - var/obj/item/tank/internals/tank = null //Tank used for the gauntlet's piston-ram. - - -/obj/item/melee/powerfist/examine(mob/user) - . = ..() - if(!in_range(user, src)) - . += "You'll need to get closer to see any more." - return - if(tank) - . += "[icon2html(tank, user)] It has \a [tank] mounted onto it." - - -/obj/item/melee/powerfist/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/tank/internals)) - if(!tank) - var/obj/item/tank/internals/IT = W - if(IT.volume <= 3) - to_chat(user, "\The [IT] is too small for \the [src].") - return - updateTank(W, 0, user) - else if(W.tool_behaviour == TOOL_WRENCH) - switch(fisto_setting) - if(1) - fisto_setting = 2 - if(2) - fisto_setting = 3 - if(3) - fisto_setting = 1 - W.play_tool_sound(src) - to_chat(user, "I tweak \the [src]'s piston valve to [fisto_setting].") - else if(W.tool_behaviour == TOOL_SCREWDRIVER) - if(tank) - updateTank(tank, 1, user) - -/obj/item/melee/powerfist/proc/updateTank(obj/item/tank/internals/thetank, removing = 0, mob/living/carbon/human/user) - if(removing) - if(!tank) - to_chat(user, "\The [src] currently has no tank attached to it.") - return - to_chat(user, "I detach \the [thetank] from \the [src].") - tank.forceMove(get_turf(user)) - user.put_in_hands(tank) - tank = null - if(!removing) - if(tank) - to_chat(user, "\The [src] already has a tank.") - return - if(!user.transferItemToLoc(thetank, src)) - return - to_chat(user, "I hook \the [thetank] up to \the [src].") - tank = thetank - - -/obj/item/melee/powerfist/attack(mob/living/target, mob/living/user) - if(!tank) - to_chat(user, "\The [src] can't operate without a source of gas!") - return - var/datum/gas_mixture/gasused = tank.air_contents.remove(gasperfist * fisto_setting) - var/turf/T = get_turf(src) - if(!T) - return - T.assume_air(gasused) - T.air_update_turf() - if(!gasused) - to_chat(user, "\The [src]'s tank is empty!") - target.apply_damage((force / 5), BRUTE) - playsound(loc, 'sound/blank.ogg', 50, TRUE) - target.visible_message("[user]'s powerfist lets out a dull thunk as [user.p_they()] punch[user.p_es()] [target.name]!", \ - "[user]'s punches you!") - return - if(gasused.total_moles() < gasperfist * fisto_setting) - to_chat(user, "\The [src]'s piston-ram lets out a weak hiss, it needs more gas!") - playsound(loc, 'sound/blank.ogg', 50, TRUE) - target.apply_damage((force / 2), BRUTE) - target.visible_message("[user]'s powerfist lets out a weak hiss as [user.p_they()] punch[user.p_es()] [target.name]!", \ - "[user]'s punch strikes with force!") - return - target.apply_damage(force * fisto_setting, BRUTE) - target.visible_message("[user]'s powerfist lets out a loud hiss as [user.p_they()] punch[user.p_es()] [target.name]!", \ - "I cry out in pain as [user]'s punch flings you backwards!") - new /obj/effect/temp_visual/kinetic_blast(target.loc) - playsound(loc, 'sound/blank.ogg', 50, TRUE) - playsound(loc, 'sound/blank.ogg', 50, TRUE) - - var/atom/throw_target = get_edge_target_turf(target, get_dir(src, get_step_away(target, src))) - - target.throw_at(throw_target, 5 * fisto_setting, 0.5 + (fisto_setting / 2)) - - log_combat(user, target, "power fisted", src) - - user.changeNext_move(CLICK_CD_MELEE * click_delay) - - return diff --git a/code/game/objects/items/religion.dm b/code/game/objects/items/religion.dm deleted file mode 100644 index 78af5f7b6e..0000000000 --- a/code/game/objects/items/religion.dm +++ /dev/null @@ -1,390 +0,0 @@ -/obj/item/banner - name = "banner" - desc = "" - icon = 'icons/obj/banner.dmi' - icon_state = "banner" - item_state = "banner" - force = 8 - attack_verb = list("forcefully inspired", "violently encouraged", "relentlessly galvanized") - lefthand_file = 'icons/mob/inhands/equipment/banners_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/banners_righthand.dmi' - var/inspiration_available = TRUE //If this banner can be used to inspire crew - var/morale_time = 0 - var/morale_cooldown = 600 //How many deciseconds between uses - var/list/job_loyalties //Mobs with any of these assigned roles will be inspired - var/list/role_loyalties //Mobs with any of these special roles will be inspired - var/warcry - -/obj/item/banner/examine(mob/user) - . = ..() - if(inspiration_available) - . += "Activate it in my hand to inspire nearby allies of this banner's allegiance!" - -/obj/item/banner/attack_self(mob/living/carbon/human/user) - if(!inspiration_available) - return - if(morale_time > world.time) - to_chat(user, "I aren't feeling inspired enough to flourish [src] again yet.") - return - user.visible_message("[user] flourishes [src]!", \ - "I raise [src] skywards, inspiring my allies!") - playsound(src, "rustle", 100, FALSE) - if(warcry) - user.say("[warcry]", forced="banner") - var/old_transform = user.transform - user.transform *= 1.2 - animate(user, transform = old_transform, time = 10) - morale_time = world.time + morale_cooldown - - var/list/inspired = list() - var/has_job_loyalties = LAZYLEN(job_loyalties) - var/has_role_loyalties = LAZYLEN(role_loyalties) - inspired += user //The user is always inspired, regardless of loyalties - for(var/mob/living/carbon/human/H in range(4, get_turf(src))) - if(H.stat == DEAD || H == user) - continue - if(H.mind && (has_job_loyalties || has_role_loyalties)) - if(has_job_loyalties && (H.mind.assigned_role in job_loyalties)) - inspired += H - else if(has_role_loyalties && (H.mind.special_role in role_loyalties)) - inspired += H - else if(check_inspiration(H)) - inspired += H - - for(var/V in inspired) - var/mob/living/carbon/human/H = V - if(H != user) - to_chat(H, "My confidence surges as [user] flourishes [user.p_their()] [name]!") - inspiration(H) - special_inspiration(H) - -/obj/item/banner/proc/check_inspiration(mob/living/carbon/human/H) //Banner-specific conditions for being eligible - return - -/obj/item/banner/proc/inspiration(mob/living/carbon/human/H) - H.adjustBruteLoss(-15) - H.adjustFireLoss(-15) - H.AdjustStun(-40) - H.AdjustKnockdown(-40) - H.AdjustImmobilized(-40) - H.AdjustParalyzed(-40) - H.AdjustUnconscious(-40) - playsound(H, 'sound/blank.ogg', 25, FALSE) - -/obj/item/banner/proc/special_inspiration(mob/living/carbon/human/H) //Any banner-specific inspiration effects go here - return - -/obj/item/banner/security - name = "securistan banner" - desc = "" - icon_state = "banner_security" - item_state = "banner_security" - lefthand_file = 'icons/mob/inhands/equipment/banners_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/banners_righthand.dmi' - job_loyalties = list("Security Officer", "Warden", "Detective", "Head of Security") - warcry = "EVERYONE DOWN ON THE GROUND!!" - -/obj/item/banner/security/mundane - inspiration_available = FALSE - -/datum/crafting_recipe/security_banner - name = "Securistan Banner" - result = /obj/item/banner/security/mundane - time = 40 - reqs = list(/obj/item/stack/rods = 2, - /obj/item/clothing/under/rank/security/officer = 1) - category = CAT_NONE - -/obj/item/banner/medical - name = "meditopia banner" - desc = "" - icon_state = "banner_medical" - item_state = "banner_medical" - lefthand_file = 'icons/mob/inhands/equipment/banners_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/banners_righthand.dmi' - job_loyalties = list("Medical Doctor", "Chemist", "Geneticist", "Virologist", "Chief Medical Officer") - warcry = "No wounds cannot be healed!" - -/obj/item/banner/medical/mundane - inspiration_available = FALSE - -/obj/item/banner/medical/check_inspiration(mob/living/carbon/human/H) - return H.stat //Meditopia is moved to help those in need - -/datum/crafting_recipe/medical_banner - name = "Meditopia Banner" - result = /obj/item/banner/medical/mundane - time = 40 - reqs = list(/obj/item/stack/rods = 2, - /obj/item/clothing/under/rank/medical = 1) - category = CAT_NONE - -/obj/item/banner/medical/special_inspiration(mob/living/carbon/human/H) - H.adjustToxLoss(-15) - H.setOxyLoss(0) - H.reagents.add_reagent(/datum/reagent/medicine/inaprovaline, 5) - -/obj/item/banner/science - name = "sciencia banner" - desc = "" - icon_state = "banner_science" - item_state = "banner_science" - lefthand_file = 'icons/mob/inhands/equipment/banners_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/banners_righthand.dmi' - job_loyalties = list("Scientist", "Roboticist", "Research Director") - warcry = "For Cuban Pete!" - -/obj/item/banner/science/mundane - inspiration_available = FALSE - -/obj/item/banner/science/check_inspiration(mob/living/carbon/human/H) - return H.on_fire //Sciencia is pleased by dedication to the art of Toxins - -/datum/crafting_recipe/science_banner - name = "Sciencia Banner" - result = /obj/item/banner/science/mundane - time = 40 - reqs = list(/obj/item/stack/rods = 2, - /obj/item/clothing/under/rank/rnd/scientist = 1) - category = CAT_NONE - -/obj/item/banner/cargo - name = "cargonia banner" - desc = "" - icon_state = "banner_cargo" - item_state = "banner_cargo" - lefthand_file = 'icons/mob/inhands/equipment/banners_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/banners_righthand.dmi' - job_loyalties = list("Cargo Technician", "Shaft Miner", "Quartermaster") - warcry = "Hail Cargonia!" - -/obj/item/banner/cargo/mundane - inspiration_available = FALSE - -/datum/crafting_recipe/cargo_banner - name = "Cargonia Banner" - result = /obj/item/banner/cargo/mundane - time = 40 - reqs = list(/obj/item/stack/rods = 2, - /obj/item/clothing/under/rank/cargo/tech = 1) - category = CAT_NONE - -/obj/item/banner/engineering - name = "engitopia banner" - desc = "" - icon_state = "banner_engineering" - item_state = "banner_engineering" - lefthand_file = 'icons/mob/inhands/equipment/banners_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/banners_righthand.dmi' - job_loyalties = list("Station Engineer", "Atmospheric Technician", "Chief Engineer") - warcry = "All hail lord Singuloth!!" - -/obj/item/banner/engineering/mundane - inspiration_available = FALSE - -/obj/item/banner/engineering/special_inspiration(mob/living/carbon/human/H) - H.radiation = 0 - -/datum/crafting_recipe/engineering_banner - name = "Engitopia Banner" - result = /obj/item/banner/engineering/mundane - time = 40 - reqs = list(/obj/item/stack/rods = 2, - /obj/item/clothing/under/rank/engineering/engineer = 1) - category = CAT_NONE - -/obj/item/banner/command - name = "command banner" - desc = "" - //No icon state here since the default one is the NT banner - job_loyalties = list("Captain", "Head of Personnel", "Chief Engineer", "Head of Security", "Research Director", "Chief Medical Officer") - warcry = "Hail Nanotrasen!" - -/obj/item/banner/command/mundane - inspiration_available = FALSE - -/obj/item/banner/command/check_inspiration(mob/living/carbon/human/H) - return HAS_TRAIT(H, TRAIT_MINDSHIELD) //Command is stalwart but rewards their allies. - -/datum/crafting_recipe/command_banner - name = "Command Banner" - result = /obj/item/banner/command/mundane - time = 40 - reqs = list(/obj/item/stack/rods = 2, - /obj/item/clothing/under/rank/captain/parade = 1) - category = CAT_NONE - -/obj/item/banner/red - name = "red banner" - icon_state = "banner-red" - item_state = "banner-red" - desc = "" - -/obj/item/banner/blue - name = "blue banner" - icon_state = "banner-blue" - item_state = "banner-blue" - desc = "" - -/obj/item/storage/backpack/bannerpack - name = "nanotrasen banner backpack" - desc = "" - icon_state = "bannerpack" - -/obj/item/storage/backpack/bannerpack/Initialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_combined_w_class = 27 //6 more then normal, for the tradeoff of declaring myself an antag at all times. - -/obj/item/storage/backpack/bannerpack/red - name = "red banner backpack" - desc = "" - icon_state = "bannerpack-red" - -/obj/item/storage/backpack/bannerpack/blue - name = "blue banner backpack" - desc = "" - icon_state = "bannerpack-blue" - -//this is all part of one item set -/obj/item/clothing/suit/armor/plate/crusader - name = "Crusader's Armour" - desc = "" - icon_state = "crusader" - w_class = WEIGHT_CLASS_BULKY - slowdown = 2.0 //gotta pretend we're balanced. - body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 40, "bomb" = 60, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 60) - -/obj/item/clothing/suit/armor/plate/crusader/red - icon_state = "crusader-red" - -/obj/item/clothing/suit/armor/plate/crusader/blue - icon_state = "crusader-blue" - -/obj/item/clothing/head/helmet/plate/crusader - name = "Crusader's Hood" - desc = "" - icon_state = "crusader" - w_class = WEIGHT_CLASS_NORMAL - flags_inv = HIDEHAIR|HIDEEARS|HIDEFACE - armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 40, "bomb" = 60, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 60) - -/obj/item/clothing/head/helmet/plate/crusader/blue - icon_state = "crusader-blue" - -/obj/item/clothing/head/helmet/plate/crusader/red - icon_state = "crusader-red" - -//Prophet helmet -/obj/item/clothing/head/helmet/plate/crusader/prophet - name = "Prophet's Hat" - desc = "" - mob_overlay_icon = 'icons/mob/large-worn-icons/64x64/head.dmi' - flags_1 = 0 - armor = list("melee" = 60, "bullet" = 60, "laser" = 60, "energy" = 50, "bomb" = 70, "bio" = 50, "rad" = 50, "fire" = 60, "acid" = 60) //religion protects you from disease and radiation, honk. - worn_x_dimension = 64 - worn_y_dimension = 64 - bloody_icon = 'icons/effects/blood64x64.dmi' - bloody_icon_state = "helmetblood_big" - -/obj/item/clothing/head/helmet/plate/crusader/prophet/red - icon_state = "prophet-red" - -/obj/item/clothing/head/helmet/plate/crusader/prophet/blue - icon_state = "prophet-blue" - -//Structure conversion staff -/obj/item/godstaff - name = "godstaff" - desc = "" - icon_state = "godstaff-red" - lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi' - var/conversion_color = "#ffffff" - var/staffcooldown = 0 - var/staffwait = 30 - - -/obj/item/godstaff/afterattack(atom/target, mob/user, proximity_flag, click_parameters) - . = ..() - if(staffcooldown + staffwait > world.time) - return - user.visible_message("[user] chants deeply and waves [user.p_their()] staff!") - if(do_after(user, 20,1,src)) - target.add_atom_colour(conversion_color, WASHABLE_COLOUR_PRIORITY) //wololo - staffcooldown = world.time - -/obj/item/godstaff/red - icon_state = "godstaff-red" - conversion_color = "#ff0000" - -/obj/item/godstaff/blue - icon_state = "godstaff-blue" - conversion_color = "#0000ff" - -/obj/item/clothing/gloves/plate - name = "Plate Gauntlets" - icon_state = "crusader" - desc = "" - siemens_coefficient = 0 - cold_protection = HANDS - min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT - heat_protection = HANDS - max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT - -/obj/item/clothing/gloves/plate/red - icon_state = "crusader-red" - -/obj/item/clothing/gloves/plate/blue - icon_state = "crusader-blue" - -/obj/item/clothing/shoes/plate - name = "Plate Boots" - desc = "" - icon_state = "crusader" - w_class = WEIGHT_CLASS_NORMAL - armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 40, "bomb" = 60, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 60) //does this even do anything on boots? - clothing_flags = NOSLIP - cold_protection = FEET - min_cold_protection_temperature = SHOES_MIN_TEMP_PROTECT - heat_protection = FEET - max_heat_protection_temperature = SHOES_MAX_TEMP_PROTECT - - -/obj/item/clothing/shoes/plate/red - icon_state = "crusader-red" - -/obj/item/clothing/shoes/plate/blue - icon_state = "crusader-blue" - - -/obj/item/storage/box/itemset/crusader - name = "Crusader's Armour Set" //i can't into ck2 references - desc = "" - - -/obj/item/storage/box/itemset/crusader/blue/PopulateContents() - new /obj/item/clothing/suit/armor/plate/crusader/blue(src) - new /obj/item/clothing/head/helmet/plate/crusader/blue(src) - new /obj/item/clothing/gloves/plate/blue(src) - new /obj/item/clothing/shoes/plate/blue(src) - - -/obj/item/storage/box/itemset/crusader/red/PopulateContents() - new /obj/item/clothing/suit/armor/plate/crusader/red(src) - new /obj/item/clothing/head/helmet/plate/crusader/red(src) - new /obj/item/clothing/gloves/plate/red(src) - new /obj/item/clothing/shoes/plate/red(src) - - -/obj/item/claymore/weak - desc = "" - force = 30 - armor_penetration = 15 - -/obj/item/claymore/weak/ceremonial - desc = "" - force = 15 - block_chance = 30 - armor_penetration = 5 diff --git a/code/game/objects/items/rogueitems/mimery_book.dm b/code/game/objects/items/rogueitems/mimery_book.dm index b780672b68..dfef37e068 100644 --- a/code/game/objects/items/rogueitems/mimery_book.dm +++ b/code/game/objects/items/rogueitems/mimery_book.dm @@ -27,7 +27,5 @@ H.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/conjure/mime_wall(null)) if (href_list["invisible_chair"]) H.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/conjure/mime_chair(null)) - if (href_list["invisible_box"]) - H.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/conjure/mime_box(null)) to_chat(usr, "The book disappears into thin air.") qdel(src) diff --git a/code/game/objects/items/rogueitems/natural/stones.dm b/code/game/objects/items/rogueitems/natural/stones.dm index 04e6fd92e0..e6d95f7334 100644 --- a/code/game/objects/items/rogueitems/natural/stones.dm +++ b/code/game/objects/items/rogueitems/natural/stones.dm @@ -49,7 +49,7 @@ gripped_intents = list(INTENT_GENERIC) w_class = WEIGHT_CLASS_HUGE twohands_required = TRUE - var/obj/item/stack/ore/mineralType = null + var/obj/item/rogueore/mineralType = null var/mineralAmt = 1 blade_dulling = DULLING_BASH max_integrity = 50 diff --git a/code/game/objects/items/rogueweapons/ranged/blowgun.dm b/code/game/objects/items/rogueweapons/ranged/blowgun.dm index f25e0319e0..46175bd99d 100644 --- a/code/game/objects/items/rogueweapons/ranged/blowgun.dm +++ b/code/game/objects/items/rogueweapons/ranged/blowgun.dm @@ -11,7 +11,6 @@ randomspread = 1 spread = 0 can_parry = FALSE - pin = /obj/item/firing_pin force = 10 var/cocked = FALSE cartridge_wording = "dart" diff --git a/code/game/objects/items/rogueweapons/ranged/bows.dm b/code/game/objects/items/rogueweapons/ranged/bows.dm index b2acff092c..4727c030a5 100644 --- a/code/game/objects/items/rogueweapons/ranged/bows.dm +++ b/code/game/objects/items/rogueweapons/ranged/bows.dm @@ -18,7 +18,6 @@ randomspread = 0 spread = 0 can_parry = TRUE - pin = /obj/item/firing_pin force = 15 verbage = "nock" cartridge_wording = "arrow" diff --git a/code/game/objects/items/rogueweapons/ranged/crossbows.dm b/code/game/objects/items/rogueweapons/ranged/crossbows.dm index 1598563d10..bf975faa1d 100644 --- a/code/game/objects/items/rogueweapons/ranged/crossbows.dm +++ b/code/game/objects/items/rogueweapons/ranged/crossbows.dm @@ -13,7 +13,6 @@ randomspread = 1 spread = 0 can_parry = TRUE - pin = /obj/item/firing_pin force = 10 var/cocked = FALSE cartridge_wording = "bolt" diff --git a/code/game/objects/items/rogueweapons/ranged/flintlock.dm b/code/game/objects/items/rogueweapons/ranged/flintlock.dm index 3f9f81e0c8..c1b9d8e94b 100644 --- a/code/game/objects/items/rogueweapons/ranged/flintlock.dm +++ b/code/game/objects/items/rogueweapons/ranged/flintlock.dm @@ -10,10 +10,9 @@ recoil = 8 randomspread = 2 spread = 3 - pin = /obj/item/firing_pin force = 10 experimental_inhand = FALSE - experimental_onback = FALSE + experimental_onback = FALSE var/click_delay = 0.5 var/obj/item/ramrod/rod cartridge_wording = "ball" @@ -94,7 +93,7 @@ to_chat(user, "I wind \the [src]'s mechanism.") playsound(src.loc, 'sound/foley/winding.ogg', 100, FALSE) wound = TRUE - + /obj/item/gun/ballistic/revolver/grenadelauncher/pistol/MiddleClick(mob/user, params) . = ..() @@ -165,7 +164,7 @@ /obj/item/gun/ballistic/revolver/grenadelauncher/pistol/attackby(obj/item/I, mob/user, params) var/ramtime = 5.5 ramtime = ramtime - (user.mind.get_skill_level(/datum/skill/combat/firearms) / 2) - + // Check if the item used is a ramrod if(istype(I, /obj/item/ramrod)) if(user.mind.get_skill_level(/datum/skill/combat/firearms) <= 0) diff --git a/code/game/objects/items/sharpener.dm b/code/game/objects/items/sharpener.dm index baa91041d2..989055970a 100644 --- a/code/game/objects/items/sharpener.dm +++ b/code/game/objects/items/sharpener.dm @@ -21,18 +21,6 @@ if(requires_sharpness && !I.get_sharpness()) to_chat(user, "I 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) - to_chat(user, "[TH] is much too powerful to sharpen further!") - return - if(TH.wielded) - to_chat(user, "[TH] must be unwielded before it can be sharpened!") - return - if(TH.force_wielded > initial(TH.force_wielded)) - to_chat(user, "[TH] has already been refined before. It cannot be sharpened further!") - return - TH.force_wielded = CLAMP(TH.force_wielded + increment, 0, max)//wieldforce is increased since normal force wont stay if(I.force > initial(I.force)) to_chat(user, "[I] has already been refined before. It cannot be sharpened further!") return diff --git a/code/game/objects/items/signs.dm b/code/game/objects/items/signs.dm deleted file mode 100644 index e2916ebe4f..0000000000 --- a/code/game/objects/items/signs.dm +++ /dev/null @@ -1,51 +0,0 @@ -/obj/item/picket_sign - icon_state = "picket" - name = "blank picket sign" - desc = "" - force = 5 - w_class = WEIGHT_CLASS_BULKY - attack_verb = list("bashed","smacked") - resistance_flags = FLAMMABLE - - var/label = "" - var/last_wave = 0 - -/obj/item/picket_sign/cyborg - name = "metallic nano-sign" - desc = "" - force = 13 - resistance_flags = NONE - actions_types = list(/datum/action/item_action/nano_picket_sign) - -/obj/item/picket_sign/proc/retext(mob/user) - if(!user.is_literate()) - to_chat(user, "I scribble illegibly on [src]!") - return - var/txt = stripped_input(user, "What would you like to write on the sign?", "Sign Label", null , 30) - if(txt && user.canUseTopic(src, BE_CLOSE)) - label = txt - name = "[label] sign" - desc = "It reads: [label]" - -/obj/item/picket_sign/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/pen) || istype(W, /obj/item/toy/crayon)) - retext(user) - else - return ..() - -/obj/item/picket_sign/attack_self(mob/living/carbon/human/user) - if( last_wave + 20 < world.time ) - last_wave = world.time - if(label) - user.visible_message("[user] waves around \the \"[label]\" sign.") - else - user.visible_message("[user] waves around blank sign.") - user.changeNext_move(CLICK_CD_MELEE) - -/datum/crafting_recipe/picket_sign - name = "Picket Sign" - result = /obj/item/picket_sign - reqs = list(/obj/item/stack/rods = 1, - /obj/item/stack/sheet/cardboard = 2) - time = 80 - category = CAT_NONE diff --git a/code/game/objects/items/singularityhammer.dm b/code/game/objects/items/singularityhammer.dm deleted file mode 100644 index ffaa37056f..0000000000 --- a/code/game/objects/items/singularityhammer.dm +++ /dev/null @@ -1,114 +0,0 @@ -/obj/item/twohanded/singularityhammer - name = "singularity hammer" - desc = "" - icon_state = "mjollnir0" - lefthand_file = 'icons/mob/inhands/weapons/hammers_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/hammers_righthand.dmi' - color = "#212121" - flags_1 = CONDUCT_1 - slot_flags = ITEM_SLOT_BACK - force = 5 - force_unwielded = 5 - force_wielded = 20 - throwforce = 15 - throw_range = 1 - w_class = WEIGHT_CLASS_HUGE - armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 0, "bomb" = 50, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) - resistance_flags = FIRE_PROOF | ACID_PROOF - force_string = "LORD SINGULOTH HIMSELF" - var/charged = 5 - -/obj/item/twohanded/singularityhammer/Initialize() - . = ..() - START_PROCESSING(SSobj, src) - -/obj/item/twohanded/singularityhammer/Destroy() - STOP_PROCESSING(SSobj, src) - . = ..() - -/obj/item/twohanded/singularityhammer/process() - if(charged < 5) - charged++ - return - -/obj/item/twohanded/singularityhammer/update_icon() //Currently only here to fuck with the on-mob icons. - icon_state = "mjollnir[wielded]" - return - -/obj/item/twohanded/singularityhammer/proc/vortex(turf/pull, mob/wielder) - for(var/atom/X in orange(5,pull)) - if(ismovableatom(X)) - var/atom/movable/A = X - if(A == wielder) - continue - if(A && !A.anchored && !ishuman(X) && !isobserver(X)) - step_towards(A,pull) - step_towards(A,pull) - step_towards(A,pull) - else if(ishuman(X)) - var/mob/living/carbon/human/H = X - if(istype(H.shoes, /obj/item/clothing/shoes/magboots)) - var/obj/item/clothing/shoes/magboots/M = H.shoes - if(M.magpulse) - continue - H.apply_effect(20, EFFECT_PARALYZE, 0) - step_towards(H,pull) - step_towards(H,pull) - step_towards(H,pull) - return - -/obj/item/twohanded/singularityhammer/afterattack(atom/A as mob|obj|turf|area, mob/user, proximity) - . = ..() - if(!proximity) - return - if(wielded) - if(charged == 5) - charged = 0 - if(istype(A, /mob/living/)) - var/mob/living/Z = A - Z.take_bodypart_damage(20,0) - playsound(user, 'sound/blank.ogg', 50, TRUE) - var/turf/target = get_turf(A) - vortex(target,user) - -/obj/item/twohanded/mjollnir - name = "Mjolnir" - desc = "" - icon_state = "mjollnir0" - lefthand_file = 'icons/mob/inhands/weapons/hammers_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/hammers_righthand.dmi' - flags_1 = CONDUCT_1 - slot_flags = ITEM_SLOT_BACK - force = 5 - force_unwielded = 5 - force_wielded = 25 - throwforce = 30 - throw_range = 7 - w_class = WEIGHT_CLASS_HUGE - -/obj/item/twohanded/mjollnir/proc/shock(mob/living/target) - target.Stun(60) - var/datum/effect_system/lightning_spread/s = new /datum/effect_system/lightning_spread - s.set_up(5, 1, target.loc) - s.start() - target.visible_message("[target.name] was shocked by [src]!", \ - "I feel a powerful shock course through your body sending you flying!", \ - "I hear a heavy electrical crack!") - var/atom/throw_target = get_edge_target_turf(target, get_dir(src, get_step_away(target, src))) - target.throw_at(throw_target, 200, 4) - return - -/obj/item/twohanded/mjollnir/attack(mob/living/M, mob/user) - ..() - if(wielded) - playsound(src.loc, "sparks", 50, TRUE) - shock(M) - -/obj/item/twohanded/mjollnir/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) - . = ..() - if(isliving(hit_atom)) - shock(hit_atom) - -/obj/item/twohanded/mjollnir/update_icon() //Currently only here to fuck with the on-mob icons. - icon_state = "mjollnir[wielded]" - return diff --git a/code/game/objects/items/soap.dm b/code/game/objects/items/soap.dm new file mode 100644 index 0000000000..640a8ec1c0 --- /dev/null +++ b/code/game/objects/items/soap.dm @@ -0,0 +1,37 @@ +/obj/item/soap + name = "soap" + desc = "" + gender = PLURAL + icon = 'icons/obj/items_and_weapons.dmi' + icon_state = "soap" + lefthand_file = 'icons/mob/inhands/equipment/custodial_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/custodial_righthand.dmi' + w_class = WEIGHT_CLASS_TINY + item_flags = NOBLUDGEON + throwforce = 0 + throw_speed = 1 + throw_range = 7 + grind_results = list(/datum/reagent/lye = 10) + var/cleanspeed = 35 //slower than mop + force_string = "robust... against germs" + var/uses = 100 + + +/obj/item/soap/examine(mob/user) + . = ..() + var/max_uses = initial(uses) + var/msg = "It looks like it was just made." + if(uses != max_uses) + var/percentage_left = uses / max_uses + switch(percentage_left) + if(0 to 0.15) + msg = "There's just a tiny bit left of what it used to be, you're not sure it'll last much longer." + if(0.15 to 0.30) + msg = "It's dissolved quite a bit, but there's still some life to it." + if(0.30 to 0.50) + msg = "It's past its prime, but it's definitely still good." + if(0.50 to 0.75) + msg = "It's started to get a little smaller than it used to be, but it'll definitely still last for a while." + else + msg = "It's seen some light use, but it's still pretty fresh." + . += "[msg]" diff --git a/code/game/objects/items/stacks/bscrystal.dm b/code/game/objects/items/stacks/bscrystal.dm deleted file mode 100644 index 280858d8f4..0000000000 --- a/code/game/objects/items/stacks/bscrystal.dm +++ /dev/null @@ -1,90 +0,0 @@ -//Bluespace crystals, used in telescience and when crushed it will blink you to a random turf. -/obj/item/stack/ore/bluespace_crystal - name = "bluespace crystal" - desc = "" - icon = 'icons/obj/telescience.dmi' - icon_state = "bluespace_crystal" - singular_name = "bluespace crystal" - dye_color = DYE_COSMIC - w_class = WEIGHT_CLASS_TINY - custom_materials = list(/datum/material/bluespace=MINERAL_MATERIAL_AMOUNT) - points = 50 - var/blink_range = 8 // The teleport range when crushed/thrown at someone. - refined_type = /obj/item/stack/sheet/bluespace_crystal - grind_results = list(/datum/reagent/bluespace = 20) - -/obj/item/stack/ore/bluespace_crystal/refined - name = "refined bluespace crystal" - points = 0 - refined_type = null - -/obj/item/stack/ore/bluespace_crystal/Initialize() - . = ..() - pixel_x = rand(-5, 5) - pixel_y = rand(-5, 5) - -/obj/item/stack/ore/bluespace_crystal/get_part_rating() - return 1 - -/obj/item/stack/ore/bluespace_crystal/attack_self(mob/user) - user.visible_message("[user] crushes [src]!", "I crush [src]!") - new /obj/effect/particle_effect/sparks(loc) - playsound(loc, "sparks", 50, TRUE) - blink_mob(user) - use(1) - -/obj/item/stack/ore/bluespace_crystal/proc/blink_mob(mob/living/L) - do_teleport(L, get_turf(L), blink_range, asoundin = 'sound/blank.ogg', channel = TELEPORT_CHANNEL_BLUESPACE) - -/obj/item/stack/ore/bluespace_crystal/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) - if(!..()) // not caught in mid-air - visible_message("[src] fizzles and disappears upon impact!") - var/turf/T = get_turf(hit_atom) - new /obj/effect/particle_effect/sparks(T) - playsound(loc, "sparks", 50, TRUE) - if(isliving(hit_atom)) - blink_mob(hit_atom) - use(1) - -//Artificial bluespace crystal, doesn't give you much research. -/obj/item/stack/ore/bluespace_crystal/artificial - name = "artificial bluespace crystal" - desc = "" - custom_materials = list(/datum/material/bluespace=MINERAL_MATERIAL_AMOUNT*0.5) - blink_range = 4 // Not as good as the organic stuff! - points = 0 //nice try - refined_type = null - grind_results = list(/datum/reagent/bluespace = 10, /datum/reagent/silicon = 20) - -//Polycrystals, aka stacks -/obj/item/stack/sheet/bluespace_crystal - name = "bluespace polycrystal" - icon = 'icons/obj/telescience.dmi' - icon_state = "polycrystal" - item_state = "sheet-polycrystal" - singular_name = "bluespace polycrystal" - desc = "" - custom_materials = list(/datum/material/bluespace=MINERAL_MATERIAL_AMOUNT) - attack_verb = list("bluespace polybashed", "bluespace polybattered", "bluespace polybludgeoned", "bluespace polythrashed", "bluespace polysmashed") - novariants = TRUE - grind_results = list(/datum/reagent/bluespace = 20) - point_value = 30 - var/crystal_type = /obj/item/stack/ore/bluespace_crystal/refined - -/obj/item/stack/sheet/bluespace_crystal/attack_self(mob/user)// to prevent the construction menu from ever happening - to_chat(user, "I cannot crush the polycrystal in-hand, try breaking one off.") - -//ATTACK HAND IGNORING PARENT RETURN VALUE -/obj/item/stack/sheet/bluespace_crystal/attack_hand(mob/user) - if(user.get_inactive_held_item() == src) - if(zero_amount()) - return - var/BC = new crystal_type(src) - user.put_in_hands(BC) - use(1) - if(!amount) - to_chat(user, "I break the final crystal off.") - else - to_chat(user, "I break off a crystal.") - else - ..() diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm deleted file mode 100644 index 36565b16f3..0000000000 --- a/code/game/objects/items/stacks/rods.dm +++ /dev/null @@ -1,93 +0,0 @@ -GLOBAL_LIST_INIT(rod_recipes, list ( \ - new/datum/stack_recipe("grille", /obj/structure/grille, 2, time = 10, one_per_turf = TRUE, on_floor = FALSE), \ - new/datum/stack_recipe("table frame", /obj/structure/table_frame, 2, time = 10, one_per_turf = 1, on_floor = 1), \ - new/datum/stack_recipe("scooter frame", /obj/item/scooter_frame, 10, time = 25, one_per_turf = 0), \ - new/datum/stack_recipe("linen bin", /obj/structure/bedsheetbin/empty, 2, time = 5, one_per_turf = 0), \ - )) - -/obj/item/stack/rods - name = "metal rod" - desc = "" - singular_name = "metal rod" - icon_state = "rods" - item_state = "rods" - flags_1 = CONDUCT_1 - w_class = WEIGHT_CLASS_NORMAL - force = 9 - throwforce = 10 - throw_speed = 1 - throw_range = 7 - custom_materials = list(/datum/material/iron=1000) - mats_per_stack = 1000 - max_amount = 50 - attack_verb = list("hit", "bludgeoned", "whacked") - hitsound = 'sound/blank.ogg' - novariants = TRUE - -/obj/item/stack/rods/New() - qdel() - -/obj/item/stack/rods/suicide_act(mob/living/carbon/user) - user.visible_message("[user] begins to stuff \the [src] down [user.p_their()] throat! It looks like [user.p_theyre()] trying to commit suicide!")//it looks like theyre ur mum - return BRUTELOSS - -/obj/item/stack/rods/Initialize(mapload, new_amount, merge = TRUE) - . = ..() - update_icon() - -/obj/item/stack/rods/get_main_recipes() - . = ..() - . += GLOB.rod_recipes - -/obj/item/stack/rods/update_icon() - var/amount = get_amount() - if((amount <= 5) && (amount > 0)) - icon_state = "rods-[amount]" - else - icon_state = "rods" - -/obj/item/stack/rods/attackby(obj/item/W, mob/user, params) - if(W.tool_behaviour == TOOL_WELDER) - if(get_amount() < 2) - to_chat(user, "I need at least two rods to do this!") - return - - if(W.use_tool(src, user, 0, volume=40)) - var/obj/item/stack/sheet/metal/new_item = new(usr.loc) - user.visible_message("[user.name] shaped [src] into metal with [W].", \ - "I shape [src] into metal with [W].", \ - "I hear welding.") - var/obj/item/stack/rods/R = src - src = null - var/replace = (user.get_inactive_held_item()==R) - R.use(2) - if (!R && replace) - user.put_in_hands(new_item) - - else if(istype(W, /obj/item/reagent_containers/food/snacks)) - var/obj/item/reagent_containers/food/snacks/S = W - if(amount != 1) - to_chat(user, "I must use a single rod!") - else if(S.w_class > WEIGHT_CLASS_SMALL) - to_chat(user, "The ingredient is too big for [src]!") - else - var/obj/item/reagent_containers/food/snacks/customizable/A = new/obj/item/reagent_containers/food/snacks/customizable/kebab(get_turf(src)) - A.initialize_custom_food(src, S, user) - else - return ..() - -/obj/item/stack/rods/cyborg - custom_materials = null - cost = 250 - -/obj/item/stack/rods/cyborg/update_icon() - return - -/obj/item/stack/rods/ten - amount = 10 - -/obj/item/stack/rods/twentyfive - amount = 25 - -/obj/item/stack/rods/fifty - amount = 50 diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm deleted file mode 100644 index baf1d79783..0000000000 --- a/code/game/objects/items/stacks/sheets/glass.dm +++ /dev/null @@ -1,311 +0,0 @@ -/* Glass stack types - * Contains: - * Glass sheets - * Reinforced glass sheets - * Glass shards - TODO: Move this into code/game/object/item/weapons - */ - -/* - * Glass sheets - */ -GLOBAL_LIST_INIT(glass_recipes, list ( \ - new/datum/stack_recipe("directional window", /obj/structure/window/unanchored, time = 0, on_floor = TRUE, window_checks = TRUE), \ - new/datum/stack_recipe("fulltile window", /obj/structure/window/fulltile/unanchored, 2, time = 0, on_floor = TRUE, window_checks = TRUE) \ -)) - -/obj/item/stack/sheet/glass - name = "glass" - desc = "" - singular_name = "glass sheet" - icon_state = "sheet-glass" - item_state = "sheet-glass" - custom_materials = list(/datum/material/glass=MINERAL_MATERIAL_AMOUNT) - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 100) - resistance_flags = ACID_PROOF - merge_type = /obj/item/stack/sheet/glass - grind_results = list(/datum/reagent/silicon = 20) - material_type = /datum/material/glass - point_value = 1 - tableVariant = /obj/structure/table/glass - -/obj/item/stack/sheet/glass/suicide_act(mob/living/carbon/user) - user.visible_message("[user] begins to slice [user.p_their()] neck with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!") - return BRUTELOSS - -/obj/item/stack/sheet/glass/fifty - amount = 50 - -/obj/item/stack/sheet/glass/get_main_recipes() - . = ..() - . += GLOB.glass_recipes - -/obj/item/stack/sheet/glass/attackby(obj/item/W, mob/user, params) - add_fingerprint(user) - if(istype(W, /obj/item/stack/rods)) - var/obj/item/stack/rods/V = W - if (V.get_amount() >= 1 && get_amount() >= 1) - var/obj/item/stack/sheet/rglass/RG = new (get_turf(user)) - RG.add_fingerprint(user) - var/replace = user.get_inactive_held_item()==src - V.use(1) - use(1) - if(QDELETED(src) && replace) - user.put_in_hands(RG) - else - to_chat(user, "I need one rod and one sheet of glass to make reinforced glass!") - return - else - return ..() - - - -GLOBAL_LIST_INIT(pglass_recipes, list ( \ - new/datum/stack_recipe("directional window", /obj/structure/window/plasma/unanchored, time = 0, on_floor = TRUE, window_checks = TRUE), \ - new/datum/stack_recipe("fulltile window", /obj/structure/window/plasma/fulltile/unanchored, 2, time = 0, on_floor = TRUE, window_checks = TRUE) \ -)) - -/obj/item/stack/sheet/plasmaglass - name = "plasma glass" - desc = "" - singular_name = "plasma glass sheet" - icon_state = "sheet-pglass" - item_state = "sheet-pglass" - custom_materials = list(/datum/material/plasma=MINERAL_MATERIAL_AMOUNT * 0.5, /datum/material/glass=MINERAL_MATERIAL_AMOUNT) - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 75, "acid" = 100) - resistance_flags = ACID_PROOF - merge_type = /obj/item/stack/sheet/plasmaglass - grind_results = list(/datum/reagent/silicon = 20, /datum/reagent/toxin/plasma = 10) - material_flags = MATERIAL_NO_EFFECTS - -/obj/item/stack/sheet/plasmaglass/fifty - amount = 50 - -/obj/item/stack/sheet/plasmaglass/get_main_recipes() - . = ..() - . += GLOB.pglass_recipes - -/obj/item/stack/sheet/plasmaglass/attackby(obj/item/W, mob/user, params) - add_fingerprint(user) - - if(istype(W, /obj/item/stack/rods)) - var/obj/item/stack/rods/V = W - if (V.get_amount() >= 1 && get_amount() >= 1) - var/obj/item/stack/sheet/plasmarglass/RG = new (get_turf(user)) - RG.add_fingerprint(user) - var/replace = user.get_inactive_held_item()==src - V.use(1) - use(1) - if(QDELETED(src) && replace) - user.put_in_hands(RG) - else - to_chat(user, "I need one rod and one sheet of plasma glass to make reinforced plasma glass!") - return - else - return ..() - - - -/* - * Reinforced glass sheets - */ -GLOBAL_LIST_INIT(reinforced_glass_recipes, list ( \ - null, \ - new/datum/stack_recipe("directional reinforced window", /obj/structure/window/reinforced/unanchored, time = 0, on_floor = TRUE, window_checks = TRUE), \ - new/datum/stack_recipe("fulltile reinforced window", /obj/structure/window/reinforced/fulltile/unanchored, 2, time = 0, on_floor = TRUE, window_checks = TRUE) \ -)) - - -/obj/item/stack/sheet/rglass - name = "reinforced glass" - desc = "" - singular_name = "reinforced glass sheet" - icon_state = "sheet-rglass" - item_state = "sheet-rglass" - custom_materials = list(/datum/material/iron=MINERAL_MATERIAL_AMOUNT * 0.5, /datum/material/glass=MINERAL_MATERIAL_AMOUNT) - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 100) - resistance_flags = ACID_PROOF - merge_type = /obj/item/stack/sheet/rglass - grind_results = list(/datum/reagent/silicon = 20, /datum/reagent/iron = 10) - point_value = 4 - -/obj/item/stack/sheet/rglass/attackby(obj/item/W, mob/user, params) - add_fingerprint(user) - ..() - -/obj/item/stack/sheet/rglass/get_main_recipes() - . = ..() - . += GLOB.reinforced_glass_recipes - -GLOBAL_LIST_INIT(prglass_recipes, list ( \ - new/datum/stack_recipe("directional reinforced window", /obj/structure/window/plasma/reinforced/unanchored, time = 0, on_floor = TRUE, window_checks = TRUE), \ - new/datum/stack_recipe("fulltile reinforced window", /obj/structure/window/plasma/reinforced/fulltile/unanchored, 2, time = 0, on_floor = TRUE, window_checks = TRUE) \ -)) - -/obj/item/stack/sheet/plasmarglass - name = "reinforced plasma glass" - desc = "" - singular_name = "reinforced plasma glass sheet" - icon_state = "sheet-prglass" - item_state = "sheet-prglass" - custom_materials = list(/datum/material/plasma=MINERAL_MATERIAL_AMOUNT * 0.5, /datum/material/glass=MINERAL_MATERIAL_AMOUNT, /datum/material/iron = MINERAL_MATERIAL_AMOUNT * 0.5,) - armor = list("melee" = 20, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 100) - resistance_flags = ACID_PROOF - material_flags = MATERIAL_NO_EFFECTS - merge_type = /obj/item/stack/sheet/plasmarglass - grind_results = list(/datum/reagent/silicon = 20, /datum/reagent/toxin/plasma = 10, /datum/reagent/iron = 10) - point_value = 23 - -/obj/item/stack/sheet/plasmarglass/get_main_recipes() - . = ..() - . += GLOB.prglass_recipes - -GLOBAL_LIST_INIT(titaniumglass_recipes, list( - new/datum/stack_recipe("shuttle window", /obj/structure/window/shuttle/unanchored, 2, time = 0, on_floor = TRUE, window_checks = TRUE) - )) - -/obj/item/stack/sheet/titaniumglass - name = "titanium glass" - desc = "" - singular_name = "titanium glass sheet" - icon_state = "sheet-titaniumglass" - item_state = "sheet-titaniumglass" - custom_materials = list(/datum/material/titanium=MINERAL_MATERIAL_AMOUNT * 0.5, /datum/material/glass=MINERAL_MATERIAL_AMOUNT) - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 100) - resistance_flags = ACID_PROOF - merge_type = /obj/item/stack/sheet/titaniumglass - -/obj/item/stack/sheet/titaniumglass/get_main_recipes() - . = ..() - . += GLOB.titaniumglass_recipes - -GLOBAL_LIST_INIT(plastitaniumglass_recipes, list( - new/datum/stack_recipe("plastitanium window", /obj/structure/window/plasma/reinforced/plastitanium/unanchored, 2, time = 0, on_floor = TRUE, window_checks = TRUE) - )) - -/obj/item/stack/sheet/plastitaniumglass - name = "plastitanium glass" - desc = "" - singular_name = "plastitanium glass sheet" - icon_state = "sheet-plastitaniumglass" - item_state = "sheet-plastitaniumglass" - custom_materials = list(/datum/material/titanium=MINERAL_MATERIAL_AMOUNT * 0.5, /datum/material/plasma=MINERAL_MATERIAL_AMOUNT * 0.5, /datum/material/glass=MINERAL_MATERIAL_AMOUNT) - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 100) - material_flags = MATERIAL_NO_EFFECTS - resistance_flags = ACID_PROOF - merge_type = /obj/item/stack/sheet/plastitaniumglass - -/obj/item/stack/sheet/plastitaniumglass/get_main_recipes() - . = ..() - . += GLOB.plastitaniumglass_recipes - -/obj/item/shard - name = "shard" - desc = "" - icon = 'icons/obj/shards.dmi' - icon_state = "large" - w_class = WEIGHT_CLASS_TINY - force = 5 - throwforce = 10 - item_state = "shard-glass" - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' - custom_materials = list(/datum/material/glass=MINERAL_MATERIAL_AMOUNT) - attack_verb = list("stabbed", "slashed", "sliced", "cut") - hitsound = 'sound/blank.ogg' - resistance_flags = ACID_PROOF - armor = list("melee" = 100, "bullet" = 0, "laser" = 0, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 100) - max_integrity = 40 - sharpness = IS_SHARP - var/icon_prefix - var/obj/item/stack/sheet/weld_material = /obj/item/stack/sheet/glass - - -/obj/item/shard/suicide_act(mob/user) - user.visible_message("[user] is slitting [user.p_their()] [pick("wrists", "throat")] with the shard of glass! It looks like [user.p_theyre()] trying to commit suicide.") - return (BRUTELOSS) - - -/obj/item/shard/Initialize() - . = ..() - AddComponent(/datum/component/caltrop, force) - AddComponent(/datum/component/butchering, 150, 65) - icon_state = pick("large", "medium", "small") - switch(icon_state) - if("small") - pixel_x = rand(-12, 12) - pixel_y = rand(-12, 12) - if("medium") - pixel_x = rand(-8, 8) - pixel_y = rand(-8, 8) - if("large") - pixel_x = rand(-5, 5) - pixel_y = rand(-5, 5) - if (icon_prefix) - icon_state = "[icon_prefix][icon_state]" - - var/turf/T = get_turf(src) - if(T && is_station_level(T.z)) - SSblackbox.record_feedback("tally", "station_mess_created", 1, name) - -/obj/item/shard/Destroy() - . = ..() - - var/turf/T = get_turf(src) - if(T && is_station_level(T.z)) - SSblackbox.record_feedback("tally", "station_mess_destroyed", 1, name) - -/obj/item/shard/afterattack(atom/A as mob|obj, mob/user, proximity) - . = ..() - if(!proximity || !(src in user)) - return - if(isturf(A)) - return - if(istype(A, /obj/item/storage)) - return - var/hit_hand = ((user.active_hand_index % 2 == 0) ? "r_" : "l_") + "arm" - if(ishuman(user)) - var/mob/living/carbon/human/H = user - if(!H.gloves && !HAS_TRAIT(H, TRAIT_PIERCEIMMUNE)) // golems, etc - to_chat(H, "[src] cuts into your hand!") - H.apply_damage(force*0.5, BRUTE, hit_hand) - else if(ismonkey(user)) - var/mob/living/carbon/monkey/M = user - if(!HAS_TRAIT(M, TRAIT_PIERCEIMMUNE)) - to_chat(M, "[src] cuts into your hand!") - M.apply_damage(force*0.5, BRUTE, hit_hand) - - -/obj/item/shard/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/lightreplacer)) - I.attackby(src, user) - else - return ..() - -/obj/item/shard/welder_act(mob/living/user, obj/item/I) - ..() - if(I.use_tool(src, user, 0, volume=50)) - var/obj/item/stack/sheet/NG = new weld_material(user.loc) - for(var/obj/item/stack/sheet/G in user.loc) - if(G == NG) - continue - if(G.amount >= G.max_amount) - continue - G.attackby(NG, user) - to_chat(user, "I add the newly-formed [NG.name] to the stack. It now contains [NG.amount] sheet\s.") - qdel(src) - return TRUE - -/obj/item/shard/Crossed(mob/living/L) - if(istype(L) && has_gravity(loc)) - playsound(loc, 'sound/foley/glass_step.ogg', HAS_TRAIT(L, TRAIT_LIGHT_STEP) ? 30 : 50, TRUE) - return ..() - -/obj/item/shard/plasma - name = "purple shard" - desc = "" - force = 6 - throwforce = 11 - icon_state = "plasmalarge" - custom_materials = list(/datum/material/plasma=MINERAL_MATERIAL_AMOUNT * 0.5, /datum/material/glass=MINERAL_MATERIAL_AMOUNT) - icon_prefix = "plasma" - weld_material = /obj/item/stack/sheet/plasmaglass diff --git a/code/game/objects/items/stacks/sheets/hides.dm b/code/game/objects/items/stacks/sheets/hides.dm new file mode 100644 index 0000000000..d057e9ca15 --- /dev/null +++ b/code/game/objects/items/stacks/sheets/hides.dm @@ -0,0 +1,32 @@ +/obj/item/stack/sheet/animalhide + name = "hide" + desc = "" + icon_state = "sheet-hide" + item_state = "sheet-hide" + novariants = TRUE + +/obj/item/stack/sheet/animalhide/human + name = "human skin" + desc = "" + singular_name = "human skin piece" + novariants = FALSE + +/obj/item/stack/sheet/animalhide/generic + name = "skin" + desc = "" + singular_name = "skin piece" + novariants = FALSE + +/obj/item/stack/sheet/animalhide/cat + name = "cat hide" + desc = "" + singular_name = "cat hide piece" + icon_state = "sheet-cat" + item_state = "sheet-cat" + +/obj/item/stack/sheet/animalhide/lizard + name = "lizard skin" + desc = "" + singular_name = "lizard skin piece" + icon_state = "sheet-lizard" + item_state = "sheet-lizard" diff --git a/code/game/objects/items/stacks/sheets/leather.dm b/code/game/objects/items/stacks/sheets/leather.dm deleted file mode 100644 index 4dcc1911e5..0000000000 --- a/code/game/objects/items/stacks/sheets/leather.dm +++ /dev/null @@ -1,211 +0,0 @@ -/obj/item/stack/sheet/animalhide - name = "hide" - desc = "" - icon_state = "sheet-hide" - item_state = "sheet-hide" - novariants = TRUE - -/obj/item/stack/sheet/animalhide/human - name = "human skin" - desc = "" - singular_name = "human skin piece" - novariants = FALSE - -GLOBAL_LIST_INIT(human_recipes, list( \ - new/datum/stack_recipe("bloated human costume", /obj/item/clothing/suit/hooded/bloated_human, 5), \ - )) - -/obj/item/stack/sheet/animalhide/human/get_main_recipes() - . = ..() - . += GLOB.human_recipes - -/obj/item/stack/sheet/animalhide/generic - name = "skin" - desc = "" - singular_name = "skin piece" - novariants = FALSE - -/obj/item/stack/sheet/animalhide/corgi - name = "corgi hide" - desc = "" - singular_name = "corgi hide piece" - icon_state = "sheet-corgi" - item_state = "sheet-corgi" - - -GLOBAL_LIST_INIT(gondola_recipes, list ( \ - new/datum/stack_recipe("gondola mask", /obj/item/clothing/mask/gondola, 1), \ - new/datum/stack_recipe("gondola suit", /obj/item/clothing/under/costume/gondola, 2), \ - )) - -/obj/item/stack/sheet/animalhide/gondola - name = "gondola hide" - desc = "" - singular_name = "gondola hide piece" - icon_state = "sheet-gondola" - item_state = "sheet-gondola" - -/obj/item/stack/sheet/animalhide/gondola/get_main_recipes() - . = ..() - . += GLOB.gondola_recipes - -GLOBAL_LIST_INIT(corgi_recipes, list ( \ - new/datum/stack_recipe("corgi costume", /obj/item/clothing/suit/hooded/ian_costume, 3), \ - )) - -/obj/item/stack/sheet/animalhide/corgi/get_main_recipes() - . = ..() - . += GLOB.corgi_recipes - -/obj/item/stack/sheet/animalhide/cat - name = "cat hide" - desc = "" - singular_name = "cat hide piece" - icon_state = "sheet-cat" - item_state = "sheet-cat" - -/obj/item/stack/sheet/animalhide/monkey - name = "monkey hide" - desc = "" - singular_name = "monkey hide piece" - icon_state = "sheet-monkey" - item_state = "sheet-monkey" - -GLOBAL_LIST_INIT(monkey_recipes, list ( \ - new/datum/stack_recipe("monkey mask", /obj/item/clothing/mask/gas/monkeymask, 1), \ - new/datum/stack_recipe("monkey suit", /obj/item/clothing/suit/monkeysuit, 2), \ - )) - -/obj/item/stack/sheet/animalhide/monkey/get_main_recipes() - . = ..() - . += GLOB.monkey_recipes - -/obj/item/stack/sheet/animalhide/lizard - name = "lizard skin" - desc = "" - singular_name = "lizard skin piece" - icon_state = "sheet-lizard" - item_state = "sheet-lizard" - -/obj/item/weed_extract - name = "weed extract" - desc = "" - icon = 'icons/mob/alien.dmi' - icon_state = "weed_extract" - -/obj/item/stack/sheet/hairlesshide - name = "hairless hide" - desc = "" - singular_name = "hairless hide piece" - icon_state = "sheet-hairlesshide" - item_state = "sheet-hairlesshide" - -/obj/item/stack/sheet/wetleather - name = "wet leather" - desc = "" - singular_name = "wet leather piece" - icon_state = "sheet-wetleather" - item_state = "sheet-wetleather" - var/drying_threshold_temperature = 500 //Kelvin to start drying - -/* - * Leather SHeet - */ -/obj/item/stack/sheet/leather - name = "leather" - desc = "" - singular_name = "leather piece" - icon_state = "sheet-leather" - item_state = "sheet-leather" - -GLOBAL_LIST_INIT(leather_recipes, list ( \ - new/datum/stack_recipe("muzzle", /obj/item/clothing/mask/muzzle, 2), \ - new/datum/stack_recipe("botany gloves", /obj/item/clothing/gloves/botanic_leather, 3), \ - new/datum/stack_recipe("toolbelt", /obj/item/storage/belt/utility, 4), \ - new/datum/stack_recipe("leather satchel", /obj/item/storage/backpack/satchel/leather, 5), \ - new/datum/stack_recipe("bandolier", /obj/item/storage/belt/bandolier, 5), \ - new/datum/stack_recipe("leather jacket", /obj/item/clothing/suit/jacket/leather, 7), \ - new/datum/stack_recipe("leather shoes", /obj/item/clothing/shoes/laceup, 2), \ - new/datum/stack_recipe("leather overcoat", /obj/item/clothing/suit/jacket/leather/overcoat, 10), \ -)) - -/obj/item/stack/sheet/leather/get_main_recipes() - . = ..() - . += GLOB.leather_recipes -/* - * Sinew - */ -/obj/item/stack/sheet/sinew - name = "watcher sinew" - icon = 'icons/obj/mining.dmi' - desc = "" - singular_name = "watcher sinew" - icon_state = "sinew" - novariants = TRUE - - -GLOBAL_LIST_INIT(sinew_recipes, list ( \ - new/datum/stack_recipe("sinew restraints", /obj/item/restraints/handcuffs/cable/sinew, 1), \ -)) - -/obj/item/stack/sheet/sinew/get_main_recipes() - . = ..() - . += GLOB.sinew_recipes - -// Plates -/obj/item/stack/sheet/animalhide/goliath_hide - name = "goliath hide plates" - desc = "" - icon = 'icons/obj/mining.dmi' - icon_state = "goliath_hide" - singular_name = "hide plate" - max_amount = 6 - novariants = FALSE - item_flags = NOBLUDGEON - w_class = WEIGHT_CLASS_NORMAL - layer = MOB_LAYER - - -/obj/item/stack/sheet/animalhide/ashdrake - name = "ash drake hide" - desc = "" - icon = 'icons/obj/mining.dmi' - icon_state = "dragon_hide" - singular_name = "drake plate" - max_amount = 10 - novariants = FALSE - item_flags = NOBLUDGEON - w_class = WEIGHT_CLASS_NORMAL - layer = MOB_LAYER - - -//Step one - dehairing. - -/obj/item/stack/sheet/animalhide/attackby(obj/item/W, mob/user, params) - if(W.get_sharpness()) - playsound(loc, 'sound/blank.ogg', 50, TRUE, -1) - user.visible_message("[user] starts cutting hair off \the [src].", "I start cutting the hair off \the [src]...", "I hear the sound of a knife rubbing against flesh.") - if(do_after(user, 50, target = src)) - to_chat(user, "I cut the hair from this [src.singular_name].") - new /obj/item/stack/sheet/hairlesshide(user.drop_location(), 1) - use(1) - else - return ..() - - -//Step two - washing..... it's actually in washing machine code. - -//Step three - drying -/obj/item/stack/sheet/wetleather/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) - ..() - if(exposed_temperature >= drying_threshold_temperature) - wetness-- - if(wetness == 0) - new /obj/item/stack/sheet/leather(drop_location(), 1) - wetness = initial(wetness) - use(1) - -/obj/item/stack/sheet/wetleather/heating_act() - ..() - new /obj/item/stack/sheet/leather(drop_location(), amount) - qdel(src) diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm deleted file mode 100644 index 6bb3663b07..0000000000 --- a/code/game/objects/items/stacks/sheets/mineral.dm +++ /dev/null @@ -1,379 +0,0 @@ -/* -Mineral Sheets - Contains: - - Sandstone - - Sandbags - - Diamond - - Snow - - Uranium - - Plasma - - Gold - - Silver - - Clown - - Titanium - - Plastitanium - Others: - - Adamantine - - Mythril - - Alien Alloy - - Coal -*/ - -/* - * Sandstone - */ - -GLOBAL_LIST_INIT(sandstone_recipes, list ( \ - new/datum/stack_recipe("sandstone door", /obj/structure/mineral_door/sandstone, 10, one_per_turf = 1, on_floor = 1), \ - new/datum/stack_recipe("Assistant Statue", /obj/structure/statue/sandstone/assistant, 5, one_per_turf = 1, on_floor = 1), \ - new/datum/stack_recipe("Breakdown into sand", /obj/item/stack/ore/glass, 1, one_per_turf = 0, on_floor = 1) \ - )) - -/obj/item/stack/sheet/mineral/sandstone - name = "sandstone brick" - desc = "" - singular_name = "sandstone brick" - icon_state = "sheet-sandstone" - item_state = "sheet-sandstone" - throw_speed = 3 - throw_range = 5 - custom_materials = list(/datum/material/glass=MINERAL_MATERIAL_AMOUNT) - sheettype = "sandstone" - merge_type = /obj/item/stack/sheet/mineral/sandstone - -/obj/item/stack/sheet/mineral/sandstone/get_main_recipes() - . = ..() - . += GLOB.sandstone_recipes - -/obj/item/stack/sheet/mineral/sandstone/thirty - amount = 30 - -/* - * Diamond - */ -/obj/item/stack/sheet/mineral/diamond - name = "diamond" - icon_state = "sheet-diamond" - item_state = "sheet-diamond" - singular_name = "diamond" - sheettype = "diamond" - custom_materials = list(/datum/material/diamond=MINERAL_MATERIAL_AMOUNT) - novariants = TRUE - grind_results = list(/datum/reagent/carbon = 20) - point_value = 25 - merge_type = /obj/item/stack/sheet/mineral/diamond - material_type = /datum/material/diamond - -GLOBAL_LIST_INIT(diamond_recipes, list ( \ - new/datum/stack_recipe("diamond door", /obj/structure/mineral_door/transparent/diamond, 10, one_per_turf = 1, on_floor = 1), \ - new/datum/stack_recipe("diamond tile", /obj/item/stack/tile/mineral/diamond, 1, 4, 20), \ - new/datum/stack_recipe("Captain Statue", /obj/structure/statue/diamond/captain, 5, one_per_turf = 1, on_floor = 1), \ - new/datum/stack_recipe("AI Hologram Statue", /obj/structure/statue/diamond/ai1, 5, one_per_turf = 1, on_floor = 1), \ - new/datum/stack_recipe("AI Core Statue", /obj/structure/statue/diamond/ai2, 5, one_per_turf = 1, on_floor = 1), \ - )) - -/obj/item/stack/sheet/mineral/diamond/get_main_recipes() - . = ..() - . += GLOB.diamond_recipes - -/* - * Uranium - */ -/obj/item/stack/sheet/mineral/uranium - name = "uranium" - icon_state = "sheet-uranium" - item_state = "sheet-uranium" - singular_name = "uranium sheet" - sheettype = "uranium" - custom_materials = list(/datum/material/uranium=MINERAL_MATERIAL_AMOUNT) - novariants = TRUE - grind_results = list(/datum/reagent/uranium = 20) - point_value = 20 - merge_type = /obj/item/stack/sheet/mineral/uranium - material_type = /datum/material/uranium - -GLOBAL_LIST_INIT(uranium_recipes, list ( \ - new/datum/stack_recipe("uranium door", /obj/structure/mineral_door/uranium, 10, one_per_turf = 1, on_floor = 1), \ - new/datum/stack_recipe("uranium tile", /obj/item/stack/tile/mineral/uranium, 1, 4, 20), \ - new/datum/stack_recipe("Nuke Statue", /obj/structure/statue/uranium/nuke, 5, one_per_turf = 1, on_floor = 1), \ - new/datum/stack_recipe("Engineer Statue", /obj/structure/statue/uranium/eng, 5, one_per_turf = 1, on_floor = 1), \ - )) - -/obj/item/stack/sheet/mineral/uranium/get_main_recipes() - . = ..() - . += GLOB.uranium_recipes - -/* - * Plasma - */ -/obj/item/stack/sheet/mineral/plasma - name = "solid plasma" - icon_state = "sheet-plasma" - item_state = "sheet-plasma" - singular_name = "plasma sheet" - sheettype = "plasma" - resistance_flags = FLAMMABLE - max_integrity = 100 - custom_materials = list(/datum/material/plasma=MINERAL_MATERIAL_AMOUNT) - grind_results = list(/datum/reagent/toxin/plasma = 20) - point_value = 20 - merge_type = /obj/item/stack/sheet/mineral/plasma - material_type = /datum/material/plasma - -/obj/item/stack/sheet/mineral/plasma/suicide_act(mob/living/carbon/user) - user.visible_message("[user] begins licking \the [src]! It looks like [user.p_theyre()] trying to commit suicide!") - return TOXLOSS//dont you kids know that stuff is toxic? - -GLOBAL_LIST_INIT(plasma_recipes, list ( \ - new/datum/stack_recipe("plasma door", /obj/structure/mineral_door/transparent/plasma, 10, one_per_turf = 1, on_floor = 1), \ - new/datum/stack_recipe("plasma tile", /obj/item/stack/tile/mineral/plasma, 1, 4, 20), \ - new/datum/stack_recipe("Scientist Statue", /obj/structure/statue/plasma/scientist, 5, one_per_turf = 1, on_floor = 1), \ - )) - -/obj/item/stack/sheet/mineral/plasma/get_main_recipes() - . = ..() - . += GLOB.plasma_recipes - -/obj/item/stack/sheet/mineral/plasma/attackby(obj/item/W as obj, mob/user as mob, params) - if(W.get_temperature() > 300)//If the temperature of the object is over 300, then ignite - var/turf/T = get_turf(src) - message_admins("Plasma sheets ignited by [ADMIN_LOOKUPFLW(user)] in [ADMIN_VERBOSEJMP(T)]") - log_game("Plasma sheets ignited by [key_name(user)] in [AREACOORD(T)]") - fire_act(W.get_temperature()) - else - return ..() - -/obj/item/stack/sheet/mineral/plasma/fire_act(added, maxstacks) - atmos_spawn_air("plasma=[amount*10];TEMP=[added]") - qdel(src) - -/* - * Gold - */ -/obj/item/stack/sheet/mineral/gold - name = "gold" - icon_state = "sheet-gold" - item_state = "sheet-gold" - singular_name = "gold bar" - sheettype = "gold" - custom_materials = list(/datum/material/gold=MINERAL_MATERIAL_AMOUNT) - grind_results = list(/datum/reagent/gold = 20) - point_value = 20 - merge_type = /obj/item/stack/sheet/mineral/gold - material_type = /datum/material/gold - -GLOBAL_LIST_INIT(gold_recipes, list ( \ - new/datum/stack_recipe("golden door", /obj/structure/mineral_door/gold, 10, one_per_turf = 1, on_floor = 1), \ - new/datum/stack_recipe("gold tile", /obj/item/stack/tile/mineral/gold, 1, 4, 20), \ - new/datum/stack_recipe("HoS Statue", /obj/structure/statue/gold/hos, 5, one_per_turf = 1, on_floor = 1), \ - new/datum/stack_recipe("HoP Statue", /obj/structure/statue/gold/hop, 5, one_per_turf = 1, on_floor = 1), \ - new/datum/stack_recipe("CE Statue", /obj/structure/statue/gold/ce, 5, one_per_turf = 1, on_floor = 1), \ - new/datum/stack_recipe("RD Statue", /obj/structure/statue/gold/rd, 5, one_per_turf = 1, on_floor = 1), \ - new/datum/stack_recipe("Simple Crown", /obj/item/clothing/head/crown, 5), \ - new/datum/stack_recipe("CMO Statue", /obj/structure/statue/gold/cmo, 5, one_per_turf = 1, on_floor = 1), \ - )) - -/obj/item/stack/sheet/mineral/gold/get_main_recipes() - . = ..() - . += GLOB.gold_recipes - -/* - * Silver - */ -/obj/item/stack/sheet/mineral/silver - name = "silver" - icon_state = "sheet-silver" - item_state = "sheet-silver" - singular_name = "silver bar" - sheettype = "silver" - custom_materials = list(/datum/material/silver=MINERAL_MATERIAL_AMOUNT) - grind_results = list(/datum/reagent/silver = 20) - point_value = 20 - merge_type = /obj/item/stack/sheet/mineral/silver - material_type = /datum/material/silver - tableVariant = /obj/structure/table/optable - -GLOBAL_LIST_INIT(silver_recipes, list ( \ - new/datum/stack_recipe("silver door", /obj/structure/mineral_door/silver, 10, one_per_turf = 1, on_floor = 1), \ - new/datum/stack_recipe("silver tile", /obj/item/stack/tile/mineral/silver, 1, 4, 20), \ - new/datum/stack_recipe("Med Officer Statue", /obj/structure/statue/silver/md, 5, one_per_turf = 1, on_floor = 1), \ - new/datum/stack_recipe("Janitor Statue", /obj/structure/statue/silver/janitor, 5, one_per_turf = 1, on_floor = 1), \ - new/datum/stack_recipe("Sec Officer Statue", /obj/structure/statue/silver/sec, 5, one_per_turf = 1, on_floor = 1), \ - new/datum/stack_recipe("Sec Borg Statue", /obj/structure/statue/silver/secborg, 5, one_per_turf = 1, on_floor = 1), \ - new/datum/stack_recipe("Med Borg Statue", /obj/structure/statue/silver/medborg, 5, one_per_turf = 1, on_floor = 1), \ - )) - -/obj/item/stack/sheet/mineral/silver/get_main_recipes() - . = ..() - . += GLOB.silver_recipes - -/* - * Clown - */ -/obj/item/stack/sheet/mineral/bananium - name = "bananium" - icon_state = "sheet-bananium" - item_state = "sheet-bananium" - singular_name = "bananium sheet" - sheettype = "bananium" - custom_materials = list(/datum/material/bananium=MINERAL_MATERIAL_AMOUNT) - novariants = TRUE - grind_results = list(/datum/reagent/consumable/banana = 20) - point_value = 50 - merge_type = /obj/item/stack/sheet/mineral/bananium - material_type = /datum/material/bananium - -GLOBAL_LIST_INIT(bananium_recipes, list ( \ - new/datum/stack_recipe("bananium tile", /obj/item/stack/tile/mineral/bananium, 1, 4, 20), \ - new/datum/stack_recipe("Clown Statue", /obj/structure/statue/bananium/clown, 5, one_per_turf = 1, on_floor = 1), \ - )) - -/obj/item/stack/sheet/mineral/bananium/get_main_recipes() - . = ..() - . += GLOB.bananium_recipes - -/* - * Titanium - */ -/obj/item/stack/sheet/mineral/titanium - name = "titanium" - icon_state = "sheet-titanium" - item_state = "sheet-titanium" - singular_name = "titanium sheet" - force = 5 - throwforce = 5 - w_class = WEIGHT_CLASS_NORMAL - throw_speed = 1 - throw_range = 3 - sheettype = "titanium" - custom_materials = list(/datum/material/titanium=MINERAL_MATERIAL_AMOUNT) - point_value = 20 - merge_type = /obj/item/stack/sheet/mineral/titanium - material_type = /datum/material/titanium - -GLOBAL_LIST_INIT(titanium_recipes, list ( \ - new/datum/stack_recipe("titanium tile", /obj/item/stack/tile/mineral/titanium, 1, 4, 20), \ - )) - -/obj/item/stack/sheet/mineral/titanium/get_main_recipes() - . = ..() - . += GLOB.titanium_recipes - -/obj/item/stack/sheet/mineral/titanium/fifty - amount = 50 - -/* - * Plastitanium - */ -/obj/item/stack/sheet/mineral/plastitanium - name = "plastitanium" - icon_state = "sheet-plastitanium" - item_state = "sheet-plastitanium" - singular_name = "plastitanium sheet" - force = 5 - throwforce = 5 - w_class = WEIGHT_CLASS_NORMAL - throw_speed = 1 - throw_range = 3 - sheettype = "plastitanium" - custom_materials = list(/datum/material/titanium=MINERAL_MATERIAL_AMOUNT, /datum/material/plasma=MINERAL_MATERIAL_AMOUNT) - point_value = 45 - merge_type = /obj/item/stack/sheet/mineral/plastitanium - material_flags = MATERIAL_NO_EFFECTS - -GLOBAL_LIST_INIT(plastitanium_recipes, list ( \ - new/datum/stack_recipe("plastitanium tile", /obj/item/stack/tile/mineral/plastitanium, 1, 4, 20), \ - )) - -/obj/item/stack/sheet/mineral/plastitanium/get_main_recipes() - . = ..() - . += GLOB.plastitanium_recipes - - -/* - * Snow - */ - -/obj/item/stack/sheet/mineral/snow - name = "snow" - icon_state = "sheet-snow" - item_state = "sheet-snow" - singular_name = "snow block" - force = 1 - throwforce = 2 - grind_results = list(/datum/reagent/consumable/ice = 20) - merge_type = /obj/item/stack/sheet/mineral/snow - -GLOBAL_LIST_INIT(snow_recipes, list ( \ - new/datum/stack_recipe("Snow wall", /turf/closed/wall/mineral/snow, 5, one_per_turf = 1, on_floor = 1), \ - new/datum/stack_recipe("Snowman", /obj/structure/statue/snow/snowman, 5, one_per_turf = 1, on_floor = 1), \ - new/datum/stack_recipe("Snowball", /obj/item/toy/snowball, 1), \ - new/datum/stack_recipe("Snow tile", /obj/item/stack/tile/mineral/snow, 1, 4, 20), \ - )) - -/obj/item/stack/sheet/mineral/snow/get_main_recipes() - . = ..() - . += GLOB.snow_recipes - -/****************************** Others ****************************/ - -/* - * Runite - */ - -/obj/item/stack/sheet/mineral/runite - name = "runite" - desc = "" - singular_name = "runite bar" - icon_state = "sheet-runite" - item_state = "sheet-runite" - custom_materials = list(/datum/material/runite=MINERAL_MATERIAL_AMOUNT) - merge_type = /obj/item/stack/sheet/mineral/runite - material_type = /datum/material/runite - - -/* - * Mythril - */ -/obj/item/stack/sheet/mineral/mythril - name = "mythril" - icon_state = "sheet-mythril" - item_state = "sheet-mythril" - singular_name = "mythril sheet" - novariants = TRUE - custom_materials = list(/datum/material/mythril=MINERAL_MATERIAL_AMOUNT) - merge_type = /obj/item/stack/sheet/mineral/mythril - - -/* - * Coal - */ - -/obj/item/stack/sheet/mineral/coal - name = "coal" - desc = "" - icon = 'icons/obj/mining.dmi' - icon_state = "slag" - singular_name = "coal lump" - merge_type = /obj/item/stack/sheet/mineral/coal - grind_results = list(/datum/reagent/carbon = 20) - -/obj/item/stack/sheet/mineral/coal/attackby(obj/item/W, mob/user, params) - if(W.get_temperature() > 300)//If the temperature of the object is over 300, then ignite - var/turf/T = get_turf(src) - message_admins("Coal ignited by [ADMIN_LOOKUPFLW(user)] in [ADMIN_VERBOSEJMP(T)]") - log_game("Coal ignited by [key_name(user)] in [AREACOORD(T)]") - fire_act(W.get_temperature()) - return TRUE - else - return ..() - -/obj/item/stack/sheet/mineral/coal/fire_act(added, maxstacks) - atmos_spawn_air("co2=[amount*10];TEMP=[added]") - qdel(src) - -/obj/item/stack/sheet/mineral/coal/five - amount = 5 - -/obj/item/stack/sheet/mineral/coal/ten - amount = 10 diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm deleted file mode 100644 index 02828586cf..0000000000 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ /dev/null @@ -1,559 +0,0 @@ -/* Diffrent misc types of sheets - * Contains: - * Metal - * Plasteel - * Wood - * Cloth - * Plastic - * Cardboard - * Paper Frames - * Runed Metal (cult) - * Bronze (bake brass) - */ - -/* - * Metal - */ -GLOBAL_LIST_INIT(metal_recipes, list ( \ - new/datum/stack_recipe("stool", /obj/structure/chair/stool, one_per_turf = TRUE, on_floor = TRUE), \ - new/datum/stack_recipe("bar stool", /obj/structure/chair/stool/bar, one_per_turf = TRUE, on_floor = TRUE), \ - new/datum/stack_recipe("bed", /obj/structure/bed, 2, one_per_turf = TRUE, on_floor = TRUE), \ - null, \ - new/datum/stack_recipe_list("office chairs", list( \ - new/datum/stack_recipe("dark office chair", /obj/structure/chair/office, 5, one_per_turf = TRUE, on_floor = TRUE), \ - new/datum/stack_recipe("light office chair", /obj/structure/chair/office/light, 5, one_per_turf = TRUE, on_floor = TRUE), \ - )), \ - new/datum/stack_recipe_list("comfy chairs", list( \ - new/datum/stack_recipe("beige comfy chair", /obj/structure/chair/comfy/beige, 2, one_per_turf = TRUE, on_floor = TRUE), \ - new/datum/stack_recipe("black comfy chair", /obj/structure/chair/comfy/black, 2, one_per_turf = TRUE, on_floor = TRUE), \ - new/datum/stack_recipe("brown comfy chair", /obj/structure/chair/comfy/brown, 2, one_per_turf = TRUE, on_floor = TRUE), \ - new/datum/stack_recipe("lime comfy chair", /obj/structure/chair/comfy/lime, 2, one_per_turf = TRUE, on_floor = TRUE), \ - new/datum/stack_recipe("teal comfy chair", /obj/structure/chair/comfy/teal, 2, one_per_turf = TRUE, on_floor = TRUE), \ - )), \ - new/datum/stack_recipe_list("sofas", list( - new /datum/stack_recipe("sofa (middle)", /obj/structure/chair/sofa, 1, one_per_turf = TRUE, on_floor = TRUE), - new /datum/stack_recipe("sofa (left)", /obj/structure/chair/sofa/left, 1, one_per_turf = TRUE, on_floor = TRUE), - new /datum/stack_recipe("sofa (right)", /obj/structure/chair/sofa/right, 1, one_per_turf = TRUE, on_floor = TRUE), - new /datum/stack_recipe("sofa (corner)", /obj/structure/chair/sofa/corner, 1, one_per_turf = TRUE, on_floor = TRUE) - )), - null, \ - new/datum/stack_recipe("rack parts", /obj/item/rack_parts), \ - new/datum/stack_recipe("closet", /obj/structure/closet, 2, time = 15, one_per_turf = TRUE, on_floor = TRUE), \ - null, \ - new/datum/stack_recipe("floor tile", /obj/item/stack/tile/plasteel, 1, 4, 20), \ - new/datum/stack_recipe("metal rod", /obj/item/stack/rods, 1, 2, 60), \ - null, \ - new/datum/stack_recipe("wall girders", /obj/structure/girder, 2, time = 40, one_per_turf = TRUE, on_floor = TRUE), \ - null, \ - null, \ - null, \ - new/datum/stack_recipe("meatspike frame", /obj/structure/kitchenspike_frame, 5, time = 25, one_per_turf = TRUE, on_floor = TRUE), \ - null, \ - new/datum/stack_recipe("iron door", /obj/structure/mineral_door/iron, 20, one_per_turf = TRUE, on_floor = TRUE), \ -)) - -/obj/item/stack/sheet/metal - name = "metal" - desc = "" - singular_name = "metal sheet" - icon_state = "sheet-metal" - item_state = "sheet-metal" - custom_materials = list(/datum/material/iron=MINERAL_MATERIAL_AMOUNT) - throwforce = 10 - flags_1 = CONDUCT_1 - resistance_flags = FIRE_PROOF - merge_type = /obj/item/stack/sheet/metal - grind_results = list(/datum/reagent/iron = 20) - point_value = 2 - tableVariant = /obj/structure/table - material_type = /datum/material/iron - -/obj/item/stack/sheet/metal/New() - qdel() - -/obj/item/stack/sheet/metal/narsie_act() - new /obj/item/stack/sheet/runed_metal(loc, amount) - qdel(src) - -/obj/item/stack/sheet/metal/fifty - amount = 50 - -/obj/item/stack/sheet/metal/twenty - amount = 20 - -/obj/item/stack/sheet/metal/ten - amount = 10 - -/obj/item/stack/sheet/metal/five - amount = 5 - -/obj/item/stack/sheet/metal/get_main_recipes() - . = ..() - . += GLOB.metal_recipes - -/obj/item/stack/sheet/metal/suicide_act(mob/living/carbon/user) - user.visible_message("[user] begins whacking [user.p_them()]self over the head with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!") - return BRUTELOSS - -/* - * Plasteel - */ -GLOBAL_LIST_INIT(plasteel_recipes, list ( \ - new/datum/stack_recipe("pestle", /obj/item/pestle, 1, time = 50), \ - null, \ -)) - -/obj/item/stack/sheet/plasteel - name = "plasteel" - singular_name = "plasteel sheet" - desc = "" - icon_state = "sheet-plasteel" - item_state = "sheet-metal" - custom_materials = list(/datum/material/iron=2000, /datum/material/plasma=2000) - throwforce = 10 - flags_1 = CONDUCT_1 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 80) - resistance_flags = FIRE_PROOF - merge_type = /obj/item/stack/sheet/plasteel - grind_results = list(/datum/reagent/iron = 20, /datum/reagent/toxin/plasma = 20) - point_value = 23 - tableVariant = /obj/structure/table/reinforced - material_flags = MATERIAL_NO_EFFECTS - -/obj/item/stack/sheet/plasteel/get_main_recipes() - . = ..() - . += GLOB.plasteel_recipes - -/obj/item/stack/sheet/plasteel/twenty - amount = 20 - -/obj/item/stack/sheet/plasteel/fifty - amount = 50 - -/* - * Wood - */ -GLOBAL_LIST_INIT(wood_recipes, list ( \ - new/datum/stack_recipe("wooden sandals", /obj/item/clothing/shoes/sandal, 1), \ - new/datum/stack_recipe("wood floor tile", /obj/item/stack/tile/wood, 1, 4, 20), \ - new/datum/stack_recipe("wood table frame", /obj/structure/table_frame/wood, 2, time = 10), \ - new/datum/stack_recipe("rifle stock", /obj/item/weaponcrafting/stock, 10, time = 40), \ - new/datum/stack_recipe("rolling pin", /obj/item/kitchen/rollingpin, 2, time = 30), \ - new/datum/stack_recipe("wooden chair", /obj/structure/chair/wood/, 3, time = 10, one_per_turf = TRUE, on_floor = TRUE), \ - new/datum/stack_recipe("winged wooden chair", /obj/structure/chair/wood/wings, 3, time = 10, one_per_turf = TRUE, on_floor = TRUE), \ - new/datum/stack_recipe("wooden barricade", /obj/structure/barricade/wooden, 5, time = 50, one_per_turf = TRUE, on_floor = TRUE), \ - new/datum/stack_recipe("wooden door", /obj/structure/mineral_door/wood, 10, time = 20, one_per_turf = TRUE, on_floor = TRUE), \ - new/datum/stack_recipe("coffin", /obj/structure/closet/crate/coffin, 5, time = 15, one_per_turf = TRUE, on_floor = TRUE), \ - new/datum/stack_recipe("book case", /obj/structure/bookcase, 4, time = 15, one_per_turf = TRUE, on_floor = TRUE), \ - new/datum/stack_recipe("dog bed", /obj/structure/bed/dogbed, 10, time = 10, one_per_turf = TRUE, on_floor = TRUE), \ - new/datum/stack_recipe("dresser", /obj/structure/dresser, 10, time = 15, one_per_turf = TRUE, on_floor = TRUE), \ - new/datum/stack_recipe("picture frame", /obj/item/wallframe/picture, 1, time = 10),\ - new/datum/stack_recipe("display case chassis", /obj/structure/displaycase_chassis, 5, one_per_turf = TRUE, on_floor = TRUE), \ - new/datum/stack_recipe("tiki mask", /obj/item/clothing/mask/gas/tiki_mask, 2), \ - new/datum/stack_recipe("wooden bucket", /obj/item/reagent_containers/glass/bucket/wooden, 3, time = 10),\ - new/datum/stack_recipe("rake", /obj/item/cultivator/rake, 5, time = 10),\ - new/datum/stack_recipe("wooden crate", /obj/structure/closet/crate/wooden, 6, time = 50, one_per_turf = TRUE, on_floor = TRUE),\ - new/datum/stack_recipe("baseball bat", /obj/item/melee/baseball_bat, 5, time = 15),\ - new/datum/stack_recipe("loom", /obj/structure/loom, 10, time = 15, one_per_turf = TRUE, on_floor = TRUE), \ - new/datum/stack_recipe("mortar", /obj/item/reagent_containers/glass/mortar, 3), \ - new/datum/stack_recipe("firebrand", /obj/item/match/firebrand, 2, time = 100), \ - null, \ - new/datum/stack_recipe_list("pews", list( - new /datum/stack_recipe("pew (middle)", /obj/structure/chair/pew, 3, one_per_turf = TRUE, on_floor = TRUE), - new /datum/stack_recipe("pew (left)", /obj/structure/chair/pew/left, 3, one_per_turf = TRUE, on_floor = TRUE), - new /datum/stack_recipe("pew (right)", /obj/structure/chair/pew/right, 3, one_per_turf = TRUE, on_floor = TRUE) - )), - null, \ - )) - -/obj/item/stack/sheet/mineral/wood - name = "wooden plank" - desc = "" - singular_name = "wood plank" - icon_state = "sheet-wood" - item_state = "sheet-wood" - icon = 'icons/obj/stack_objects.dmi' - sheettype = "wood" - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 0) - resistance_flags = FLAMMABLE - merge_type = /obj/item/stack/sheet/mineral/wood - novariants = TRUE - grind_results = list(/datum/reagent/cellulose = 20) //no lignocellulose or lignin reagents yet, - -/obj/item/stack/sheet/mineral/wood/New() - qdel() - -/obj/item/stack/sheet/mineral/wood/get_main_recipes() - . = ..() - . += GLOB.wood_recipes - -/obj/item/stack/sheet/mineral/wood/fifty - amount = 50 - -/* - * Bamboo - */ - -GLOBAL_LIST_INIT(bamboo_recipes, list ( \ - new/datum/stack_recipe("punji sticks trap", /obj/structure/punji_sticks, 5, time = 30, one_per_turf = TRUE, on_floor = TRUE), \ - new/datum/stack_recipe("blow gun", /obj/item/gun/syringe/blowgun, 10, time = 70), \ - )) - -/obj/item/stack/sheet/mineral/bamboo - name = "bamboo cuttings" - desc = "" - singular_name = "cut bamboo" - icon_state = "sheet-bamboo" - item_state = "sheet-bamboo" - icon = 'icons/obj/stack_objects.dmi' - throwforce = 15 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 0) - resistance_flags = FLAMMABLE - merge_type = /obj/item/stack/sheet/mineral/bamboo - grind_results = list(/datum/reagent/cellulose = 10) - -/obj/item/stack/sheet/mineral/bamboo/get_main_recipes() - . = ..() - . += GLOB.bamboo_recipes - -/* - * Cloth - */ -GLOBAL_LIST_INIT(cloth_recipes, list ( \ - new/datum/stack_recipe("white jumpskirt", /obj/item/clothing/under/color/jumpskirt/white, 3), /*Ladies first*/ \ - new/datum/stack_recipe("white jumpsuit", /obj/item/clothing/under/color/white, 3), \ - new/datum/stack_recipe("white shoes", /obj/item/clothing/shoes/sneakers/white, 2), \ - new/datum/stack_recipe("white scarf", /obj/item/clothing/neck/scarf, 1), \ - null, \ - new/datum/stack_recipe("backpack", /obj/item/storage/backpack, 4), \ - new/datum/stack_recipe("duffel bag", /obj/item/storage/backpack/duffelbag, 6), \ - null, \ - new/datum/stack_recipe("plant bag", /obj/item/storage/bag/plants, 4), \ - new/datum/stack_recipe("book bag", /obj/item/storage/bag/books, 4), \ - new/datum/stack_recipe("mining satchel", /obj/item/storage/bag/ore, 4), \ - new/datum/stack_recipe("chemistry bag", /obj/item/storage/bag/chemistry, 4), \ - new/datum/stack_recipe("bio bag", /obj/item/storage/bag/bio, 4), \ - null, \ - new/datum/stack_recipe("improvised gauze", /obj/item/stack/medical/gauze/improvised, 1, 2, 6), \ - new/datum/stack_recipe("rag", /obj/item/reagent_containers/glass/rag, 1), \ - new/datum/stack_recipe("bedsheet", /obj/item/bedsheet, 3), \ - null, \ - new/datum/stack_recipe("fingerless gloves", /obj/item/clothing/gloves/fingerless, 1), \ - new/datum/stack_recipe("white gloves", /obj/item/clothing/gloves/color/white, 3), \ - new/datum/stack_recipe("white softcap", /obj/item/clothing/head/soft/mime, 2), \ - new/datum/stack_recipe("white beanie", /obj/item/clothing/head/beanie, 2), \ - null, \ - new/datum/stack_recipe("blindfold", /obj/item/clothing/glasses/blindfold, 2), \ - )) - -/obj/item/stack/sheet/cloth - name = "cloth" - desc = "" - singular_name = "cloth roll" - icon_state = "sheet-cloth" - item_state = "sheet-cloth" - resistance_flags = FLAMMABLE - force = 0 - throwforce = 0 - merge_type = /obj/item/stack/sheet/cloth - drop_sound = 'sound/blank.ogg' - pickup_sound = 'sound/blank.ogg' - grind_results = list(/datum/reagent/cellulose = 20) - -/obj/item/stack/sheet/cloth/get_main_recipes() - . = ..() - . += GLOB.cloth_recipes - -/obj/item/stack/sheet/cloth/ten - amount = 10 - -/obj/item/stack/sheet/cloth/five - amount = 5 - -GLOBAL_LIST_INIT(durathread_recipes, list ( \ - new/datum/stack_recipe("durathread jumpsuit", /obj/item/clothing/under/misc/durathread, 4, time = 40), - new/datum/stack_recipe("durathread beret", /obj/item/clothing/head/beret/durathread, 2, time = 40), \ - new/datum/stack_recipe("durathread beanie", /obj/item/clothing/head/beanie/durathread, 2, time = 40), \ - new/datum/stack_recipe("durathread bandana", /obj/item/clothing/mask/bandana/durathread, 1, time = 25), \ - )) - -/obj/item/stack/sheet/durathread - name = "durathread" - desc = "" - singular_name = "durathread roll" - icon_state = "sheet-durathread" - item_state = "sheet-cloth" - resistance_flags = FLAMMABLE - force = 0 - throwforce = 0 - merge_type = /obj/item/stack/sheet/durathread - drop_sound = 'sound/blank.ogg' - pickup_sound = 'sound/blank.ogg' - -/obj/item/stack/sheet/durathread/get_main_recipes() - . = ..() - . += GLOB.durathread_recipes - -/obj/item/stack/sheet/cotton - name = "raw cotton bundle" - desc = "" - singular_name = "raw cotton ball" - icon_state = "sheet-cotton" - resistance_flags = FLAMMABLE - force = 0 - throwforce = 0 - merge_type = /obj/item/stack/sheet/cotton - var/pull_effort = 30 - var/loom_result = /obj/item/stack/sheet/cloth - grind_results = list(/datum/reagent/cellulose = 20) - -/obj/item/stack/sheet/cotton/durathread - name = "raw durathread bundle" - desc = "" - singular_name = "raw durathread ball" - icon_state = "sheet-durathreadraw" - merge_type = /obj/item/stack/sheet/cotton/durathread - pull_effort = 70 - loom_result = /obj/item/stack/sheet/durathread - grind_results = list() - -/* - * Cardboard - */ -GLOBAL_LIST_INIT(cardboard_recipes, list ( \ - new/datum/stack_recipe("box", /obj/item/storage/box), \ - new/datum/stack_recipe("cardborg suit", /obj/item/clothing/suit/cardborg, 3), \ - new/datum/stack_recipe("cardborg helmet", /obj/item/clothing/head/cardborg), \ - new/datum/stack_recipe("large box", /obj/structure/closet/cardboard, 4, one_per_turf = TRUE, on_floor = TRUE), \ - new/datum/stack_recipe("cardboard cutout", /obj/item/cardboard_cutout, 5), \ - null, \ - new/datum/stack_recipe("folder", /obj/item/folder), \ - null, \ - //TO-DO: Find a proper way to just change the illustration on the box. Code isn't the issue, input is. - new/datum/stack_recipe_list("fancy boxes", list( - new /datum/stack_recipe("donut box", /obj/item/storage/fancy/donut_box), \ - new /datum/stack_recipe("egg box", /obj/item/storage/fancy/egg_box), \ - new /datum/stack_recipe("donk-pockets box", /obj/item/storage/box/donkpockets), \ - new /datum/stack_recipe("monkey cube box", /obj/item/storage/box/monkeycubes), - new /datum/stack_recipe("nugget box", /obj/item/storage/fancy/nugget_box), \ - null, \ - - new /datum/stack_recipe("lethal ammo box", /obj/item/storage/box/lethalshot), \ - new /datum/stack_recipe("rubber shot ammo box", /obj/item/storage/box/rubbershot), \ - new /datum/stack_recipe("bean bag ammo box", /obj/item/storage/box/beanbag), \ - new /datum/stack_recipe("flashbang box", /obj/item/storage/box/flashbangs), \ - new /datum/stack_recipe("handcuffs box", /obj/item/storage/box/handcuffs), \ - null, \ - - new /datum/stack_recipe("pillbottle box", /obj/item/storage/box/pillbottles), \ - new /datum/stack_recipe("beaker box", /obj/item/storage/box/beakers), \ - new /datum/stack_recipe("syringe box", /obj/item/storage/box/syringes), \ - new /datum/stack_recipe("latex gloves box", /obj/item/storage/box/gloves), \ - new /datum/stack_recipe("sterile masks box", /obj/item/storage/box/masks), \ - new /datum/stack_recipe("body bag box", /obj/item/storage/box/bodybags), \ - new /datum/stack_recipe("perscription glasses box", /obj/item/storage/box/rxglasses), \ - null, \ - new /datum/stack_recipe("light tubes box", /obj/item/storage/box/lights/tubes), \ - new /datum/stack_recipe("light bulbs box", /obj/item/storage/box/lights/bulbs), \ - new /datum/stack_recipe("mixed lights box", /obj/item/storage/box/lights/mixed), \ - new /datum/stack_recipe("candle box", /obj/item/storage/fancy/candle_box) - )), - - null, \ -)) - -/obj/item/stack/sheet/cardboard //BubbleWrap //it's cardboard you fuck - name = "cardboard" - desc = "" - singular_name = "cardboard sheet" - icon_state = "sheet-card" - item_state = "sheet-card" - resistance_flags = FLAMMABLE - force = 0 - throwforce = 0 - merge_type = /obj/item/stack/sheet/cardboard - novariants = TRUE - grind_results = list(/datum/reagent/cellulose = 10) - -/obj/item/stack/sheet/cardboard/get_main_recipes() - . = ..() - . += GLOB.cardboard_recipes - -/obj/item/stack/sheet/cardboard/fifty - amount = 50 - - -/* - * Runed Metal - */ - -/obj/item/stack/sheet/runed_metal - name = "runed metal" - desc = "" - singular_name = "runed metal sheet" - icon_state = "sheet-runed" - item_state = "sheet-runed" - icon = 'icons/obj/stack_objects.dmi' - sheettype = "runed" - merge_type = /obj/item/stack/sheet/runed_metal - novariants = TRUE - grind_results = list(/datum/reagent/iron = 5, /datum/reagent/blood = 15) - -/obj/item/stack/sheet/runed_metal/attack_self(mob/living/user) - var/turf/T = get_turf(user) //we may have moved. adjust as needed... - var/area/A = get_area(user) - if((!is_station_level(T.z) && !is_mining_level(T.z)) || (A && !(A.flags_1 & CULT_PERMITTED_1))) - to_chat(user, "The veil is not weak enough here.") - return FALSE - return ..() - -/* - * Bronze - */ - -GLOBAL_LIST_INIT(bronze_recipes, list ( \ - new/datum/stack_recipe("wall gear", /obj/structure/girder/bronze, 2, time = 20, one_per_turf = TRUE, on_floor = TRUE), \ - null, - new/datum/stack_recipe("directional bronze window", /obj/structure/window/bronze/unanchored, time = 0, on_floor = TRUE, window_checks = TRUE), \ - new/datum/stack_recipe("fulltile bronze window", /obj/structure/window/bronze/fulltile/unanchored, 2, time = 0, on_floor = TRUE, window_checks = TRUE), \ - new/datum/stack_recipe("bronze hat", /obj/item/clothing/head/bronze), \ - new/datum/stack_recipe("bronze suit", /obj/item/clothing/suit/bronze), \ - new/datum/stack_recipe("bronze boots", /obj/item/clothing/shoes/bronze), \ - null, - new/datum/stack_recipe("bronze chair", /obj/structure/chair/bronze, 1, time = 0, one_per_turf = TRUE, on_floor = TRUE), \ - new/datum/stack_recipe("Marx Bust", /obj/structure/statue/bronze/marx, 15, one_per_turf = 1, on_floor = 1), \ -)) - -/obj/item/stack/tile/bronze - name = "brass" - desc = "" - singular_name = "bronze sheet" - icon_state = "sheet-brass" - item_state = "sheet-brass" - icon = 'icons/obj/stack_objects.dmi' - resistance_flags = FIRE_PROOF | ACID_PROOF - throwforce = 10 - max_amount = 50 - throw_speed = 1 - throw_range = 3 - turf_type = /turf/open/floor/bronze - novariants = FALSE - grind_results = list(/datum/reagent/iron = 5, /datum/reagent/copper = 3) //we have no "tin" reagent so this is the closest thing - merge_type = /obj/item/stack/tile/bronze - tableVariant = /obj/structure/table/bronze - -/obj/item/stack/tile/bronze/get_main_recipes() - . = ..() - . += GLOB.bronze_recipes - -/obj/item/stack/sheet/paperframes/Initialize() - . = ..() - pixel_x = 0 - pixel_y = 0 - -/obj/item/stack/tile/bronze/thirty - amount = 30 - -/* - * Lesser and Greater gems - unused - */ -/obj/item/stack/sheet/lessergem - name = "lesser gems" - desc = "" - singular_name = "lesser gem" - icon_state = "sheet-lessergem" - item_state = "sheet-lessergem" - novariants = TRUE - - -/obj/item/stack/sheet/greatergem - name = "greater gems" - desc = "" - singular_name = "greater gem" - icon_state = "sheet-greatergem" - item_state = "sheet-greatergem" - novariants = TRUE - - /* - * Bones - */ -/obj/item/stack/sheet/bone - name = "bones" - icon = 'icons/obj/mining.dmi' - icon_state = "bone" - item_state = "sheet-bone" - singular_name = "bone" - desc = "" - force = 7 - throwforce = 5 - max_amount = 12 - w_class = WEIGHT_CLASS_NORMAL - throw_speed = 1 - throw_range = 3 - grind_results = list(/datum/reagent/carbon = 10) - merge_type = /obj/item/stack/sheet/bone - -GLOBAL_LIST_INIT(plastic_recipes, list( - new /datum/stack_recipe("plastic floor tile", /obj/item/stack/tile/plastic, 1, 4, 20), \ - new /datum/stack_recipe("folding plastic chair", /obj/structure/chair/plastic, 2), \ - new /datum/stack_recipe("water bottle", /obj/item/reagent_containers/glass/waterbottle/empty), \ - new /datum/stack_recipe("large water bottle", /obj/item/reagent_containers/glass/waterbottle/large/empty, 3), \ - new /datum/stack_recipe("colo cups", /obj/item/reagent_containers/glass/colocup, 1), \ - new /datum/stack_recipe("wet floor sign", /obj/item/clothing/suit/caution, 2), \ - new /datum/stack_recipe("blank sign", /obj/item/sign_backing, 1))) - -/obj/item/stack/sheet/plastic - name = "plastic" - desc = "" - singular_name = "plastic sheet" - icon_state = "sheet-plastic" - item_state = "sheet-plastic" - custom_materials = list(/datum/material/plastic=MINERAL_MATERIAL_AMOUNT) - throwforce = 7 - merge_type = /obj/item/stack/sheet/plastic - -/obj/item/stack/sheet/plastic/fifty - amount = 50 - -/obj/item/stack/sheet/plastic/five - amount = 5 - -/obj/item/stack/sheet/plastic/get_main_recipes() - . = ..() - . += GLOB.plastic_recipes - -GLOBAL_LIST_INIT(paperframe_recipes, list( -new /datum/stack_recipe("paper frame separator", /obj/structure/window/paperframe, 2, one_per_turf = TRUE, on_floor = TRUE, time = 10), \ -new /datum/stack_recipe("paper frame door", /obj/structure/mineral_door/paperframe, 3, one_per_turf = TRUE, on_floor = TRUE, time = 10 ))) - -/obj/item/stack/sheet/paperframes - name = "paper frames" - desc = "" - singular_name = "paper frame" - icon_state = "sheet-paper" - item_state = "sheet-paper" - merge_type = /obj/item/stack/sheet/paperframes - resistance_flags = FLAMMABLE - grind_results = list(/datum/reagent/cellulose = 20) - -/obj/item/stack/sheet/paperframes/get_main_recipes() - . = ..() - . += GLOB.paperframe_recipes -/obj/item/stack/sheet/paperframes/five - amount = 5 -/obj/item/stack/sheet/paperframes/twenty - amount = 20 -/obj/item/stack/sheet/paperframes/fifty - amount = 50 - -/obj/item/stack/sheet/capitalisium - name = "capitalisium sheet" - desc = "" - icon_state = "sheet-capitalisium" - merge_type = /obj/item/stack/sheet/capitalisium - -/obj/item/stack/sheet/stalinium - name = "stalinium sheet" - desc = "" - icon_state = "sheet-stalinium" - merge_type = /obj/item/stack/sheet/stalinium diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 14e641b766..185367746f 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -219,16 +219,6 @@ used_materials[getmaterialref(i)] = R.req_amount / R.res_amount * (MINERAL_MATERIAL_AMOUNT / custom_materials.len) O.set_custom_materials(used_materials) - //START: oh fuck i'm so sorry - if(istype(O, /obj/structure/window)) - var/obj/structure/window/W = O - W.ini_dir = W.dir - //END: oh fuck i'm so sorry - - else if(istype(O, /obj/item/restraints/handcuffs/cable)) - var/obj/item/cuffs = O - cuffs.color = color - if (QDELETED(O)) return //It's a stack and has already been merged @@ -251,10 +241,6 @@ return FALSE var/turf/T = get_turf(usr) - var/obj/D = R.result_type - if(R.window_checks && !valid_window_location(T, initial(D.dir) == FULLTILE_WINDOW_DIR ? FULLTILE_WINDOW_DIR : usr.dir)) - to_chat(usr, "The [R.title] won't fit here!") - return FALSE if(R.one_per_turf && (locate(R.result_type) in T)) to_chat(usr, "There is another [R.title] here!") return FALSE @@ -267,10 +253,6 @@ continue if(istype(AM,/obj/structure/table)) continue - if(istype(AM,/obj/structure/window)) - var/obj/structure/window/W = AM - if(!W.fulltile) - continue if(AM.density) to_chat(usr, "Theres a [AM.name] here. You cant make a [R.title] here!") return FALSE diff --git a/code/game/objects/items/stacks/tiles/light.dm b/code/game/objects/items/stacks/tiles/light.dm deleted file mode 100644 index 3bbf3200cc..0000000000 --- a/code/game/objects/items/stacks/tiles/light.dm +++ /dev/null @@ -1,20 +0,0 @@ -/obj/item/stack/tile/light - name = "light tile" - singular_name = "light floor tile" - desc = "" - icon_state = "tile_e" - flags_1 = CONDUCT_1 - attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "smashed") - turf_type = /turf/open/floor/light - var/state = 0 - -/obj/item/stack/tile/light/Initialize(mapload, new_amount, merge = TRUE) - . = ..() - if(prob(5)) - state = 3 //broken - else if(prob(5)) - state = 2 //breaking - else if(prob(10)) - state = 1 //flickering occasionally - else - state = 0 //fine diff --git a/code/game/objects/items/stacks/tiles/tile_mineral.dm b/code/game/objects/items/stacks/tiles/tile_mineral.dm deleted file mode 100644 index c867df7f37..0000000000 --- a/code/game/objects/items/stacks/tiles/tile_mineral.dm +++ /dev/null @@ -1,99 +0,0 @@ -/obj/item/stack/tile/mineral/plasma - name = "plasma tile" - singular_name = "plasma floor tile" - desc = "" - icon_state = "tile_plasma" - item_state = "tile-plasma" - turf_type = /turf/open/floor/mineral/plasma - mineralType = "plasma" - custom_materials = list(/datum/material/plasma=500) - -/obj/item/stack/tile/mineral/uranium - name = "uranium tile" - singular_name = "uranium floor tile" - desc = "" - icon_state = "tile_uranium" - item_state = "tile-uranium" - turf_type = /turf/open/floor/mineral/uranium - mineralType = "uranium" - custom_materials = list(/datum/material/uranium=500) - -/obj/item/stack/tile/mineral/gold - name = "gold tile" - singular_name = "gold floor tile" - desc = "" - icon_state = "tile_gold" - item_state = "tile-gold" - turf_type = /turf/open/floor/mineral/gold - mineralType = "gold" - custom_materials = list(/datum/material/gold=500) - -/obj/item/stack/tile/mineral/silver - name = "silver tile" - singular_name = "silver floor tile" - desc = "" - icon_state = "tile_silver" - item_state = "tile-silver" - turf_type = /turf/open/floor/mineral/silver - mineralType = "silver" - custom_materials = list(/datum/material/silver=500) - -/obj/item/stack/tile/mineral/diamond - name = "diamond tile" - singular_name = "diamond floor tile" - desc = "" - icon_state = "tile_diamond" - item_state = "tile-diamond" - turf_type = /turf/open/floor/mineral/diamond - mineralType = "diamond" - custom_materials = list(/datum/material/diamond=500) - -/obj/item/stack/tile/mineral/bananium - name = "bananium tile" - singular_name = "bananium floor tile" - desc = "" - icon_state = "tile_bananium" - item_state = "tile-bananium" - turf_type = /turf/open/floor/mineral/bananium - mineralType = "bananium" - custom_materials = list(/datum/material/bananium=500) - -/obj/item/stack/tile/mineral/abductor - name = "alien floor tile" - singular_name = "alien floor tile" - desc = "" - icon = 'icons/obj/abductor.dmi' - icon_state = "tile_abductor" - item_state = "tile-abductor" - turf_type = /turf/open/floor/mineral/abductor - mineralType = "abductor" - -/obj/item/stack/tile/mineral/titanium - name = "titanium tile" - singular_name = "titanium floor tile" - desc = "" - icon_state = "tile_shuttle" - item_state = "tile-shuttle" - turf_type = /turf/open/floor/mineral/titanium - mineralType = "titanium" - custom_materials = list(/datum/material/titanium=500) - -/obj/item/stack/tile/mineral/plastitanium - name = "plastitanium tile" - singular_name = "plastitanium floor tile" - desc = "" - icon_state = "tile_darkshuttle" - item_state = "tile-darkshuttle" - turf_type = /turf/open/floor/mineral/plastitanium - mineralType = "plastitanium" - custom_materials = list(/datum/material/titanium=250, /datum/material/plasma=250) - material_flags = MATERIAL_NO_EFFECTS - -/obj/item/stack/tile/mineral/snow - name = "snow tile" - singular_name = "snow tile" - desc = "" - icon_state = "tile_snow" - item_state = "tile-silver" - turf_type = /turf/open/floor/grass/snow/safe - mineralType = "snow" diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm deleted file mode 100644 index 30fc87ae92..0000000000 --- a/code/game/objects/items/stacks/tiles/tile_types.dm +++ /dev/null @@ -1,330 +0,0 @@ -/obj/item/stack/tile - name = "broken tile" - singular_name = "broken tile" - desc = "" - lefthand_file = 'icons/mob/inhands/misc/tiles_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/tiles_righthand.dmi' - icon = 'icons/obj/tiles.dmi' - w_class = WEIGHT_CLASS_NORMAL - force = 1 - throwforce = 1 - throw_speed = 3 - throw_range = 7 - max_amount = 60 - mats_per_stack = 500 - var/turf_type = null - var/mineralType = null - novariants = TRUE - -/obj/item/stack/tile/Initialize(mapload, amount) - . = ..() - pixel_x = rand(-3, 3) - pixel_y = rand(-3, 3) //randomize a little - -/obj/item/stack/tile/attackby(obj/item/W, mob/user, params) - - if (W.tool_behaviour == TOOL_WELDER) - if(get_amount() < 4) - to_chat(user, "I need at least four tiles to do this!") - return - - if(!mineralType) - to_chat(user, "I can not reform this!") - return - - if(W.use_tool(src, user, 0, volume=40)) - if(mineralType == "plasma") - atmos_spawn_air("plasma=5;TEMP=1000") - user.visible_message("[user.name] sets the plasma tiles on fire!", \ - "I set the plasma tiles on fire!") - qdel(src) - return - - if (mineralType == "metal") - var/obj/item/stack/sheet/metal/new_item = new(user.loc) - user.visible_message("[user.name] shaped [src] into metal with the welding tool.", \ - "I shaped [src] into metal with the welding tool.", \ - "I hear welding.") - var/obj/item/stack/rods/R = src - src = null - var/replace = (user.get_inactive_held_item()==R) - R.use(4) - if (!R && replace) - user.put_in_hands(new_item) - - else - var/sheet_type = text2path("/obj/item/stack/sheet/mineral/[mineralType]") - var/obj/item/stack/sheet/mineral/new_item = new sheet_type(user.loc) - user.visible_message("[user.name] shaped [src] into a sheet with the welding tool.", \ - "I shaped [src] into a sheet with the welding tool.", \ - "I hear welding.") - var/obj/item/stack/rods/R = src - src = null - var/replace = (user.get_inactive_held_item()==R) - R.use(4) - if (!R && replace) - user.put_in_hands(new_item) - else - return ..() - -//Grass -/obj/item/stack/tile/grass - name = "grass tile" - singular_name = "grass floor tile" - desc = "" - icon_state = "tile_grass" - item_state = "tile-grass" - turf_type = /turf/open/floor/grass - resistance_flags = FLAMMABLE - -//Fairygrass -/obj/item/stack/tile/fairygrass - name = "fairygrass tile" - singular_name = "fairygrass floor tile" - desc = "" - icon_state = "tile_fairygrass" - item_state = "tile-fairygrass" - turf_type = /turf/open/floor/grass/fairy - resistance_flags = FLAMMABLE - -//Wood -/obj/item/stack/tile/wood - name = "wood floor tile" - singular_name = "wood floor tile" - desc = "" - icon_state = "tile-wood" - item_state = "tile-wood" - turf_type = /turf/open/floor/wood - resistance_flags = FLAMMABLE - -//Basalt -/obj/item/stack/tile/basalt - name = "basalt tile" - singular_name = "basalt floor tile" - desc = "" - icon_state = "tile_basalt" - item_state = "tile-basalt" - turf_type = /turf/open/floor/grass/fakebasalt - -//Carpets -/obj/item/stack/tile/carpet - name = "carpet" - singular_name = "carpet" - desc = "" - icon_state = "tile-carpet" - item_state = "tile-carpet" - turf_type = /turf/open/floor/carpet - resistance_flags = FLAMMABLE - tableVariant = /obj/structure/table/wood/fancy - -/obj/item/stack/tile/carpet/black - name = "black carpet" - icon_state = "tile-carpet-black" - item_state = "tile-carpet-black" - turf_type = /turf/open/floor/carpet/black - tableVariant = /obj/structure/table/wood/fancy/black - -/obj/item/stack/tile/carpet/blue - name = "blue carpet" - icon_state = "tile-carpet-blue" - item_state = "tile-carpet-blue" - turf_type = /turf/open/floor/carpet/blue - tableVariant = /obj/structure/table/wood/fancy/blue - -/obj/item/stack/tile/carpet/cyan - name = "cyan carpet" - icon_state = "tile-carpet-cyan" - item_state = "tile-carpet-cyan" - turf_type = /turf/open/floor/carpet/cyan - tableVariant = /obj/structure/table/wood/fancy/cyan - -/obj/item/stack/tile/carpet/green - name = "green carpet" - icon_state = "tile-carpet-green" - item_state = "tile-carpet-green" - turf_type = /turf/open/floor/carpet/green - tableVariant = /obj/structure/table/wood/fancy/green - -/obj/item/stack/tile/carpet/orange - name = "orange carpet" - icon_state = "tile-carpet-orange" - item_state = "tile-carpet-orange" - turf_type = /turf/open/floor/carpet/orange - tableVariant = /obj/structure/table/wood/fancy/orange - -/obj/item/stack/tile/carpet/purple - name = "purple carpet" - icon_state = "tile-carpet-purple" - item_state = "tile-carpet-purple" - turf_type = /turf/open/floor/carpet/purple - tableVariant = /obj/structure/table/wood/fancy/purple - -/obj/item/stack/tile/carpet/red - name = "red carpet" - icon_state = "tile-carpet-red" - item_state = "tile-carpet-red" - turf_type = /turf/open/floor/carpet/red - tableVariant = /obj/structure/table/wood/fancy/red - -/obj/item/stack/tile/carpet/royalblack - name = "royal black carpet" - icon_state = "tile-carpet-royalblack" - item_state = "tile-carpet-royalblack" - turf_type = /turf/open/floor/carpet/royalblack - tableVariant = /obj/structure/table/wood/fancy/royalblack - -/obj/item/stack/tile/carpet/royalblue - name = "royal blue carpet" - icon_state = "tile-carpet-royalblue" - item_state = "tile-carpet-royalblue" - turf_type = /turf/open/floor/carpet/royalblue - tableVariant = /obj/structure/table/wood/fancy/royalblue - - -/obj/item/stack/tile/carpet/fifty - amount = 50 - -/obj/item/stack/tile/carpet/black/fifty - amount = 50 - -/obj/item/stack/tile/carpet/blue/fifty - amount = 50 - -/obj/item/stack/tile/carpet/cyan/fifty - amount = 50 - -/obj/item/stack/tile/carpet/green/fifty - amount = 50 - -/obj/item/stack/tile/carpet/orange/fifty - amount = 50 - -/obj/item/stack/tile/carpet/purple/fifty - amount = 50 - -/obj/item/stack/tile/carpet/red/fifty - amount = 50 - -/obj/item/stack/tile/carpet/royalblack/fifty - amount = 50 - -/obj/item/stack/tile/carpet/royalblue/fifty - amount = 50 - - -/obj/item/stack/tile/fakespace - name = "astral carpet" - singular_name = "astral carpet" - desc = "" - icon_state = "tile_space" - item_state = "tile-space" - turf_type = /turf/open/floor/fakespace - resistance_flags = FLAMMABLE - merge_type = /obj/item/stack/tile/fakespace - -/obj/item/stack/tile/fakespace/loaded - amount = 30 - -/obj/item/stack/tile/fakepit - name = "fake pits" - singular_name = "fake pit" - desc = "" - icon_state = "tile_pit" - item_state = "tile-basalt" - turf_type = /turf/open/floor/fakepit - resistance_flags = FLAMMABLE - merge_type = /obj/item/stack/tile/fakepit - -/obj/item/stack/tile/fakepit/loaded - amount = 30 - -//High-traction -/obj/item/stack/tile/noslip - name = "high-traction floor tile" - singular_name = "high-traction floor tile" - desc = "" - icon_state = "tile_noslip" - item_state = "tile-noslip" - turf_type = /turf/open/floor/noslip - merge_type = /obj/item/stack/tile/noslip - -/obj/item/stack/tile/noslip/thirty - amount = 30 - -//Circuit -/obj/item/stack/tile/circuit - name = "blue circuit tile" - singular_name = "blue circuit tile" - desc = "" - icon_state = "tile_bcircuit" - item_state = "tile-bcircuit" - turf_type = /turf/open/floor/circuit - -/obj/item/stack/tile/circuit/green - name = "green circuit tile" - singular_name = "green circuit tile" - desc = "" - icon_state = "tile_gcircuit" - item_state = "tile-gcircuit" - turf_type = /turf/open/floor/circuit/green - -/obj/item/stack/tile/circuit/green/anim - turf_type = /turf/open/floor/circuit/green/anim - -/obj/item/stack/tile/circuit/red - name = "red circuit tile" - singular_name = "red circuit tile" - desc = "" - icon_state = "tile_rcircuit" - item_state = "tile-rcircuit" - turf_type = /turf/open/floor/circuit/red - -/obj/item/stack/tile/circuit/red/anim - turf_type = /turf/open/floor/circuit/red/anim - -//Pod floor -/obj/item/stack/tile/pod - name = "pod floor tile" - singular_name = "pod floor tile" - desc = "" - icon_state = "tile_pod" - item_state = "tile-pod" - turf_type = /turf/open/floor/pod - -/obj/item/stack/tile/pod/light - name = "light pod floor tile" - singular_name = "light pod floor tile" - desc = "" - icon_state = "tile_podlight" - turf_type = /turf/open/floor/pod/light - -/obj/item/stack/tile/pod/dark - name = "dark pod floor tile" - singular_name = "dark pod floor tile" - desc = "" - icon_state = "tile_poddark" - turf_type = /turf/open/floor/pod/dark - -//Plasteel (normal) -/obj/item/stack/tile/plasteel - name = "floor tile" - singular_name = "floor tile" - desc = "" - icon_state = "tile" - item_state = "tile" - force = 6 - custom_materials = list(/datum/material/iron=500) - throwforce = 10 - flags_1 = CONDUCT_1 - turf_type = /turf/open/floor/plasteel - mineralType = "metal" - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 70) - resistance_flags = FIRE_PROOF - -/obj/item/stack/tile/plastic - name = "plastic tile" - singular_name = "plastic floor tile" - desc = "" - icon_state = "tile_plastic" - custom_materials = list(/datum/material/plastic=500) - turf_type = /turf/open/floor/plastic diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm index 1dd537406e..bd08918fb1 100644 --- a/code/game/objects/items/storage/backpack.dm +++ b/code/game/objects/items/storage/backpack.dm @@ -27,503 +27,3 @@ STR.max_combined_w_class = 21 STR.max_w_class = WEIGHT_CLASS_NORMAL STR.max_items = 21 - -/* - * Backpack Types - */ - -/obj/item/storage/backpack/old/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_combined_w_class = 12 - -/obj/item/storage/backpack/holding - name = "bag of holding" - desc = "" - icon_state = "holdingpack" - item_state = "holdingpack" - resistance_flags = FIRE_PROOF - item_flags = NO_MAT_REDEMPTION - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 50) - component_type = /datum/component/storage/concrete/bluespace/bag_of_holding - -/obj/item/storage/backpack/holding/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.allow_big_nesting = TRUE - STR.max_w_class = WEIGHT_CLASS_GIGANTIC - STR.max_combined_w_class = 35 - -/obj/item/storage/backpack/holding/suicide_act(mob/living/user) - user.visible_message("[user] is jumping into [src]! It looks like [user.p_theyre()] trying to commit suicide.") - user.dropItemToGround(src, TRUE) - user.Stun(100, ignore_canstun = TRUE) - sleep(20) - playsound(src, "rustle", 50, TRUE, -5) - qdel(user) - -/obj/item/storage/backpack/holding/singularity_act(current_size) - var/dist = max((current_size - 2),1) - explosion(src.loc,(dist),(dist*2),(dist*4)) - -/obj/item/storage/backpack/santabag - name = "Santa's Gift Bag" - desc = "" - icon_state = "giftbag0" - item_state = "giftbag" - w_class = WEIGHT_CLASS_BULKY - -/obj/item/storage/backpack/santabag/Initialize() - . = ..() - INVOKE_ASYNC(src, PROC_REF(regenerate_presents)) - -/obj/item/storage/backpack/santabag/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_w_class = WEIGHT_CLASS_NORMAL - STR.max_combined_w_class = 60 - -/obj/item/storage/backpack/santabag/suicide_act(mob/user) - user.visible_message("[user] places [src] over [user.p_their()] head and pulls it tight! It looks like [user.p_they()] [user.p_are()]n't in the Christmas spirit...") - return (OXYLOSS) - -/obj/item/storage/backpack/santabag/proc/regenerate_presents() - addtimer(CALLBACK(src, PROC_REF(regenerate_presents)), rand(30 SECONDS, 60 SECONDS)) - - var/mob/M = get(loc, /mob) - if(!istype(M)) - return - if(HAS_TRAIT(M, TRAIT_CANNOT_OPEN_PRESENTS)) - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - var/turf/floor = get_turf(src) - var/obj/item/I = new /obj/item/a_gift/anything(floor) - if(STR.can_be_inserted(I, stop_messages=TRUE)) - STR.handle_item_insertion(I, prevent_warning=TRUE) - else - qdel(I) - - -/obj/item/storage/backpack/cultpack - name = "trophy rack" - desc = "" - icon_state = "cultpack" - item_state = "backpack" - -/obj/item/storage/backpack/clown - name = "Giggles von Honkerton" - desc = "" - icon_state = "clownpack" - item_state = "clownpack" - -/obj/item/storage/backpack/explorer - name = "explorer bag" - desc = "" - icon_state = "explorerpack" - item_state = "explorerpack" - -/obj/item/storage/backpack/mime - name = "Parcel Parceaux" - desc = "" - icon_state = "mimepack" - item_state = "mimepack" - -/obj/item/storage/backpack/medic - name = "medical backpack" - desc = "" - icon_state = "medicalpack" - item_state = "medicalpack" - -/obj/item/storage/backpack/security - name = "security backpack" - desc = "" - icon_state = "securitypack" - item_state = "securitypack" - -/obj/item/storage/backpack/captain - name = "captain's backpack" - desc = "" - icon_state = "captainpack" - item_state = "captainpack" - -/obj/item/storage/backpack/industrial - name = "industrial backpack" - desc = "" - icon_state = "engiepack" - item_state = "engiepack" - resistance_flags = FIRE_PROOF - -/obj/item/storage/backpack/botany - name = "botany backpack" - desc = "" - icon_state = "botpack" - item_state = "botpack" - -/obj/item/storage/backpack/chemistry - name = "chemistry backpack" - desc = "" - icon_state = "chempack" - item_state = "chempack" - -/obj/item/storage/backpack/genetics - name = "genetics backpack" - desc = "" - icon_state = "genepack" - item_state = "genepack" - -/obj/item/storage/backpack/science - name = "science backpack" - desc = "" - icon_state = "toxpack" - item_state = "toxpack" - -/obj/item/storage/backpack/virology - name = "virology backpack" - desc = "" - icon_state = "viropack" - item_state = "viropack" - -/obj/item/storage/backpack/ert - name = "emergency response team commander backpack" - desc = "" - icon_state = "ert_commander" - item_state = "securitypack" - resistance_flags = FIRE_PROOF - -/obj/item/storage/backpack/ert/security - name = "emergency response team security backpack" - desc = "" - icon_state = "ert_security" - -/obj/item/storage/backpack/ert/medical - name = "emergency response team medical backpack" - desc = "" - icon_state = "ert_medical" - -/obj/item/storage/backpack/ert/engineer - name = "emergency response team engineer backpack" - desc = "" - icon_state = "ert_engineering" - -/* - * Satchel Types - */ - -/obj/item/storage/backpack/satchel - name = "satchel" - desc = "" - icon_state = "satchel-norm" - item_state = "satchel-norm" - -/obj/item/storage/backpack/satchel/leather - name = "leather satchel" - desc = "" - icon_state = "satchel" - item_state = "satchel" - -/obj/item/storage/backpack/satchel/fireproof - resistance_flags = FIRE_PROOF - -/obj/item/storage/backpack/satchel/eng - name = "industrial satchel" - desc = "" - icon_state = "satchel-eng" - item_state = "satchel-eng" - resistance_flags = FIRE_PROOF - -/obj/item/storage/backpack/satchel/med - name = "medical satchel" - desc = "" - icon_state = "satchel-med" - item_state = "satchel-med" - -/obj/item/storage/backpack/satchel/vir - name = "virologist satchel" - desc = "" - icon_state = "satchel-vir" - item_state = "satchel-vir" - -/obj/item/storage/backpack/satchel/chem - name = "chemist satchel" - desc = "" - icon_state = "satchel-chem" - item_state = "satchel-chem" - -/obj/item/storage/backpack/satchel/gen - name = "geneticist satchel" - desc = "" - icon_state = "satchel-gen" - item_state = "satchel-gen" - -/obj/item/storage/backpack/satchel/tox - name = "scientist satchel" - desc = "" - icon_state = "satchel-tox" - item_state = "satchel-tox" - -/obj/item/storage/backpack/satchel/hyd - name = "botanist satchel" - desc = "" - icon_state = "satchel-hyd" - item_state = "satchel-hyd" - -/obj/item/storage/backpack/satchel/sec - name = "security satchel" - desc = "" - icon_state = "satchel-sec" - item_state = "satchel-sec" - -/obj/item/storage/backpack/satchel/explorer - name = "explorer satchel" - desc = "" - icon_state = "satchel-explorer" - item_state = "satchel-explorer" - -/obj/item/storage/backpack/satchel/cap - name = "captain's satchel" - desc = "" - icon_state = "satchel-cap" - item_state = "satchel-cap" - -/obj/item/storage/backpack/satchel/flat - name = "smuggler's satchel" - desc = "" - icon_state = "satchel-flat" - item_state = "satchel-flat" - w_class = WEIGHT_CLASS_NORMAL //Can fit in backpacks itself. - level = 1 - -/obj/item/storage/backpack/satchel/flat/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_combined_w_class = 15 - STR.set_holdable(null, list(/obj/item/storage/backpack/satchel/flat)) //muh recursive backpacks) - -/obj/item/storage/backpack/satchel/flat/hide(intact) - if(intact) - invisibility = INVISIBILITY_OBSERVER - anchored = TRUE //otherwise you can start pulling, cover it, and drag around an invisible backpack. - icon_state = "[initial(icon_state)]2" - ADD_TRAIT(src, TRAIT_T_RAY_VISIBLE, TRAIT_GENERIC) - else - invisibility = initial(invisibility) - anchored = FALSE - icon_state = initial(icon_state) - REMOVE_TRAIT(src, TRAIT_T_RAY_VISIBLE, TRAIT_GENERIC) - - -/obj/item/storage/backpack/satchel/flat/with_tools/PopulateContents() - new /obj/item/stack/tile/plasteel(src) - new /obj/item/crowbar(src) - - ..() - -/obj/item/storage/backpack/satchel/flat/empty/PopulateContents() - return - -/obj/item/storage/backpack/duffelbag - name = "duffel bag" - desc = "" - icon_state = "duffel" - item_state = "duffel" - slowdown = 1 - -/obj/item/storage/backpack/duffelbag/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_combined_w_class = 30 - -/obj/item/storage/backpack/duffelbag/captain - name = "captain's duffel bag" - desc = "" - icon_state = "duffel-captain" - item_state = "duffel-captain" - -/obj/item/storage/backpack/duffelbag/med - name = "medical duffel bag" - desc = "" - icon_state = "duffel-med" - item_state = "duffel-med" - -/obj/item/storage/backpack/duffelbag/med/surgery - name = "surgical duffel bag" - desc = "" - -/obj/item/storage/backpack/duffelbag/med/surgery/PopulateContents() - new /obj/item/scalpel(src) - new /obj/item/hemostat(src) - new /obj/item/retractor(src) - new /obj/item/circular_saw(src) - new /obj/item/surgicaldrill(src) - new /obj/item/cautery(src) - new /obj/item/surgical_drapes(src) - new /obj/item/clothing/mask/surgical(src) - new /obj/item/razor(src) - -/obj/item/storage/backpack/duffelbag/sec - name = "security duffel bag" - desc = "" - icon_state = "duffel-sec" - item_state = "duffel-sec" - -/obj/item/storage/backpack/duffelbag/sec/surgery - name = "surgical duffel bag" - desc = "" - -/obj/item/storage/backpack/duffelbag/sec/surgery/PopulateContents() - new /obj/item/scalpel(src) - new /obj/item/hemostat(src) - new /obj/item/retractor(src) - new /obj/item/circular_saw(src) - new /obj/item/surgicaldrill(src) - new /obj/item/cautery(src) - new /obj/item/surgical_drapes(src) - new /obj/item/clothing/mask/surgical(src) - -/obj/item/storage/backpack/duffelbag/engineering - name = "industrial duffel bag" - desc = "" - icon_state = "duffel-eng" - item_state = "duffel-eng" - resistance_flags = FIRE_PROOF - -/obj/item/storage/backpack/duffelbag/drone - name = "drone duffel bag" - desc = "" - icon_state = "duffel-drone" - item_state = "duffel-drone" - resistance_flags = FIRE_PROOF - -/obj/item/storage/backpack/duffelbag/drone/PopulateContents() - new /obj/item/screwdriver(src) - new /obj/item/wrench(src) - new /obj/item/weldingtool(src) - new /obj/item/crowbar(src) - new /obj/item/wirecutters(src) - new /obj/item/multitool(src) - -/obj/item/storage/backpack/duffelbag/clown - name = "clown's duffel bag" - desc = "" - icon_state = "duffel-clown" - item_state = "duffel-clown" - -/obj/item/storage/backpack/duffelbag/clown/cream_pie/PopulateContents() - for(var/i in 1 to 10) - new /obj/item/reagent_containers/food/snacks/pie/cream(src) - -/obj/item/storage/backpack/fireproof - resistance_flags = FIRE_PROOF - -/obj/item/storage/backpack/duffelbag/syndie - name = "suspicious looking duffel bag" - desc = "" - icon_state = "duffel-syndie" - item_state = "duffel-syndieammo" - slowdown = 0 - resistance_flags = FIRE_PROOF - -/obj/item/storage/backpack/duffelbag/syndie/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.silent = TRUE - -/obj/item/storage/backpack/duffelbag/syndie/hitman - desc = "" - icon_state = "duffel-syndieammo" - item_state = "duffel-syndieammo" - -/obj/item/storage/backpack/duffelbag/syndie/hitman/PopulateContents() - new /obj/item/clothing/under/suit/black(src) - new /obj/item/clothing/accessory/waistcoat(src) - new /obj/item/clothing/shoes/laceup(src) - new /obj/item/clothing/gloves/color/black(src) - new /obj/item/clothing/glasses/sunglasses(src) - new /obj/item/clothing/head/fedora(src) - -/obj/item/storage/backpack/duffelbag/syndie/med - name = "medical duffel bag" - desc = "" - icon_state = "duffel-syndiemed" - item_state = "duffel-syndiemed" - -/obj/item/storage/backpack/duffelbag/syndie/surgery - name = "surgery duffel bag" - desc = "" - icon_state = "duffel-syndiemed" - item_state = "duffel-syndiemed" - -/obj/item/storage/backpack/duffelbag/syndie/surgery/PopulateContents() - new /obj/item/scalpel(src) - new /obj/item/hemostat(src) - new /obj/item/retractor(src) - new /obj/item/circular_saw(src) - new /obj/item/surgicaldrill(src) - new /obj/item/cautery(src) - new /obj/item/surgical_drapes(src) - new /obj/item/clothing/suit/straight_jacket(src) - new /obj/item/clothing/mask/muzzle(src) - -/obj/item/storage/backpack/duffelbag/syndie/c20rbundle - desc = "" - -/obj/item/storage/backpack/duffelbag/syndie/c20rbundle/PopulateContents() - new /obj/item/ammo_box/magazine/smgm45(src) - new /obj/item/ammo_box/magazine/smgm45(src) - new /obj/item/gun/ballistic/automatic/c20r(src) - new /obj/item/suppressor/specialoffer(src) - -/obj/item/storage/backpack/duffelbag/syndie/bulldogbundle - desc = "" - -/obj/item/storage/backpack/duffelbag/syndie/bulldogbundle/PopulateContents() - new /obj/item/gun/ballistic/shotgun/bulldog(src) - new /obj/item/ammo_box/magazine/m12g(src) - new /obj/item/ammo_box/magazine/m12g(src) - -/obj/item/storage/backpack/duffelbag/syndie/med/medicalbundle - desc = "" - -/obj/item/storage/backpack/duffelbag/syndie/med/medicalbundle/PopulateContents() - new /obj/item/clothing/shoes/magboots/syndie(src) - new /obj/item/storage/firstaid/tactical(src) - new /obj/item/gun/ballistic/automatic/l6_saw/toy(src) - new /obj/item/ammo_box/foambox/riot(src) - -/obj/item/storage/backpack/duffelbag/syndie/med/bioterrorbundle - desc = "" - -/obj/item/storage/backpack/duffelbag/syndie/med/bioterrorbundle/PopulateContents() - new /obj/item/reagent_containers/spray/chemsprayer/bioterror(src) - new /obj/item/gun/syringe/syndicate(src) - new /obj/item/gun/ballistic/automatic/c20r/toy(src) - new /obj/item/storage/box/syringes(src) - new /obj/item/ammo_box/foambox/riot(src) - if(prob(5)) - new /obj/item/reagent_containers/food/snacks/pizza/pineapple(src) - -/obj/item/storage/backpack/duffelbag/syndie/firestarter - desc = "" - -/obj/item/storage/backpack/duffelbag/syndie/firestarter/PopulateContents() - new /obj/item/clothing/under/syndicate/soviet(src) - new /obj/item/watertank/op(src) - new /obj/item/gun/ballistic/automatic/pistol/APS(src) - new /obj/item/ammo_box/magazine/pistolm9mm(src) - new /obj/item/ammo_box/magazine/pistolm9mm(src) - new /obj/item/reagent_containers/food/drinks/bottle/vodka/badminka(src) - new /obj/item/reagent_containers/hypospray/medipen/stimulants(src) - new /obj/item/grenade/syndieminibomb(src) - -// For ClownOps. -/obj/item/storage/backpack/duffelbag/clown/syndie/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - slowdown = 0 - STR.silent = TRUE - -/obj/item/storage/backpack/duffelbag/clown/syndie/PopulateContents() - new /obj/item/clothing/under/rank/civilian/clown(src) - new /obj/item/clothing/shoes/clown_shoes(src) - new /obj/item/clothing/mask/gas/clown_hat(src) - new /obj/item/bikehorn(src) - new /obj/item/implanter/sad_trombone(src) diff --git a/code/game/objects/items/storage/bag.dm b/code/game/objects/items/storage/bag.dm new file mode 100644 index 0000000000..f50fc6c3b7 --- /dev/null +++ b/code/game/objects/items/storage/bag.dm @@ -0,0 +1,93 @@ +/obj/item/storage/bag + slot_flags = ITEM_SLOT_BELT + +/obj/item/storage/bag/ComponentInitialize() + . = ..() + var/datum/component/storage/STR = GetComponent(/datum/component/storage) + STR.allow_quick_gather = TRUE + STR.allow_quick_empty = TRUE + STR.display_numerical_stacking = TRUE + STR.click_gather = TRUE + +/* + * Trays - Agouri + *///wip +/obj/item/storage/bag/tray + name = "tray" + icon = 'icons/obj/food/containers.dmi' + icon_state = "tray" + desc = "" + force = 5 + throwforce = 10 + throw_speed = 3 + throw_range = 5 + w_class = WEIGHT_CLASS_BULKY + flags_1 = CONDUCT_1 + +/obj/item/storage/bag/tray/psy + name = "tray" + icon = 'icons/obj/food/containers.dmi' + icon_state = "tray_psy" + desc = "" + +/obj/item/storage/bag/tray/ComponentInitialize() + . = ..() + var/datum/component/storage/STR = GetComponent(/datum/component/storage) + STR.insert_preposition = "on" + STR.max_w_class = WEIGHT_CLASS_NORMAL // changed to fit platters, take care if its abused + update_icon() + +/obj/item/storage/bag/tray/Moved() + . = ..() + update_icon() + +/obj/item/storage/bag/tray/attack(mob/living/M, mob/living/user) + ..() + // Drop all the things. All of them. + var/list/obj/item/oldContents = contents.Copy() + SEND_SIGNAL(src, COMSIG_TRY_STORAGE_QUICK_EMPTY) + + // Make each item scatter a bit + for (var/obj/item/I in oldContents) + if (I) + do_scatter(I) + + if(prob(50)) + playsound(M, 'sound/blank.ogg', 50, TRUE) + else + playsound(M, 'sound/blank.ogg', 50, TRUE) + + if(ishuman(M) || ismonkey(M)) + if(prob(10)) + M.Paralyze(40) + update_icon() + +/obj/item/storage/bag/tray/proc/do_scatter(obj/item/I) + if (I) + for (var/i in 1 to rand(1, 2)) + var/xOffset = rand(-16, 16) // Adjust the range as needed + var/yOffset = rand(-16, 16) // Adjust the range as needed + + I.x = xOffset + I.y = yOffset + + + sleep(rand(2, 4)) + +/obj/item/storage/bag/tray/update_icon() + cut_overlays() + for(var/obj/item/I in contents) + add_overlay(new /mutable_appearance(I)) + var/mutable_appearance/I_copy = new(I) + I_copy.plane = FLOAT_PLANE + 1 + I_copy.layer = FLOAT_LAYER + add_overlay(I_copy) + + +/obj/item/storage/bag/tray/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs) + . = ..() + update_icon() + +/obj/item/storage/bag/tray/Exited(atom/movable/gone, direction) + . = ..() + update_icon() diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm deleted file mode 100644 index 07ce90ddb1..0000000000 --- a/code/game/objects/items/storage/bags.dm +++ /dev/null @@ -1,423 +0,0 @@ -/* - * These absorb the functionality of the plant bag, ore satchel, etc. - * They use the use_to_pickup, quick_gather, and quick_empty functions - * that were already defined in weapon/storage, but which had been - * re-implemented in other classes. - * - * Contains: - * Trash Bag - * Mining Satchel - * Plant Bag - * Sheet Snatcher - * Book Bag - * Biowaste Bag - * - * -Sayu - */ - -// Generic non-item -/obj/item/storage/bag - slot_flags = ITEM_SLOT_BELT - -/obj/item/storage/bag/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.allow_quick_gather = TRUE - STR.allow_quick_empty = TRUE - STR.display_numerical_stacking = TRUE - STR.click_gather = TRUE - -// ----------------------------- -// Trash bag -// ----------------------------- -/obj/item/storage/bag/trash - name = "trash bag" - desc = "" - icon = 'icons/obj/janitor.dmi' - icon_state = "trashbag" - item_state = "trashbag" - lefthand_file = 'icons/mob/inhands/equipment/custodial_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/custodial_righthand.dmi' - - w_class = WEIGHT_CLASS_BULKY - var/insertable = TRUE - -/obj/item/storage/bag/trash/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_w_class = WEIGHT_CLASS_SMALL - STR.max_combined_w_class = 30 - STR.max_items = 30 - -/obj/item/storage/bag/trash/suicide_act(mob/user) - user.visible_message("[user] puts [src] over [user.p_their()] head and starts chomping at the insides! Disgusting!") - playsound(loc, 'sound/blank.ogg', 50, TRUE, -1) - return (TOXLOSS) - -/obj/item/storage/bag/trash/update_icon() - if(contents.len == 0) - icon_state = "[initial(icon_state)]" - else if(contents.len < 12) - icon_state = "[initial(icon_state)]1" - else if(contents.len < 21) - icon_state = "[initial(icon_state)]2" - else icon_state = "[initial(icon_state)]3" - -/obj/item/storage/bag/trash/cyborg - insertable = FALSE - -/obj/item/storage/bag/trash/proc/janicart_insert(mob/user, obj/structure/janitorialcart/J) - if(insertable) - J.put_in_cart(src, user) - J.mybag=src - J.update_icon() - else - to_chat(user, "I are unable to fit my [name] into the [J.name].") - return - -/obj/item/storage/bag/trash/bluespace - name = "trash bag of holding" - desc = "" - icon_state = "bluetrashbag" - item_flags = NO_MAT_REDEMPTION - -/obj/item/storage/bag/trash/bluespace/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_combined_w_class = 60 - STR.max_items = 60 - -/obj/item/storage/bag/trash/bluespace/cyborg - insertable = FALSE - -// ----------------------------- -// Mining Satchel -// ----------------------------- - -/obj/item/storage/bag/ore - name = "mining satchel" - desc = "" - icon = 'icons/obj/mining.dmi' - icon_state = "satchel" - slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_POCKET - w_class = WEIGHT_CLASS_NORMAL - component_type = /datum/component/storage/concrete/stack - var/spam_protection = FALSE //If this is TRUE, the holder won't receive any messages when they fail to pick up ore through crossing it - var/mob/listeningTo - -/obj/item/storage/bag/ore/ComponentInitialize() - . = ..() - AddComponent(/datum/component/rad_insulation, 0.01) //please datum mats no more cancer - var/datum/component/storage/concrete/stack/STR = GetComponent(/datum/component/storage/concrete/stack) - STR.allow_quick_empty = TRUE - STR.set_holdable(list(/obj/item/stack/ore)) - STR.max_w_class = WEIGHT_CLASS_HUGE - STR.max_combined_stack_amount = 50 - -/obj/item/storage/bag/ore/equipped(mob/user) - . = ..() - if(listeningTo == user) - return - if(listeningTo) - UnregisterSignal(listeningTo, COMSIG_MOVABLE_MOVED) - RegisterSignal(user, COMSIG_MOVABLE_MOVED, PROC_REF(Pickup_ores)) - listeningTo = user - -/obj/item/storage/bag/ore/dropped() - . = ..() - if(listeningTo) - UnregisterSignal(listeningTo, COMSIG_MOVABLE_MOVED) - listeningTo = null - -/obj/item/storage/bag/ore/proc/Pickup_ores(mob/living/user) - var/show_message = FALSE - var/turf/tile = user.loc - if (!isturf(tile)) - return - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - if(STR) - for(var/A in tile) - if (!is_type_in_typecache(A, STR.can_hold)) - continue - else if(SEND_SIGNAL(src, COMSIG_TRY_STORAGE_INSERT, A, user, TRUE)) - show_message = TRUE - else - if(!spam_protection) - to_chat(user, "My [name] is full and can't hold any more!") - spam_protection = TRUE - continue - if(show_message) - playsound(user, "rustle", 50, TRUE) - user.visible_message("[user] scoops up the ores beneath [user.p_them()].", \ - "I scoop up the ores beneath you with my [name].") - spam_protection = FALSE - -/obj/item/storage/bag/ore/cyborg - name = "cyborg mining satchel" - -/obj/item/storage/bag/ore/holding //miners, my messiah has arrived - name = "mining satchel of holding" - desc = "" - icon_state = "satchel_bspace" - -/obj/item/storage/bag/ore/holding/ComponentInitialize() - . = ..() - var/datum/component/storage/concrete/stack/STR = GetComponent(/datum/component/storage/concrete/stack) - STR.max_items = INFINITY - STR.max_combined_w_class = INFINITY - STR.max_combined_stack_amount = INFINITY - -// ----------------------------- -// Plant bag -// ----------------------------- - -/obj/item/storage/bag/plants - name = "plant bag" - icon = 'icons/obj/hydroponics/equipment.dmi' - icon_state = "plantbag" - w_class = WEIGHT_CLASS_TINY - resistance_flags = FLAMMABLE - -/obj/item/storage/bag/plants/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_w_class = WEIGHT_CLASS_NORMAL - STR.max_combined_w_class = 100 - STR.max_items = 100 - STR.set_holdable(list( - /obj/item/reagent_containers/food/snacks/grown, - /obj/item/seeds, - /obj/item/grown, - )) - -// ----------------------------- -// Sheet Snatcher -// ----------------------------- -// Because it stacks stacks, this doesn't operate normally. -// However, making it a storage/bag allows us to reuse existing code in some places. -Sayu - -/obj/item/storage/bag/sheetsnatcher - name = "sheet snatcher" - desc = "" - icon = 'icons/obj/mining.dmi' - icon_state = "sheetsnatcher" - - var/capacity = 300; //the number of sheets it can carry. - w_class = WEIGHT_CLASS_NORMAL - component_type = /datum/component/storage/concrete/stack - -/obj/item/storage/bag/sheetsnatcher/ComponentInitialize() - . = ..() - var/datum/component/storage/concrete/stack/STR = GetComponent(/datum/component/storage/concrete/stack) - STR.allow_quick_empty = TRUE - STR.set_holdable(list(/obj/item/stack/sheet), - list( - /obj/item/stack/sheet/mineral/sandstone, - /obj/item/stack/sheet/mineral/wood - )) - STR.max_combined_stack_amount = 300 - -// ----------------------------- -// Sheet Snatcher (Cyborg) -// ----------------------------- - -/obj/item/storage/bag/sheetsnatcher/borg - name = "sheet snatcher 9000" - desc = "" - capacity = 500//Borgs get more because >specialization - -/obj/item/storage/bag/sheetsnatcher/borg/ComponentInitialize() - . = ..() - var/datum/component/storage/concrete/stack/STR = GetComponent(/datum/component/storage/concrete/stack) - STR.max_combined_stack_amount = 500 - -// ----------------------------- -// Book bag -// ----------------------------- - -/obj/item/storage/bag/books - name = "book bag" - desc = "" - icon = 'icons/obj/library.dmi' - icon_state = "bookbag" - w_class = WEIGHT_CLASS_BULKY //Bigger than a book because physics - resistance_flags = FLAMMABLE - -/obj/item/storage/bag/books/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_w_class = WEIGHT_CLASS_NORMAL - STR.max_combined_w_class = 21 - STR.max_items = 7 - STR.display_numerical_stacking = FALSE - STR.set_holdable(list( - /obj/item/book, - /obj/item/storage/book, - )) - -/* - * Trays - Agouri - *///wip -/obj/item/storage/bag/tray - name = "tray" - icon = 'icons/obj/food/containers.dmi' - icon_state = "tray" - desc = "" - force = 5 - throwforce = 10 - throw_speed = 3 - throw_range = 5 - w_class = WEIGHT_CLASS_BULKY - flags_1 = CONDUCT_1 - custom_materials = list(/datum/material/iron=3000) - -/obj/item/storage/bag/tray/psy - name = "tray" - icon = 'icons/obj/food/containers.dmi' - icon_state = "tray_psy" - desc = "" - -/obj/item/storage/bag/tray/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.insert_preposition = "on" - STR.max_w_class = WEIGHT_CLASS_NORMAL // changed to fit platters, take care if its abused - update_icon() - -/obj/item/storage/bag/tray/Moved() - . = ..() - update_icon() - -/obj/item/storage/bag/tray/attack(mob/living/M, mob/living/user) - ..() - // Drop all the things. All of them. - var/list/obj/item/oldContents = contents.Copy() - SEND_SIGNAL(src, COMSIG_TRY_STORAGE_QUICK_EMPTY) - - // Make each item scatter a bit - for (var/obj/item/I in oldContents) - if (I) - do_scatter(I) - - if(prob(50)) - playsound(M, 'sound/blank.ogg', 50, TRUE) - else - playsound(M, 'sound/blank.ogg', 50, TRUE) - - if(ishuman(M) || ismonkey(M)) - if(prob(10)) - M.Paralyze(40) - update_icon() - -/obj/item/storage/bag/tray/proc/do_scatter(obj/item/I) - if (I) - for (var/i in 1 to rand(1, 2)) - var/xOffset = rand(-16, 16) // Adjust the range as needed - var/yOffset = rand(-16, 16) // Adjust the range as needed - - I.x = xOffset - I.y = yOffset - - - sleep(rand(2, 4)) - -/obj/item/storage/bag/tray/update_icon() - cut_overlays() - for(var/obj/item/I in contents) - add_overlay(new /mutable_appearance(I)) - var/mutable_appearance/I_copy = new(I) - I_copy.plane = FLOAT_PLANE + 1 - I_copy.layer = FLOAT_LAYER - add_overlay(I_copy) - - -/obj/item/storage/bag/tray/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs) - . = ..() - update_icon() - -/obj/item/storage/bag/tray/Exited(atom/movable/gone, direction) - . = ..() - update_icon() -/* - * Chemistry bag - */ - -/obj/item/storage/bag/chemistry - name = "chemistry bag" - icon = 'icons/obj/chemical.dmi' - icon_state = "bag" - desc = "" - w_class = WEIGHT_CLASS_TINY - resistance_flags = FLAMMABLE - -/obj/item/storage/bag/chemistry/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_combined_w_class = 200 - STR.max_items = 50 - STR.insert_preposition = "in" - STR.set_holdable(list( - /obj/item/reagent_containers/pill, - /obj/item/reagent_containers/glass/beaker, - /obj/item/reagent_containers/glass/bottle, - /obj/item/reagent_containers/glass/waterbottle, - /obj/item/reagent_containers/medigel, - /obj/item/reagent_containers/syringe, - /obj/item/reagent_containers/dropper, - /obj/item/reagent_containers/chem_pack - )) - -/* - * Biowaste bag (mostly for xenobiologists) - */ - -/obj/item/storage/bag/bio - name = "bio bag" - icon = 'icons/obj/chemical.dmi' - icon_state = "biobag" - desc = "" - w_class = WEIGHT_CLASS_TINY - resistance_flags = FLAMMABLE - -/obj/item/storage/bag/bio/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_combined_w_class = 200 - STR.max_items = 25 - STR.insert_preposition = "in" - STR.set_holdable(list( - /obj/item/reagent_containers/syringe, - /obj/item/reagent_containers/dropper, - /obj/item/reagent_containers/glass/beaker, - /obj/item/reagent_containers/glass/bottle, - /obj/item/reagent_containers/blood, - /obj/item/reagent_containers/hypospray/medipen, - /obj/item/reagent_containers/food/snacks/deadmouse, - /obj/item/reagent_containers/food/snacks/monkeycube, - /obj/item/organ, - /obj/item/bodypart - )) - -/* - * Construction bag (for engineering, holds stock parts and electronics) - */ - -/obj/item/storage/bag/construction - name = "construction bag" - icon = 'icons/obj/tools.dmi' - icon_state = "construction_bag" - desc = "" - w_class = WEIGHT_CLASS_TINY - resistance_flags = FLAMMABLE - -/obj/item/storage/bag/construction/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_combined_w_class = 100 - STR.max_items = 50 - STR.max_w_class = WEIGHT_CLASS_SMALL - STR.insert_preposition = "in" - STR.set_holdable(list( - /obj/item/stack/ore/bluespace_crystal, - /obj/item/reagent_containers/glass/beaker, - )) diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index 410fcdf081..bd7eaf0484 100644 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -27,596 +27,3 @@ /obj/item/storage/belt/Initialize() . = ..() update_icon() - -/obj/item/storage/belt/utility - name = "toolbelt" //Carn: utility belt is nicer, but it bamboozles the text parsing. - desc = "" - icon_state = "utilitybelt" - item_state = "utility" - content_overlays = TRUE - custom_price = 50 - drop_sound = 'sound/blank.ogg' - pickup_sound = 'sound/blank.ogg' - -/obj/item/storage/belt/utility/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_w_class = WEIGHT_CLASS_NORMAL - STR.max_combined_w_class = 21 - STR.set_holdable(list( - /obj/item/crowbar, - /obj/item/screwdriver, - /obj/item/weldingtool, - /obj/item/wirecutters, - /obj/item/wrench, - /obj/item/multitool, - /obj/item/flashlight, - /obj/item/geiger_counter, - /obj/item/extinguisher/mini, - /obj/item/clothing/gloves, - /obj/item/forcefield_projector, - /obj/item/lightreplacer, - )) - -/obj/item/storage/belt/utility/chief - name = "\improper Chief Engineer's toolbelt" //"the Chief Engineer's toolbelt", because "Chief Engineer's toolbelt" is not a proper noun - desc = "" - icon_state = "utilitybelt_ce" - item_state = "utility_ce" - -/obj/item/storage/belt/utility/chief/full/PopulateContents() - new /obj/item/screwdriver/power(src) - new /obj/item/crowbar/power(src) - new /obj/item/weldingtool/experimental(src)//This can be changed if this is too much - new /obj/item/multitool(src) - new /obj/item/extinguisher/mini(src) - //much roomier now that we've managed to remove two tools - -/obj/item/storage/belt/utility/full/PopulateContents() - new /obj/item/screwdriver(src) - new /obj/item/wrench(src) - new /obj/item/weldingtool(src) - new /obj/item/crowbar(src) - new /obj/item/wirecutters(src) - new /obj/item/multitool(src) - -/obj/item/storage/belt/utility/full/engi/PopulateContents() - new /obj/item/screwdriver(src) - new /obj/item/wrench(src) - new /obj/item/weldingtool/largetank(src) - new /obj/item/crowbar(src) - new /obj/item/wirecutters(src) - new /obj/item/multitool(src) - - -/obj/item/storage/belt/utility/atmostech/PopulateContents() - new /obj/item/screwdriver(src) - new /obj/item/wrench(src) - new /obj/item/weldingtool(src) - new /obj/item/crowbar(src) - new /obj/item/wirecutters(src) - new /obj/item/extinguisher/mini(src) - -/obj/item/storage/belt/medical - name = "medical belt" - desc = "" - icon_state = "medicalbelt" - item_state = "medical" - -/obj/item/storage/belt/medical/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_w_class = WEIGHT_CLASS_BULKY - STR.max_combined_w_class = 21 - STR.set_holdable(list( - /obj/item/dnainjector, - /obj/item/reagent_containers/dropper, - /obj/item/reagent_containers/glass/beaker, - /obj/item/reagent_containers/glass/bottle, - /obj/item/reagent_containers/pill, - /obj/item/reagent_containers/syringe, - /obj/item/reagent_containers/medigel, - /obj/item/lighter, - /obj/item/storage/fancy/cigarettes, - /obj/item/storage/pill_bottle, - /obj/item/stack/medical, - /obj/item/flashlight/pen, - /obj/item/extinguisher/mini, - /obj/item/reagent_containers/hypospray, - /obj/item/clothing/gloves/, - /obj/item/bikehorn/rubberducky, - /obj/item/clothing/mask/surgical, - /obj/item/clothing/mask/breath, - /obj/item/clothing/mask/breath/medical, - /obj/item/surgical_drapes, //for true paramedics - /obj/item/scalpel, - /obj/item/circular_saw, - /obj/item/surgicaldrill, - /obj/item/retractor, - /obj/item/cautery, - /obj/item/hemostat, - /obj/item/geiger_counter, - /obj/item/clothing/neck/stethoscope, - /obj/item/stamp, - /obj/item/clothing/glasses, - /obj/item/wrench/medical, - /obj/item/clothing/mask/muzzle, - /obj/item/storage/bag/chemistry, - /obj/item/storage/bag/bio, - /obj/item/reagent_containers/blood, - /obj/item/tank/internals/emergency_oxygen, - /obj/item/gun/syringe/syndicate, - /obj/item/implantcase, - /obj/item/implant, - /obj/item/implanter, - )) - -/obj/item/storage/belt/security - name = "security belt" - desc = "" - icon_state = "securitybelt" - item_state = "security"//Could likely use a better one. - content_overlays = TRUE - -/obj/item/storage/belt/security/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_items = 5 - STR.max_w_class = WEIGHT_CLASS_NORMAL - STR.set_holdable(list( - /obj/item/melee/classic_baton, - /obj/item/grenade, - /obj/item/reagent_containers/spray/pepper, - /obj/item/restraints/handcuffs, - /obj/item/clothing/glasses, - /obj/item/ammo_casing/shotgun, - /obj/item/ammo_box, - /obj/item/reagent_containers/food/snacks/donut, - /obj/item/kitchen/knife/combat, - /obj/item/flashlight/seclite, - /obj/item/melee/classic_baton/telescopic, - /obj/item/clothing/gloves, - /obj/item/restraints/legcuffs/bola, - )) - -/obj/item/storage/belt/security/full/PopulateContents() - new /obj/item/reagent_containers/spray/pepper(src) - new /obj/item/restraints/handcuffs(src) - new /obj/item/grenade/flashbang(src) - update_icon() - -/obj/item/storage/belt/security/webbing - name = "security webbing" - desc = "" - icon_state = "securitywebbing" - item_state = "securitywebbing" - content_overlays = FALSE - custom_premium_price = 800 - -/obj/item/storage/belt/security/webbing/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_items = 6 - -/obj/item/storage/belt/mining - name = "explorer's webbing" - desc = "" - icon_state = "explorer1" - item_state = "explorer1" - w_class = WEIGHT_CLASS_BULKY - -/obj/item/storage/belt/mining/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_items = 6 - STR.max_w_class = WEIGHT_CLASS_BULKY - STR.max_combined_w_class = 20 - STR.set_holdable(list( - /obj/item/crowbar, - /obj/item/screwdriver, - /obj/item/weldingtool, - /obj/item/wirecutters, - /obj/item/wrench, - /obj/item/multitool, - /obj/item/flashlight, - /obj/item/extinguisher/mini, - /obj/item/clothing/gloves, - /obj/item/stack/sheet/animalhide, - /obj/item/stack/sheet/sinew, - /obj/item/stack/sheet/bone, - /obj/item/lighter, - /obj/item/storage/fancy/cigarettes, - /obj/item/reagent_containers/food/drinks/bottle, - /obj/item/stack/medical, - /obj/item/kitchen/knife, - /obj/item/reagent_containers/hypospray, - /obj/item/gps, - /obj/item/storage/bag/ore, - /obj/item/reagent_containers/pill, - /obj/item/storage/pill_bottle, - /obj/item/stack/ore, - /obj/item/reagent_containers/food/drinks, - /obj/item/storage/bag/plants, - )) - -/obj/item/storage/belt/mining/alt - icon_state = "explorer2" - item_state = "explorer2" - -/obj/item/storage/belt/mining/primitive - name = "hunter's belt" - desc = "" - icon_state = "ebelt" - item_state = "ebelt" - -/obj/item/storage/belt/mining/primitive/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_items = 5 - -/obj/item/storage/belt/soulstone - name = "soul stone belt" - desc = "" - icon_state = "soulstonebelt" - item_state = "soulstonebelt" - -/obj/item/storage/belt/soulstone/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_items = 6 - STR.set_holdable(list( - /obj/item/soulstone - )) - -/obj/item/storage/belt/soulstone/full/PopulateContents() - for(var/i in 1 to 6) - new /obj/item/soulstone(src) - -/obj/item/storage/belt/soulstone/full/chappy/PopulateContents() - for(var/i in 1 to 6) - new /obj/item/soulstone/anybody/chaplain(src) - -/obj/item/storage/belt/champion - name = "championship belt" - desc = "" - icon_state = "championbelt" - item_state = "champion" - custom_materials = list(/datum/material/gold=400) - -/obj/item/storage/belt/champion/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_items = 1 - STR.set_holdable(list( - /obj/item/clothing/mask/luchador - )) - -/obj/item/storage/belt/military - name = "chest rig" - desc = "" - icon_state = "militarywebbing" - item_state = "militarywebbing" - resistance_flags = FIRE_PROOF - -/obj/item/storage/belt/military/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_w_class = WEIGHT_CLASS_SMALL - -/obj/item/storage/belt/military/snack - name = "tactical snack rig" - -/obj/item/storage/belt/military/snack/Initialize() - . = ..() -// var/sponsor = pick("DonkCo", "Waffle Co.", "Roffle Co.", "Gorlax Marauders", "Tiger Cooperative") -// desc = "" - -/obj/item/storage/belt/military/snack/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_items = 6 - STR.max_w_class = WEIGHT_CLASS_SMALL - STR.set_holdable(list( - /obj/item/reagent_containers/food/snacks, - /obj/item/reagent_containers/food/drinks - )) - - var/amount = 5 - var/rig_snacks - while(contents.len <= amount) - rig_snacks = pick(list( - /obj/item/reagent_containers/food/snacks/candy, - /obj/item/reagent_containers/food/drinks/dry_ramen, - /obj/item/reagent_containers/food/snacks/chips, - /obj/item/reagent_containers/food/snacks/sosjerky, - /obj/item/reagent_containers/food/snacks/syndicake, - /obj/item/reagent_containers/food/snacks/spacetwinkie, - /obj/item/reagent_containers/food/snacks/cheesiehonkers, - /obj/item/reagent_containers/food/snacks/nachos, - /obj/item/reagent_containers/food/snacks/cheesynachos, - /obj/item/reagent_containers/food/snacks/cubannachos, - /obj/item/reagent_containers/food/snacks/nugget, - /obj/item/reagent_containers/food/snacks/spaghetti/pastatomato, - /obj/item/reagent_containers/food/snacks/rofflewaffles, - /obj/item/reagent_containers/food/snacks/donkpocket, - /obj/item/reagent_containers/food/drinks/soda_cans/cola, - /obj/item/reagent_containers/food/drinks/soda_cans/space_mountain_wind, - /obj/item/reagent_containers/food/drinks/soda_cans/dr_gibb, - /obj/item/reagent_containers/food/drinks/soda_cans/starkist, - /obj/item/reagent_containers/food/drinks/soda_cans/space_up, - /obj/item/reagent_containers/food/drinks/soda_cans/pwr_game, - /obj/item/reagent_containers/food/drinks/soda_cans/lemon_lime, - /obj/item/reagent_containers/food/drinks/drinkingglass/filled/nuka_cola - )) - new rig_snacks(src) - -/obj/item/storage/belt/military/abductor - name = "agent belt" - desc = "" - icon = 'icons/obj/abductor.dmi' - icon_state = "belt" - item_state = "security" - -/obj/item/storage/belt/military/abductor/full/PopulateContents() - new /obj/item/screwdriver/abductor(src) - new /obj/item/wrench/abductor(src) - new /obj/item/weldingtool/abductor(src) - new /obj/item/crowbar/abductor(src) - new /obj/item/wirecutters/abductor(src) - -/obj/item/storage/belt/military/army - name = "army belt" - desc = "" - icon_state = "grenadebeltold" - item_state = "security" - -/obj/item/storage/belt/military/assault - name = "assault belt" - desc = "" - icon_state = "assaultbelt" - item_state = "security" - -/obj/item/storage/belt/military/assault/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_items = 6 - -/obj/item/storage/belt/grenade - name = "grenadier belt" - desc = "" - icon_state = "grenadebeltnew" - item_state = "security" - -/obj/item/storage/belt/grenade/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_items = 30 - STR.display_numerical_stacking = TRUE - STR.max_combined_w_class = 60 - STR.max_w_class = WEIGHT_CLASS_BULKY - STR.set_holdable(list( - /obj/item/grenade, - /obj/item/screwdriver, - /obj/item/lighter, - /obj/item/multitool, - /obj/item/reagent_containers/food/drinks/bottle/molotov, - )) - -/obj/item/storage/belt/grenade/full/PopulateContents() - var/static/items_inside = list( - /obj/item/grenade/flashbang = 1, - /obj/item/grenade/smokebomb = 4, - /obj/item/grenade/empgrenade = 1, - /obj/item/grenade/empgrenade = 1, - /obj/item/grenade/syndieminibomb/concussion/frag = 10, - /obj/item/grenade/gluon = 4, - /obj/item/grenade/syndieminibomb = 2, - /obj/item/screwdriver = 1, - /obj/item/multitool = 1) - generate_items_inside(items_inside,src) - - -/obj/item/storage/belt/wands - name = "wand belt" - desc = "" - icon_state = "soulstonebelt" - item_state = "soulstonebelt" - -/obj/item/storage/belt/wands/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_items = 6 - STR.set_holdable(list( - /obj/item/gun/magic/wand - )) - -/obj/item/storage/belt/wands/full/PopulateContents() - new /obj/item/gun/magic/wand/death(src) - new /obj/item/gun/magic/wand/resurrection(src) - new /obj/item/gun/magic/wand/polymorph(src) - new /obj/item/gun/magic/wand/teleport(src) - new /obj/item/gun/magic/wand/fireball(src) - - for(var/obj/item/gun/magic/wand/W in contents) //All wands in this pack come in the best possible condition - W.max_charges = initial(W.max_charges) - W.charges = W.max_charges - -/obj/item/storage/belt/janitor - name = "janibelt" - desc = "" - icon_state = "janibelt" - item_state = "janibelt" - -/obj/item/storage/belt/janitor/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_items = 6 - STR.max_w_class = WEIGHT_CLASS_BULKY // Set to this so the light replacer can fit. - STR.set_holdable(list( - /obj/item/lightreplacer, - /obj/item/flashlight, - /obj/item/reagent_containers/spray, - /obj/item/soap, - /obj/item/forcefield_projector, - /obj/item/key/janitor, - /obj/item/clothing/gloves, - /obj/item/melee/flyswatter, - /obj/item/paint/paint_remover - )) - -/obj/item/storage/belt/janitor/full/PopulateContents() - new /obj/item/lightreplacer(src) - new /obj/item/reagent_containers/spray/cleaner(src) - new /obj/item/soap/nanotrasen(src) - new /obj/item/melee/flyswatter(src) - -/obj/item/storage/belt/bandolier - name = "bandolier" - desc = "" - icon_state = "bandolier" - item_state = "bandolier" - -/obj/item/storage/belt/bandolier/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_items = 18 - STR.display_numerical_stacking = TRUE - STR.set_holdable(list( - /obj/item/ammo_casing/shotgun - )) - -/obj/item/storage/belt/holster - name = "shoulder holster" - desc = "" - icon_state = "holster" - item_state = "holster" - alternate_worn_layer = UNDER_ARMOR_LAYER - -/obj/item/storage/belt/holster/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_items = 3 - STR.max_w_class = WEIGHT_CLASS_NORMAL - STR.set_holdable(list( - /obj/item/gun/ballistic/automatic/pistol, - /obj/item/gun/ballistic/revolver, - /obj/item/ammo_box, - )) - -/obj/item/storage/belt/holster/full/PopulateContents() - var/static/items_inside = list( - /obj/item/gun/ballistic/revolver/detective = 1, - /obj/item/ammo_box/c38 = 2) - generate_items_inside(items_inside,src) - -/obj/item/storage/belt/fannypack - name = "fannypack" - desc = "" - icon_state = "fannypack_leather" - item_state = "fannypack_leather" - dying_key = DYE_REGISTRY_FANNYPACK - custom_price = 15 - -/obj/item/storage/belt/fannypack/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_items = 3 - STR.max_w_class = WEIGHT_CLASS_SMALL - -/obj/item/storage/belt/fannypack/black - name = "black fannypack" - icon_state = "fannypack_black" - item_state = "fannypack_black" - -/obj/item/storage/belt/fannypack/red - name = "red fannypack" - icon_state = "fannypack_red" - item_state = "fannypack_red" - -/obj/item/storage/belt/fannypack/purple - name = "purple fannypack" - icon_state = "fannypack_purple" - item_state = "fannypack_purple" - -/obj/item/storage/belt/fannypack/blue - name = "blue fannypack" - icon_state = "fannypack_blue" - item_state = "fannypack_blue" - -/obj/item/storage/belt/fannypack/orange - name = "orange fannypack" - icon_state = "fannypack_orange" - item_state = "fannypack_orange" - -/obj/item/storage/belt/fannypack/white - name = "white fannypack" - icon_state = "fannypack_white" - item_state = "fannypack_white" - -/obj/item/storage/belt/fannypack/green - name = "green fannypack" - icon_state = "fannypack_green" - item_state = "fannypack_green" - -/obj/item/storage/belt/fannypack/pink - name = "pink fannypack" - icon_state = "fannypack_pink" - item_state = "fannypack_pink" - -/obj/item/storage/belt/fannypack/cyan - name = "cyan fannypack" - icon_state = "fannypack_cyan" - item_state = "fannypack_cyan" - -/obj/item/storage/belt/fannypack/yellow - name = "yellow fannypack" - icon_state = "fannypack_yellow" - item_state = "fannypack_yellow" - -/obj/item/storage/belt/sabre - name = "sabre sheath" - desc = "" - icon_state = "sheath" - item_state = "sheath" - w_class = WEIGHT_CLASS_BULKY - -/obj/item/storage/belt/sabre/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_items = 1 - STR.rustle_sound = FALSE - STR.max_w_class = WEIGHT_CLASS_BULKY - STR.set_holdable(list( - /obj/item/melee/sabre - )) - -/obj/item/storage/belt/sabre/examine(mob/user) - . = ..() - if(length(contents)) - . += "Alt-click it to quickly draw the blade." - -/obj/item/storage/belt/sabre/AltClick(mob/user) - if(!iscarbon(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) - return - if(length(contents)) - var/obj/item/I = contents[1] - user.visible_message("[user] takes [I] out of [src].", "I take [I] out of [src].") - user.put_in_hands(I) - update_icon() - else - to_chat(user, "[src] is empty!") - -/obj/item/storage/belt/sabre/update_icon() - icon_state = "sheath" - item_state = "sheath" - if(contents.len) - icon_state += "-sabre" - item_state += "-sabre" - if(loc && isliving(loc)) - var/mob/living/L = loc - L.regenerate_icons() - ..() - -/obj/item/storage/belt/sabre/PopulateContents() - new /obj/item/melee/sabre(src) - update_icon() diff --git a/code/game/objects/items/storage/book.dm b/code/game/objects/items/storage/book.dm index b5dd5f2c28..c1c9edec4e 100644 --- a/code/game/objects/items/storage/book.dm +++ b/code/game/objects/items/storage/book.dm @@ -16,227 +16,3 @@ /obj/item/storage/book/attack_self(mob/user) to_chat(user, "The pages of [title] have been cut out!") - -GLOBAL_LIST_INIT(biblenames, list("Bible", "Quran", "Scrapbook", "Burning Bible", "Clown Bible", "Banana Bible", "Creeper Bible", "White Bible", "Holy Light", "The God Delusion", "Tome", "The King in Yellow", "Ithaqua", "Scientology", "Melted Bible", "Necronomicon","Insulationism")) -//If you get these two lists not matching in size, there will be runtimes and I will hurt you in ways you couldn't even begin to imagine -// if my bible has no custom itemstate, use one of the existing ones -GLOBAL_LIST_INIT(biblestates, list("bible", "koran", "scrapbook", "burning", "honk1", "honk2", "creeper", "white", "holylight", "atheist", "tome", "kingyellow", "ithaqua", "scientology", "melted", "necronomicon","insuls")) -GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "burning", "honk1", "honk2", "creeper", "white", "holylight", "atheist", "tome", "kingyellow", "ithaqua", "scientology", "melted", "necronomicon", "kingyellow")) - -/mob/proc/bible_check() //The bible, if held, might protect against certain things - var/obj/item/storage/book/bible/B = locate() in src - if(is_holding(B)) - return B - return 0 - -/obj/item/storage/book/bible - name = "bible" - desc = "" - icon = 'icons/obj/storage.dmi' - icon_state = "bible" - item_state = "bible" - lefthand_file = 'icons/mob/inhands/misc/books_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/books_righthand.dmi' - var/mob/affecting = null - var/deity_name = "Christ" - force_string = "holy" - -/obj/item/storage/book/bible/Initialize() - . = ..() - AddComponent(/datum/component/anti_magic, FALSE, TRUE) - -/obj/item/storage/book/bible/suicide_act(mob/user) - user.visible_message("[user] is offering [user.p_them()]self to [deity_name]! It looks like [user.p_theyre()] trying to commit suicide!") - return (BRUTELOSS) - -/obj/item/storage/book/bible/attack_self(mob/living/carbon/human/H) - if(!istype(H)) - return - if(!H.can_read(src)) - return FALSE - // If H is the Chaplain, we can set the icon_state of the bible (but only once!) - if(!GLOB.bible_icon_state && H.job == "Chaplain") - var/dat = "Pick Bible Style

Pick a bible style

" - for(var/i in 1 to GLOB.biblestates.len) - var/icon/bibleicon = icon('icons/obj/storage.dmi', GLOB.biblestates[i]) - var/nicename = GLOB.biblenames[i] - H << browse_rsc(bibleicon, nicename) - dat += {""} - dat += "
[nicename]
" - H << browse(dat, "window=editicon;can_close=0;can_minimize=0;size=250x650") - -/obj/item/storage/book/bible/Topic(href, href_list) - if(!usr.canUseTopic(src, BE_CLOSE)) - return - if(href_list["seticon"] && !GLOB.bible_icon_state) - var/iconi = text2num(href_list["seticon"]) - var/biblename = GLOB.biblenames[iconi] - icon_state = GLOB.biblestates[iconi] - item_state = GLOB.bibleitemstates[iconi] - - if(icon_state == "honk1" || icon_state == "honk2") - var/mob/living/carbon/human/H = usr - H.dna.add_mutation(CLOWNMUT) - H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/clown_hat(H), SLOT_WEAR_MASK) - if(icon_state == "insuls") - var/mob/living/carbon/human/H =usr - var/obj/item/clothing/gloves/color/fyellow/insuls = new - insuls.name = "insuls" - insuls.desc = "" - insuls.siemens_coefficient = 0.99999 - H.equip_to_slot(insuls, ITEM_SLOT_GLOVES) - GLOB.bible_icon_state = icon_state - GLOB.bible_item_state = item_state - - SSblackbox.record_feedback("text", "religion_book", 1, "[biblename]") - usr << browse(null, "window=editicon") - -/obj/item/storage/book/bible/proc/bless(mob/living/carbon/human/H, mob/living/user) - for(var/X in H.bodyparts) - var/obj/item/bodypart/BP = X - if(BP.status == BODYPART_ROBOTIC) - to_chat(user, "[src.deity_name] refuses to heal this metallic taint!") - return 0 - - var/heal_amt = 10 - var/list/hurt_limbs = H.get_damaged_bodyparts(1, 1, null, BODYPART_ORGANIC) - - if(hurt_limbs.len) - for(var/X in hurt_limbs) - var/obj/item/bodypart/affecting = X - if(affecting.heal_damage(heal_amt, heal_amt, null, BODYPART_ORGANIC)) - H.update_damage_overlays() - H.visible_message("[user] heals [H] with the power of [deity_name]!") - to_chat(H, "May the power of [deity_name] compel you to be healed!") - playsound(src.loc, "punch", 25, TRUE, -1) - SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "blessing", /datum/mood_event/blessing) - return 1 - -/obj/item/storage/book/bible/attack(mob/living/M, mob/living/carbon/human/user, heal_mode = TRUE) - - if (!user.IsAdvancedToolUser()) - to_chat(user, "I don't have the dexterity to do this!") - return - - if (HAS_TRAIT(user, TRAIT_CLUMSY) && prob(50)) - to_chat(user, "[src] slips out of my hand and hits my head.") - user.take_bodypart_damage(10) - user.Unconscious(400) - return - - var/chaplain = 0 - if(user.mind && (user.mind.isholy)) - chaplain = 1 - - if(!chaplain) - to_chat(user, "The book sizzles in my hands.") - user.take_bodypart_damage(0,10) - return - - if (!heal_mode) - return ..() - - var/smack = 1 - - if (M.stat != DEAD) - if(chaplain && user == M) - to_chat(user, "I can't heal yourself!") - return - - if(ishuman(M) && prob(60) && bless(M, user)) - smack = 0 - else if(iscarbon(M)) - var/mob/living/carbon/C = M - if(!istype(C.head, /obj/item/clothing/head/helmet)) - C.adjustOrganLoss(ORGAN_SLOT_BRAIN, 5, 60) - to_chat(C, "I feel dumber.") - - if(smack) - M.visible_message("[user] beats [M] over the head with [src]!", \ - "[user] beats [M] over the head with [src]!") - playsound(src.loc, "punch", 25, TRUE, -1) - log_combat(user, M, "attacked", src) - - else - M.visible_message("[user] smacks [M]'s lifeless corpse with [src].") - playsound(src.loc, "punch", 25, TRUE, -1) - -/obj/item/storage/book/bible/afterattack(atom/A, mob/user, proximity) - . = ..() - if(!proximity) - return - if(user.mind && (user.mind.isholy)) - if(A.reagents && A.reagents.has_reagent(/datum/reagent/water)) // blesses all the water in the holder - to_chat(user, "I bless [A].") - var/water2holy = A.reagents.get_reagent_amount(/datum/reagent/water) - A.reagents.del_reagent(/datum/reagent/water) - A.reagents.add_reagent(/datum/reagent/water/holywater,water2holy) - if(A.reagents && A.reagents.has_reagent(/datum/reagent/fuel/unholywater)) // yeah yeah, copy pasted code - sue me - to_chat(user, "I purify [A].") - var/unholy2clean = A.reagents.get_reagent_amount(/datum/reagent/fuel/unholywater) - A.reagents.del_reagent(/datum/reagent/fuel/unholywater) - A.reagents.add_reagent(/datum/reagent/water/holywater,unholy2clean) - if(istype(A, /obj/item/storage/book/bible) && !istype(A, /obj/item/storage/book/bible/syndicate)) - to_chat(user, "I purify [A], conforming it to my belief.") - var/obj/item/storage/book/bible/B = A - B.name = name - B.icon_state = icon_state - B.item_state = item_state - - else if(istype(A, /obj/item/soulstone)) - var/obj/item/soulstone/SS = A - if(SS.purified) - return - to_chat(user, "I begin to exorcise [SS].") - playsound(src,'sound/blank.ogg',40,TRUE) - if(do_after(user, 40, target = SS)) - playsound(src,'sound/blank.ogg',60,TRUE) - SS.usability = TRUE - SS.purified = TRUE - SS.icon_state = "purified_soulstone" - for(var/mob/M in SS.contents) - if(M.mind) - SS.icon_state = "purified_soulstone2" - for(var/mob/living/simple_animal/shade/EX in SS) - EX.icon_state = "ghost1" - EX.name = "Purified [initial(EX.name)]" - user.visible_message("[user] has purified [SS]!") - -/obj/item/storage/book/bible/booze - desc = "" - -/obj/item/storage/book/bible/booze/PopulateContents() - new /obj/item/reagent_containers/food/drinks/bottle/whiskey(src) - -/obj/item/storage/book/bible/syndicate - icon_state ="ebook" - deity_name = "The Syndicate" - throw_speed = 2 - throwforce = 18 - throw_range = 7 - force = 18 - hitsound = 'sound/blank.ogg' - damtype = BURN - name = "Syndicate Tome" - attack_verb = list("attacked", "burned", "blessed", "damned", "scorched") - var/uses = 1 - -/obj/item/storage/book/bible/syndicate/attack_self(mob/living/carbon/human/H) - if (uses) - H.mind.isholy = TRUE - uses -= 1 - to_chat(H, "I try to open the book AND IT BITES YOU!") - playsound(src.loc, 'sound/blank.ogg', 50, TRUE) - H.apply_damage(5, BRUTE, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)) - to_chat(H, "My name appears on the inside cover, in blood.") - var/ownername = H.real_name - desc += "The name [ownername] is written in blood inside the cover." - -/obj/item/storage/book/bible/syndicate/attack(mob/living/M, mob/living/carbon/human/user, heal_mode = TRUE) - if (user.used_intent.type == INTENT_HELP) - return ..() - else - return ..(M,user,heal_mode = FALSE) - -/obj/item/storage/book/bible/syndicate/add_blood_DNA(list/blood_dna) - return FALSE diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm deleted file mode 100644 index e6652152c0..0000000000 --- a/code/game/objects/items/storage/boxes.dm +++ /dev/null @@ -1,811 +0,0 @@ -/* - * Everything derived from the common cardboard box. - * Basically everything except the original is a kit (starts full). - * - * Contains: - * Empty box, starter boxes (survival/engineer), - * Latex glove and sterile mask boxes, - * Syringe, beaker, dna injector boxes, - * Blanks, flashbangs, and EMP grenade boxes, - * Tracking and chemical implant boxes, - * Prescription glasses and drinking glass boxes, - * Condiment bottle and silly cup boxes, - * Donkpocket and monkeycube boxes, - * ID and security PDA cart boxes, - * Handcuff, mousetrap, and pillbottle boxes, - * Snap-pops and matchboxes, - * Replacement light boxes. - * Action Figure Boxes - * Various paper bags. - * - * For syndicate call-ins see uplink_kits.dm - */ - -/obj/item/storage/box - name = "box" - desc = "" - icon_state = "box" - item_state = "syringe_kit" - lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' - resistance_flags = FLAMMABLE - drop_sound = 'sound/items/matchboxdrop.ogg' - pickup_sound = 'sound/blank.ogg' - var/foldable - var/illustration = "writing" - -/obj/item/storage/box/Initialize(mapload) - . = ..() - update_icon() - -/obj/item/storage/box/suicide_act(mob/living/carbon/user) - var/obj/item/bodypart/head/myhead = user.get_bodypart(BODY_ZONE_HEAD) - if(myhead) - user.visible_message("[user] puts [user.p_their()] head into \the [src], and begins closing it! It looks like [user.p_theyre()] trying to commit suicide!") - myhead.dismember() - myhead.forceMove(src)//force your enemies to kill themselves with your head collection box! - playsound(user, "desceration-01.ogg", 50, TRUE, -1) - return BRUTELOSS - user.visible_message("[user] beating [user.p_them()]self with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!") - return BRUTELOSS - -/obj/item/storage/box/update_icon() - . = ..() - if(illustration) - cut_overlays() - add_overlay(illustration) - -/obj/item/storage/box/attack_self(mob/user) - ..() - - if(!foldable) - return - if(contents.len) - to_chat(user, "I can't fold this box with items still inside!") - return - if(!ispath(foldable)) - return - - to_chat(user, "I fold [src] flat.") - var/obj/item/I = new foldable - qdel(src) - user.put_in_hands(I) - -//Mime spell boxes - -/obj/item/storage/box/mime - name = "invisible box" - desc = "" - foldable = null - icon_state = "box" - item_state = null - alpha = 0 - -/obj/item/storage/box/mime/attack_hand(mob/user) - ..() - if(user.mind.miming) - alpha = 255 - -/obj/item/storage/box/mime/Moved(oldLoc, dir) - if (iscarbon(oldLoc)) - alpha = 0 - ..() - - - -// Ordinary survival box -/obj/item/storage/box/survival - var/mask_type = /obj/item/clothing/mask/breath - var/internal_type = /obj/item/tank/internals/emergency_oxygen - var/medipen_type = /obj/item/reagent_containers/hypospray/medipen - -/obj/item/storage/box/survival/PopulateContents() - new mask_type(src) - if(!isnull(medipen_type)) - new medipen_type(src) - - if(!isplasmaman(loc)) - new internal_type(src) - else - new /obj/item/tank/internals/plasmaman/belt(src) - - -/obj/item/storage/box/gloves - name = "box of latex gloves" - desc = "" - illustration = "latex" - -/obj/item/storage/box/gloves/PopulateContents() - for(var/i in 1 to 7) - new /obj/item/clothing/gloves/color/latex(src) - -/obj/item/storage/box/masks - name = "box of sterile masks" - desc = "" - illustration = "sterile" - -/obj/item/storage/box/masks/PopulateContents() - for(var/i in 1 to 7) - new /obj/item/clothing/mask/surgical(src) - -/obj/item/storage/box/syringes - name = "box of syringes" - desc = "" - illustration = "syringe" - -/obj/item/storage/box/syringes/PopulateContents() - for(var/i in 1 to 7) - new /obj/item/reagent_containers/syringe(src) - -/obj/item/storage/box/syringes/variety - name = "syringe variety box" - -/obj/item/storage/box/syringes/variety/PopulateContents() - new /obj/item/reagent_containers/syringe(src) - new /obj/item/reagent_containers/syringe/lethal(src) - new /obj/item/reagent_containers/syringe/noreact(src) - new /obj/item/reagent_containers/syringe/piercing(src) - new /obj/item/reagent_containers/syringe/bluespace(src) - -/obj/item/storage/box/medipens - name = "box of medipens" - desc = "" - illustration = "syringe" - -/obj/item/storage/box/medipens/PopulateContents() - for(var/i in 1 to 7) - new /obj/item/reagent_containers/hypospray/medipen(src) - -/obj/item/storage/box/medipens/utility - name = "stimpack value kit" - desc = "" - illustration = "syringe" - -/obj/item/storage/box/medipens/utility/PopulateContents() - ..() // includes regular medipens. - for(var/i in 1 to 5) - new /obj/item/reagent_containers/hypospray/medipen/stimpack(src) - -/obj/item/storage/box/beakers - name = "box of beakers" - illustration = "beaker" - -/obj/item/storage/box/beakers/PopulateContents() - for(var/i in 1 to 7) - new /obj/item/reagent_containers/glass/beaker( src ) - -/obj/item/storage/box/beakers/bluespace - name = "box of bluespace beakers" - illustration = "beaker" - -/obj/item/storage/box/beakers/bluespace/PopulateContents() - for(var/i in 1 to 7) - new /obj/item/reagent_containers/glass/beaker/bluespace(src) - -/obj/item/storage/box/beakers/variety - name = "beaker variety box" - -/obj/item/storage/box/beakers/variety/PopulateContents() - new /obj/item/reagent_containers/glass/beaker(src) - new /obj/item/reagent_containers/glass/beaker/large(src) - new /obj/item/reagent_containers/glass/beaker/plastic(src) - new /obj/item/reagent_containers/glass/beaker/meta(src) - new /obj/item/reagent_containers/glass/beaker/noreact(src) - new /obj/item/reagent_containers/glass/beaker/bluespace(src) - -/obj/item/storage/box/medigels - name = "box of medical gels" - desc = "" - -/obj/item/storage/box/medigels/PopulateContents() - for(var/i in 1 to 7) - new /obj/item/reagent_containers/medigel( src ) - -/obj/item/storage/box/injectors - name = "box of DNA injectors" - desc = "" - -/obj/item/storage/box/injectors/PopulateContents() - var/static/items_inside = list( - /obj/item/dnainjector/h2m = 3, - /obj/item/dnainjector/m2h = 3) - generate_items_inside(items_inside,src) - -/obj/item/storage/box/flashbangs - name = "box of flashbangs (WARNING)" - desc = "" - icon_state = "secbox" - illustration = "flashbang" - -/obj/item/storage/box/flashbangs/PopulateContents() - for(var/i in 1 to 7) - new /obj/item/grenade/flashbang(src) - -/obj/item/storage/box/emps - name = "box of emp grenades" - desc = "" - illustration = "flashbang" - -/obj/item/storage/box/emps/PopulateContents() - for(var/i in 1 to 5) - new /obj/item/grenade/empgrenade(src) - -/obj/item/storage/box/trackimp - name = "boxed tracking implant kit" - desc = "" - illustration = "implant" - -/obj/item/storage/box/trackimp/PopulateContents() - var/static/items_inside = list( - /obj/item/implantcase/tracking = 4, - /obj/item/implanter = 1, - /obj/item/implantpad = 1) - generate_items_inside(items_inside,src) - -/obj/item/storage/box/minertracker - name = "boxed tracking implant kit" - desc = "" - illustration = "implant" - -/obj/item/storage/box/minertracker/PopulateContents() - var/static/items_inside = list( - /obj/item/implantcase/tracking = 3, - /obj/item/implanter = 1, - /obj/item/implantpad = 1) - generate_items_inside(items_inside,src) - -/obj/item/storage/box/chemimp - name = "boxed chemical implant kit" - desc = "" - illustration = "implant" - -/obj/item/storage/box/chemimp/PopulateContents() - var/static/items_inside = list( - /obj/item/implantcase/chem = 5, - /obj/item/implanter = 1, - /obj/item/implantpad = 1) - generate_items_inside(items_inside,src) - -/obj/item/storage/box/exileimp - name = "boxed exile implant kit" - desc = "" - illustration = "implant" - -/obj/item/storage/box/exileimp/PopulateContents() - var/static/items_inside = list( - /obj/item/implantcase/exile = 5, - /obj/item/implanter = 1) - generate_items_inside(items_inside,src) - -/obj/item/storage/box/bodybags - name = "body bags" - desc = "" - illustration = "bodybags" - -/obj/item/storage/box/bodybags/PopulateContents() - ..() - for(var/i in 1 to 7) - new /obj/item/bodybag(src) - -/obj/item/storage/box/rxglasses - name = "box of prescription glasses" - desc = "" - illustration = "glasses" - -/obj/item/storage/box/rxglasses/PopulateContents() - for(var/i in 1 to 7) - new /obj/item/clothing/glasses/regular(src) - -/obj/item/storage/box/drinkingglasses - name = "box of drinking glasses" - desc = "" - -/obj/item/storage/box/drinkingglasses/PopulateContents() - for(var/i in 1 to 6) - new /obj/item/reagent_containers/food/drinks/drinkingglass(src) - -/obj/item/storage/box/condimentbottles - name = "box of condiment bottles" - desc = "" - -/obj/item/storage/box/condimentbottles/PopulateContents() - for(var/i in 1 to 6) - new /obj/item/reagent_containers/food/condiment(src) - -/obj/item/storage/box/cups - name = "box of paper cups" - desc = "" - -/obj/item/storage/box/cups/PopulateContents() - for(var/i in 1 to 7) - new /obj/item/reagent_containers/food/drinks/sillycup( src ) - -/obj/item/storage/box/donkpockets - name = "box of donk-pockets" - desc = "" - icon_state = "donkpocketbox" - illustration=null - -/obj/item/storage/box/donkpockets/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.set_holdable(list(/obj/item/reagent_containers/food/snacks/donkpocket)) - -/obj/item/storage/box/donkpockets/PopulateContents() - for(var/i in 1 to 6) - new /obj/item/reagent_containers/food/snacks/donkpocket(src) - -/obj/item/storage/box/monkeycubes - name = "monkey cube box" - desc = "" - icon_state = "monkeycubebox" - illustration = null - var/cube_type = /obj/item/reagent_containers/food/snacks/monkeycube - -/obj/item/storage/box/monkeycubes/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_items = 7 - STR.set_holdable(list(/obj/item/reagent_containers/food/snacks/monkeycube)) - -/obj/item/storage/box/monkeycubes/PopulateContents() - for(var/i in 1 to 5) - new cube_type(src) - -/obj/item/storage/box/monkeycubes/syndicate - desc = "" - cube_type = /obj/item/reagent_containers/food/snacks/monkeycube/syndicate - -/obj/item/storage/box/gorillacubes - name = "gorilla cube box" - desc = "" - icon_state = "monkeycubebox" - illustration = null - -/obj/item/storage/box/gorillacubes/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_items = 3 - STR.set_holdable(list(/obj/item/reagent_containers/food/snacks/monkeycube)) - -/obj/item/storage/box/gorillacubes/PopulateContents() - for(var/i in 1 to 3) - new /obj/item/reagent_containers/food/snacks/monkeycube/gorilla(src) - - -/obj/item/storage/box/firingpins - name = "box of standard firing pins" - desc = "" - illustration = "id" - -/obj/item/storage/box/firingpins/PopulateContents() - for(var/i in 1 to 5) - new /obj/item/firing_pin(src) - - -/obj/item/storage/box/handcuffs - name = "box of spare handcuffs" - desc = "" - icon_state = "secbox" - illustration = "handcuff" - -/obj/item/storage/box/handcuffs/PopulateContents() - for(var/i in 1 to 7) - new /obj/item/restraints/handcuffs(src) - -/obj/item/storage/box/zipties - name = "box of spare zipties" - desc = "" - icon_state = "secbox" - illustration = "handcuff" - -/obj/item/storage/box/zipties/PopulateContents() - for(var/i in 1 to 7) - new /obj/item/restraints/handcuffs/cable/zipties(src) - -/obj/item/storage/box/alienhandcuffs - name = "box of spare handcuffs" - desc = "" - icon_state = "alienbox" - illustration = "handcuff" - -/obj/item/storage/box/alienhandcuffs/PopulateContents() - for(var/i in 1 to 7) - new /obj/item/restraints/handcuffs/alien(src) - -/obj/item/storage/box/fakesyndiesuit - name = "boxed space suit and helmet" - desc = "" - icon_state = "syndiebox" - -/obj/item/storage/box/fakesyndiesuit/PopulateContents() - new /obj/item/clothing/head/syndicatefake(src) - new /obj/item/clothing/suit/syndicatefake(src) - -/obj/item/storage/box/pillbottles - name = "box of pill bottles" - desc = "" - illustration = "pillbox" - -/obj/item/storage/box/pillbottles/PopulateContents() - for(var/i in 1 to 7) - new /obj/item/storage/pill_bottle(src) - -/obj/item/storage/box/snappops - name = "snap pop box" - desc = "" - icon = 'icons/obj/toy.dmi' - icon_state = "spbox" - -/obj/item/storage/box/snappops/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.set_holdable(list(/obj/item/toy/snappop)) - STR.max_items = 8 - -/obj/item/storage/box/snappops/PopulateContents() - SEND_SIGNAL(src, COMSIG_TRY_STORAGE_FILL_TYPE, /obj/item/toy/snappop) - -/obj/item/storage/box/matches - name = "matchbox" - desc = "" - icon = 'icons/obj/cigarettes.dmi' - icon_state = "matchbox" - item_state = "zippo" - w_class = WEIGHT_CLASS_TINY - slot_flags = ITEM_SLOT_BELT - foldable = FALSE - -/obj/item/storage/box/matches/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_items = 10 - STR.set_holdable(list(/obj/item/match)) - -/obj/item/storage/box/matches/PopulateContents() - SEND_SIGNAL(src, COMSIG_TRY_STORAGE_FILL_TYPE, /obj/item/match) - -/obj/item/storage/box/matches/attackby(obj/item/match/W as obj, mob/user as mob, params) - if(istype(W, /obj/item/match)) - if(prob(30)) - W.matchignite() - else - playsound(src, "sound/items/match_fail.ogg", 100, FALSE) - -/obj/item/storage/box/lights - name = "box of replacement bulbs" - icon = 'icons/obj/storage.dmi' - illustration = "light" - desc = "" - item_state = "syringe_kit" - lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' - foldable = /obj/item/stack/sheet/cardboard //BubbleWrap - -/obj/item/storage/box/lights/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_items = 21 - STR.set_holdable(list(/obj/item/light/tube, /obj/item/light/bulb)) - STR.max_combined_w_class = 21 - STR.click_gather = FALSE //temp workaround to re-enable filling the light replacer with the box - -/obj/item/storage/box/lights/bulbs/PopulateContents() - for(var/i in 1 to 21) - new /obj/item/light/bulb(src) - -/obj/item/storage/box/lights/tubes - name = "box of replacement tubes" - illustration = "lighttube" - -/obj/item/storage/box/lights/tubes/PopulateContents() - for(var/i in 1 to 21) - new /obj/item/light/tube(src) - -/obj/item/storage/box/lights/mixed - name = "box of replacement lights" - illustration = "lightmixed" - -/obj/item/storage/box/lights/mixed/PopulateContents() - for(var/i in 1 to 14) - new /obj/item/light/tube(src) - for(var/i in 1 to 7) - new /obj/item/light/bulb(src) - - -/obj/item/storage/box/deputy - name = "box of deputy armbands" - desc = "" - -/obj/item/storage/box/deputy/PopulateContents() - for(var/i in 1 to 7) - new /obj/item/clothing/accessory/armband/deputy(src) - -/obj/item/storage/box/hug - name = "box of hugs" - desc = "" - icon_state = "hugbox" - illustration = "heart" - foldable = null - -/obj/item/storage/box/hug/suicide_act(mob/user) - user.visible_message("[user] clamps the box of hugs on [user.p_their()] jugular! Guess it wasn't such a hugbox after all..") - return (BRUTELOSS) - -/obj/item/storage/box/hug/attack_self(mob/user) - ..() - user.changeNext_move(CLICK_CD_MELEE) - playsound(loc, "rustle", 50, TRUE, -5) - user.visible_message("[user] hugs \the [src].","I hug \the [src].") - - -////// -/obj/item/storage/box/hug/medical/PopulateContents() - new /obj/item/stack/medical/bruise_pack(src) - new /obj/item/stack/medical/ointment(src) - new /obj/item/reagent_containers/hypospray/medipen(src) - -// Clown survival box -/obj/item/storage/box/hug/survival/PopulateContents() - new /obj/item/clothing/mask/breath(src) - new /obj/item/reagent_containers/hypospray/medipen(src) - - if(!isplasmaman(loc)) - new /obj/item/tank/internals/emergency_oxygen(src) - else - new /obj/item/tank/internals/plasmaman/belt(src) - -/obj/item/storage/box/rubbershot - name = "box of rubber shots" - desc = "" - icon_state = "rubbershot_box" - illustration = null - -/obj/item/storage/box/rubbershot/PopulateContents() - for(var/i in 1 to 7) - new /obj/item/ammo_casing/shotgun/rubbershot(src) - -/obj/item/storage/box/lethalshot - name = "box of lethal shotgun shots" - desc = "" - icon_state = "lethalshot_box" - illustration = null - -/obj/item/storage/box/lethalshot/PopulateContents() - for(var/i in 1 to 7) - new /obj/item/ammo_casing/shotgun/buckshot(src) - -/obj/item/storage/box/beanbag - name = "box of beanbags" - desc = "" - icon_state = "rubbershot_box" - illustration = null - -/obj/item/storage/box/beanbag/PopulateContents() - for(var/i in 1 to 6) - new /obj/item/ammo_casing/shotgun/beanbag(src) - -/obj/item/storage/box/actionfigure - name = "box of action figures" - desc = "" - icon_state = "box" - -/obj/item/storage/box/actionfigure/PopulateContents() - for(var/i in 1 to 4) - var/randomFigure = pick(subtypesof(/obj/item/toy/figure)) - new randomFigure(src) - -#define NODESIGN "None" -#define NANOTRASEN "NanotrasenStandard" -#define SYNDI "SyndiSnacks" -#define HEART "Heart" -#define SMILEY "SmileyFace" - -/obj/item/storage/box/papersack - name = "paper sack" - desc = "" - icon_state = "paperbag_None" - item_state = "paperbag_None" - resistance_flags = FLAMMABLE - foldable = null - var/design = NODESIGN - -/obj/item/storage/box/papersack/update_icon() - if(contents.len == 0) - icon_state = "[item_state]" - else icon_state = "[item_state]_closed" - -/obj/item/storage/box/papersack/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/pen)) - //if a pen is used on the sack, dialogue to change its design appears - if(contents.len) - to_chat(user, "I can't modify [src] with items still inside!") - return - var/list/designs = list(NODESIGN, NANOTRASEN, SYNDI, HEART, SMILEY, "Cancel") - var/switchDesign = input("Select a Design:", "Paper Sack Design", designs[1]) in sortList(designs) - if(get_dist(usr, src) > 1) - to_chat(usr, "I have moved too far away!") - return - var/choice = designs.Find(switchDesign) - if(design == designs[choice] || designs[choice] == "Cancel") - return 0 - to_chat(usr, "I make some modifications to [src] using your pen.") - design = designs[choice] - icon_state = "paperbag_[design]" - item_state = "paperbag_[design]" - switch(designs[choice]) - if(NODESIGN) - desc = "" - if(NANOTRASEN) - desc = "" - if(SYNDI) - desc = "" - if(HEART) - desc = "" - if(SMILEY) - desc = "" - return 0 - else if(W.get_sharpness()) - if(!contents.len) - if(item_state == "paperbag_None") - user.show_message("I cut eyeholes into [src].", MSG_VISUAL) - new /obj/item/clothing/head/papersack(user.loc) - qdel(src) - return 0 - else if(item_state == "paperbag_SmileyFace") - user.show_message("I cut eyeholes into [src] and modify the design.", MSG_VISUAL) - new /obj/item/clothing/head/papersack/smiley(user.loc) - qdel(src) - return 0 - return ..() - -#undef NODESIGN -#undef NANOTRASEN -#undef SYNDI -#undef HEART -#undef SMILEY - -/obj/item/storage/box/ingredients //This box is for the randomely chosen version the chef spawns with, it shouldn't actually exist. - name = "ingredients box" - illustration = "fruit" - var/theme_name - -/obj/item/storage/box/ingredients/Initialize() - . = ..() - if(theme_name) - name = "[name] ([theme_name])" - desc = "" - item_state = "syringe_kit" - -/obj/item/storage/box/ingredients/wildcard - theme_name = "wildcard" - -/obj/item/storage/box/ingredients/wildcard/PopulateContents() - for(var/i in 1 to 7) - var/randomFood = pick( - /obj/item/reagent_containers/food/snacks/chocolatebar, - /obj/item/reagent_containers/food/drinks/bottle/wine) - new randomFood(src) - -/obj/item/storage/box/ingredients/fiesta - theme_name = "fiesta" - -/obj/item/storage/box/ingredients/fiesta/PopulateContents() - new /obj/item/reagent_containers/food/snacks/tortilla(src) - for(var/i in 1 to 2) - new /obj/item/reagent_containers/food/snacks/chocolatebar(src) - - -/obj/item/storage/box/ingredients/italian - theme_name = "italian" - -/obj/item/storage/box/ingredients/italian/PopulateContents() - for(var/i in 1 to 3) - new /obj/item/reagent_containers/food/snacks/chocolatebar(src) - new /obj/item/reagent_containers/food/snacks/faggot(src) - new /obj/item/reagent_containers/food/drinks/bottle/wine(src) - -/obj/item/storage/box/ingredients/vegetarian - theme_name = "vegetarian" - -/obj/item/storage/box/ingredients/vegetarian/PopulateContents() - for(var/i in 1 to 2) - new /obj/item/reagent_containers/food/snacks/chocolatebar(src) - - -/obj/item/storage/box/ingredients/american - theme_name = "american" - -/obj/item/storage/box/ingredients/american/PopulateContents() - new /obj/item/reagent_containers/food/snacks/faggot(src) - -/obj/item/storage/box/ingredients/fruity - theme_name = "fruity" - -/obj/item/storage/box/ingredients/fruity/PopulateContents() - for(var/i in 1 to 2) - new /obj/item/reagent_containers/food/snacks/chocolatebar(src) - - - -/obj/item/storage/box/ingredients/sweets - theme_name = "sweets" - -/obj/item/storage/box/ingredients/sweets/PopulateContents() - new /obj/item/reagent_containers/food/snacks/chocolatebar(src) - -/obj/item/storage/box/ingredients/delights - theme_name = "delights" - -/obj/item/storage/box/ingredients/delights/PopulateContents() - new /obj/item/reagent_containers/food/snacks/chocolatebar(src) - -/obj/item/storage/box/ingredients/carnivore - theme_name = "carnivore" - -/obj/item/storage/box/ingredients/carnivore/PopulateContents() - new /obj/item/reagent_containers/food/snacks/faggot(src) - -/obj/item/storage/box/ingredients/exotic - theme_name = "exotic" - -/obj/item/storage/box/ingredients/exotic/PopulateContents() - new /obj/item/reagent_containers/food/snacks/chocolatebar(src) - -/obj/item/storage/box/silver_sulf - name = "box of silver sulfadiazine patches" - desc = "" - -/obj/item/storage/box/silver_sulf/PopulateContents() - for(var/i in 1 to 7) - new /obj/item/reagent_containers/pill/patch/aiuri(src) - -/obj/item/storage/box/fountainpens - name = "box of fountain pens" - -/obj/item/storage/box/fountainpens/PopulateContents() - for(var/i in 1 to 7) - new /obj/item/pen/fountain(src) - -/obj/item/storage/box/material - name = "box of materials" - illustration = "implant" - -/obj/item/storage/box/material/PopulateContents() //less uranium because radioactive - var/static/items_inside = list( - /obj/item/stack/sheet/metal/fifty=1,\ - /obj/item/stack/sheet/glass/fifty=1,\ - /obj/item/stack/sheet/rglass=50,\ - /obj/item/stack/sheet/plasmaglass=50,\ - /obj/item/stack/sheet/titaniumglass=50,\ - /obj/item/stack/sheet/plastitaniumglass=50,\ - /obj/item/stack/sheet/plasteel=50,\ - /obj/item/stack/sheet/mineral/plastitanium=50,\ - /obj/item/stack/sheet/mineral/titanium=50,\ - /obj/item/stack/sheet/mineral/gold=50,\ - /obj/item/stack/sheet/mineral/silver=50,\ - /obj/item/stack/sheet/mineral/plasma=50,\ - /obj/item/stack/sheet/mineral/uranium=20,\ - /obj/item/stack/sheet/mineral/diamond=50,\ - /obj/item/stack/sheet/bluespace_crystal=50,\ - /obj/item/stack/sheet/mineral/bananium=50,\ - /obj/item/stack/sheet/mineral/wood=50,\ - /obj/item/stack/sheet/plastic/fifty=1, - ) - generate_items_inside(items_inside,src) - -/obj/item/storage/box/debugtools - name = "box of debug tools" - icon_state = "syndiebox" - -/obj/item/storage/box/debugtools/PopulateContents() - var/static/items_inside = list( - /obj/item/flashlight/emp/debug=1,\ - /obj/item/geiger_counter=1,\ - /obj/item/card/emag=1,\ - /obj/item/stack/spacecash/c1000=50,\ - /obj/item/storage/box/beakers/bluespace=1,\ - /obj/item/storage/box/beakers/variety=1,\ - /obj/item/storage/box/material=1 - ) - generate_items_inside(items_inside,src) diff --git a/code/game/objects/items/storage/briefcase.dm b/code/game/objects/items/storage/briefcase.dm deleted file mode 100644 index 9e5e0b03ab..0000000000 --- a/code/game/objects/items/storage/briefcase.dm +++ /dev/null @@ -1,49 +0,0 @@ -/obj/item/storage/briefcase - name = "briefcase" - desc = "" - icon_state = "briefcase" - lefthand_file = 'icons/mob/inhands/equipment/briefcase_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/briefcase_righthand.dmi' - flags_1 = CONDUCT_1 - force = 8 - hitsound = "swing_hit" - throw_speed = 2 - throw_range = 4 - w_class = WEIGHT_CLASS_BULKY - attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "whacked") - resistance_flags = FLAMMABLE - max_integrity = 150 - var/folder_path = /obj/item/folder //this is the path of the folder that gets spawned in New() - -/obj/item/storage/briefcase/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_w_class = WEIGHT_CLASS_NORMAL - STR.max_combined_w_class = 21 - -/obj/item/storage/briefcase/PopulateContents() - new /obj/item/pen(src) - var/obj/item/folder/folder = new folder_path(src) - for(var/i in 1 to 6) - new /obj/item/paper(folder) - -/obj/item/storage/briefcase/lawyer - folder_path = /obj/item/folder/blue - -/obj/item/storage/briefcase/lawyer/PopulateContents() - new /obj/item/stamp/law(src) - ..() - -/obj/item/storage/briefcase/sniperbundle - desc = "" - force = 10 - -/obj/item/storage/briefcase/sniperbundle/PopulateContents() - ..() // in case you need any paperwork done after your rampage - new /obj/item/gun/ballistic/automatic/sniper_rifle/syndicate(src) - new /obj/item/clothing/neck/tie/red(src) - new /obj/item/clothing/under/syndicate/sniper(src) - new /obj/item/ammo_box/magazine/sniper_rounds/soporific(src) - new /obj/item/ammo_box/magazine/sniper_rounds/soporific(src) - new /obj/item/suppressor/specialoffer(src) - diff --git a/code/game/objects/items/storage/firstaid.dm b/code/game/objects/items/storage/firstaid.dm deleted file mode 100644 index 25c3f5ff16..0000000000 --- a/code/game/objects/items/storage/firstaid.dm +++ /dev/null @@ -1,445 +0,0 @@ -/* First aid storage - * Contains: - * First Aid Kits - * Pill Bottles - * Dice Pack (in a pill bottle) - */ - -/* - * First Aid Kits - */ -/obj/item/storage/firstaid - name = "first-aid kit" - desc = "" - icon_state = "firstaid" - lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' - throw_speed = 3 - throw_range = 7 - var/empty = FALSE - var/damagetype_healed //defines damage type of the medkit. General ones stay null. Used for medibot healing bonuses - -/obj/item/storage/firstaid/regular - icon_state = "firstaid" - desc = "" - -/obj/item/storage/firstaid/regular/suicide_act(mob/living/carbon/user) - user.visible_message("[user] begins giving [user.p_them()]self aids with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!") - return BRUTELOSS - -/obj/item/storage/firstaid/regular/PopulateContents() - if(empty) - return - var/static/items_inside = list( - /obj/item/stack/medical/gauze = 1, - /obj/item/stack/medical/suture = 2, - /obj/item/stack/medical/mesh = 2, - /obj/item/reagent_containers/hypospray/medipen = 1) - generate_items_inside(items_inside,src) - -/obj/item/storage/firstaid/medical - name = "medical aid kit" - icon_state = "firstaid_surgery" - item_state = "firstaid" - desc = "" - -/obj/item/storage/firstaid/medical/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_w_class = WEIGHT_CLASS_NORMAL //holds the same equipment as a medibelt - STR.max_items = 12 - STR.max_combined_w_class = 24 - STR.set_holdable(list( - /obj/item/dnainjector, - /obj/item/reagent_containers/dropper, - /obj/item/reagent_containers/glass/beaker, - /obj/item/reagent_containers/glass/bottle, - /obj/item/reagent_containers/pill, - /obj/item/reagent_containers/syringe, - /obj/item/reagent_containers/medigel, - /obj/item/lighter, - /obj/item/storage/fancy/cigarettes, - /obj/item/storage/pill_bottle, - /obj/item/stack/medical, - /obj/item/flashlight/pen, - /obj/item/extinguisher/mini, - /obj/item/reagent_containers/hypospray, - /obj/item/clothing/gloves/, - /obj/item/bikehorn/rubberducky, - /obj/item/clothing/mask/surgical, - /obj/item/clothing/mask/breath, - /obj/item/clothing/mask/breath/medical, - /obj/item/surgical_drapes, //for true paramedics - /obj/item/scalpel, - /obj/item/circular_saw, - /obj/item/surgicaldrill, - /obj/item/retractor, - /obj/item/cautery, - /obj/item/hemostat, - /obj/item/geiger_counter, - /obj/item/clothing/neck/stethoscope, - /obj/item/stamp, - /obj/item/clothing/glasses, - /obj/item/wrench/medical, - /obj/item/clothing/mask/muzzle, - /obj/item/storage/bag/chemistry, - /obj/item/storage/bag/bio, - /obj/item/reagent_containers/blood, - /obj/item/tank/internals/emergency_oxygen, - /obj/item/gun/syringe/syndicate, - /obj/item/implantcase, - /obj/item/implant, - /obj/item/implanter, - )) - -/obj/item/storage/firstaid/medical/PopulateContents() - if(empty) - return - var/static/items_inside = list( - /obj/item/stack/medical/gauze = 1, - /obj/item/stack/medical/suture = 2, - /obj/item/stack/medical/mesh = 2, - /obj/item/reagent_containers/hypospray/medipen = 1, - /obj/item/surgical_drapes = 1, - /obj/item/scalpel = 1, - /obj/item/hemostat = 1, - /obj/item/cautery = 1) - generate_items_inside(items_inside,src) - -/obj/item/storage/firstaid/ancient - icon_state = "firstaid" - desc = "" - -/obj/item/storage/firstaid/ancient/PopulateContents() - if(empty) - return - var/static/items_inside = list( - /obj/item/stack/medical/gauze = 1, - /obj/item/stack/medical/bruise_pack = 3, - /obj/item/stack/medical/ointment= 3) - generate_items_inside(items_inside,src) - -/obj/item/storage/firstaid/fire - name = "burn treatment kit" - desc = "" - icon_state = "ointment" - item_state = "firstaid-ointment" - damagetype_healed = BURN - -/obj/item/storage/firstaid/fire/suicide_act(mob/living/carbon/user) - user.visible_message("[user] begins rubbing \the [src] against [user.p_them()]self! It looks like [user.p_theyre()] trying to start a fire!") - return FIRELOSS - -/obj/item/storage/firstaid/fire/Initialize(mapload) - . = ..() - icon_state = pick("ointment","firefirstaid") - -/obj/item/storage/firstaid/fire/PopulateContents() - if(empty) - return - var/static/items_inside = list( - /obj/item/reagent_containers/pill/patch/aiuri = 3, - /obj/item/reagent_containers/spray/rhigoxane = 1, - /obj/item/reagent_containers/hypospray/medipen/oxandrolone = 1, - /obj/item/reagent_containers/hypospray/medipen = 1) - generate_items_inside(items_inside,src) - -/obj/item/storage/firstaid/toxin - name = "toxin treatment kit" - desc = "" - icon_state = "antitoxin" - item_state = "firstaid-toxin" - damagetype_healed = TOX - -/obj/item/storage/firstaid/toxin/suicide_act(mob/living/carbon/user) - user.visible_message("[user] begins licking the lead paint off \the [src]! It looks like [user.p_theyre()] trying to commit suicide!") - return TOXLOSS - -/obj/item/storage/firstaid/toxin/Initialize(mapload) - . = ..() - icon_state = pick("antitoxin","antitoxfirstaid","antitoxfirstaid2") - -/obj/item/storage/firstaid/toxin/PopulateContents() - if(empty) - return - var/static/items_inside = list( - /obj/item/storage/pill_bottle/multiver/less = 1, - /obj/item/reagent_containers/syringe/syriniver = 3, - /obj/item/storage/pill_bottle/potassiodide = 1, - /obj/item/reagent_containers/hypospray/medipen/penacid = 1) - generate_items_inside(items_inside,src) - -/obj/item/storage/firstaid/o2 - name = "oxygen deprivation treatment kit" - desc = "" - icon_state = "o2" - item_state = "firstaid-o2" - damagetype_healed = OXY - -/obj/item/storage/firstaid/o2/suicide_act(mob/living/carbon/user) - user.visible_message("[user] begins hitting [user.p_their()] neck with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!") - return OXYLOSS - -/obj/item/storage/firstaid/o2/Initialize(mapload) - . = ..() - icon_state = pick("o2","o2second") - -/obj/item/storage/firstaid/o2/PopulateContents() - if(empty) - return - var/static/items_inside = list( - /obj/item/reagent_containers/syringe/convermol = 3, - /obj/item/reagent_containers/hypospray/medipen/salbutamol = 1, - /obj/item/reagent_containers/hypospray/medipen = 1, - /obj/item/storage/pill_bottle/iron = 1) - generate_items_inside(items_inside,src) - -/obj/item/storage/firstaid/brute - name = "brute trauma treatment kit" - desc = "" - icon_state = "brute" - item_state = "firstaid-brute" - damagetype_healed = BRUTE - -/obj/item/storage/firstaid/brute/suicide_act(mob/living/carbon/user) - user.visible_message("[user] begins beating [user.p_them()]self over the head with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!") - return BRUTELOSS - -/obj/item/storage/firstaid/brute/Initialize(mapload) - . = ..() - icon_state = pick("brute","brute2") - -/obj/item/storage/firstaid/brute/PopulateContents() - if(empty) - return - var/static/items_inside = list( - /obj/item/reagent_containers/pill/patch/libital = 3, - /obj/item/stack/medical/gauze = 1, - /obj/item/storage/pill_bottle/trophazole = 1, - /obj/item/reagent_containers/hypospray/medipen/salacid = 1) - generate_items_inside(items_inside,src) - -/obj/item/storage/firstaid/advanced - name = "advanced first aid kit" - desc = "" - icon_state = "radfirstaid" - item_state = "firstaid-rad" - custom_premium_price = 600 - -/obj/item/storage/firstaid/advanced/PopulateContents() - if(empty) - return - var/static/items_inside = list( - /obj/item/reagent_containers/pill/patch/instabitaluri = 3, - /obj/item/reagent_containers/hypospray/medipen/atropine = 2, - /obj/item/stack/medical/gauze = 1, - /obj/item/storage/pill_bottle/penacid = 1) - generate_items_inside(items_inside,src) - -/obj/item/storage/firstaid/tactical - name = "combat medical kit" - desc = "" - icon_state = "bezerk" - -/obj/item/storage/firstaid/tactical/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_w_class = WEIGHT_CLASS_NORMAL - -/obj/item/storage/firstaid/tactical/PopulateContents() - if(empty) - return - new /obj/item/stack/medical/gauze(src) - new /obj/item/reagent_containers/hypospray/combat(src) - new /obj/item/reagent_containers/pill/patch/libital(src) - new /obj/item/reagent_containers/pill/patch/libital(src) - new /obj/item/reagent_containers/pill/patch/aiuri(src) - new /obj/item/reagent_containers/pill/patch/aiuri(src) - new /obj/item/clothing/glasses/hud/health/night(src) - - -/* - * Pill Bottles - */ - -/obj/item/storage/pill_bottle - name = "pill bottle" - desc = "" - icon_state = "pill_canister" - icon = 'icons/obj/chemical.dmi' - item_state = "contsolid" - lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' - w_class = WEIGHT_CLASS_SMALL - -/obj/item/storage/pill_bottle/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.allow_quick_gather = TRUE - STR.click_gather = TRUE - STR.set_holdable(list(/obj/item/reagent_containers/pill, /obj/item/dice)) - -/obj/item/storage/pill_bottle/suicide_act(mob/user) - user.visible_message("[user] is trying to get the cap off [src]! It looks like [user.p_theyre()] trying to commit suicide!") - return (TOXLOSS) - -/obj/item/storage/pill_bottle/multiver - name = "bottle of multiver pills" - desc = "" - -/obj/item/storage/pill_bottle/multiver/PopulateContents() - for(var/i in 1 to 7) - new /obj/item/reagent_containers/pill/multiver(src) - -/obj/item/storage/pill_bottle/multiver/less - -/obj/item/storage/pill_bottle/multiver/less/PopulateContents() - for(var/i in 1 to 3) - new /obj/item/reagent_containers/pill/multiver(src) - -/obj/item/storage/pill_bottle/epinephrine - name = "bottle of epinephrine pills" - desc = "" - -/obj/item/storage/pill_bottle/epinephrine/PopulateContents() - for(var/i in 1 to 7) - new /obj/item/reagent_containers/pill/epinephrine(src) - -/obj/item/storage/pill_bottle/mutadone - name = "bottle of mutadone pills" - desc = "" - -/obj/item/storage/pill_bottle/mutadone/PopulateContents() - for(var/i in 1 to 7) - new /obj/item/reagent_containers/pill/mutadone(src) - -/obj/item/storage/pill_bottle/potassiodide - name = "bottle of potassium iodide pills" - desc = "" - -/obj/item/storage/pill_bottle/potassiodide/PopulateContents() - for(var/i in 1 to 3) - new /obj/item/reagent_containers/pill/potassiodide(src) - -/obj/item/storage/pill_bottle/trophazole - name = "bottle of trophazole pills" - desc = "" - -/obj/item/storage/pill_bottle/trophazole/PopulateContents() - for(var/i in 1 to 4) - new /obj/item/reagent_containers/pill/trophazole(src) - -/obj/item/storage/pill_bottle/iron - name = "bottle of iron pills" - desc = "" - -/obj/item/storage/pill_bottle/iron/PopulateContents() - for(var/i in 1 to 4) - new /obj/item/reagent_containers/pill/iron(src) - -/obj/item/storage/pill_bottle/mannitol - name = "bottle of mannitol pills" - desc = "" - -/obj/item/storage/pill_bottle/mannitol/PopulateContents() - for(var/i in 1 to 7) - new /obj/item/reagent_containers/pill/mannitol(src) - -/obj/item/storage/pill_bottle/stimulant - name = "bottle of stimulant pills" - desc = "" - -/obj/item/storage/pill_bottle/stimulant/PopulateContents() - for(var/i in 1 to 5) - new /obj/item/reagent_containers/pill/stimulant(src) - -/obj/item/storage/pill_bottle/mining - name = "bottle of patches" - desc = "" - -/obj/item/storage/pill_bottle/mining/PopulateContents() - new /obj/item/reagent_containers/pill/patch/aiuri(src) - for(var/i in 1 to 3) - new /obj/item/reagent_containers/pill/patch/libital(src) - -/obj/item/storage/pill_bottle/zoom - name = "suspicious pill bottle" - desc = "" - -/obj/item/storage/pill_bottle/zoom/PopulateContents() - for(var/i in 1 to 5) - new /obj/item/reagent_containers/pill/zoom(src) - -/obj/item/storage/pill_bottle/happy - name = "suspicious pill bottle" - desc = "" - -/obj/item/storage/pill_bottle/happy/PopulateContents() - for(var/i in 1 to 5) - new /obj/item/reagent_containers/pill/happy(src) - -/obj/item/storage/pill_bottle/lsd - name = "suspicious pill bottle" - desc = "" - -/obj/item/storage/pill_bottle/lsd/PopulateContents() - for(var/i in 1 to 5) - new /obj/item/reagent_containers/pill/lsd(src) - -/obj/item/storage/pill_bottle/aranesp - name = "suspicious pill bottle" - desc = "" - -/obj/item/storage/pill_bottle/aranesp/PopulateContents() - for(var/i in 1 to 5) - new /obj/item/reagent_containers/pill/aranesp(src) - -/obj/item/storage/pill_bottle/psicodine - name = "bottle of psicodine pills" - desc = "" - -/obj/item/storage/pill_bottle/psicodine/PopulateContents() - for(var/i in 1 to 7) - new /obj/item/reagent_containers/pill/psicodine(src) - -/obj/item/storage/pill_bottle/happiness - name = "happiness pill bottle" - desc = "" - -/obj/item/storage/pill_bottle/happiness/PopulateContents() - for(var/i in 1 to 5) - new /obj/item/reagent_containers/pill/happiness(src) - -/obj/item/storage/pill_bottle/penacid - name = "bottle of pentetic acid pills" - desc = "" - -/obj/item/storage/pill_bottle/penacid/PopulateContents() - for(var/i in 1 to 3) - new /obj/item/reagent_containers/pill/penacid(src) - - -/obj/item/storage/pill_bottle/neurine - name = "bottle of neurine pills" - desc = "" - -/obj/item/storage/pill_bottle/neurine/PopulateContents() - for(var/i in 1 to 5) - new /obj/item/reagent_containers/pill/neurine(src) - -/obj/item/storage/pill_bottle/floorpill - name = "bottle of floorpills" - desc = "" - -/obj/item/storage/pill_bottle/floorpill/Initialize() - . = ..() - var/obj/item/reagent_containers/pill/P = locate() in src - name = "bottle of [P.name]s" - -/obj/item/storage/pill_bottle/floorpill/PopulateContents() - for(var/i in 1 to rand(1,7)) - new /obj/item/reagent_containers/pill/floorpill(src) - -/obj/item/storage/pill_bottle/floorpill/full/PopulateContents() - for(var/i in 1 to 7) - new /obj/item/reagent_containers/pill/floorpill(src) diff --git a/code/game/objects/items/storage/lockbox.dm b/code/game/objects/items/storage/lockbox.dm deleted file mode 100644 index a1c6f52b1a..0000000000 --- a/code/game/objects/items/storage/lockbox.dm +++ /dev/null @@ -1,178 +0,0 @@ -/obj/item/storage/lockbox - name = "lockbox" - desc = "" - icon_state = "lockbox+l" - item_state = "syringe_kit" - lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' - w_class = WEIGHT_CLASS_BULKY - req_access = list(ACCESS_ARMORY) - var/broken = FALSE - var/open = FALSE - var/icon_locked = "lockbox+l" - var/icon_closed = "lockbox" - var/icon_broken = "lockbox+b" - -/obj/item/storage/lockbox/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_w_class = WEIGHT_CLASS_NORMAL - STR.max_combined_w_class = 14 - STR.max_items = 4 - STR.locked = TRUE - -/obj/item/storage/lockbox/attackby(obj/item/W, mob/user, params) - var/locked = SEND_SIGNAL(src, COMSIG_IS_STORAGE_LOCKED) - if(W.GetID()) - if(broken) - to_chat(user, "It appears to be broken.") - return - if(allowed(user)) - SEND_SIGNAL(src, COMSIG_TRY_STORAGE_SET_LOCKSTATE, !locked) - locked = SEND_SIGNAL(src, COMSIG_IS_STORAGE_LOCKED) - if(locked) - icon_state = icon_locked - to_chat(user, "I lock the [src.name]!") - SEND_SIGNAL(src, COMSIG_TRY_STORAGE_HIDE_ALL) - return - else - icon_state = icon_closed - to_chat(user, "I unlock the [src.name]!") - return - else - to_chat(user, "Access Denied.") - return - if(!locked) - return ..() - else - to_chat(user, "It's locked!") - -/obj/item/storage/lockbox/emag_act(mob/user) - if(!broken) - broken = TRUE - SEND_SIGNAL(src, COMSIG_TRY_STORAGE_SET_LOCKSTATE, FALSE) - desc += "It appears to be broken." - icon_state = src.icon_broken - if(user) - visible_message("\The [src] has been broken by [user] with an electromagnetic card!") - return - -/obj/item/storage/lockbox/Entered() - . = ..() - open = TRUE - update_icon() - -/obj/item/storage/lockbox/Exited() - . = ..() - open = TRUE - update_icon() - -/obj/item/storage/lockbox/clusterbang - name = "lockbox of clusterbangs" - desc = "" - req_access = list(ACCESS_SECURITY) - -/obj/item/storage/lockbox/clusterbang/PopulateContents() - new /obj/item/grenade/clusterbuster(src) - -/obj/item/storage/lockbox/medal - name = "medal box" - desc = "" - icon_state = "medalbox+l" - item_state = "syringe_kit" - lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' - w_class = WEIGHT_CLASS_NORMAL - req_access = list(ACCESS_CAPTAIN) - icon_locked = "medalbox+l" - icon_closed = "medalbox" - icon_broken = "medalbox+b" - -/obj/item/storage/lockbox/medal/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_w_class = WEIGHT_CLASS_SMALL - STR.max_items = 10 - STR.max_combined_w_class = 20 - STR.set_holdable(list(/obj/item/clothing/accessory/medal)) - -/obj/item/storage/lockbox/medal/examine(mob/user) - . = ..() - if(!SEND_SIGNAL(src, COMSIG_IS_STORAGE_LOCKED)) - . += "Alt-click to [open ? "close":"open"] it." - -/obj/item/storage/lockbox/medal/AltClick(mob/user) - if(user.canUseTopic(src, BE_CLOSE)) - if(!SEND_SIGNAL(src, COMSIG_IS_STORAGE_LOCKED)) - open = (open ? FALSE : TRUE) - update_icon() - ..() - -/obj/item/storage/lockbox/medal/PopulateContents() - new /obj/item/clothing/accessory/medal/gold/captain(src) - new /obj/item/clothing/accessory/medal/silver/valor(src) - new /obj/item/clothing/accessory/medal/silver/valor(src) - new /obj/item/clothing/accessory/medal/silver/security(src) - new /obj/item/clothing/accessory/medal/bronze_heart(src) - new /obj/item/clothing/accessory/medal/plasma/nobel_science(src) - new /obj/item/clothing/accessory/medal/plasma/nobel_science(src) - for(var/i in 1 to 3) - new /obj/item/clothing/accessory/medal/conduct(src) - -/obj/item/storage/lockbox/medal/update_icon() - cut_overlays() - var/locked = SEND_SIGNAL(src, COMSIG_IS_STORAGE_LOCKED) - if(locked) - icon_state = "medalbox+l" - open = FALSE - else - icon_state = "medalbox" - if(open) - icon_state += "open" - if(broken) - icon_state += "+b" - if(contents && open) - for (var/i in 1 to contents.len) - var/obj/item/clothing/accessory/medal/M = contents[i] - var/mutable_appearance/medalicon = mutable_appearance(initial(icon), M.medaltype) - if(i > 1 && i <= 5) - medalicon.pixel_x += ((i-1)*3) - else if(i > 5) - medalicon.pixel_y -= 7 - medalicon.pixel_x -= 2 - medalicon.pixel_x += ((i-6)*3) - add_overlay(medalicon) - -/obj/item/storage/lockbox/medal/sec - name = "security medal box" - desc = "" - req_access = list(ACCESS_HOS) - -/obj/item/storage/lockbox/medal/sec/PopulateContents() - for(var/i in 1 to 3) - new /obj/item/clothing/accessory/medal/silver/security(src) - -/obj/item/storage/lockbox/medal/cargo - name = "cargo award box" - desc = "" - req_access = list(ACCESS_QM) - -/obj/item/storage/lockbox/medal/cargo/PopulateContents() - new /obj/item/clothing/accessory/medal/ribbon/cargo(src) - -/obj/item/storage/lockbox/medal/service - name = "service award box" - desc = "" - req_access = list(ACCESS_HOP) - -/obj/item/storage/lockbox/medal/service/PopulateContents() - new /obj/item/clothing/accessory/medal/silver/excellence(src) - -/obj/item/storage/lockbox/medal/sci - name = "science medal box" - desc = "" - req_access = list(ACCESS_RD) - -/obj/item/storage/lockbox/medal/sci/PopulateContents() - for(var/i in 1 to 3) - new /obj/item/clothing/accessory/medal/plasma/nobel_science(src) diff --git a/code/game/objects/items/storage/secure.dm b/code/game/objects/items/storage/secure.dm deleted file mode 100644 index af560d67a2..0000000000 --- a/code/game/objects/items/storage/secure.dm +++ /dev/null @@ -1,188 +0,0 @@ -/* - * Absorbs /obj/item/secstorage. - * Reimplements it only slightly to use existing storage functionality. - * - * Contains: - * Secure Briefcase - * Wall Safe - */ - -// ----------------------------- -// Generic Item -// ----------------------------- -/obj/item/storage/secure - name = "secstorage" - var/icon_locking = "secureb" - var/icon_sparking = "securespark" - var/icon_opened = "secure0" - var/code = "" - var/l_code = null - var/l_set = 0 - var/l_setshort = 0 - var/l_hacking = 0 - var/open = FALSE - w_class = WEIGHT_CLASS_NORMAL - desc = "" - -/obj/item/storage/secure/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_w_class = WEIGHT_CLASS_SMALL - STR.max_combined_w_class = 14 - -/obj/item/storage/secure/examine(mob/user) - . = ..() - . += "The service panel is currently [open ? "unscrewed" : "screwed shut"]." - -/obj/item/storage/secure/attackby(obj/item/W, mob/user, params) - if(SEND_SIGNAL(src, COMSIG_IS_STORAGE_LOCKED)) - if (W.tool_behaviour == TOOL_SCREWDRIVER) - if (W.use_tool(src, user, 20)) - open =! open - to_chat(user, "I [open ? "open" : "close"] the service panel.") - return - if (W.tool_behaviour == TOOL_WIRECUTTER) - to_chat(user, "[src] is protected from this sort of tampering, yet it appears the internal memory wires can still be pulsed.") - if ((W.tool_behaviour == TOOL_MULTITOOL) && (!l_hacking)) - if(open == 1) - to_chat(user, "Now attempting to reset internal memory, please hold.") - l_hacking = 1 - if (W.use_tool(src, user, 400)) - to_chat(user, "Internal memory reset - lock has been disengaged.") - l_set = 0 - l_hacking = 0 - else - l_hacking = 0 - else - to_chat(user, "I must unscrew the service panel before you can pulse the wiring!") - return - //At this point you have exhausted all the special things to do when locked - // ... but it's still locked. - return - - // -> storage/attackby() what with handle insertion, etc - return ..() - -/obj/item/storage/secure/attack_self(mob/user) - var/locked = SEND_SIGNAL(src, COMSIG_IS_STORAGE_LOCKED) - user.set_machine(src) - var/dat = text("[]
\n\nLock Status: []",src, (locked ? "LOCKED" : "UNLOCKED")) - var/message = "Code" - if ((l_set == 0) && (!l_setshort)) - dat += text("

\n5-DIGIT PASSCODE NOT SET.
ENTER NEW PASSCODE.
") - if (l_setshort) - dat += text("

\nALERT: MEMORY SYSTEM ERROR - 6040 201") - message = text("[]", code) - if (!locked) - message = "*****" - dat += text("


\n>[]
\n1-2-3
\n4-5-6
\n7-8-9
\nR-0-E
\n
", message) - user << browse(dat, "window=caselock;size=300x280") - -/obj/item/storage/secure/Topic(href, href_list) - ..() - if ((usr.stat || usr.restrained()) || (get_dist(src, usr) > 1)) - return - if (href_list["type"]) - if (href_list["type"] == "E") - if ((l_set == 0) && (length(code) == 5) && (!l_setshort) && (code != "ERROR")) - l_code = code - l_set = 1 - else if ((code == l_code) && (l_set == 1)) - SEND_SIGNAL(src, COMSIG_TRY_STORAGE_SET_LOCKSTATE, FALSE) - cut_overlays() - add_overlay(icon_opened) - code = null - else - code = "ERROR" - else - if ((href_list["type"] == "R") && (!l_setshort)) - SEND_SIGNAL(src, COMSIG_TRY_STORAGE_SET_LOCKSTATE, TRUE) - cut_overlays() - code = null - SEND_SIGNAL(src, COMSIG_TRY_STORAGE_HIDE_FROM, usr) - else - code += text("[]", sanitize_text(href_list["type"])) - if (length(code) > 5) - code = "ERROR" - add_fingerprint(usr) - for(var/mob/M in viewers(1, loc)) - if ((M.client && M.machine == src)) - attack_self(M) - return - return - - -// ----------------------------- -// Secure Briefcase -// ----------------------------- -/obj/item/storage/secure/briefcase - name = "secure briefcase" - icon = 'icons/obj/storage.dmi' - icon_state = "secure" - item_state = "sec-case" - lefthand_file = 'icons/mob/inhands/equipment/briefcase_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/briefcase_righthand.dmi' - desc = "" - force = 8 - hitsound = "swing_hit" - throw_speed = 2 - throw_range = 4 - w_class = WEIGHT_CLASS_BULKY - attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "whacked") - -/obj/item/storage/secure/briefcase/PopulateContents() - new /obj/item/paper(src) - new /obj/item/pen(src) - -/obj/item/storage/secure/briefcase/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_combined_w_class = 21 - STR.max_w_class = WEIGHT_CLASS_NORMAL - -//Syndie variant of Secure Briefcase. Contains space cash, slightly more robust. -/obj/item/storage/secure/briefcase/syndie - force = 15 - -/obj/item/storage/secure/briefcase/syndie/PopulateContents() - ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - for(var/i = 0, i < STR.max_items - 2, i++) - new /obj/item/stack/spacecash/c1000(src) - - -// ----------------------------- -// Secure Safe -// ----------------------------- - -/obj/item/storage/secure/safe - name = "secure safe" - icon = 'icons/obj/storage.dmi' - icon_state = "safe" - icon_opened = "safe0" - icon_locking = "safeb" - icon_sparking = "safespark" - desc = "" - force = 8 - w_class = WEIGHT_CLASS_GIGANTIC - anchored = TRUE - density = FALSE - -/obj/item/storage/secure/safe/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.set_holdable(null, list(/obj/item/storage/secure/briefcase)) - STR.max_w_class = 8 //?? - -/obj/item/storage/secure/safe/PopulateContents() - new /obj/item/paper(src) - new /obj/item/pen(src) - -/obj/item/storage/secure/safe/attack_hand(mob/user) - . = ..() - if(.) - return - return attack_self(user) - -/obj/item/storage/secure/safe/HoS - name = "head of security's safe" diff --git a/code/game/objects/items/storage/toolbox.dm b/code/game/objects/items/storage/toolbox.dm deleted file mode 100644 index 5a32086df6..0000000000 --- a/code/game/objects/items/storage/toolbox.dm +++ /dev/null @@ -1,158 +0,0 @@ -/obj/item/storage/toolbox - name = "toolbox" - desc = "" - icon_state = "toolbox_default" - item_state = "toolbox_default" - lefthand_file = 'icons/mob/inhands/equipment/toolbox_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/toolbox_righthand.dmi' - flags_1 = CONDUCT_1 - force = 12 - throwforce = 12 - throw_speed = 2 - throw_range = 7 - w_class = WEIGHT_CLASS_BULKY - custom_materials = list(/datum/material/iron = 500) - attack_verb = list("robusted") - hitsound = 'sound/blank.ogg' - drop_sound = 'sound/blank.ogg' - pickup_sound = 'sound/blank.ogg' - material_flags = MATERIAL_COLOR - var/latches = "single_latch" - var/has_latches = TRUE - -/obj/item/storage/toolbox/Initialize() - . = ..() - if(has_latches) - if(prob(10)) - latches = "double_latch" - if(prob(1)) - latches = "triple_latch" - update_icon() - -/obj/item/storage/toolbox/update_icon() - ..() - cut_overlays() - if(has_latches) - add_overlay(latches) - - -/obj/item/storage/toolbox/suicide_act(mob/user) - user.visible_message("[user] robusts [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to commit suicide!") - return (BRUTELOSS) - -/obj/item/storage/toolbox/emergency - name = "emergency toolbox" - icon_state = "red" - item_state = "toolbox_red" - material_flags = NONE - -/obj/item/storage/toolbox/emergency/PopulateContents() - new /obj/item/crowbar/red(src) - new /obj/item/weldingtool/mini(src) - new /obj/item/extinguisher/mini(src) - switch(rand(1,3)) - if(1) - new /obj/item/flashlight(src) - if(2) - new /obj/item/flashlight/glowstick(src) - if(3) - new /obj/item/flashlight/flare(src) - -/obj/item/storage/toolbox/emergency/old - name = "rusty red toolbox" - icon_state = "toolbox_red_old" - has_latches = FALSE - material_flags = NONE - -/obj/item/storage/toolbox/mechanical - name = "mechanical toolbox" - icon_state = "blue" - item_state = "toolbox_blue" - material_flags = NONE - -/obj/item/storage/toolbox/mechanical/PopulateContents() - new /obj/item/screwdriver(src) - new /obj/item/wrench(src) - new /obj/item/weldingtool(src) - new /obj/item/crowbar(src) - - new /obj/item/wirecutters(src) - -/obj/item/storage/toolbox/mechanical/old - name = "rusty blue toolbox" - icon_state = "toolbox_blue_old" - has_latches = FALSE - material_flags = NONE - -/obj/item/storage/toolbox/mechanical/old/heirloom - name = "toolbox" //this will be named "X family toolbox" - desc = "" - force = 5 - w_class = WEIGHT_CLASS_NORMAL - -/obj/item/storage/toolbox/mechanical/old/heirloom/PopulateContents() - return - -/obj/item/storage/toolbox/electrical - name = "electrical toolbox" - icon_state = "yellow" - item_state = "toolbox_yellow" - material_flags = NONE - -/obj/item/storage/toolbox/electrical/PopulateContents() - new /obj/item/screwdriver(src) - new /obj/item/wirecutters(src) - new /obj/item/crowbar(src) - -/obj/item/storage/toolbox/syndicate - name = "suspicious looking toolbox" - icon_state = "syndicate" - item_state = "toolbox_syndi" - force = 15 - throwforce = 18 - material_flags = NONE - -/obj/item/storage/toolbox/syndicate/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.silent = TRUE - -/obj/item/storage/toolbox/syndicate/PopulateContents() - new /obj/item/screwdriver/nuke(src) - new /obj/item/wrench(src) - new /obj/item/weldingtool/largetank(src) - new /obj/item/crowbar/red(src) - new /obj/item/wirecutters(src, "red") - new /obj/item/multitool(src) - new /obj/item/clothing/gloves/combat(src) - -/obj/item/storage/toolbox/drone - name = "mechanical toolbox" - icon_state = "blue" - item_state = "toolbox_blue" - material_flags = NONE - -/obj/item/storage/toolbox/drone/PopulateContents() - new /obj/item/screwdriver(src) - new /obj/item/wrench(src) - new /obj/item/weldingtool(src) - new /obj/item/crowbar(src) - new /obj/item/wirecutters(src) - new /obj/item/multitool(src) - -/obj/item/storage/toolbox/ammo - name = "ammo box" - desc = "" - icon_state = "ammobox" - item_state = "ammobox" - drop_sound = 'sound/blank.ogg' - pickup_sound = 'sound/blank.ogg' - -/obj/item/storage/toolbox/ammo/PopulateContents() - new /obj/item/ammo_box/a762(src) - new /obj/item/ammo_box/a762(src) - new /obj/item/ammo_box/a762(src) - new /obj/item/ammo_box/a762(src) - new /obj/item/ammo_box/a762(src) - new /obj/item/ammo_box/a762(src) - new /obj/item/ammo_box/a762(src) diff --git a/code/game/objects/items/tanks/tank_types.dm b/code/game/objects/items/tanks/tank_types.dm deleted file mode 100644 index 312795fee0..0000000000 --- a/code/game/objects/items/tanks/tank_types.dm +++ /dev/null @@ -1,169 +0,0 @@ -/* Types of tanks! - * Contains: - * Oxygen - * Anesthetic - * Air - * Plasma - * Emergency Oxygen - * Generic - */ - -/* - * Oxygen - */ -/obj/item/tank/internals/oxygen - name = "oxygen tank" - desc = "" - icon_state = "oxygen" - distribute_pressure = TANK_DEFAULT_RELEASE_PRESSURE - force = 10 - dog_fashion = /datum/dog_fashion/back - - -/obj/item/tank/internals/oxygen/populate_gas() - air_contents.assert_gas(/datum/gas/oxygen) - air_contents.gases[/datum/gas/oxygen][MOLES] = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) - - -/obj/item/tank/internals/oxygen/yellow - desc = "" - icon_state = "oxygen_f" - dog_fashion = null - -/obj/item/tank/internals/oxygen/red - desc = "" - icon_state = "oxygen_fr" - dog_fashion = null - -/obj/item/tank/internals/oxygen/empty/populate_gas() - return - -/* - * Anesthetic - */ -/obj/item/tank/internals/anesthetic - name = "anesthetic tank" - desc = "" - icon_state = "anesthetic" - item_state = "an_tank" - force = 10 - -/obj/item/tank/internals/anesthetic/populate_gas() - air_contents.assert_gases(/datum/gas/oxygen, /datum/gas/nitrous_oxide) - air_contents.gases[/datum/gas/oxygen][MOLES] = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * O2STANDARD - air_contents.gases[/datum/gas/nitrous_oxide][MOLES] = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * N2STANDARD - -/* - * Plasma - */ -/obj/item/tank/internals/plasma - name = "plasma tank" - desc = "" - icon_state = "plasma" - flags_1 = CONDUCT_1 - slot_flags = null //they have no straps! - force = 8 - - -/obj/item/tank/internals/plasma/populate_gas() - air_contents.assert_gas(/datum/gas/plasma) - air_contents.gases[/datum/gas/plasma][MOLES] = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) - -/obj/item/tank/internals/plasma/full/populate_gas() - air_contents.assert_gas(/datum/gas/plasma) - air_contents.gases[/datum/gas/plasma][MOLES] = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) - -/obj/item/tank/internals/plasma/empty/populate_gas() - return - -/* - * Plasmaman Plasma Tank - */ - -/obj/item/tank/internals/plasmaman - name = "plasma internals tank" - desc = "" - icon_state = "plasmaman_tank" - item_state = "plasmaman_tank" - force = 10 - distribute_pressure = TANK_DEFAULT_RELEASE_PRESSURE - -/obj/item/tank/internals/plasmaman/populate_gas() - air_contents.assert_gas(/datum/gas/plasma) - air_contents.gases[/datum/gas/plasma][MOLES] = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) - -/obj/item/tank/internals/plasmaman/full/populate_gas() - air_contents.assert_gas(/datum/gas/plasma) - air_contents.gases[/datum/gas/plasma][MOLES] = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) - - -/obj/item/tank/internals/plasmaman/belt - icon_state = "plasmaman_tank_belt" - item_state = "plasmaman_tank_belt" - slot_flags = ITEM_SLOT_BELT - force = 5 - volume = 6 - w_class = WEIGHT_CLASS_SMALL //thanks i forgot this - -/obj/item/tank/internals/plasmaman/belt/full/populate_gas() - air_contents.assert_gas(/datum/gas/plasma) - air_contents.gases[/datum/gas/plasma][MOLES] = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) - -/obj/item/tank/internals/plasmaman/belt/empty/populate_gas() - return - - - -/* - * Emergency Oxygen - */ -/obj/item/tank/internals/emergency_oxygen - name = "emergency oxygen tank" - desc = "" - icon_state = "emergency" - flags_1 = CONDUCT_1 - slot_flags = ITEM_SLOT_BELT - w_class = WEIGHT_CLASS_SMALL - force = 4 - distribute_pressure = TANK_DEFAULT_RELEASE_PRESSURE - volume = 1 //Tiny. Real life equivalents only have 21 breaths of oxygen in them. They're EMERGENCY tanks anyway -errorage (dangercon 2011) - - -/obj/item/tank/internals/emergency_oxygen/populate_gas() - air_contents.assert_gas(/datum/gas/oxygen) - air_contents.gases[/datum/gas/oxygen][MOLES] = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) - - -/obj/item/tank/internals/emergency_oxygen/empty/populate_gas() - return - -/obj/item/tank/internals/emergency_oxygen/engi - name = "extended-capacity emergency oxygen tank" - icon_state = "emergency_engi" - volume = 2 // should last a bit over 30 minutes if full - -/obj/item/tank/internals/emergency_oxygen/engi/empty/populate_gas() - return - -/obj/item/tank/internals/emergency_oxygen/double - name = "double emergency oxygen tank" - icon_state = "emergency_double" - volume = 8 - -/obj/item/tank/internals/emergency_oxygen/double/empty/populate_gas() - return - -// * -// * GENERIC -// * - -/obj/item/tank/internals/generic - name = "gas tank" - desc = "" - icon_state = "generic" - distribute_pressure = TANK_DEFAULT_RELEASE_PRESSURE - force = 10 - dog_fashion = /datum/dog_fashion/back - -/obj/item/tank/internals/generic/populate_gas() - return diff --git a/code/game/objects/items/tanks/tanks.dm b/code/game/objects/items/tanks/tanks.dm deleted file mode 100644 index 6d0b03b4f7..0000000000 --- a/code/game/objects/items/tanks/tanks.dm +++ /dev/null @@ -1,248 +0,0 @@ -/obj/item/tank - name = "tank" - icon = 'icons/obj/tank.dmi' - lefthand_file = 'icons/mob/inhands/equipment/tanks_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/tanks_righthand.dmi' - flags_1 = CONDUCT_1 - slot_flags = ITEM_SLOT_BACK - hitsound = 'sound/blank.ogg' - pressure_resistance = ONE_ATMOSPHERE * 5 - force = 5 - throwforce = 10 - throw_speed = 1 - throw_range = 4 - custom_materials = list(/datum/material/iron = 500) - actions_types = list(/datum/action/item_action/set_internals) - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 30) - var/datum/gas_mixture/air_contents = null - var/distribute_pressure = ONE_ATMOSPHERE - var/integrity = 3 - var/volume = 70 - -/obj/item/tank/ui_action_click(mob/user) - toggle_internals(user) - -/obj/item/tank/proc/toggle_internals(mob/user) - var/mob/living/carbon/human/H = user - if(!istype(H)) - return - - if(H.internal == src) - to_chat(H, "I close [src] valve.") - H.internal = null - H.update_internals_hud_icon(0) - else - if(!H.getorganslot(ORGAN_SLOT_BREATHING_TUBE)) - if(!H.wear_mask) - to_chat(H, "I need a mask!") - return - if(H.wear_mask.mask_adjusted) - H.wear_mask.adjustmask(H) - if(!(H.wear_mask.clothing_flags & MASKINTERNALS)) - to_chat(H, "[H.wear_mask] can't use [src]!") - return - - if(H.internal) - to_chat(H, "I switch your internals to [src].") - else - to_chat(H, "I open [src] valve.") - H.internal = src - H.update_internals_hud_icon(1) - H.update_action_buttons_icon() - - -/obj/item/tank/Initialize() - . = ..() - - air_contents = new(volume) //liters - air_contents.temperature = T20C - - populate_gas() - - START_PROCESSING(SSobj, src) - -/obj/item/tank/proc/populate_gas() - return - -/obj/item/tank/Destroy() - if(air_contents) - qdel(air_contents) - - STOP_PROCESSING(SSobj, src) - . = ..() - -/obj/item/tank/examine(mob/user) - var/obj/icon = src - . = ..() - if(!in_range(src, user) && !isobserver(user)) - if(icon == src) - . += "If you want any more information you'll need to get closer." - return - - . += "The pressure gauge reads [round(src.air_contents.return_pressure(),0.01)] kPa." - - var/celsius_temperature = src.air_contents.temperature-T0C - var/descriptive - - if (celsius_temperature < 20) - descriptive = "cold" - else if (celsius_temperature < 40) - descriptive = "room temperature" - else if (celsius_temperature < 80) - descriptive = "lukewarm" - else if (celsius_temperature < 100) - descriptive = "warm" - else if (celsius_temperature < 300) - descriptive = "hot" - else - descriptive = "furiously hot" - - . += "It feels [descriptive]." - -/obj/item/tank/deconstruct(disassembled = TRUE) - if(!disassembled) - var/turf/T = get_turf(src) - if(T) - T.assume_air(air_contents) - air_update_turf() - playsound(src.loc, 'sound/blank.ogg', 10, TRUE, -3) - qdel(src) - -/obj/item/tank/suicide_act(mob/user) - var/mob/living/carbon/human/H = user - user.visible_message("[user] is putting [src]'s valve to [user.p_their()] lips! It looks like [user.p_theyre()] trying to commit suicide!") - playsound(loc, 'sound/blank.ogg', 10, TRUE, -3) - if(!QDELETED(H) && air_contents && air_contents.return_pressure() >= 1000) - ADD_TRAIT(H, TRAIT_DISFIGURED, TRAIT_GENERIC) - H.inflate_gib() - return MANUAL_SUICIDE - else - to_chat(user, "There isn't enough pressure in [src] to commit suicide with...") - return SHAME - -/obj/item/tank/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ - datum/tgui/master_ui = null, datum/ui_state/state = GLOB.hands_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "tanks", name, 420, 200, master_ui, state) - ui.open() - -/obj/item/tank/ui_data(mob/user) - var/list/data = list() - data["tankPressure"] = round(air_contents.return_pressure() ? air_contents.return_pressure() : 0) - data["releasePressure"] = round(distribute_pressure ? distribute_pressure : 0) - data["defaultReleasePressure"] = round(TANK_DEFAULT_RELEASE_PRESSURE) - data["minReleasePressure"] = round(TANK_MIN_RELEASE_PRESSURE) - data["maxReleasePressure"] = round(TANK_MAX_RELEASE_PRESSURE) - - var/mob/living/carbon/C = user - if(!istype(C)) - C = loc.loc - if(!istype(C)) - return data - - if(C.internal == src) - data["connected"] = TRUE - - return data - -/obj/item/tank/ui_act(action, params) - if(..()) - return - switch(action) - if("pressure") - var/pressure = params["pressure"] - if(pressure == "reset") - pressure = initial(distribute_pressure) - . = TRUE - else if(pressure == "min") - pressure = TANK_MIN_RELEASE_PRESSURE - . = TRUE - else if(pressure == "max") - pressure = TANK_MAX_RELEASE_PRESSURE - . = TRUE - else if(pressure == "input") - pressure = input("New release pressure ([TANK_MIN_RELEASE_PRESSURE]-[TANK_MAX_RELEASE_PRESSURE] kPa):", name, distribute_pressure) as num|null - if(!isnull(pressure) && !..()) - . = TRUE - else if(text2num(pressure) != null) - pressure = text2num(pressure) - . = TRUE - if(.) - distribute_pressure = CLAMP(round(pressure), TANK_MIN_RELEASE_PRESSURE, TANK_MAX_RELEASE_PRESSURE) - -/obj/item/tank/remove_air(amount) - return air_contents.remove(amount) - -/obj/item/tank/return_air() - return air_contents - -/obj/item/tank/return_analyzable_air() - return air_contents - -/obj/item/tank/assume_air(datum/gas_mixture/giver) - air_contents.merge(giver) - - check_status() - return 1 - -/obj/item/tank/proc/remove_air_volume(volume_to_return) - if(!air_contents) - return null - - var/tank_pressure = air_contents.return_pressure() - var/actual_distribute_pressure = CLAMP(tank_pressure, 0, distribute_pressure) - - var/moles_needed = actual_distribute_pressure*volume_to_return/(R_IDEAL_GAS_EQUATION*air_contents.temperature) - - return remove_air(moles_needed) - -/obj/item/tank/process() - //Allow for reactions - air_contents.react() - check_status() - -/obj/item/tank/proc/check_status() - //Handle exploding, leaking, and rupturing of the tank - - if(!air_contents) - return 0 - - var/pressure = air_contents.return_pressure() - var/temperature = air_contents.return_temperature() - - if(pressure > TANK_FRAGMENT_PRESSURE) - log_bomber(get_mob_by_key(fingerprintslast), "was last key to touch", src, "which ruptured explosively") - //Give the gas a chance to build up more pressure through reacting - air_contents.react(src) - pressure = air_contents.return_pressure() - var/range = (pressure-TANK_FRAGMENT_PRESSURE)/TANK_FRAGMENT_SCALE - var/turf/epicenter = get_turf(loc) - - - explosion(epicenter, round(range*0.25), round(range*0.5), round(range), round(range*1.5)) - qdel(src) - - else if(pressure > TANK_RUPTURE_PRESSURE || temperature > TANK_MELT_TEMPERATURE) - if(integrity <= 0) - var/turf/T = get_turf(src) - if(!T) - return - T.assume_air(air_contents) - playsound(src.loc, 'sound/blank.ogg', 10, TRUE, -3) - qdel(src) - else - integrity-- - - else if(pressure > TANK_LEAK_PRESSURE) - if(integrity <= 0) - var/turf/T = get_turf(src) - if(!T) - return - var/datum/gas_mixture/leaked_gas = air_contents.remove_ratio(0.25) - T.assume_air(leaked_gas) - else - integrity-- - - else if(integrity < 3) - integrity++ diff --git a/code/game/objects/items/tanks/watertank.dm b/code/game/objects/items/tanks/watertank.dm deleted file mode 100644 index 4b6a79faf4..0000000000 --- a/code/game/objects/items/tanks/watertank.dm +++ /dev/null @@ -1,450 +0,0 @@ -//Hydroponics tank and base code -/obj/item/watertank - name = "backpack water tank" - desc = "" - icon = 'icons/obj/hydroponics/equipment.dmi' - icon_state = "waterbackpack" - item_state = "waterbackpack" - lefthand_file = 'icons/mob/inhands/equipment/backpack_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/backpack_righthand.dmi' - w_class = WEIGHT_CLASS_BULKY - slot_flags = ITEM_SLOT_BACK - slowdown = 1 - actions_types = list(/datum/action/item_action/toggle_mister) - max_integrity = 200 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 30) - resistance_flags = FIRE_PROOF - - var/obj/item/noz - var/volume = 500 - -/obj/item/watertank/Initialize() - . = ..() - create_reagents(volume, OPENCONTAINER) - noz = make_noz() - -/obj/item/watertank/ui_action_click(mob/user) - toggle_mister(user) - -/obj/item/watertank/item_action_slot_check(slot, mob/user) - if(slot == user.getBackSlot()) - return 1 - -/obj/item/watertank/proc/toggle_mister(mob/living/user) - if(!istype(user)) - return - if(user.get_item_by_slot(user.getBackSlot()) != src) - to_chat(user, "The watertank must be worn properly to use!") - return - if(user.incapacitated()) - return - - if(QDELETED(noz)) - noz = make_noz() - if(noz in src) - //Detach the nozzle into the user's hands - if(!user.put_in_hands(noz)) - to_chat(user, "I need a free hand to hold the mister!") - return - else - //Remove from their hands and put back "into" the tank - remove_noz() - -/obj/item/watertank/verb/toggle_mister_verb() - set name = "Toggle Mister" - set hidden = 1 - toggle_mister(usr) - -/obj/item/watertank/proc/make_noz() - return new /obj/item/reagent_containers/spray/mister(src) - -/obj/item/watertank/equipped(mob/user, slot) - ..() - if(slot != SLOT_BACK) - remove_noz() - -/obj/item/watertank/proc/remove_noz() - if(!QDELETED(noz)) - if(ismob(noz.loc)) - var/mob/M = noz.loc - M.temporarilyRemoveItemFromInventory(noz, TRUE) - noz.forceMove(src) - -/obj/item/watertank/Destroy() - QDEL_NULL(noz) - return ..() - -/obj/item/watertank/attack_hand(mob/user) - if (user.get_item_by_slot(user.getBackSlot()) == src) - toggle_mister(user) - else - return ..() - -/obj/item/watertank/MouseDrop(obj/over_object) - var/mob/M = loc - if(istype(M) && istype(over_object, /atom/movable/screen/inventory/hand)) - var/atom/movable/screen/inventory/hand/H = over_object - M.putItemFromInventoryInHandIfPossible(src, H.held_index) - return ..() - -/obj/item/watertank/attackby(obj/item/W, mob/user, params) - if(W == noz) - remove_noz() - return 1 - else - return ..() - -/obj/item/watertank/dropped(mob/user) - ..() - remove_noz() - -// This mister item is intended as an extension of the watertank and always attached to it. -// Therefore, it's designed to be "locked" to the player's hands or extended back onto -// the watertank backpack. Allowing it to be placed elsewhere or created without a parent -// watertank object will likely lead to weird behaviour or runtimes. -/obj/item/reagent_containers/spray/mister - name = "water mister" - desc = "" - icon = 'icons/obj/hydroponics/equipment.dmi' - icon_state = "mister" - item_state = "mister" - lefthand_file = 'icons/mob/inhands/equipment/mister_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/mister_righthand.dmi' - w_class = WEIGHT_CLASS_BULKY - amount_per_transfer_from_this = 50 - possible_transfer_amounts = list(25,50,100) - volume = 500 - item_flags = NOBLUDGEON | ABSTRACT // don't put in storage - slot_flags = 0 - - var/obj/item/watertank/tank - -/obj/item/reagent_containers/spray/mister/Initialize() - . = ..() - tank = loc - if(!istype(tank)) - return INITIALIZE_HINT_QDEL - reagents = tank.reagents //This mister is really just a proxy for the tank's reagents - -/obj/item/reagent_containers/spray/mister/attack_self() - return - -/obj/item/reagent_containers/spray/mister/doMove(atom/destination) - if(destination && (destination != tank.loc || !ismob(destination))) - if (loc != tank) - to_chat(tank.loc, "The mister snaps back onto the watertank.") - destination = tank - ..() - -/obj/item/reagent_containers/spray/mister/afterattack(obj/target, mob/user, proximity) - if(target.loc == loc) //Safety check so you don't fill your mister with mutagen or something and then blast myself in the face with it - return - ..() - -//Janitor tank -/obj/item/watertank/janitor - name = "backpack cleaner tank" - desc = "" - icon_state = "waterbackpackjani" - item_state = "waterbackpackjani" - custom_price = 100 - -/obj/item/watertank/janitor/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/space_cleaner, 500) - -/obj/item/reagent_containers/spray/mister/janitor - name = "janitor spray nozzle" - desc = "" - icon = 'icons/obj/hydroponics/equipment.dmi' - icon_state = "misterjani" - item_state = "misterjani" - lefthand_file = 'icons/mob/inhands/equipment/mister_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/mister_righthand.dmi' - amount_per_transfer_from_this = 5 - possible_transfer_amounts = list() - current_range = 5 - spray_range = 5 - -/obj/item/watertank/janitor/make_noz() - return new /obj/item/reagent_containers/spray/mister/janitor(src) - -/obj/item/reagent_containers/spray/mister/janitor/attack_self(mob/user) - amount_per_transfer_from_this = (amount_per_transfer_from_this == 10 ? 5 : 10) - to_chat(user, "I [amount_per_transfer_from_this == 10 ? "remove" : "fix"] the nozzle. You'll now use [amount_per_transfer_from_this] units per spray.") - -//ATMOS FIRE FIGHTING BACKPACK - -#define EXTINGUISHER 0 -#define RESIN_LAUNCHER 1 -#define RESIN_FOAM 2 - -/obj/item/watertank/atmos - name = "backpack firefighter tank" - desc = "" - item_state = "waterbackpackatmos" - icon_state = "waterbackpackatmos" - volume = 200 - slowdown = 0 - -/obj/item/watertank/atmos/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/water, 200) - -/obj/item/watertank/atmos/make_noz() - return new /obj/item/extinguisher/mini/nozzle(src) - -/obj/item/watertank/atmos/dropped(mob/user) - ..() - icon_state = "waterbackpackatmos" - if(istype(noz, /obj/item/extinguisher/mini/nozzle)) - var/obj/item/extinguisher/mini/nozzle/N = noz - N.nozzle_mode = 0 - -/obj/item/extinguisher/mini/nozzle - name = "extinguisher nozzle" - desc = "" - icon = 'icons/obj/hydroponics/equipment.dmi' - icon_state = "atmos_nozzle" - item_state = "nozzleatmos" - lefthand_file = 'icons/mob/inhands/equipment/mister_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/mister_righthand.dmi' - safety = 0 - max_water = 200 - power = 8 - force = 10 - precision = 1 - cooling_power = 5 - w_class = WEIGHT_CLASS_HUGE - item_flags = ABSTRACT // don't put in storage - var/obj/item/watertank/tank - var/nozzle_mode = 0 - var/metal_synthesis_cooldown = 0 - var/resin_cooldown = 0 - -/obj/item/extinguisher/mini/nozzle/Initialize() - . = ..() - tank = loc - if (!istype(tank)) - return INITIALIZE_HINT_QDEL - reagents = tank.reagents - max_water = tank.volume - - -/obj/item/extinguisher/mini/nozzle/doMove(atom/destination) - if(destination && (destination != tank.loc || !ismob(destination))) - if(loc != tank) - to_chat(tank.loc, "The nozzle snaps back onto the tank.") - destination = tank - ..() - -/obj/item/extinguisher/mini/nozzle/attack_self(mob/user) - switch(nozzle_mode) - if(EXTINGUISHER) - nozzle_mode = RESIN_LAUNCHER - tank.icon_state = "waterbackpackatmos_1" - to_chat(user, "Swapped to resin launcher.") - return - if(RESIN_LAUNCHER) - nozzle_mode = RESIN_FOAM - tank.icon_state = "waterbackpackatmos_2" - to_chat(user, "Swapped to resin foamer.") - return - if(RESIN_FOAM) - nozzle_mode = EXTINGUISHER - tank.icon_state = "waterbackpackatmos_0" - to_chat(user, "Swapped to water extinguisher.") - return - return - -/obj/item/extinguisher/mini/nozzle/afterattack(atom/target, mob/user) - if(nozzle_mode == EXTINGUISHER) - ..() - return - var/Adj = user.Adjacent(target) - if(Adj) - AttemptRefill(target, user) - if(nozzle_mode == RESIN_LAUNCHER) - if(Adj) - return //Safety check so you don't blast myself trying to refill your tank - var/datum/reagents/R = reagents - if(R.total_volume < 100) - to_chat(user, "I need at least 100 units of water to use the resin launcher!") - return - if(resin_cooldown) - to_chat(user, "Resin launcher is still recharging...") - return - resin_cooldown = TRUE - R.remove_any(100) - var/obj/effect/resin_container/A = new (get_turf(src)) - log_game("[key_name(user)] used Resin Launcher at [AREACOORD(user)].") - playsound(src,'sound/blank.ogg',40,TRUE) - for(var/a=0, a<5, a++) - step_towards(A, target) - sleep(2) - A.Smoke() - addtimer(VARSET_CALLBACK(src, resin_cooldown, FALSE), 10 SECONDS) - return - if(nozzle_mode == RESIN_FOAM) - if(!Adj|| !isturf(target)) - return - for(var/S in target) - if(istype(S, /obj/effect/particle_effect/foam/metal/resin) || istype(S, /obj/structure/foamedmetal/resin)) - to_chat(user, "There's already resin here!") - return - if(metal_synthesis_cooldown < 5) - var/obj/effect/particle_effect/foam/metal/resin/F = new (get_turf(target)) - F.amount = 0 - metal_synthesis_cooldown++ - addtimer(CALLBACK(src, PROC_REF(reduce_metal_synth_cooldown)), 10 SECONDS) - else - to_chat(user, "Resin foam mix is still being synthesized...") - return - -/obj/item/extinguisher/mini/nozzle/proc/reduce_metal_synth_cooldown() - metal_synthesis_cooldown-- - -/obj/effect/resin_container - name = "resin container" - desc = "" - icon = 'icons/effects/effects.dmi' - icon_state = "frozen_smoke_capsule" - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - pass_flags = PASSTABLE - anchored = TRUE - -/obj/effect/resin_container/proc/Smoke() - var/obj/effect/particle_effect/foam/metal/resin/S = new /obj/effect/particle_effect/foam/metal/resin(get_turf(loc)) - S.amount = 4 - playsound(src,'sound/blank.ogg',100,TRUE) - qdel(src) - -#undef EXTINGUISHER -#undef RESIN_LAUNCHER -#undef RESIN_FOAM - -/obj/item/reagent_containers/chemtank - name = "backpack chemical injector" - desc = "" - icon = 'icons/obj/hydroponics/equipment.dmi' - icon_state = "waterbackpackchem" - item_state = "waterbackpackchem" - lefthand_file = 'icons/mob/inhands/equipment/backpack_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/backpack_righthand.dmi' - w_class = WEIGHT_CLASS_BULKY - slot_flags = ITEM_SLOT_BACK - slowdown = 1 - actions_types = list(/datum/action/item_action/activate_injector) - - var/on = FALSE - volume = 300 - var/usage_ratio = 5 //5 unit added per 1 removed - var/injection_amount = 1 - amount_per_transfer_from_this = 5 - reagent_flags = OPENCONTAINER - spillable = FALSE - possible_transfer_amounts = list(5,10,15) - fill_icon_thresholds = list(0, 15, 60) - fill_icon_state = "backpack" - -/obj/item/reagent_containers/chemtank/ui_action_click() - toggle_injection() - -/obj/item/reagent_containers/chemtank/item_action_slot_check(slot, mob/user) - if(slot == SLOT_BACK) - return 1 - -/obj/item/reagent_containers/chemtank/proc/toggle_injection() - var/mob/living/carbon/human/user = usr - if(!istype(user)) - return - if (user.get_item_by_slot(SLOT_BACK) != src) - to_chat(user, "The chemtank needs to be on your back before you can activate it!") - return - if(on) - turn_off() - else - turn_on() - -//Todo : cache these. -/obj/item/reagent_containers/chemtank/worn_overlays(isinhands = FALSE) //apply chemcolor and level - . = list() - //inhands + reagent_filling - if(!isinhands && reagents.total_volume) - var/mutable_appearance/filling = mutable_appearance('icons/obj/reagentfillings.dmi', "backpackmob-10") - - var/percent = round((reagents.total_volume / volume) * 100) - switch(percent) - if(0 to 15) - filling.icon_state = "backpackmob-10" - if(16 to 60) - filling.icon_state = "backpackmob50" - if(61 to INFINITY) - filling.icon_state = "backpackmob100" - - filling.color = mix_color_from_reagents(reagents.reagent_list) - . += filling - -/obj/item/reagent_containers/chemtank/proc/turn_on() - on = TRUE - START_PROCESSING(SSobj, src) - if(ismob(loc)) - to_chat(loc, "[src] turns on.") - -/obj/item/reagent_containers/chemtank/proc/turn_off() - on = FALSE - STOP_PROCESSING(SSobj, src) - if(ismob(loc)) - to_chat(loc, "[src] turns off.") - -/obj/item/reagent_containers/chemtank/process() - if(!ishuman(loc)) - turn_off() - return - if(!reagents.total_volume) - turn_off() - return - var/mob/living/carbon/human/user = loc - if(user.back != src) - turn_off() - return - - var/used_amount = injection_amount/usage_ratio - reagents.reaction(user, INJECT,injection_amount,0) - reagents.trans_to(user,used_amount,multiplier=usage_ratio) - update_icon() - user.update_inv_back() //for overlays update - -//Operator backpack spray -/obj/item/watertank/op - name = "backpack water tank" - desc = "" - icon_state = "waterbackpackop" - item_state = "waterbackpackop" - w_class = WEIGHT_CLASS_NORMAL - volume = 2000 - slowdown = 0 - -/obj/item/watertank/op/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/toxin/mutagen,350) - reagents.add_reagent(/datum/reagent/napalm,125) - reagents.add_reagent(/datum/reagent/fuel,125) - reagents.add_reagent(/datum/reagent/clf3,300) - reagents.add_reagent(/datum/reagent/cryptobiolin,350) - reagents.add_reagent(/datum/reagent/toxin/plasma,250) - reagents.add_reagent(/datum/reagent/consumable/condensedcapsaicin,500) - -/obj/item/reagent_containers/spray/mister/op - desc = "" - icon = 'icons/obj/hydroponics/equipment.dmi' - icon_state = "misterop" - item_state = "misterop" - lefthand_file = 'icons/mob/inhands/equipment/mister_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/mister_righthand.dmi' - w_class = WEIGHT_CLASS_BULKY - amount_per_transfer_from_this = 100 - possible_transfer_amounts = list(75,100,150) - -/obj/item/watertank/op/make_noz() - return new /obj/item/reagent_containers/spray/mister/op(src) diff --git a/code/game/objects/items/theft_tools.dm b/code/game/objects/items/theft_tools.dm deleted file mode 100644 index 490c737ff0..0000000000 --- a/code/game/objects/items/theft_tools.dm +++ /dev/null @@ -1,265 +0,0 @@ -//Items for nuke theft, supermatter theft traitor objective - - -// STEALING THE NUKE - -//the nuke core - objective item -/obj/item/nuke_core - name = "plutonium core" - desc = "" - icon = 'icons/obj/nuke_tools.dmi' - icon_state = "plutonium_core" - item_state = "plutoniumcore" - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF - var/pulse = 0 - var/cooldown = 0 - var/pulseicon = "plutonium_core_pulse" - -/obj/item/nuke_core/Initialize() - . = ..() - START_PROCESSING(SSobj, src) - -/obj/item/nuke_core/Destroy() - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/item/nuke_core/attackby(obj/item/nuke_core_container/container, mob/user) - if(istype(container)) - container.load(src, user) - else - return ..() - -/obj/item/nuke_core/process() - if(cooldown < world.time - 60) - cooldown = world.time - flick(pulseicon, src) - radiation_pulse(src, 400, 2) - -/obj/item/nuke_core/suicide_act(mob/user) - user.visible_message("[user] is rubbing [src] against [user.p_them()]self! It looks like [user.p_theyre()] trying to commit suicide!") - return (TOXLOSS) - -//nuke core box, for carrying the core -/obj/item/nuke_core_container - name = "nuke core container" - desc = "" - icon = 'icons/obj/nuke_tools.dmi' - icon_state = "core_container_empty" - item_state = "tile" - lefthand_file = 'icons/mob/inhands/misc/tiles_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/tiles_righthand.dmi' - var/obj/item/nuke_core/core - -/obj/item/nuke_core_container/Destroy() - QDEL_NULL(core) - return ..() - -/obj/item/nuke_core_container/proc/load(obj/item/nuke_core/ncore, mob/user) - if(core || !istype(ncore)) - return FALSE - ncore.forceMove(src) - core = ncore - icon_state = "core_container_loaded" - to_chat(user, "Container is sealing...") - addtimer(CALLBACK(src, PROC_REF(seal)), 50) - return TRUE - -/obj/item/nuke_core_container/proc/seal() - if(istype(core)) - STOP_PROCESSING(SSobj, core) - icon_state = "core_container_sealed" - playsound(src, 'sound/blank.ogg', 60, TRUE) - if(ismob(loc)) - to_chat(loc, "[src] is permanently sealed, [core]'s radiation is contained.") - -/obj/item/nuke_core_container/attackby(obj/item/nuke_core/core, mob/user) - if(istype(core)) - if(!user.temporarilyRemoveItemFromInventory(core)) - to_chat(user, "The [core] is stuck to your hand!") - return - else - load(core, user) - else - return ..() - -//snowflake screwdriver, works as a key to start nuke theft, traitor only -/obj/item/screwdriver/nuke - name = "screwdriver" - desc = "" - icon = 'icons/obj/nuke_tools.dmi' - icon_state = "screwdriver_nuke" - item_state = "screwdriver_nuke" - toolspeed = 0.5 - random_color = FALSE - -/obj/item/paper/guides/antag/nuke_instructions - info = "How to break into a Nanotrasen self-destruct terminal and remove its plutonium core:
\ - " - -// STEALING SUPERMATTER - -/obj/item/paper/guides/antag/supermatter_sliver - info = "How to safely extract a supermatter sliver:
\ - " - -/obj/item/nuke_core/supermatter_sliver - name = "supermatter sliver" - desc = "" - icon_state = "supermatter_sliver" - item_state = "supermattersliver" - pulseicon = "supermatter_sliver_pulse" - -/obj/item/nuke_core/supermatter_sliver/attack_tk() // no TK dusting memes - return FALSE - -/obj/item/nuke_core/supermatter_sliver/can_be_pulled(user) // no drag memes - return FALSE - -/obj/item/nuke_core/supermatter_sliver/attackby(obj/item/W, mob/living/user, params) - if(istype(W, /obj/item/hemostat/supermatter)) - var/obj/item/hemostat/supermatter/tongs = W - if (tongs.sliver) - to_chat(user, "\The [tongs] is already holding a supermatter sliver!") - return FALSE - forceMove(tongs) - tongs.sliver = src - tongs.update_icon() - to_chat(user, "I carefully pick up [src] with [tongs].") - else if(istype(W, /obj/item/scalpel/supermatter) || istype(W, /obj/item/nuke_core_container/supermatter/)) // we don't want it to dust - return - else - to_chat(user, "As it touches \the [src], both \the [src] and \the [W] burst into dust!") - radiation_pulse(user, 100) - playsound(src, 'sound/blank.ogg', 50, TRUE) - qdel(W) - qdel(src) - -/obj/item/nuke_core/supermatter_sliver/pickup(mob/living/user) - ..() - if(!iscarbon(user)) - return FALSE - var/mob/ded = user - user.visible_message("[ded] reaches out and tries to pick up [src]. [ded.p_their()] body starts to glow and bursts into flames before flashing into dust!",\ - "I reach for [src] with your hands. That was dumb.",\ - "Everything suddenly goes silent.") - radiation_pulse(user, 500, 2) - playsound(get_turf(user), 'sound/blank.ogg', 50, TRUE) - ded.dust() - -/obj/item/nuke_core_container/supermatter - name = "supermatter bin" - desc = "" - var/obj/item/nuke_core/supermatter_sliver/sliver - -/obj/item/nuke_core_container/supermatter/Destroy() - QDEL_NULL(sliver) - return ..() - -/obj/item/nuke_core_container/supermatter/load(obj/item/hemostat/supermatter/T, mob/user) - if(!istype(T) || !T.sliver) - return FALSE - T.sliver.forceMove(src) - sliver = T.sliver - T.sliver = null - T.icon_state = "supermatter_tongs" - icon_state = "core_container_loaded" - to_chat(user, "Container is sealing...") - addtimer(CALLBACK(src, PROC_REF(seal)), 50) - return TRUE - -/obj/item/nuke_core_container/supermatter/seal() - if(istype(sliver)) - STOP_PROCESSING(SSobj, sliver) - icon_state = "core_container_sealed" - playsound(src, 'sound/blank.ogg', 60, TRUE) - if(ismob(loc)) - to_chat(loc, "[src] is permanently sealed, [sliver] is safely contained.") - -/obj/item/nuke_core_container/supermatter/attackby(obj/item/hemostat/supermatter/tongs, mob/user) - if(istype(tongs)) - //try to load shard into core - load(tongs, user) - else - return ..() - -/obj/item/scalpel/supermatter - name = "supermatter scalpel" - desc = "" - icon = 'icons/obj/nuke_tools.dmi' - icon_state = "supermatter_scalpel" - toolspeed = 0.5 - damtype = "fire" - usesound = 'sound/blank.ogg' - var/usesLeft - -/obj/item/scalpel/supermatter/Initialize() - . = ..() - usesLeft = rand(2, 4) - -/obj/item/hemostat/supermatter - name = "supermatter extraction tongs" - desc = "" - icon = 'icons/obj/nuke_tools.dmi' - icon_state = "supermatter_tongs" - toolspeed = 0.75 - damtype = "fire" - var/obj/item/nuke_core/supermatter_sliver/sliver - -/obj/item/hemostat/supermatter/Destroy() - QDEL_NULL(sliver) - return ..() - -/obj/item/hemostat/supermatter/update_icon() - if(sliver) - icon_state = "supermatter_tongs_loaded" - else - icon_state = "supermatter_tongs" - -/obj/item/hemostat/supermatter/afterattack(atom/O, mob/user, proximity) - . = ..() - if(!sliver) - return - if(proximity && ismovableatom(O) && O != sliver) - Consume(O, user) - -/obj/item/hemostat/supermatter/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) // no instakill supermatter javelins - if(sliver) - sliver.forceMove(loc) - visible_message("\The [sliver] falls out of \the [src] as it hits the ground.") - sliver = null - update_icon() - ..() - -/obj/item/hemostat/supermatter/proc/Consume(atom/movable/AM, mob/user) - if(ismob(AM)) - var/mob/victim = AM - victim.dust() - message_admins("[src] has consumed [key_name_admin(victim)] [ADMIN_JMP(src)].") - investigate_log("has consumed [key_name(victim)].", "supermatter") - else - investigate_log("has consumed [AM].", "supermatter") - qdel(AM) - if (user) - user.visible_message("As [user] touches [AM] with \the [src], both flash into dust and silence fills the room...",\ - "I touch [AM] with [src], and everything suddenly goes silent.\n[AM] and [sliver] flash into dust, and soon as you can register this, you do as well.",\ - "Everything suddenly goes silent.") - user.dust() - radiation_pulse(src, 500, 2) - playsound(src, 'sound/blank.ogg', 50, TRUE) - QDEL_NULL(sliver) - update_icon() diff --git a/code/game/objects/items/tools/crowbar.dm b/code/game/objects/items/tools/crowbar.dm deleted file mode 100644 index 14ddae729f..0000000000 --- a/code/game/objects/items/tools/crowbar.dm +++ /dev/null @@ -1,114 +0,0 @@ -/obj/item/crowbar - name = "pocket crowbar" - desc = "" - icon = 'icons/obj/tools.dmi' - icon_state = "crowbar" - lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' - usesound = 'sound/blank.ogg' - flags_1 = CONDUCT_1 - slot_flags = ITEM_SLOT_BELT - force = 5 - throwforce = 7 - w_class = WEIGHT_CLASS_SMALL - custom_materials = list(/datum/material/iron=50) - drop_sound = 'sound/blank.ogg' - pickup_sound = 'sound/blank.ogg' - - attack_verb = list("attacked", "bashed", "battered", "bludgeoned", "whacked") - tool_behaviour = TOOL_CROWBAR - toolspeed = 1 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 30) - var/force_opens = FALSE - -/obj/item/crowbar/suicide_act(mob/user) - user.visible_message("[user] is beating [user.p_them()]self to death with [src]! It looks like [user.p_theyre()] trying to commit suicide!") - playsound(loc, 'sound/blank.ogg', 50, TRUE, -1) - return (BRUTELOSS) - -/obj/item/crowbar/red - icon_state = "crowbar_red" - force = 8 - -/obj/item/crowbar/abductor - name = "alien crowbar" - desc = "" - icon = 'icons/obj/abductor.dmi' - usesound = 'sound/blank.ogg' - icon_state = "crowbar" - toolspeed = 0.1 - - -/obj/item/crowbar/large - name = "crowbar" - desc = "" - force = 12 - w_class = WEIGHT_CLASS_NORMAL - throw_speed = 3 - throw_range = 3 - custom_materials = list(/datum/material/iron=70) - icon_state = "crowbar_large" - item_state = "crowbar" - toolspeed = 0.7 - -/obj/item/crowbar/power - name = "jaws of life" - desc = "" - icon_state = "jaws_pry" - item_state = "jawsoflife" - lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' - custom_materials = list(/datum/material/iron=150,/datum/material/silver=50,/datum/material/titanium=25) - usesound = 'sound/blank.ogg' - force = 15 - toolspeed = 0.7 - force_opens = TRUE - -/obj/item/crowbar/power/examine() - . = ..() - . += " It's fitted with a [tool_behaviour == TOOL_CROWBAR ? "prying" : "cutting"] head." - -/obj/item/crowbar/power/suicide_act(mob/user) - if(tool_behaviour == TOOL_CROWBAR) - user.visible_message("[user] is putting [user.p_their()] head in [src], it looks like [user.p_theyre()] trying to commit suicide!") - playsound(loc, 'sound/blank.ogg', 50, TRUE, -1) - else - user.visible_message("[user] is wrapping \the [src] around [user.p_their()] neck. It looks like [user.p_theyre()] trying to rip [user.p_their()] head off!") - playsound(loc, 'sound/blank.ogg', 50, TRUE, -1) - if(iscarbon(user)) - var/mob/living/carbon/C = user - var/obj/item/bodypart/BP = C.get_bodypart(BODY_ZONE_HEAD) - if(BP) - BP.drop_limb() - playsound(loc, "desceration", 50, TRUE, -1) - return (BRUTELOSS) - -/obj/item/crowbar/power/attack_self(mob/user) - playsound(get_turf(user), 'sound/blank.ogg', 50, TRUE) - if(tool_behaviour == TOOL_CROWBAR) - tool_behaviour = TOOL_WIRECUTTER - to_chat(user, "I attach the cutting jaws to [src].") - usesound = 'sound/blank.ogg' - icon_state = "jaws_cutter" - else - tool_behaviour = TOOL_CROWBAR - to_chat(user, "I attach the prying jaws to [src].") - usesound = 'sound/blank.ogg' - icon_state = "jaws_pry" - -/obj/item/crowbar/power/attack(mob/living/carbon/C, mob/user) - if(istype(C) && C.handcuffed && tool_behaviour == TOOL_WIRECUTTER) - user.visible_message("[user] cuts [C]'s restraints with [src]!") - qdel(C.handcuffed) - return - else - ..() - -/obj/item/crowbar/cyborg - name = "hydraulic crowbar" - desc = "" - icon = 'icons/obj/items_cyborg.dmi' - icon_state = "crowbar_cyborg" - usesound = 'sound/blank.ogg' - force = 10 - toolspeed = 0.5 diff --git a/code/game/objects/items/tools/screwdriver.dm b/code/game/objects/items/tools/screwdriver.dm deleted file mode 100644 index 6123887106..0000000000 --- a/code/game/objects/items/tools/screwdriver.dm +++ /dev/null @@ -1,150 +0,0 @@ -/obj/item/screwdriver - name = "screwdriver" - desc = "" - icon = 'icons/obj/tools.dmi' - icon_state = "screwdriver_map" - item_state = "screwdriver" - lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' - flags_1 = CONDUCT_1 - slot_flags = ITEM_SLOT_BELT - force = 5 - w_class = WEIGHT_CLASS_TINY - throwforce = 5 - throw_speed = 3 - throw_range = 5 - custom_materials = list(/datum/material/iron=75) - attack_verb = list("stabbed") - hitsound = 'sound/blank.ogg' - usesound = list('sound/blank.ogg') - tool_behaviour = TOOL_SCREWDRIVER - toolspeed = 1 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 30) - drop_sound = 'sound/blank.ogg' - pickup_sound = 'sound/blank.ogg' - var/random_color = TRUE //if the screwdriver uses random coloring - var/static/list/screwdriver_colors = list( - "blue" = rgb(24, 97, 213), - "red" = rgb(255, 0, 0), - "pink" = rgb(213, 24, 141), - "brown" = rgb(160, 82, 18), - "green" = rgb(14, 127, 27), - "cyan" = rgb(24, 162, 213), - "yellow" = rgb(255, 165, 0) - ) - -/obj/item/screwdriver/suicide_act(mob/user) - user.visible_message("[user] is stabbing [src] into [user.p_their()] [pick("temple", "heart")]! It looks like [user.p_theyre()] trying to commit suicide!") - return(BRUTELOSS) - -/obj/item/screwdriver/Initialize() - . = ..() - if(random_color) //random colors! - icon_state = "screwdriver" - var/our_color = pick(screwdriver_colors) - add_atom_colour(screwdriver_colors[our_color], FIXED_COLOUR_PRIORITY) - update_icon() - if(prob(75)) - pixel_y = rand(0, 16) - -/obj/item/screwdriver/update_icon() - if(!random_color) //icon override - return - cut_overlays() - var/mutable_appearance/base_overlay = mutable_appearance(icon, "screwdriver_screwybits") - base_overlay.appearance_flags = RESET_COLOR - add_overlay(base_overlay) - -/obj/item/screwdriver/worn_overlays(isinhands = FALSE, icon_file) - . = list() - if(isinhands && random_color) - var/mutable_appearance/M = mutable_appearance(icon_file, "screwdriver_head") - M.appearance_flags = RESET_COLOR - . += M - -/obj/item/screwdriver/get_belt_overlay() - if(random_color) - var/mutable_appearance/body = mutable_appearance('icons/obj/clothing/belt_overlays.dmi', "screwdriver") - var/mutable_appearance/head = mutable_appearance('icons/obj/clothing/belt_overlays.dmi', "screwdriver_head") - body.color = color - head.add_overlay(body) - return head - else - return mutable_appearance('icons/obj/clothing/belt_overlays.dmi', icon_state) - -/obj/item/screwdriver/attack(mob/living/carbon/M, mob/living/carbon/user) - if(!istype(M)) - return ..() - if(user.zone_selected != BODY_ZONE_PRECISE_R_EYE && user.zone_selected != BODY_ZONE_HEAD) - return ..() - if(HAS_TRAIT(user, TRAIT_PACIFISM)) - to_chat(user, "I don't want to harm [M]!") - return - if(HAS_TRAIT(user, TRAIT_CLUMSY) && prob(50)) - M = user - return eyestab(M,user) - -/obj/item/screwdriver/abductor - name = "alien screwdriver" - desc = "" - icon = 'icons/obj/abductor.dmi' - icon_state = "screwdriver_a" - item_state = "screwdriver_nuke" - usesound = 'sound/blank.ogg' - toolspeed = 0.1 - random_color = FALSE - -/obj/item/screwdriver/abductor/get_belt_overlay() - return mutable_appearance('icons/obj/clothing/belt_overlays.dmi', "screwdriver_nuke") - -/obj/item/screwdriver/power - name = "hand drill" - desc = "" - icon_state = "drill_screw" - item_state = "drill" - lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' - custom_materials = list(/datum/material/iron=150,/datum/material/silver=50,/datum/material/titanium=25) //done for balance reasons, making them high value for research, but harder to get - force = 8 //might or might not be too high, subject to change - w_class = WEIGHT_CLASS_SMALL - throwforce = 8 - throw_speed = 2 - throw_range = 3//it's heavier than a screw driver/wrench, so it does more damage, but can't be thrown as far - attack_verb = list("drilled", "screwed", "jabbed","whacked") - hitsound = 'sound/blank.ogg' - usesound = 'sound/blank.ogg' - toolspeed = 0.7 - random_color = FALSE - -/obj/item/screwdriver/power/examine() - . = ..() - . += " It's fitted with a [tool_behaviour == TOOL_SCREWDRIVER ? "screw" : "bolt"] bit." - -/obj/item/screwdriver/power/suicide_act(mob/user) - if(tool_behaviour == TOOL_SCREWDRIVER) - user.visible_message("[user] is putting [src] to [user.p_their()] temple. It looks like [user.p_theyre()] trying to commit suicide!") - else - user.visible_message("[user] is pressing [src] against [user.p_their()] head! It looks like [user.p_theyre()] trying to commit suicide!") - playsound(loc, 'sound/blank.ogg', 50, TRUE, -1) - return(BRUTELOSS) - -/obj/item/screwdriver/power/attack_self(mob/user) - playsound(get_turf(user), 'sound/blank.ogg', 50, TRUE) - if(tool_behaviour == TOOL_SCREWDRIVER) - tool_behaviour = TOOL_WRENCH - to_chat(user, "I attach the bolt bit to [src].") - icon_state = "drill_bolt" - else - tool_behaviour = TOOL_SCREWDRIVER - to_chat(user, "I attach the screw bit to [src].") - icon_state = "drill_screw" - -/obj/item/screwdriver/cyborg - name = "automated screwdriver" - desc = "" - icon = 'icons/obj/items_cyborg.dmi' - icon_state = "screwdriver_cyborg" - hitsound = 'sound/blank.ogg' - usesound = 'sound/blank.ogg' - toolspeed = 0.5 - random_color = FALSE diff --git a/code/game/objects/items/tools/weldingtool.dm b/code/game/objects/items/tools/weldingtool.dm deleted file mode 100644 index d9d280fe4e..0000000000 --- a/code/game/objects/items/tools/weldingtool.dm +++ /dev/null @@ -1,338 +0,0 @@ -#define WELDER_FUEL_BURN_INTERVAL 13 -/obj/item/weldingtool - name = "welding tool" - desc = "" - icon = 'icons/obj/tools.dmi' - icon_state = "welder" - item_state = "welder" - lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' - flags_1 = CONDUCT_1 - slot_flags = ITEM_SLOT_BELT - force = 3 - throwforce = 5 - hitsound = "swing_hit" - usesound = list('sound/blank.ogg') - drop_sound = 'sound/blank.ogg' - pickup_sound = 'sound/blank.ogg' - var/acti_sound = 'sound/blank.ogg' - var/deac_sound = 'sound/blank.ogg' - throw_speed = 3 - throw_range = 5 - w_class = WEIGHT_CLASS_SMALL - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 30) - resistance_flags = FIRE_PROOF - - custom_materials = list(/datum/material/iron=70, /datum/material/glass=30) - var/welding = 0 //Whether or not the welding tool is off(0), on(1) or currently welding(2) - var/status = TRUE //Whether the welder is secured or unsecured (able to attach rods to it to make a flamethrower) - var/max_fuel = 20 //The max amount of fuel the welder can hold - var/change_icons = 1 - var/can_off_process = 0 - var/light_intensity = 2 //how powerful the emitted light is when used. - var/progress_flash_divisor = 10 - var/burned_fuel_for = 0 //when fuel was last removed - heat = 3800 - tool_behaviour = TOOL_WELDER - toolspeed = 1 - -/obj/item/weldingtool/Initialize() - . = ..() - create_reagents(max_fuel) - reagents.add_reagent(/datum/reagent/fuel, max_fuel) - update_icon() - - -/obj/item/weldingtool/proc/update_torch() - if(welding) - add_overlay("[initial(icon_state)]-on") - item_state = "[initial(item_state)]1" - else - item_state = "[initial(item_state)]" - - -/obj/item/weldingtool/update_icon() - cut_overlays() - if(change_icons) - var/ratio = get_fuel() / max_fuel - ratio = CEILING(ratio*4, 1) * 25 - add_overlay("[initial(icon_state)][ratio]") - update_torch() - return - - -/obj/item/weldingtool/process() - switch(welding) - if(0) - force = 3 - damtype = "brute" - update_icon() - if(!can_off_process) - STOP_PROCESSING(SSobj, src) - return - //Welders left on now use up fuel, but lets not have them run out quite that fast - if(1) - force = 15 - damtype = "fire" - ++burned_fuel_for - if(burned_fuel_for >= WELDER_FUEL_BURN_INTERVAL) - use(1) - update_icon() - - //This is to start fires. process() is only called if the welder is on. - open_flame() - - -/obj/item/weldingtool/suicide_act(mob/user) - user.visible_message("[user] welds [user.p_their()] every orifice closed! It looks like [user.p_theyre()] trying to commit suicide!") - return (FIRELOSS) - - -/obj/item/weldingtool/attackby(obj/item/I, mob/user, params) - . = ..() - update_icon() - -/obj/item/weldingtool/proc/explode() - var/turf/T = get_turf(loc) - var/plasmaAmount = reagents.get_reagent_amount(/datum/reagent/toxin/plasma) - dyn_explosion(T, plasmaAmount/5)//20 plasma in a standard welder has a 4 power explosion. no breaches, but enough to kill/dismember holder - qdel(src) - -/obj/item/weldingtool/attack(mob/living/carbon/human/H, mob/user) - if(!istype(H)) - return ..() - - var/obj/item/bodypart/affecting = H.get_bodypart(check_zone(user.zone_selected)) - - if(affecting && affecting.status == BODYPART_ROBOTIC && user.used_intent.type != INTENT_HARM) - if(src.use_tool(H, user, 0, volume=50, amount=1)) - if(user == H) - user.visible_message("[user] starts to fix some of the dents on [H]'s [affecting.name].", - "I start fixing some of the dents on [H == user ? "your" : "[H]'s"] [affecting.name].") - if(!do_mob(user, H, 50)) - return - item_heal_robotic(H, user, 15, 0) - else - return ..() - -/obj/item/weldingtool/afterattack(atom/O, mob/user, proximity) - . = ..() - if(!proximity) - return - - if(isOn()) - handle_fuel_and_temps(1, user) - - if(!QDELETED(O) && isliving(O)) // can't ignite something that doesn't exist - var/mob/living/L = O - if(L.IgniteMob()) - message_admins("[ADMIN_LOOKUPFLW(user)] set [key_name_admin(L)] on fire with [src] at [AREACOORD(user)]") - log_game("[key_name(user)] set [key_name(L)] on fire with [src] at [AREACOORD(user)]") - - if(!status && O.is_refillable()) - reagents.trans_to(O, reagents.total_volume, transfered_by = user) - to_chat(user, "I empty [src]'s fuel tank into [O].") - update_icon() - -/obj/item/weldingtool/attack_qdeleted(atom/O, mob/user, proximity) - . = ..() - if(!proximity) - return - - if(isOn()) - handle_fuel_and_temps(1, user) - - if(!QDELETED(O) && isliving(O)) // can't ignite something that doesn't exist - var/mob/living/L = O - if(L.IgniteMob()) - message_admins("[ADMIN_LOOKUPFLW(user)] set [key_name_admin(L)] on fire with [src] at [AREACOORD(user)]") - log_game("[key_name(user)] set [key_name(L)] on fire with [src] at [AREACOORD(user)]") - -/obj/item/weldingtool/attack_self(mob/user) - if(src.reagents.has_reagent(/datum/reagent/toxin/plasma)) - message_admins("[ADMIN_LOOKUPFLW(user)] activated a rigged welder at [AREACOORD(user)].") - explode() - switched_on(user) - if(welding) - set_light(light_intensity) - - update_icon() - -// Ah fuck, I can't believe you've done this -/obj/item/weldingtool/proc/handle_fuel_and_temps(used = 0, mob/living/user) - use(used) - var/turf/location = get_turf(user) - location.hotspot_expose(700, 50, 1) - -// Returns the amount of fuel in the welder -/obj/item/weldingtool/proc/get_fuel() - return reagents.get_reagent_amount(/datum/reagent/fuel) - - -// Uses fuel from the welding tool. -/obj/item/weldingtool/use(used = 0) - if(!isOn() || !check_fuel()) - return FALSE - - if(used) - burned_fuel_for = 0 - if(get_fuel() >= used) - reagents.remove_reagent(/datum/reagent/fuel, used) - check_fuel() - return TRUE - else - return FALSE - - -//Turns off the welder if there is no more fuel (does this really need to be its own proc?) -/obj/item/weldingtool/proc/check_fuel(mob/user) - if(get_fuel() <= 0 && welding) - set_light(0) - switched_on(user) - update_icon() - //mob icon update - if(ismob(loc)) - var/mob/M = loc - M.update_inv_hands(0) - - return 0 - return 1 - -//Switches the welder on -/obj/item/weldingtool/proc/switched_on(mob/user) - if(!status) - to_chat(user, "[src] can't be turned on while unsecured!") - return - welding = !welding - if(welding) - if(get_fuel() >= 1) - to_chat(user, "I switch [src] on.") - playsound(loc, acti_sound, 50, TRUE) - force = 15 - damtype = "fire" - hitsound = 'sound/blank.ogg' - update_icon() - START_PROCESSING(SSobj, src) - else - to_chat(user, "I need more fuel!") - switched_off(user) - else - to_chat(user, "I switch [src] off.") - playsound(loc, deac_sound, 50, TRUE) - switched_off(user) - -//Switches the welder off -/obj/item/weldingtool/proc/switched_off(mob/user) - welding = 0 - set_light(0) - - force = 3 - damtype = "brute" - hitsound = "swing_hit" - update_icon() - - -/obj/item/weldingtool/examine(mob/user) - . = ..() - . += "It contains [get_fuel()] unit\s of fuel out of [max_fuel]." - -/obj/item/weldingtool/get_temperature() - return welding * heat - -//Returns whether or not the welding tool is currently on. -/obj/item/weldingtool/proc/isOn() - return welding - -// When welding is about to start, run a normal tool_use_check, then flash a mob if it succeeds. -/obj/item/weldingtool/tool_start_check(mob/living/user, amount=0) - . = tool_use_check(user, amount) - if(. && user && get_dist(get_turf(src), get_turf(user)) <= 1) - user.flash_act(light_intensity) - -// Flash the user during welding progress -/obj/item/weldingtool/tool_check_callback(mob/living/user, amount, datum/callback/extra_checks) - . = ..() - if(. && user && get_dist(get_turf(src), get_turf(user)) <= 1) - if (progress_flash_divisor == 0) - user.flash_act(min(light_intensity,1)) - progress_flash_divisor = initial(progress_flash_divisor) - else - progress_flash_divisor-- - -// If welding tool ran out of fuel during a construction task, construction fails. -/obj/item/weldingtool/tool_use_check(mob/living/user, amount) - if(!isOn() || !check_fuel()) - to_chat(user, "[src] has to be on to complete this task!") - return FALSE - - if(get_fuel() >= amount) - return TRUE - else - to_chat(user, "I need more welding fuel to complete this task!") - return FALSE - -/obj/item/weldingtool/ignition_effect(atom/A, mob/user) - if(use_tool(A, user, 0, amount=1)) - return "[user] casually lights [A] with [src], what a badass." - else - return "" - -/obj/item/weldingtool/largetank - name = "industrial welding tool" - desc = "" - icon_state = "indwelder" - max_fuel = 40 - custom_materials = list(/datum/material/glass=60) - -/obj/item/weldingtool/mini - name = "emergency welding tool" - desc = "" - icon_state = "miniwelder" - max_fuel = 10 - w_class = WEIGHT_CLASS_TINY - custom_materials = list(/datum/material/iron=30, /datum/material/glass=10) - change_icons = 0 - -/obj/item/weldingtool/abductor - name = "alien welding tool" - desc = "" - icon = 'icons/obj/abductor.dmi' - icon_state = "welder" - toolspeed = 0.1 - light_intensity = 0 - change_icons = 0 - -/obj/item/weldingtool/abductor/process() - if(get_fuel() <= max_fuel) - reagents.add_reagent(/datum/reagent/fuel, 1) - ..() - -/obj/item/weldingtool/hugetank - name = "upgraded industrial welding tool" - desc = "" - icon_state = "upindwelder" - item_state = "upindwelder" - max_fuel = 80 - custom_materials = list(/datum/material/iron=70, /datum/material/glass=120) - -/obj/item/weldingtool/experimental - name = "experimental welding tool" - desc = "" - icon_state = "exwelder" - item_state = "exwelder" - max_fuel = 40 - custom_materials = list(/datum/material/iron=70, /datum/material/glass=120) - var/last_gen = 0 - change_icons = 0 - can_off_process = 1 - light_intensity = 1 - toolspeed = 0.5 - var/nextrefueltick = 0 - -/obj/item/weldingtool/experimental/process() - ..() - if(get_fuel() < max_fuel && nextrefueltick < world.time) - nextrefueltick = world.time + 10 - reagents.add_reagent(/datum/reagent/fuel, 1) - -#undef WELDER_FUEL_BURN_INTERVAL diff --git a/code/game/objects/items/tools/wirecutters.dm b/code/game/objects/items/tools/wirecutters.dm deleted file mode 100644 index 21f94e8c38..0000000000 --- a/code/game/objects/items/tools/wirecutters.dm +++ /dev/null @@ -1,85 +0,0 @@ -/obj/item/wirecutters - name = "wirecutters" - desc = "" - icon = 'icons/obj/tools.dmi' - icon_state = "cutters_map" - item_state = "cutters" - lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' - flags_1 = CONDUCT_1 - slot_flags = ITEM_SLOT_BELT - force = 6 - throw_speed = 3 - throw_range = 7 - w_class = WEIGHT_CLASS_SMALL - custom_materials = list(/datum/material/iron=80) - attack_verb = list("pinched", "nipped") - hitsound = 'sound/blank.ogg' - usesound = 'sound/blank.ogg' - drop_sound = 'sound/blank.ogg' - pickup_sound = 'sound/blank.ogg' - - tool_behaviour = TOOL_WIRECUTTER - toolspeed = 1 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 30) - var/random_color = TRUE - var/static/list/wirecutter_colors = list( - "blue" = "#1861d5", - "red" = "#951710", - "pink" = "#d5188d", - "brown" = "#a05212", - "green" = "#0e7f1b", - "cyan" = "#18a2d5", - "yellow" = "#d58c18" - ) - - -/obj/item/wirecutters/Initialize() - . = ..() - if(random_color) //random colors! - icon_state = "cutters" - var/our_color = pick(wirecutter_colors) - add_atom_colour(wirecutter_colors[our_color], FIXED_COLOUR_PRIORITY) - update_icon() - -/obj/item/wirecutters/update_icon() - if(!random_color) //icon override - return - cut_overlays() - var/mutable_appearance/base_overlay = mutable_appearance(icon, "cutters_cutty_thingy") - base_overlay.appearance_flags = RESET_COLOR - add_overlay(base_overlay) - -/obj/item/wirecutters/attack(mob/living/carbon/C, mob/user) - if(istype(C) && C.handcuffed && istype(C.handcuffed, /obj/item/restraints/handcuffs/cable)) - user.visible_message("[user] cuts [C]'s restraints with [src]!") - qdel(C.handcuffed) - return - else if(istype(C) && C.has_status_effect(STATUS_EFFECT_CHOKINGSTRAND)) - to_chat(C, "I attempt to remove the durathread strand from around your neck.") - if(do_after(user, 15, null, C)) - to_chat(C, "I succesfuly remove the durathread strand.") - C.remove_status_effect(STATUS_EFFECT_CHOKINGSTRAND) - else - ..() - -/obj/item/wirecutters/suicide_act(mob/user) - user.visible_message("[user] is cutting at [user.p_their()] arteries with [src]! It looks like [user.p_theyre()] trying to commit suicide!") - playsound(loc, usesound, 50, TRUE, -1) - return (BRUTELOSS) - -/obj/item/wirecutters/abductor - name = "alien wirecutters" - desc = "" - icon = 'icons/obj/abductor.dmi' - icon_state = "cutters" - toolspeed = 0.1 - random_color = FALSE - -/obj/item/wirecutters/cyborg - name = "powered wirecutters" - desc = "" - icon = 'icons/obj/items_cyborg.dmi' - icon_state = "wirecutters_cyborg" - toolspeed = 0.5 - random_color = FALSE diff --git a/code/game/objects/items/tools/wrench.dm b/code/game/objects/items/tools/wrench.dm deleted file mode 100644 index a700341ddb..0000000000 --- a/code/game/objects/items/tools/wrench.dm +++ /dev/null @@ -1,79 +0,0 @@ -/obj/item/wrench - name = "wrench" - desc = "" - icon = 'icons/obj/tools.dmi' - icon_state = "wrench" - lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' - flags_1 = CONDUCT_1 - slot_flags = ITEM_SLOT_BELT - force = 5 - throwforce = 7 - w_class = WEIGHT_CLASS_SMALL - usesound = 'sound/blank.ogg' - custom_materials = list(/datum/material/iron=150) - drop_sound = 'sound/blank.ogg' - pickup_sound = 'sound/blank.ogg' - - attack_verb = list("bashed", "battered", "bludgeoned", "whacked") - tool_behaviour = TOOL_WRENCH - toolspeed = 1 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 30) - -/obj/item/wrench/suicide_act(mob/user) - user.visible_message("[user] is beating [user.p_them()]self to death with [src]! It looks like [user.p_theyre()] trying to commit suicide!") - playsound(loc, 'sound/blank.ogg', 50, TRUE, -1) - return (BRUTELOSS) - -/obj/item/wrench/abductor - name = "alien wrench" - desc = "" - icon = 'icons/obj/abductor.dmi' - icon_state = "wrench" - usesound = 'sound/blank.ogg' - toolspeed = 0.1 - - -/obj/item/wrench/medical - name = "medical wrench" - desc = "" - icon_state = "wrench_medical" - force = 2 //MEDICAL - throwforce = 4 - - attack_verb = list("healed", "medicaled", "tapped", "poked", "analyzed") //"cobbyed" - -/obj/item/wrench/medical/suicide_act(mob/living/user) - user.visible_message("[user] is praying to the medical wrench to take [user.p_their()] soul. It looks like [user.p_theyre()] trying to commit suicide!") - user.Stun(100, ignore_canstun = TRUE)// Stun stops them from wandering off - user.light_color = "#FAE48E" - user.set_light(2) - user.add_overlay(mutable_appearance('icons/effects/genetics.dmi', "servitude", -MUTATIONS_LAYER)) - playsound(loc, 'sound/blank.ogg', 50, TRUE, -1) - - // Let the sound effect finish playing - sleep(20) - - if(!user) - return - - for(var/obj/item/W in user) - user.dropItemToGround(W) - - var/obj/item/wrench/medical/W = new /obj/item/wrench/medical(loc) - W.add_fingerprint(user) - W.desc += " For some reason, it reminds you of [user.name]." - - if(!user) - return - - user.dust() - - return OXYLOSS - -/obj/item/wrench/cyborg - name = "hydraulic wrench" - desc = "" - icon = 'icons/obj/items_cyborg.dmi' - icon_state = "wrench_cyborg" - toolspeed = 0.5 diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 39c4f71251..b58fcf8044 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -31,389 +31,6 @@ throw_range = 7 force = 0 - -/* - * Balloons - */ -/obj/item/toy/waterballoon - name = "water balloon" - desc = "" - icon = 'icons/obj/toy.dmi' - icon_state = "waterballoon-e" - item_state = "balloon-empty" - - -/obj/item/toy/waterballoon/Initialize() - . = ..() - create_reagents(10) - -/obj/item/toy/waterballoon/attack(mob/living/carbon/human/M, mob/user) - return - -/obj/item/toy/waterballoon/afterattack(atom/A as mob|obj, mob/user, proximity) - . = ..() - if(!proximity) - return - if (istype(A, /obj/structure/reagent_dispensers)) - var/obj/structure/reagent_dispensers/RD = A - if(RD.reagents.total_volume <= 0) - to_chat(user, "[RD] is empty.") - else if(reagents.total_volume >= 10) - to_chat(user, "[src] is full.") - else - A.reagents.trans_to(src, 10, transfered_by = user) - to_chat(user, "I fill the balloon with the contents of [A].") - desc = "" - update_icon() - -/obj/item/toy/waterballoon/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/reagent_containers/glass)) - if(I.reagents) - if(I.reagents.total_volume <= 0) - to_chat(user, "[I] is empty.") - else if(reagents.total_volume >= 10) - to_chat(user, "[src] is full.") - else - desc = "" - to_chat(user, "I fill the balloon with the contents of [I].") - I.reagents.trans_to(src, 10, transfered_by = user) - update_icon() - else if(I.get_sharpness()) - balloon_burst() - else - return ..() - -/obj/item/toy/waterballoon/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) - if(!..()) //was it caught by a mob? - balloon_burst(hit_atom) - -/obj/item/toy/waterballoon/proc/balloon_burst(atom/AT) - if(reagents.total_volume >= 1) - var/turf/T - if(AT) - T = get_turf(AT) - else - T = get_turf(src) - T.visible_message("[src] bursts!","I hear a pop and a splash.") - reagents.reaction(T) - for(var/atom/A in T) - reagents.reaction(A) - icon_state = "burst" - qdel(src) - -/obj/item/toy/waterballoon/update_icon() - if(src.reagents.total_volume >= 1) - icon_state = "waterballoon" - item_state = "balloon" - else - icon_state = "waterballoon-e" - item_state = "balloon-empty" - -#define BALLOON_COLORS list("red", "blue", "green", "yellow") - -/obj/item/toy/balloon - name = "balloon" - desc = "" - icon = 'icons/obj/balloons.dmi' - icon_state = "balloon" - item_state = "balloon" - lefthand_file = 'icons/mob/inhands/balloons_lefthand.dmi' - righthand_file = 'icons/mob/inhands/balloons_righthand.dmi' - w_class = WEIGHT_CLASS_BULKY - throwforce = 0 - throw_speed = 1 - throw_range = 7 - force = 0 - var/random_color = TRUE - -/obj/item/toy/balloon/Initialize(mapload) - . = ..() - if(random_color) - var/chosen_balloon_color = pick(BALLOON_COLORS) - name = "[chosen_balloon_color] [name]" - icon_state = "[icon_state]_[chosen_balloon_color]" - item_state = icon_state - -/obj/item/toy/balloon/corgi - name = "corgi balloon" - desc = "" - icon_state = "corgi" - item_state = "corgi" - random_color = FALSE - -/obj/item/toy/balloon/syndicate - name = "syndicate balloon" - desc = "" - icon_state = "syndballoon" - item_state = "syndballoon" - random_color = FALSE - -/obj/item/toy/balloon/syndicate/pickup(mob/user) - . = ..() - if(user && user.mind && user.mind.has_antag_datum(/datum/antagonist, TRUE)) - SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "badass_antag", /datum/mood_event/badass_antag) - -/obj/item/toy/balloon/syndicate/dropped(mob/user) - if(user) - SEND_SIGNAL(user, COMSIG_CLEAR_MOOD_EVENT, "badass_antag", /datum/mood_event/badass_antag) - . = ..() - - -/obj/item/toy/balloon/syndicate/Destroy() - if(ismob(loc)) - var/mob/M = loc - SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "badass_antag", /datum/mood_event/badass_antag) - . = ..() - -/* - * Fake singularity - */ -/obj/item/toy/spinningtoy - name = "gravitational singularity" - desc = "" - icon = 'icons/obj/singularity.dmi' - icon_state = "singularity_s1" - -/* - * Toy gun: Why isnt this an /obj/item/gun? - */ -/obj/item/toy/gun - name = "cap gun" - desc = "" - icon = 'icons/obj/guns/projectile.dmi' - icon_state = "revolver" - item_state = "gun" - lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi' - flags_1 = CONDUCT_1 - slot_flags = ITEM_SLOT_BELT - w_class = WEIGHT_CLASS_NORMAL - custom_materials = list(/datum/material/iron=10, /datum/material/glass=10) - attack_verb = list("struck", "pistol whipped", "hit", "bashed") - var/bullets = 7 - -/obj/item/toy/gun/examine(mob/user) - . = ..() - . += "There [bullets == 1 ? "is" : "are"] [bullets] cap\s left." - -/obj/item/toy/gun/attackby(obj/item/toy/ammo/gun/A, mob/user, params) - - if(istype(A, /obj/item/toy/ammo/gun)) - if (src.bullets >= 7) - to_chat(user, "It's already fully loaded!") - return 1 - if (A.amount_left <= 0) - to_chat(user, "There are no more caps!") - return 1 - if (A.amount_left < (7 - src.bullets)) - src.bullets += A.amount_left - to_chat(user, text("I reload [] cap\s.", A.amount_left)) - A.amount_left = 0 - else - to_chat(user, text("I reload [] cap\s.", 7 - src.bullets)) - A.amount_left -= 7 - src.bullets - src.bullets = 7 - A.update_icon() - return 1 - else - return ..() - -/obj/item/toy/gun/afterattack(atom/target as mob|obj|turf|area, mob/user, flag) - . = ..() - if (flag) - return - if (!user.IsAdvancedToolUser()) - to_chat(user, "I don't have the dexterity to do this!") - return - src.add_fingerprint(user) - if (src.bullets < 1) - user.show_message("*click*", MSG_AUDIBLE) - playsound(src, 'sound/blank.ogg', 30, TRUE) - return - playsound(user, 'sound/blank.ogg', 100, TRUE) - src.bullets-- - user.visible_message("[user] fires [src] at [target]!", \ - "I fire [src] at [target]!", \ - "I hear a gunshot!") - -/obj/item/toy/ammo/gun - name = "capgun ammo" - desc = "" - icon = 'icons/obj/ammo.dmi' - icon_state = "357OLD-7" - w_class = WEIGHT_CLASS_TINY - custom_materials = list(/datum/material/iron=10, /datum/material/glass=10) - var/amount_left = 7 - -/obj/item/toy/ammo/gun/update_icon() - src.icon_state = text("357OLD-[]", src.amount_left) - -/obj/item/toy/ammo/gun/examine(mob/user) - . = ..() - . += "There [amount_left == 1 ? "is" : "are"] [amount_left] cap\s left." - -/* - * Toy swords - */ -/obj/item/toy/sword - name = "toy sword" - desc = "" - icon = 'icons/obj/transforming_energy.dmi' - icon_state = "sword0" - item_state = "sword0" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - var/active = 0 - w_class = WEIGHT_CLASS_SMALL - attack_verb = list("attacked", "struck", "hit") - var/hacked = FALSE - var/saber_color - -/obj/item/toy/sword/attack_self(mob/user) - active = !( active ) - if (active) - to_chat(user, "I extend the plastic blade with a quick flick of your wrist.") - playsound(user, 'sound/blank.ogg', 20, TRUE) - if(hacked) - icon_state = "swordrainbow" - item_state = "swordrainbow" - else - icon_state = "swordblue" - item_state = "swordblue" - w_class = WEIGHT_CLASS_BULKY - else - to_chat(user, "I push the plastic blade back down into the handle.") - playsound(user, 'sound/blank.ogg', 20, TRUE) - icon_state = "sword0" - item_state = "sword0" - w_class = WEIGHT_CLASS_SMALL - add_fingerprint(user) - -// Copied from /obj/item/melee/transforming/energy/sword/attackby -/obj/item/toy/sword/attackby(obj/item/W, mob/living/user, params) - if(istype(W, /obj/item/toy/sword)) - if(HAS_TRAIT(W, TRAIT_NODROP) || HAS_TRAIT(src, TRAIT_NODROP)) - to_chat(user, "\the [HAS_TRAIT(src, TRAIT_NODROP) ? src : W] is stuck to your hand, you can't attach it to \the [HAS_TRAIT(src, TRAIT_NODROP) ? W : src]!") - return - else - to_chat(user, "I attach the ends of the two plastic swords, making a single double-bladed toy! You're fake-cool.") - var/obj/item/twohanded/dualsaber/toy/newSaber = new /obj/item/twohanded/dualsaber/toy(user.loc) - if(hacked) // That's right, we'll only check the "original" "sword". - newSaber.hacked = TRUE - newSaber.saber_color = "rainbow" - qdel(W) - qdel(src) - else if(W.tool_behaviour == TOOL_MULTITOOL) - if(!hacked) - hacked = TRUE - saber_color = "rainbow" - to_chat(user, "RNBW_ENGAGE") - - if(active) - icon_state = "swordrainbow" - user.update_inv_hands() - else - to_chat(user, "It's already fabulous!") - else - return ..() - -/* - * Foam armblade - */ -/obj/item/toy/foamblade - name = "foam armblade" - desc = "" - icon = 'icons/obj/toy.dmi' - icon_state = "foamblade" - item_state = "arm_blade" - lefthand_file = 'icons/mob/inhands/antag/changeling_lefthand.dmi' - righthand_file = 'icons/mob/inhands/antag/changeling_righthand.dmi' - attack_verb = list("pricked", "absorbed", "gored") - w_class = WEIGHT_CLASS_SMALL - resistance_flags = FLAMMABLE - - -/obj/item/toy/windupToolbox - name = "windup toolbox" - desc = "" - icon_state = "his_grace" - item_state = "artistic_toolbox" - lefthand_file = 'icons/mob/inhands/equipment/toolbox_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/toolbox_righthand.dmi' - var/active = FALSE - icon = 'icons/obj/items_and_weapons.dmi' - hitsound = 'sound/blank.ogg' - attack_verb = list("robusted") - -/obj/item/toy/windupToolbox/attack_self(mob/user) - if(!active) - icon_state = "his_grace_awakened" - to_chat(user, "I wind up [src], it begins to rumble.") - active = TRUE - playsound(src, 'sound/blank.ogg', 100) - Rumble() - addtimer(CALLBACK(src, PROC_REF(stopRumble)), 600) - else - to_chat(user, "[src] is already active!") - -/obj/item/toy/windupToolbox/proc/Rumble() - var/static/list/transforms - if(!transforms) - var/matrix/M1 = matrix() - var/matrix/M2 = matrix() - var/matrix/M3 = matrix() - var/matrix/M4 = matrix() - M1.Translate(-1, 0) - M2.Translate(0, 1) - M3.Translate(1, 0) - M4.Translate(0, -1) - transforms = list(M1, M2, M3, M4) - animate(src, transform=transforms[1], time=0.2, loop=-1) - animate(transform=transforms[2], time=0.1) - animate(transform=transforms[3], time=0.2) - animate(transform=transforms[4], time=0.3) - -/obj/item/toy/windupToolbox/proc/stopRumble() - icon_state = initial(icon_state) - active = FALSE - animate(src, transform=matrix()) - -/* - * Subtype of Double-Bladed Energy Swords - */ -/obj/item/twohanded/dualsaber/toy - name = "double-bladed toy sword" - desc = "" - force = 0 - throwforce = 0 - throw_speed = 1 - throw_range = 5 - force_unwielded = 0 - force_wielded = 0 - attack_verb = list("attacked", "struck", "hit") - -/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) - return 0 - -/obj/item/twohanded/dualsaber/toy/IsReflect()//Stops Toy Dualsabers from reflecting energy projectiles - return 0 - -/obj/item/toy/katana - name = "replica katana" - desc = "" - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "katana" - item_state = "katana" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - flags_1 = CONDUCT_1 - slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK - force = 5 - throwforce = 5 - w_class = WEIGHT_CLASS_NORMAL - attack_verb = list("attacked", "slashed", "stabbed", "sliced") - hitsound = 'sound/blank.ogg' - /* * Snap pops */ @@ -466,165 +83,6 @@ new /obj/item/toy/snappop/phoenix(get_turf(src)) qdel(src) - -/* - * Mech prizes - */ -/obj/item/toy/prize - icon = 'icons/obj/toy.dmi' - icon_state = "ripleytoy" - var/timer = 0 - var/cooldown = 30 - var/quiet = 0 - w_class = WEIGHT_CLASS_SMALL - -//all credit to skasi for toy mech fun ideas -/obj/item/toy/prize/attack_self(mob/user) - if(timer < world.time) - to_chat(user, "I play with [src].") - timer = world.time + cooldown - if(!quiet) - playsound(user, 'sound/blank.ogg', 20, TRUE) - else - . = ..() - -/obj/item/toy/prize/attack_hand(mob/user) - . = ..() - if(.) - return - if(loc == user) - attack_self(user) - -/obj/item/toy/prize/ripley - name = "toy Ripley" - desc = "" - -/obj/item/toy/prize/fireripley - name = "toy firefighting Ripley" - desc = "" - icon_state = "fireripleytoy" - -/obj/item/toy/prize/deathripley - name = "toy deathsquad Ripley" - desc = "" - icon_state = "deathripleytoy" - -/obj/item/toy/prize/gygax - name = "toy Gygax" - desc = "" - icon_state = "gygaxtoy" - -/obj/item/toy/prize/durand - name = "toy Durand" - desc = "" - icon_state = "durandprize" - -/obj/item/toy/prize/honk - name = "toy H.O.N.K." - desc = "" - icon_state = "honkprize" - -/obj/item/toy/prize/marauder - name = "toy Marauder" - desc = "" - icon_state = "marauderprize" - -/obj/item/toy/prize/seraph - name = "toy Seraph" - desc = "" - icon_state = "seraphprize" - -/obj/item/toy/prize/mauler - name = "toy Mauler" - desc = "" - icon_state = "maulerprize" - -/obj/item/toy/prize/odysseus - name = "toy Odysseus" - desc = "" - icon_state = "odysseusprize" - -/obj/item/toy/prize/phazon - name = "toy Phazon" - desc = "" - icon_state = "phazonprize" - -/obj/item/toy/prize/reticence - name = "toy Reticence" - desc = "" - icon_state = "reticenceprize" - quiet = 1 - - -/obj/item/toy/talking - name = "talking action figure" - desc = "" - icon = 'icons/obj/toy.dmi' - icon_state = "owlprize" - w_class = WEIGHT_CLASS_SMALL - var/cooldown = FALSE - var/messages = list("I'm super generic!", "Mathematics class is of variable difficulty!") - var/span = "danger" - var/recharge_time = 30 - - var/chattering = FALSE - var/phomeme - -/obj/item/toy/talking/attack_self(mob/user) - if(!cooldown) - activation_message(user) - playsound(loc, 'sound/blank.ogg', 20, TRUE) - - INVOKE_ASYNC(src, PROC_REF(do_toy_talk), user) - - cooldown = TRUE - addtimer(VARSET_CALLBACK(src, cooldown, FALSE), recharge_time) - return - ..() - -/obj/item/toy/talking/proc/activation_message(mob/user) - user.visible_message( - "[user] pulls the string on \the [src].", - "I pull the string on \the [src].", - "I hear a string being pulled.") - -/obj/item/toy/talking/proc/generate_messages() - return list(pick(messages)) - -/obj/item/toy/talking/proc/do_toy_talk(mob/user) - for(var/message in generate_messages()) - toy_talk(user, message) - sleep(10) - -/obj/item/toy/talking/proc/toy_talk(mob/user, message) - user.loc.visible_message("[icon2html(src, viewers(user.loc))] [message]") - if(chattering) - chatter(message, phomeme, user) - -/obj/item/toy/talking/owl - name = "owl action figure" - desc = "" - icon_state = "owlprize" - messages = list("You won't get away this time, Griffin!", "Stop right there, criminal!", "Hoot! Hoot!", "I am the night!") - chattering = TRUE - phomeme = "owl" - w_class = WEIGHT_CLASS_SMALL - -/obj/item/toy/talking/griffin - name = "griffin action figure" - desc = "" - icon_state = "griffinprize" - messages = list("You can't stop me, Owl!", "My plan is flawless! The vault is mine!", "Caaaawwww!", "You will never catch me!") - chattering = TRUE - phomeme = "griffin" - w_class = WEIGHT_CLASS_SMALL - -/* -|| A Deck of Cards for playing various games of chance || -*/ - - - /obj/item/toy/cards resistance_flags = FLAMMABLE max_integrity = 50 @@ -973,437 +431,3 @@ card_throw_range = 7 card_attack_verb = list("attacked", "sliced", "diced", "slashed", "cut") resistance_flags = NONE - -/* - * Fake nuke - */ - -/obj/item/toy/nuke - name = "\improper Nuclear Fission Explosive toy" - desc = "" - icon = 'icons/obj/toy.dmi' - icon_state = "nuketoyidle" - w_class = WEIGHT_CLASS_SMALL - var/cooldown = 0 - -/obj/item/toy/nuke/attack_self(mob/user) - if (cooldown < world.time) - cooldown = world.time + 1800 //3 minutes - user.visible_message("[user] presses a button on [src].", "I activate [src], it plays a loud noise!", "I hear the click of a button.") - sleep(5) - icon_state = "nuketoy" - playsound(src, 'sound/blank.ogg', 100, FALSE) - sleep(135) - icon_state = "nuketoycool" - sleep(cooldown - world.time) - icon_state = "nuketoyidle" - else - var/timeleft = (cooldown - world.time) - to_chat(user, "Nothing happens, and '[round(timeleft/10)]' appears on a small display.") - -/* - * Fake meteor - */ - -/obj/item/toy/minimeteor - name = "\improper Mini-Meteor" - desc = "" - icon = 'icons/obj/toy.dmi' - icon_state = "minimeteor" - w_class = WEIGHT_CLASS_SMALL - -/obj/item/toy/minimeteor/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) - if(!..()) - playsound(src, 'sound/blank.ogg', 40, TRUE) - for(var/mob/M in urange(10, src)) - if(!M.stat) - shake_camera(M, 3, 1) - qdel(src) - -/* - * Toy big red button - */ -/obj/item/toy/redbutton - name = "big red button" - desc = "" - icon = 'icons/obj/assemblies.dmi' - icon_state = "bigred" - w_class = WEIGHT_CLASS_SMALL - var/cooldown = 0 - -/obj/item/toy/redbutton/attack_self(mob/user) - if (cooldown < world.time) - cooldown = (world.time + 300) // Sets cooldown at 30 seconds - user.visible_message("[user] presses the big red button.", "I press the button, it plays a loud noise!", "The button clicks loudly.") - playsound(src, 'sound/blank.ogg', 50, FALSE) - for(var/mob/M in urange(10, src)) // Checks range - if(!M.stat) // Checks to make sure whoever's getting shaken is alive/not the AI - sleep(8) // Short delay to match up with the explosion sound - shake_camera(M, 2, 1) // Shakes player camera 2 squares for 1 second. - - else - to_chat(user, "Nothing happens.") - -/* - * Snowballs - */ - -/obj/item/toy/snowball - name = "snowball" - desc = "" - icon = 'icons/obj/toy.dmi' - icon_state = "snowball" - throwforce = 12 //pelt your enemies to death with lumps of snow - -/obj/item/toy/snowball/afterattack(atom/target as mob|obj|turf|area, mob/user) - . = ..() - if(user.dropItemToGround(src)) - throw_at(target, throw_range, throw_speed) - -/obj/item/toy/snowball/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) - if(!..()) - playsound(src, 'sound/blank.ogg', 20, TRUE) - qdel(src) - -/* - * Beach ball - */ -/obj/item/toy/beach_ball - icon = 'icons/misc/beach.dmi' - icon_state = "ball" - name = "beach ball" - item_state = "beachball" - w_class = WEIGHT_CLASS_BULKY //Stops people from hiding it in their bags/pockets - -/* - * Clockwork Watch - */ - -/obj/item/toy/clockwork_watch - name = "steampunk watch" - desc = "" - icon = 'icons/obj/clockwork_objects.dmi' - icon_state = "dread_ipad" - slot_flags = ITEM_SLOT_BELT - w_class = WEIGHT_CLASS_SMALL - var/cooldown = 0 - -/obj/item/toy/clockwork_watch/attack_self(mob/user) - if (cooldown < world.time) - cooldown = world.time + 1800 //3 minutes - user.visible_message("[user] rotates a cogwheel on [src].", "I rotate a cogwheel on [src], it plays a loud noise!", "I hear cogwheels turning.") - playsound(src, 'sound/blank.ogg', 50, FALSE) - else - to_chat(user, "The cogwheels are already turning!") - -/obj/item/toy/clockwork_watch/examine(mob/user) - . = ..() - . += "Station Time: [station_time_timestamp()]" - -/* - * Toy Dagger - */ - -/obj/item/toy/toy_dagger - name = "toy dagger" - desc = "" - icon = 'icons/obj/wizard.dmi' - icon_state = "render" - item_state = "cultdagger" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - w_class = WEIGHT_CLASS_SMALL - -/* - * Xenomorph action figure - */ - -/obj/item/toy/toy_xeno - icon = 'icons/obj/toy.dmi' - icon_state = "toy_xeno" - name = "xenomorph action figure" - desc = "" - w_class = WEIGHT_CLASS_SMALL - var/cooldown = 0 - -/obj/item/toy/toy_xeno/attack_self(mob/user) - if(cooldown <= world.time) - cooldown = (world.time + 50) //5 second cooldown - user.visible_message("[user] pulls back the string on [src].") - icon_state = "[initial(icon_state)]_used" - sleep(5) - audible_message("[icon2html(src, viewers(src))] Hiss!") - var/list/possible_sounds = list('sound/blank.ogg') - var/chosen_sound = pick(possible_sounds) - playsound(get_turf(src), chosen_sound, 50, TRUE) - addtimer(VARSET_CALLBACK(src, icon_state, "[initial(icon_state)]"), 4.5 SECONDS) - else - to_chat(user, "The string on [src] hasn't rewound all the way!") - return - -// TOY MOUSEYS :3 :3 :3 - -/obj/item/toy/cattoy - name = "toy mouse" - desc = "" - icon = 'icons/obj/toy.dmi' - icon_state = "toy_mouse" - w_class = WEIGHT_CLASS_SMALL - var/cooldown = 0 - resistance_flags = FLAMMABLE - - -/* - * Action Figures - */ - -/obj/item/toy/figure - name = "Non-Specific Action Figure action figure" - desc = null - icon = 'icons/obj/toy.dmi' - icon_state = "nuketoy" - var/cooldown = 0 - var/toysay = "What the fuck did you do?" - var/toysound = 'sound/blank.ogg' - w_class = WEIGHT_CLASS_SMALL - -/obj/item/toy/figure/Initialize() - . = ..() - desc = "" - -/obj/item/toy/figure/attack_self(mob/user as mob) - if(cooldown <= world.time) - cooldown = world.time + 50 - to_chat(user, "[src] says \"[toysay]\"") - playsound(user, toysound, 20, TRUE) - -/obj/item/toy/figure/cmo - name = "Chief Medical Officer action figure" - icon_state = "cmo" - toysay = "Suit sensors!" - -/obj/item/toy/figure/assistant - name = "Assistant action figure" - icon_state = "assistant" - toysay = "Grey tide world wide!" - -/obj/item/toy/figure/atmos - name = "Atmospheric Technician action figure" - icon_state = "atmos" - toysay = "Glory to Atmosia!" - -/obj/item/toy/figure/bartender - name = "Bartender action figure" - icon_state = "bartender" - toysay = "Where is Pun Pun?" - -/obj/item/toy/figure/borg - name = "Cyborg action figure" - icon_state = "borg" - toysay = "I. LIVE. AGAIN." - toysound = 'sound/blank.ogg' - -/obj/item/toy/figure/botanist - name = "Botanist action figure" - icon_state = "botanist" - toysay = "Blaze it!" - -/obj/item/toy/figure/captain - name = "Captain action figure" - icon_state = "captain" - toysay = "Any heads of staff?" - -/obj/item/toy/figure/cargotech - name = "Cargo Technician action figure" - icon_state = "cargotech" - toysay = "For Cargonia!" - -/obj/item/toy/figure/ce - name = "Chief Engineer action figure" - icon_state = "ce" - toysay = "Wire the solars!" - -/obj/item/toy/figure/chaplain - name = "Chaplain action figure" - icon_state = "chaplain" - toysay = "Praise Space Jesus!" - -/obj/item/toy/figure/chef - name = "Chef action figure" - icon_state = "chef" - toysay = " I'll make you into a burger!" - -/obj/item/toy/figure/chemist - name = "Chemist action figure" - icon_state = "chemist" - toysay = "Get your pills!" - -/obj/item/toy/figure/clown - name = "Clown action figure" - icon_state = "clown" - toysay = "Honk!" - toysound = 'sound/blank.ogg' - -/obj/item/toy/figure/ian - name = "Ian action figure" - icon_state = "ian" - toysay = "Arf!" - -/obj/item/toy/figure/detective - name = "Detective action figure" - icon_state = "detective" - toysay = "This airlock has grey jumpsuit and insulated glove fibers on it." - -/obj/item/toy/figure/dsquad - name = "Death Squad Officer action figure" - icon_state = "dsquad" - toysay = "Kill em all!" - -/obj/item/toy/figure/engineer - name = "Engineer action figure" - icon_state = "engineer" - toysay = "Oh god, the singularity is loose!" - -/obj/item/toy/figure/geneticist - name = "Geneticist action figure" - icon_state = "geneticist" - toysay = "Smash!" - -/obj/item/toy/figure/hop - name = "Head of Personnel action figure" - icon_state = "hop" - toysay = "Giving out all access!" - -/obj/item/toy/figure/hos - name = "Head of Security action figure" - icon_state = "hos" - toysay = "Go ahead, make my day." - -/obj/item/toy/figure/qm - name = "Quartermaster action figure" - icon_state = "qm" - toysay = "Please sign this form in triplicate and we will see about geting you a welding mask within 3 business days." - -/obj/item/toy/figure/janitor - name = "Janitor action figure" - icon_state = "janitor" - toysay = "Look at the signs, you idiot." - -/obj/item/toy/figure/lawyer - name = "Lawyer action figure" - icon_state = "lawyer" - toysay = "My client is a dirty traitor!" - -/obj/item/toy/figure/curator - name = "Curator action figure" - icon_state = "curator" - toysay = "One day while..." - -/obj/item/toy/figure/md - name = "Medical Doctor action figure" - icon_state = "md" - toysay = "The patient is already dead!" - -/obj/item/toy/figure/mime - name = "Mime action figure" - icon_state = "mime" - toysay = "..." - toysound = null - -/obj/item/toy/figure/miner - name = "Shaft Miner action figure" - icon_state = "miner" - toysay = "COLOSSUS RIGHT OUTSIDE THE BASE!" - -/obj/item/toy/figure/ninja - name = "Ninja action figure" - icon_state = "ninja" - toysay = "Oh god! Stop shooting, I'm friendly!" - -/obj/item/toy/figure/wizard - name = "Wizard action figure" - icon_state = "wizard" - toysay = "Ei Nath!" - toysound = 'sound/blank.ogg' - -/obj/item/toy/figure/rd - name = "Research Director action figure" - icon_state = "rd" - toysay = "Blowing all of the borgs!" - -/obj/item/toy/figure/roboticist - name = "Roboticist action figure" - icon_state = "roboticist" - toysay = "Big stompy mechs!" - toysound = 'sound/blank.ogg' - -/obj/item/toy/figure/scientist - name = "Scientist action figure" - icon_state = "scientist" - toysay = "I call toxins." - toysound = 'sound/blank.ogg' - -/obj/item/toy/figure/syndie - name = "Nuclear Operative action figure" - icon_state = "syndie" - toysay = "Get that fucking disk!" - -/obj/item/toy/figure/secofficer - name = "Security Officer action figure" - icon_state = "secofficer" - toysay = "I am the law!" - toysound = 'sound/blank.ogg' - -/obj/item/toy/figure/virologist - name = "Virologist action figure" - icon_state = "virologist" - toysay = "The cure is potassium!" - -/obj/item/toy/figure/warden - name = "Warden action figure" - icon_state = "warden" - toysay = "Seventeen minutes for coughing at an officer!" - - -/obj/item/toy/dummy - name = "ventriloquist dummy" - desc = "" - icon = 'icons/obj/toy.dmi' - icon_state = "assistant" - item_state = "doll" - var/doll_name = "Dummy" - -//Add changing looks when i feel suicidal about making 20 inhands for these. -/obj/item/toy/dummy/attack_self(mob/user) - var/new_name = stripped_input(usr,"What would you like to name the dummy?","Input a name",doll_name,MAX_NAME_LEN) - if(!new_name) - return - doll_name = new_name - to_chat(user, "I name the dummy as \"[doll_name]\".") - name = "[initial(name)] - [doll_name]" - -/obj/item/toy/dummy/talk_into(atom/movable/A, message, channel, list/spans, datum/language/language) - var/mob/M = A - if (istype(M)) - M.log_talk(message, LOG_SAY, tag="dummy toy") - - say(message, language) - return NOPASS - -/obj/item/toy/dummy/GetVoice() - return doll_name - -/obj/item/toy/seashell - name = "seashell" - desc = "" - icon = 'icons/misc/beach.dmi' - icon_state = "shell1" - var/static/list/possible_colors = list("" = 2, COLOR_PURPLE_GRAY = 1, COLOR_OLIVE = 1, COLOR_PALE_BLUE_GRAY = 1, COLOR_RED_GRAY = 1) - -/obj/item/toy/seashell/Initialize() - . = ..() - pixel_x = rand(-5, 5) - pixel_y = rand(-5, 5) - icon_state = "shell[rand(1,3)]" - color = pickweight(possible_colors) - setDir(pick(GLOB.cardinals)) diff --git a/code/game/objects/items/twohanded.dm b/code/game/objects/items/twohanded.dm deleted file mode 100644 index a636e5bd76..0000000000 --- a/code/game/objects/items/twohanded.dm +++ /dev/null @@ -1,820 +0,0 @@ -/* Two-handed Weapons - * Contains: - * Twohanded - * Fireaxe - * Double-Bladed Energy Swords - * Spears - * CHAINSAWS - * Bone Axe and Spear - */ - -/*################################################################## -##################### 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/force_unwielded = 0 - -/obj/item/twohanded/proc/unwield(mob/living/carbon/user, show_message = TRUE) - if(!wielded || !user) - return - wielded = 0 - if(!isnull(force_unwielded)) - force = force_unwielded - var/sf = findtext(name," (Wielded)") - if(sf) - name = copytext(name,1,sf) - else //something wrong - name = "[initial(name)]" - update_icon() - if(user.get_item_by_slot(SLOT_BACK) == src) - user.update_inv_back() - else - user.update_inv_hands() - if(show_message) - to_chat(user, "I are now carrying [src] with one hand.") - var/obj/item/twohanded/offhand/O = user.get_inactive_held_item() - if(O && istype(O)) - O.unwield() - return - -/obj/item/twohanded/wield(mob/living/carbon/user) - if(wielded) - return - if(ismonkey(user)) - to_chat(user, "It's too heavy for you to wield fully.") - return - if(user.get_inactive_held_item()) - to_chat(user, "I need your other hand to be empty!") - return - if(user.get_num_arms() < 2) - to_chat(user, "I don't have enough intact hands.") - return - wielded = 1 - if(force_wielded) - force = force_wielded - name = "[name] (Wielded)" - update_icon() - to_chat(user, "I grab [src] with both hands.") - var/obj/item/twohanded/offhand/O = new(user) ////Let's reserve his other hand~ - O.name = "[name] - offhand" - O.desc = "" - O.wielded = TRUE - user.put_in_inactive_hand(O) - return - -/obj/item/twohanded/dropped(mob/user) - . = ..() - //handles unwielding a twohanded weapon when dropped as well as clearing up the offhand - if(!wielded) - return - unwield(user) - -/obj/item/twohanded/update_icon() - return - -/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(..()) - if(istype(src, /obj/item/twohanded/required)) - return // unwield forces twohanded-required items to be dropped. - unwield(M) - return - -/obj/item/twohanded/equipped(mob/user, slot) - ..() - if(!user.is_holding(src) && wielded && !istype(src, /obj/item/twohanded/required)) - unwield(user) - -///////////OFFHAND/////////////// -/obj/item/twohanded/offhand - name = "offhand" - icon_state = "offhand" - w_class = WEIGHT_CLASS_HUGE - item_flags = ABSTRACT - pickup_sound = 'sound/blank.ogg' - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - -/obj/item/twohanded/offhand/Destroy() - wielded = FALSE - return ..() - -/obj/item/twohanded/offhand/dropped(mob/living/user, show_message = TRUE) //Only utilized by dismemberment since you can't normally switch to the offhand to drop it. - SHOULD_CALL_PARENT(FALSE) - var/obj/I = user.get_active_held_item() - if(I && istype(I, /obj/item/twohanded)) - var/obj/item/twohanded/thw = I - thw.unwield(user, show_message) - if(istype(thw, /obj/item/twohanded/required)) - user.dropItemToGround(thw) - if(!QDELETED(src)) - qdel(src) - -/obj/item/twohanded/offhand/unwield() - if(wielded)//Only delete if we're wielded - wielded = FALSE - qdel(src) - -/obj/item/twohanded/offhand/wield() - if(wielded)//Only delete if we're wielded - wielded = FALSE - qdel(src) - -/obj/item/twohanded/offhand/attack_self(mob/living/carbon/user) //You should never be able to do this in standard use of two handed items. This is a backup for lingering offhands. - var/obj/item/twohanded/O = user.get_inactive_held_item() - if (istype(O) && !istype(O, /obj/item/twohanded/offhand/)) //If you have a proper item in your other hand that the offhand is for, do nothing. This should never happen. - return - if (QDELETED(src)) - return - qdel(src) //If it's another offhand, or literally anything else, qdel. If I knew how to add logging messages I'd put one here. - -///////////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, mob/equipper, slot, disable_warning = 0) - if(wielded && !slot_flags) - if(!disable_warning) - to_chat(M, "[src] is too cumbersome to carry with anything but your hands!") - return 0 - 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_held_item() - if(get_dist(src,user) > 1) - return - 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/equipped(mob/user, slot) - ..() - var/slotbit = slotdefine2slotbit(slot) - if(slot_flags & slotbit) - var/datum/O = user.is_holding_item_of_type(/obj/item/twohanded/offhand) - if(!O || QDELETED(O)) - return - qdel(O) - return - if(slot == SLOT_HANDS) - wield(user) - else - unwield(user) - -/obj/item/twohanded/required/dropped(mob/living/user, show_message = TRUE) - unwield(user, show_message) - ..() - -/obj/item/twohanded/required/wield(mob/living/carbon/user) - ..() - if(!wielded) - user.dropItemToGround(src) - -/obj/item/twohanded/required/unwield(mob/living/carbon/user, show_message = TRUE) - if(!wielded) - return - if(show_message) - to_chat(user, "I drop [src].") - ..(user, FALSE) - -/* - * Fireaxe - */ -/obj/item/twohanded/fireaxe // DEM AXES MAN, marker -Agouri - icon_state = "fireaxe0" - lefthand_file = 'icons/mob/inhands/weapons/axes_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/axes_righthand.dmi' - name = "fire axe" - desc = "" - force = 5 - throwforce = 15 - w_class = WEIGHT_CLASS_BULKY - slot_flags = ITEM_SLOT_BACK - force_unwielded = 5 - force_wielded = 24 - attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut") - hitsound = 'sound/blank.ogg' - sharpness = IS_SHARP - max_integrity = 200 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 30) - resistance_flags = FIRE_PROOF - -/obj/item/twohanded/fireaxe/Initialize() - . = ..() - AddComponent(/datum/component/butchering, 100, 80, 0 , hitsound) //axes are not known for being precision butchering tools - -/obj/item/twohanded/fireaxe/update_icon() //Currently only here to fuck with the on-mob icons. - icon_state = "fireaxe[wielded]" - return - -/obj/item/twohanded/fireaxe/suicide_act(mob/user) - user.visible_message("[user] axes [user.p_them()]self from head to toe! It looks like [user.p_theyre()] trying to commit suicide!") - return (BRUTELOSS) - -/obj/item/twohanded/fireaxe/afterattack(atom/A, mob/user, proximity) - . = ..() - if(!proximity) - return - if(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") - - -/* - * Double-Bladed Energy Swords - Cheridan - */ -/obj/item/twohanded/dualsaber - icon = 'icons/obj/transforming_energy.dmi' - icon_state = "dualsaber0" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - name = "double-bladed energy sword" - desc = "" - 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 - hitsound = "swing_hit" - armor_penetration = 35 - var/saber_color = "green" - light_color = "#00ff00"//green - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - block_chance = 75 - max_integrity = 200 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 70) - resistance_flags = FIRE_PROOF - var/hacked = FALSE - var/brightness_on = 6 //TWICE AS BRIGHT AS A REGULAR ESWORD - var/list/possible_colors = list("red", "blue", "green", "purple") - -/obj/item/twohanded/dualsaber/suicide_act(mob/living/carbon/user) - if(wielded) - user.visible_message("[user] begins spinning way too fast! It looks like [user.p_theyre()] trying to commit suicide!") - - var/obj/item/bodypart/head/myhead = user.get_bodypart(BODY_ZONE_HEAD)//stole from chainsaw code - var/obj/item/organ/brain/B = user.getorganslot(ORGAN_SLOT_BRAIN) - B.organ_flags &= ~ORGAN_VITAL //this cant possibly be a good idea - var/randdir - for(var/i in 1 to 24)//like a headless chicken! - if(user.is_holding(src)) - randdir = pick(GLOB.alldirs) - user.Move(get_step(user, randdir),randdir) - user.emote("spin") - if (i == 3 && myhead) - myhead.drop_limb() - sleep(3) - else - user.visible_message("[user] panics and starts choking to death!") - return OXYLOSS - - - else - user.visible_message("[user] begins beating [user.p_them()]self to death with \the [src]'s handle! It probably would've been cooler if [user.p_they()] turned it on first!") - return BRUTELOSS - -/obj/item/twohanded/dualsaber/Initialize() - . = ..() - if(LAZYLEN(possible_colors)) - saber_color = pick(possible_colors) - switch(saber_color) - if("red") - light_color = LIGHT_COLOR_RED - if("green") - light_color = LIGHT_COLOR_GREEN - if("blue") - light_color = LIGHT_COLOR_LIGHT_CYAN - if("purple") - light_color = LIGHT_COLOR_LAVENDER - -/obj/item/twohanded/dualsaber/Destroy() - STOP_PROCESSING(SSobj, src) - . = ..() - -/obj/item/twohanded/dualsaber/update_icon() - if(wielded) - icon_state = "dualsaber[saber_color][wielded]" - else - icon_state = "dualsaber0" - SEND_SIGNAL(src, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) - -/obj/item/twohanded/dualsaber/attack(mob/target, mob/living/carbon/human/user) - if(user.has_dna()) - if(user.dna.check_mutation(HULK)) - to_chat(user, "I grip the blade too hard and accidentally close it!") - unwield() - return - ..() - if(HAS_TRAIT(user, TRAIT_CLUMSY) && (wielded) && prob(40)) - impale(user) - return - if((wielded) && prob(50)) - INVOKE_ASYNC(src, PROC_REF(jedi_spin), user) - -/mob/proc/dance_flip() - if(dir == WEST) - emote("flip") - -/obj/item/twohanded/dualsaber/proc/jedi_spin(mob/living/user) - dance_rotate(user, CALLBACK(user, TYPE_PROC_REF(/mob, dance_flip))) - -/obj/item/twohanded/dualsaber/proc/impale(mob/living/user) - to_chat(user, "I twirl around a bit before losing your balance and impaling myself on [src].") - if (force_wielded) - user.take_bodypart_damage(20,25,check_armor = TRUE) - else - user.adjustStaminaLoss(25) - -/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) - return ..() - return 0 - -/obj/item/twohanded/dualsaber/wield(mob/living/carbon/M) //Specific wield () hulk checks due to reflection chance for balance issues and switches hitsounds. - if(M.has_dna()) - if(M.dna.check_mutation(HULK)) - to_chat(M, "I lack the grace to wield this!") - return - ..() - if(wielded) - sharpness = IS_SHARP - w_class = w_class_on - hitsound = 'sound/blank.ogg' - START_PROCESSING(SSobj, src) - set_light(brightness_on) - -/obj/item/twohanded/dualsaber/unwield() //Specific unwield () to switch hitsounds. - sharpness = initial(sharpness) - w_class = initial(w_class) - ..() - hitsound = "swing_hit" - STOP_PROCESSING(SSobj, src) - set_light(0) - -/obj/item/twohanded/dualsaber/process() - if(wielded) - if(hacked) - light_color = pick(LIGHT_COLOR_RED, LIGHT_COLOR_GREEN, LIGHT_COLOR_LIGHT_CYAN, LIGHT_COLOR_LAVENDER) - open_flame() - else - STOP_PROCESSING(SSobj, src) - -/obj/item/twohanded/dualsaber/IsReflect() - if(wielded) - return 1 - -/obj/item/twohanded/dualsaber/ignition_effect(atom/A, mob/user) - // same as /obj/item/melee/transforming/energy, mostly - if(!wielded) - return "" - var/in_mouth = "" - if(iscarbon(user)) - var/mob/living/carbon/C = user - if(C.wear_mask) - in_mouth = ", barely missing [user.p_their()] nose" - . = "[user] swings [user.p_their()] [name][in_mouth]. [user.p_they(TRUE)] light[user.p_s()] [user.p_their()] [A.name] in the process." - playsound(loc, pick(hitsound), get_clamped_volume(), TRUE, -1) - add_fingerprint(user) - // Light your candles while spinning around the room - INVOKE_ASYNC(src, PROC_REF(jedi_spin), user) - -/obj/item/twohanded/dualsaber/green - possible_colors = list("green") - -/obj/item/twohanded/dualsaber/red - possible_colors = list("red") - -/obj/item/twohanded/dualsaber/blue - possible_colors = list("blue") - -/obj/item/twohanded/dualsaber/purple - possible_colors = list("purple") - -/obj/item/twohanded/dualsaber/attackby(obj/item/W, mob/user, params) - if(W.tool_behaviour == TOOL_MULTITOOL) - if(!hacked) - hacked = TRUE - to_chat(user, "2XRNBW_ENGAGE") - saber_color = "rainbow" - update_icon() - else - to_chat(user, "It's starting to look like a triple rainbow - no, nevermind.") - else - return ..() - -//spears -/obj/item/twohanded/spear - icon_state = "spearglass0" - lefthand_file = 'icons/mob/inhands/weapons/polearms_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/polearms_righthand.dmi' - name = "spear" - desc = "" - force = 10 - w_class = WEIGHT_CLASS_BULKY - slot_flags = ITEM_SLOT_BACK - force_unwielded = 10 - force_wielded = 18 - throwforce = 20 - throw_speed = 4 - embedding = list("embedded_impact_pain_multiplier" = 3) - armor_penetration = 10 - custom_materials = list(/datum/material/iron=1150, /datum/material/glass=2075) - hitsound = 'sound/blank.ogg' - attack_verb = list("attacked", "poked", "jabbed", "torn", "gored") - sharpness = IS_SHARP - max_integrity = 200 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 30) - var/war_cry = "AAAAARGH!!!" - var/icon_prefix = "spearglass" - -/obj/item/twohanded/spear/Initialize() - . = ..() - AddComponent(/datum/component/butchering, 100, 70) //decent in a pinch, but pretty bad. - -/obj/item/twohanded/spear/suicide_act(mob/living/carbon/user) - user.visible_message("[user] begins to sword-swallow \the [src]! It looks like [user.p_theyre()] trying to commit suicide!") - return BRUTELOSS - -/obj/item/twohanded/spear/Initialize() - . = ..() - AddComponent(/datum/component/jousting) - -/obj/item/twohanded/spear/update_icon() - icon_state = "[icon_prefix][wielded]" - -/obj/item/twohanded/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" - update_icon() - qdel(tip) - ..() - - -/obj/item/twohanded/spear/explosive - name = "explosive lance" - var/obj/item/grenade/explosive = null - -/obj/item/twohanded/spear/explosive/Initialize(mapload, obj/item/grenade/G) - . = ..() - if (!G) - G = new /obj/item/grenade/iedcasing() //For admin-spawned explosive lances - G.forceMove(src) - explosive = G - desc = "" - update_icon() - - -/obj/item/twohanded/spear/explosive/CheckParts(list/parts_list) - var/obj/item/grenade/G = locate() in parts_list - if(G) - var/obj/item/twohanded/spear/lancePart = locate() in parts_list - force_wielded = lancePart.force_wielded - force_unwielded = lancePart.force_unwielded - throwforce = lancePart.throwforce - icon_prefix = lancePart.icon_prefix - parts_list -= G - parts_list -= lancePart - Initialize(src.loc, G) - qdel(lancePart) - ..() - -/obj/item/twohanded/spear/explosive/suicide_act(mob/living/carbon/user) - user.visible_message("[user] begins to sword-swallow \the [src]! It looks like [user.p_theyre()] trying to commit suicide!") - user.say("[war_cry]", forced="spear warcry") - explosive.forceMove(user) - explosive.prime() - user.gib() - qdel(src) - return BRUTELOSS - -/obj/item/twohanded/spear/explosive/examine(mob/user) - . = ..() - . += "Alt-click to set your war cry." - -/obj/item/twohanded/spear/explosive/update_icon() - icon_state = "spearbomb[wielded]" - -/obj/item/twohanded/spear/explosive/AltClick(mob/user) - if(user.canUseTopic(src, BE_CLOSE)) - ..() - if(istype(user) && loc == user) - var/input = stripped_input(user,"What do you want your war cry to be? You will shout it when you hit someone in melee.", ,"", 50) - if(input) - src.war_cry = input - -/obj/item/twohanded/spear/explosive/afterattack(atom/movable/AM, mob/user, proximity) - . = ..() - if(!proximity) - return - if(wielded) - user.say("[war_cry]", forced="spear warcry") - explosive.forceMove(AM) - explosive.prime() - qdel(src) - -// CHAINSAW -/obj/item/twohanded/required/chainsaw - name = "chainsaw" - desc = "" - icon_state = "chainsaw_off" - lefthand_file = 'icons/mob/inhands/weapons/chainsaw_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/chainsaw_righthand.dmi' - flags_1 = CONDUCT_1 - force = 13 - var/force_on = 24 - w_class = WEIGHT_CLASS_HUGE - throwforce = 13 - throw_speed = 2 - throw_range = 4 - custom_materials = list(/datum/material/iron=13000) - attack_verb = list("sawed", "torn", "cut", "chopped", "diced") - hitsound = "swing_hit" - sharpness = IS_SHARP - actions_types = list(/datum/action/item_action/startchainsaw) - tool_behaviour = TOOL_SAW - toolspeed = 0.5 - var/on = FALSE - -/obj/item/twohanded/required/chainsaw/Initialize() - . = ..() - AddComponent(/datum/component/butchering, 30, 100, 0, 'sound/blank.ogg', TRUE) - -/obj/item/twohanded/required/chainsaw/suicide_act(mob/living/carbon/user) - if(on) - user.visible_message("[user] begins to tear [user.p_their()] head off with [src]! It looks like [user.p_theyre()] trying to commit suicide!") - playsound(src, 'sound/blank.ogg', 100, TRUE) - var/obj/item/bodypart/head/myhead = user.get_bodypart(BODY_ZONE_HEAD) - if(myhead) - myhead.dismember() - else - user.visible_message("[user] smashes [src] into [user.p_their()] neck, destroying [user.p_their()] esophagus! It looks like [user.p_theyre()] trying to commit suicide!") - playsound(src, 'sound/blank.ogg', 100, TRUE) - return(BRUTELOSS) - -/obj/item/twohanded/required/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."]") - force = on ? force_on : initial(force) - throwforce = on ? force_on : initial(force) - icon_state = "chainsaw_[on ? "on" : "off"]" - var/datum/component/butchering/butchering = src.GetComponent(/datum/component/butchering) - butchering.butchering_enabled = on - - if(on) - hitsound = 'sound/blank.ogg' - else - hitsound = "swing_hit" - - if(src == user.get_active_held_item()) //update inhands - user.update_inv_hands() - for(var/X in actions) - var/datum/action/A = X - A.UpdateButtonIcon() - -/obj/item/twohanded/required/chainsaw/get_dismemberment_chance() - if(wielded) - return ..() - return 0 - -/obj/item/twohanded/required/chainsaw/doomslayer - name = "THE GREAT COMMUNICATOR" - desc = "" - armor_penetration = 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) - if(attack_type == PROJECTILE_ATTACK) - owner.visible_message("Ranged attacks just make [owner] angrier!") - playsound(src, pick('sound/blank.ogg'), 75, TRUE) - return 1 - return 0 - -//GREY TIDE -/obj/item/twohanded/spear/grey_tide - name = "\improper Grey Tide" - desc = "" - force_unwielded = 15 - force_wielded = 25 - attack_verb = list("gored") - -/obj/item/twohanded/spear/grey_tide/afterattack(atom/movable/AM, mob/living/user, proximity) - . = ..() - if(!proximity) - return - user.faction |= "greytide([REF(user)])" - if(isliving(AM)) - var/mob/living/L = AM - if(istype (L, /mob/living/simple_animal/hostile/illusion)) - return - if(!L.stat && prob(50)) - var/mob/living/simple_animal/hostile/illusion/M = new(user.loc) - M.faction = user.faction.Copy() - M.Copy_Parent(user, 100, user.health/2.5, 12, 30) - M.GiveTarget(L) - -/obj/item/twohanded/pitchfork - icon_state = "pitchfork0" - lefthand_file = 'icons/mob/inhands/weapons/polearms_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/polearms_righthand.dmi' - name = "pitchfork" - desc = "" - force = 7 - throwforce = 15 - w_class = WEIGHT_CLASS_BULKY - force_unwielded = 7 - force_wielded = 15 - attack_verb = list("attacked", "impaled", "pierced") - hitsound = 'sound/blank.ogg' - sharpness = IS_SHARP - max_integrity = 200 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 30) - resistance_flags = FIRE_PROOF - -/obj/item/twohanded/pitchfork/demonic - name = "demonic pitchfork" - desc = "" - force = 19 - throwforce = 24 - force_unwielded = 19 - force_wielded = 25 - -/obj/item/twohanded/pitchfork/demonic/Initialize() - . = ..() - set_light(3,3,6, l_color = LIGHT_COLOR_RED) - -/obj/item/twohanded/pitchfork/demonic/greater - force = 24 - throwforce = 50 - force_unwielded = 24 - force_wielded = 34 - -/obj/item/twohanded/pitchfork/demonic/ascended - force = 100 - throwforce = 100 - force_unwielded = 100 - force_wielded = 500000 // Kills you DEAD. - -/obj/item/twohanded/pitchfork/update_icon() - icon_state = "pitchfork[wielded]" - -/obj/item/twohanded/pitchfork/suicide_act(mob/user) - user.visible_message("[user] impales [user.p_them()]self in [user.p_their()] abdomen with [src]! It looks like [user.p_theyre()] trying to commit suicide!") - return (BRUTELOSS) - -//HF blade - -/obj/item/twohanded/vibro_weapon - icon_state = "hfrequency0" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - name = "vibro sword" - desc = "" - force_unwielded = 20 - force_wielded = 40 - armor_penetration = 100 - block_chance = 40 - throwforce = 20 - throw_speed = 4 - sharpness = IS_SHARP - attack_verb = list("cut", "sliced", "diced") - w_class = WEIGHT_CLASS_BULKY - slot_flags = ITEM_SLOT_BACK - hitsound = 'sound/blank.ogg' - -/obj/item/twohanded/vibro_weapon/Initialize() - . = ..() - AddComponent(/datum/component/butchering, 20, 105) - -/obj/item/twohanded/vibro_weapon/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) - final_block_chance *= 2 - if(wielded || attack_type != PROJECTILE_ATTACK) - if(prob(final_block_chance)) - if(attack_type == PROJECTILE_ATTACK) - owner.visible_message("[owner] deflects [attack_text] with [src]!") - playsound(src, pick('sound/blank.ogg'), 75, TRUE) - return 1 - else - owner.visible_message("[owner] parries [attack_text] with [src]!") - return 1 - return 0 - -/obj/item/twohanded/vibro_weapon/update_icon() - icon_state = "hfrequency[wielded]" - -/* - * Bone Axe - */ -/obj/item/twohanded/fireaxe/boneaxe // Blatant imitation of the fireaxe, but made out of bone. - icon_state = "bone_axe0" - name = "bone axe" - desc = "" - force_wielded = 23 - -/obj/item/twohanded/fireaxe/boneaxe/update_icon() - icon_state = "bone_axe[wielded]" - -/* - * Bone Spear - */ -/obj/item/twohanded/spear/bonespear //Blatant imitation of spear, but made out of bone. Not valid for explosive modification. - icon_state = "bone_spear0" - name = "bone spear" - desc = "" - force = 12 - force_unwielded = 12 - force_wielded = 20 - throwforce = 22 - armor_penetration = 15 //Enhanced armor piercing - -/obj/item/twohanded/spear/bonespear/update_icon() - icon_state = "bone_spear[wielded]" - -/obj/item/twohanded/binoculars - name = "binoculars" - desc = "" - item_state = "binoculars" - icon_state = "binoculars" - lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' - righthand_file = 'icons/mob/inhands/items_righthand.dmi' - slot_flags = ITEM_SLOT_BELT - w_class = WEIGHT_CLASS_SMALL - var/mob/listeningTo - var/zoom_out_amt = 6 - var/zoom_amt = 10 - -/obj/item/twohanded/binoculars/Destroy() - listeningTo = null - return ..() - -/obj/item/twohanded/binoculars/wield(mob/user) - . = ..() - if(!wielded) - return - RegisterSignal(user, COMSIG_MOVABLE_MOVED, PROC_REF(unwield)) - listeningTo = user - user.visible_message("[user] holds [src] up to [user.p_their()] eyes.", "I hold [src] up to your eyes.") - item_state = "binoculars_wielded" - user.regenerate_icons() - if(!user?.client) - return - var/client/C = user.client - var/_x = 0 - var/_y = 0 - switch(user.dir) - if(NORTH) - _y = zoom_amt - if(EAST) - _x = zoom_amt - if(SOUTH) - _y = -zoom_amt - if(WEST) - _x = -zoom_amt - C.change_view(world.view + zoom_out_amt) - C.pixel_x = world.icon_size*_x - C.pixel_y = world.icon_size*_y - -/obj/item/twohanded/binoculars/unwield(mob/user) - . = ..() - UnregisterSignal(listeningTo, COMSIG_MOVABLE_MOVED) - listeningTo = null - user.visible_message("[user] lowers [src].", "I lower [src].") - item_state = "binoculars" - user.regenerate_icons() - if(user && user.client) - user.regenerate_icons() - var/client/C = user.client - C.change_view(CONFIG_GET(string/default_view)) - user.client.pixel_x = 0 - user.client.pixel_y = 0 diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm index a21ca9f5d2..39600c7d70 100644 --- a/code/game/objects/items/weaponry.dm +++ b/code/game/objects/items/weaponry.dm @@ -31,226 +31,6 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 if(user.used_intent.type != INTENT_HELP) return ..(M, user) -/obj/item/sord - name = "\improper SORD" - desc = "" - icon_state = "sord" - item_state = "sord" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - slot_flags = ITEM_SLOT_BELT - force = 2 - throwforce = 1 - w_class = WEIGHT_CLASS_NORMAL - hitsound = list('sound/blank.ogg') - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - -/obj/item/sord/suicide_act(mob/user) - user.visible_message("[user] is trying to impale [user.p_them()]self with [src]! It might be a suicide attempt if it weren't so shitty.", \ - "I try to impale myself with [src], but it's USELESS...") - return SHAME - -/obj/item/claymore - name = "claymore" - desc = "" - icon_state = "claymore" - item_state = "claymore" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - hitsound = 'sound/blank.ogg' - flags_1 = CONDUCT_1 - slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK - force = 40 - throwforce = 10 - w_class = WEIGHT_CLASS_NORMAL - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - block_chance = 50 - sharpness = IS_SHARP - max_integrity = 200 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) - resistance_flags = FIRE_PROOF - -/obj/item/claymore/Initialize() - . = ..() - AddComponent(/datum/component/butchering, 40, 105) - -/obj/item/claymore/suicide_act(mob/user) - user.visible_message("[user] is falling on [src]! It looks like [user.p_theyre()] trying to commit suicide!") - return(BRUTELOSS) - -/obj/item/claymore/highlander //ALL COMMENTS MADE REGARDING THIS SWORD MUST BE MADE IN ALL CAPS - desc = "" - flags_1 = CONDUCT_1 - item_flags = DROPDEL //If this ever happens, it's because you lost an arm - slot_flags = null - block_chance = 0 //RNG WON'T HELP YOU NOW, PANSY - light_outer_range = 3 - attack_verb = list("brutalized", "eviscerated", "disemboweled", "hacked", "carved", "cleaved") //ONLY THE MOST VISCERAL ATTACK VERBS - var/notches = 0 //HOW MANY PEOPLE HAVE BEEN SLAIN WITH THIS BLADE - -/obj/item/claymore/highlander/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, HIGHLANDER) - START_PROCESSING(SSobj, src) - -/obj/item/claymore/highlander/Destroy() - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/item/claymore/highlander/process() - if(ishuman(loc)) - var/mob/living/carbon/human/H = loc - loc.layer = LARGE_MOB_LAYER //NO HIDING BEHIND PLANTS FOR YOU, DICKWEED (HA GET IT, BECAUSE WEEDS ARE PLANTS) - H.bleedsuppress = TRUE //AND WE WON'T BLEED OUT LIKE COWARDS - else - if(!(flags_1 & ADMIN_SPAWNED_1)) - qdel(src) - - -/obj/item/claymore/highlander/pickup(mob/living/user) - . = ..() - to_chat(user, "The power of Scotland protects you! You are shielded from all stuns and knockdowns.") - user.add_stun_absorption("highlander", INFINITY, 1, " is protected by the power of Scotland!", "The power of Scotland absorbs the stun!", " is protected by the power of Scotland!") - user.ignore_slowdown(HIGHLANDER) - -/obj/item/claymore/highlander/dropped(mob/living/user) - . = ..() - user.unignore_slowdown(HIGHLANDER) - -/obj/item/claymore/highlander/examine(mob/user) - . = ..() - . += "It has [!notches ? "nothing" : "[notches] notches"] scratched into the blade." - -/obj/item/claymore/highlander/attack(mob/living/target, mob/living/user) - . = ..() - if(!QDELETED(target) && iscarbon(target) && target.stat == DEAD && target.mind && target.mind.special_role == "highlander") - user.fully_heal(admin_revive = FALSE) //STEAL THE LIFE OF OUR FALLEN FOES - add_notch(user) - target.visible_message("[target] crumbles to dust beneath [user]'s blows!", "As you fall, my body crumbles to dust!") - target.dust() - -/obj/item/claymore/highlander/attack_self(mob/living/user) - var/closest_victim - var/closest_distance = 255 - for(var/mob/living/carbon/human/H in GLOB.player_list - user) - if(H.mind.special_role == "highlander" && (!closest_victim || get_dist(user, closest_victim) < closest_distance)) - closest_victim = H - if(!closest_victim) - to_chat(user, "[src] thrums for a moment and falls dark. Perhaps there's nobody nearby.") - return - to_chat(user, "[src] thrums and points to the [dir2text(get_dir(user, closest_victim))].") - -/obj/item/claymore/highlander/IsReflect() - return 1 //YOU THINK YOUR PUNY LASERS CAN STOP ME? - -/obj/item/claymore/highlander/proc/add_notch(mob/living/user) //DYNAMIC CLAYMORE PROGRESSION SYSTEM - THIS IS THE FUTURE - notches++ - force++ - var/new_name = name - switch(notches) - if(1) - to_chat(user, "My first kill - hopefully one of many. You scratch a notch into [src]'s blade.") - to_chat(user, "I feel my fallen foe's soul entering my blade, restoring my wounds!") - new_name = "notched claymore" - if(2) - to_chat(user, "Another falls before you. Another soul fuses with my own. Another notch in the blade.") - new_name = "double-notched claymore" - add_atom_colour(rgb(255, 235, 235), ADMIN_COLOUR_PRIORITY) - if(3) - to_chat(user, "You're beginning to relish the thrill of battle.") - new_name = "triple-notched claymore" - add_atom_colour(rgb(255, 215, 215), ADMIN_COLOUR_PRIORITY) - if(4) - to_chat(user, "You've lost count of how many you've killed.") - new_name = "many-notched claymore" - add_atom_colour(rgb(255, 195, 195), ADMIN_COLOUR_PRIORITY) - if(5) - to_chat(user, "Five voices now echo in my mind, cheering the slaughter.") - new_name = "battle-tested claymore" - add_atom_colour(rgb(255, 175, 175), ADMIN_COLOUR_PRIORITY) - if(6) - to_chat(user, "Is this what the vikings felt like? Visions of glory fill my head as you slay my sixth foe.") - new_name = "battle-scarred claymore" - add_atom_colour(rgb(255, 155, 155), ADMIN_COLOUR_PRIORITY) - if(7) - to_chat(user, "Kill. Butcher. Conquer.") - new_name = "vicious claymore" - add_atom_colour(rgb(255, 135, 135), ADMIN_COLOUR_PRIORITY) - if(8) - to_chat(user, "IT NEVER GETS OLD. THE SCREAMING. THE BLOOD AS IT SPRAYS ACROSS YOUR FACE.") - new_name = "bloodthirsty claymore" - add_atom_colour(rgb(255, 115, 115), ADMIN_COLOUR_PRIORITY) - if(9) - to_chat(user, "ANOTHER ONE FALLS TO YOUR BLOWS. ANOTHER WEAKLING UNFIT TO LIVE.") - new_name = "gore-stained claymore" - add_atom_colour(rgb(255, 95, 95), ADMIN_COLOUR_PRIORITY) - if(10) - user.visible_message("[user]'s eyes light up with a vengeful fire!", \ - "YOU FEEL THE POWER OF VALHALLA FLOWING THROUGH YOU! THERE CAN BE ONLY ONE!!!") - user.update_icons() - new_name = "GORE-DRENCHED CLAYMORE OF [pick("THE WHIMSICAL SLAUGHTER", "A THOUSAND SLAUGHTERED CATTLE", "GLORY AND VALHALLA", "ANNIHILATION", "OBLITERATION")]" - icon_state = "claymore_valhalla" - item_state = "cultblade" - remove_atom_colour(ADMIN_COLOUR_PRIORITY) - - name = new_name - playsound(user, 'sound/blank.ogg', 50, TRUE) - -/obj/item/katana - name = "katana" - desc = "" - icon_state = "katana" - item_state = "katana" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - flags_1 = CONDUCT_1 - slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK - force = 40 - throwforce = 10 - w_class = WEIGHT_CLASS_HUGE - hitsound = 'sound/blank.ogg' - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - block_chance = 50 - sharpness = IS_SHARP - max_integrity = 200 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) - resistance_flags = FIRE_PROOF - -/obj/item/katana/cursed - slot_flags = null - -/obj/item/katana/suicide_act(mob/user) - user.visible_message("[user] is slitting [user.p_their()] stomach open with [src]! It looks like [user.p_theyre()] trying to commit seppuku!") - return(BRUTELOSS) - -/obj/item/wirerod - name = "wired rod" - desc = "" - icon_state = "wiredrod" - item_state = "rods" - flags_1 = CONDUCT_1 - force = 9 - throwforce = 10 - w_class = WEIGHT_CLASS_NORMAL - custom_materials = list(/datum/material/iron=1150, /datum/material/glass=75) - attack_verb = list("hit", "bludgeoned", "whacked", "bonked") - -/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 - - remove_item_from_storage(user) - if (!user.transferItemToLoc(I, S)) - return - S.CheckParts(list(I)) - qdel(src) - - user.put_in_hands(S) - to_chat(user, "I fasten the glass shard to the top of the rod with the cable.") - else - return ..() - - /obj/item/throwing_star name = "throwing star" desc = "" @@ -264,101 +44,13 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 embedding = list("embedded_pain_multiplier" = 4, "embed_chance" = 100, "embedded_fall_chance" = 0) w_class = WEIGHT_CLASS_SMALL sharpness = IS_SHARP - custom_materials = list(/datum/material/iron=500, /datum/material/glass=500) resistance_flags = FIRE_PROOF -/obj/item/throwing_star/magspear - name = "magnetic spear" - desc = "" - icon = 'icons/obj/ammo.dmi' - icon_state = "magspear" - throwforce = 25 //kills regular carps in one hit - force = 10 - throw_range = 0 //throwing these invalidates the speargun - attack_verb = list("stabbed", "ripped", "gored", "impaled") - embedding = list("embedded_pain_multiplier" = 8, "embed_chance" = 100, "embedded_fall_chance" = 0, "embedded_impact_pain_multiplier" = 15) //55 damage+embed on hit - /obj/item/throwing_star/ninja name = "ninja throwing star" throwforce = 30 embedding = list("embedded_pain_multiplier" = 6, "embed_chance" = 100, "embedded_fall_chance" = 0) -/obj/item/switchblade - name = "switchblade" - icon_state = "switchblade" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - desc = "" - flags_1 = CONDUCT_1 - force = 3 - w_class = WEIGHT_CLASS_SMALL - throwforce = 5 - throw_speed = 1 - throw_range = 6 - custom_materials = list(/datum/material/iron=12000) - hitsound = 'sound/blank.ogg' - attack_verb = list("stubbed", "poked") - resistance_flags = FIRE_PROOF - var/extended = 0 - -/obj/item/switchblade/attack_self(mob/user) - extended = !extended - playsound(src.loc, 'sound/blank.ogg', 50, TRUE) - if(extended) - force = 20 - w_class = WEIGHT_CLASS_NORMAL - throwforce = 23 - icon_state = "switchblade_ext" - attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - hitsound = 'sound/blank.ogg' - sharpness = IS_SHARP - else - force = 3 - w_class = WEIGHT_CLASS_SMALL - throwforce = 5 - icon_state = "switchblade" - attack_verb = list("stubbed", "poked") - hitsound = 'sound/blank.ogg' - sharpness = IS_BLUNT - -/obj/item/switchblade/suicide_act(mob/user) - user.visible_message("[user] is slitting [user.p_their()] own throat with [src]! It looks like [user.p_theyre()] trying to commit suicide!") - return (BRUTELOSS) - -/obj/item/phone - name = "red phone" - desc = "" - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "red_phone" - force = 3 - throwforce = 2 - throw_speed = 1 - throw_range = 4 - w_class = WEIGHT_CLASS_SMALL - attack_verb = list("called", "rang") - hitsound = 'sound/blank.ogg' - -/obj/item/phone/suicide_act(mob/user) - if(locate(/obj/structure/chair/stool) in user.loc) - user.visible_message("[user] begins to tie a noose with [src]'s cord! It looks like [user.p_theyre()] trying to commit suicide!") - else - user.visible_message("[user] is strangling [user.p_them()]self with [src]'s cord! It looks like [user.p_theyre()] trying to commit suicide!") - return(OXYLOSS) - -/obj/item/cane - name = "cane" - desc = "" - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "cane" - item_state = "stick" - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' - force = 5 - throwforce = 5 - w_class = WEIGHT_CLASS_SMALL - custom_materials = list(/datum/material/iron=50) - attack_verb = list("bludgeoned", "whacked", "disciplined", "thrashed") - /obj/item/staff name = "wizard staff" desc = "" @@ -388,310 +80,3 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 throw_speed = 2 throw_range = 5 w_class = WEIGHT_CLASS_SMALL - -/obj/item/ectoplasm - name = "ectoplasm" - desc = "" - gender = PLURAL - icon = 'icons/obj/wizard.dmi' - icon_state = "ectoplasm" - -/obj/item/ectoplasm/suicide_act(mob/user) - user.visible_message("[user] is inhaling [src]! It looks like [user.p_theyre()] trying to visit the astral plane!") - return (OXYLOSS) - -/obj/item/ectoplasm/angelic - icon = 'icons/obj/wizard.dmi' - icon_state = "angelplasm" - -/obj/item/mounted_chainsaw - name = "mounted chainsaw" - desc = "" - icon_state = "chainsaw_on" - item_state = "mounted_chainsaw" - lefthand_file = 'icons/mob/inhands/weapons/chainsaw_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/chainsaw_righthand.dmi' - item_flags = ABSTRACT | DROPDEL - w_class = WEIGHT_CLASS_HUGE - force = 24 - throwforce = 0 - throw_range = 0 - throw_speed = 0 - sharpness = IS_SHARP - attack_verb = list("sawed", "torn", "cut", "chopped", "diced") - hitsound = 'sound/blank.ogg' - tool_behaviour = TOOL_SAW - toolspeed = 1 - -/obj/item/mounted_chainsaw/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, HAND_REPLACEMENT_TRAIT) - -/obj/item/mounted_chainsaw/Destroy() - var/obj/item/bodypart/part - new /obj/item/twohanded/required/chainsaw(get_turf(src)) - if(iscarbon(loc)) - var/mob/living/carbon/holder = loc - var/index = holder.get_held_index_of_item(src) - if(index) - part = holder.hand_bodyparts[index] - . = ..() - if(part) - part.drop_limb() - -/obj/item/statuebust - name = "bust" - desc = "" //or you can hit people with it - icon = 'icons/obj/statue.dmi' - icon_state = "bust" - force = 15 - throwforce = 10 - throw_speed = 5 - throw_range = 2 - attack_verb = list("busted") - var/impressiveness = 45 - -/obj/item/statuebust/Initialize() - . = ..() - AddComponent(/datum/component/art, impressiveness) - addtimer(CALLBACK(src, TYPE_PROC_REF(/datum, AddComponent), /datum/component/beauty, 1000), 0) - -/obj/item/statuebust/hippocratic - name = "hippocrates bust" - desc = "" - icon_state = "hippocratic" - impressiveness = 50 - -/obj/item/tailclub - name = "tail club" - desc = "" - icon_state = "tailclub" - force = 14 - throwforce = 1 // why are you throwing a club do you even weapon - throw_speed = 1 - throw_range = 1 - attack_verb = list("clubbed", "bludgeoned") - -/obj/item/melee/chainofcommand/tailwhip - name = "liz o' nine tails" - desc = "" - icon_state = "tailwhip" - item_flags = NONE - -/obj/item/melee/chainofcommand/tailwhip/kitty - name = "cat o' nine tails" - desc = "" - icon_state = "catwhip" - -/obj/item/melee/skateboard - name = "improvised skateboard" - desc = "" - icon_state = "skateboard" - item_state = "skateboard" - force = 12 - throwforce = 4 - w_class = WEIGHT_CLASS_NORMAL - attack_verb = list("smacked", "whacked", "slammed", "smashed") - ///The vehicle counterpart for the board - var/board_item_type = /obj/vehicle/ridden/scooter/skateboard - -/obj/item/melee/skateboard/attack_self(mob/user) - new board_item_type(get_turf(user)) - qdel(src) - -/obj/item/melee/skateboard/pro - name = "skateboard" - desc = "" - icon_state = "skateboard2" - item_state = "skateboard2" - board_item_type = /obj/vehicle/ridden/scooter/skateboard/pro - custom_premium_price = 300 - -/obj/item/melee/skateboard/hoverboard - name = "hoverboard" - desc = "" - icon_state = "hoverboard_red" - item_state = "hoverboard_red" - board_item_type = /obj/vehicle/ridden/scooter/skateboard/hoverboard - custom_premium_price = 2015 - -/obj/item/melee/skateboard/hoverboard/admin - name = "\improper Board Of Directors" - desc = "" - icon_state = "hoverboard_nt" - item_state = "hoverboard_nt" - board_item_type = /obj/vehicle/ridden/scooter/skateboard/hoverboard/admin - -/obj/item/melee/baseball_bat - name = "baseball bat" - desc = "" - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "baseball_bat" - item_state = "baseball_bat" - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' - force = 10 - throwforce = 12 - attack_verb = list("beat", "smacked") - w_class = WEIGHT_CLASS_HUGE - var/homerun_ready = 0 - var/homerun_able = 0 - -/obj/item/melee/baseball_bat/homerun - name = "home run bat" - desc = "" - homerun_able = 1 - -/obj/item/melee/baseball_bat/attack_self(mob/user) - if(!homerun_able) - ..() - return - if(homerun_ready) - to_chat(user, "You're already ready to do a home run!") - ..() - return - to_chat(user, "I begin gathering strength...") - playsound(get_turf(src), 'sound/blank.ogg', 65, TRUE) - if(do_after(user, 90, target = src)) - to_chat(user, "I gather power! Time for a home run!") - homerun_ready = 1 - ..() - -/obj/item/melee/baseball_bat/attack(mob/living/target, mob/living/user) - . = ..() - var/atom/throw_target = get_edge_target_turf(target, user.dir) - if(homerun_ready) - user.visible_message("It's a home run!") - target.throw_at(throw_target, rand(8,10), 14, user) - target.ex_act(EXPLODE_HEAVY) - playsound(get_turf(src), 'sound/blank.ogg', 100, TRUE) - homerun_ready = 0 - return - else if(!target.anchored) - target.throw_at(throw_target, rand(1,2), 7, user) - -/obj/item/melee/baseball_bat/ablative - name = "metal baseball bat" - desc = "" - icon_state = "baseball_bat_metal" - item_state = "baseball_bat_metal" - force = 12 - throwforce = 15 - -/obj/item/melee/baseball_bat/ablative/IsReflect()//some day this will reflect thrown items instead of lasers - var/picksound = rand(1,2) - var/turf = get_turf(src) - if(picksound == 1) - playsound(turf, 'sound/blank.ogg', 50, TRUE) - if(picksound == 2) - playsound(turf, 'sound/blank.ogg', 50, TRUE) - return 1 - -/obj/item/melee/flyswatter - name = "flyswatter" - desc = "" - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "flyswatter" - item_state = "flyswatter" - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' - force = 1 - throwforce = 1 - attack_verb = list("swatted", "smacked") - hitsound = 'sound/blank.ogg' - w_class = WEIGHT_CLASS_SMALL - //Things in this list will be instantly splatted. Flyman weakness is handled in the flyman species weakness proc. - var/list/strong_against - -/obj/item/melee/flyswatter/Initialize() - . = ..() - strong_against = typecacheof(list( - /mob/living/simple_animal/butterfly, - /mob/living/simple_animal/cockroach, - )) - - -/obj/item/melee/flyswatter/afterattack(atom/target, mob/user, proximity_flag) - . = ..() - if(proximity_flag) - if(is_type_in_typecache(target, strong_against)) - new /obj/effect/decal/cleanable/insectguts(target.drop_location()) - to_chat(user, "I easily splat the [target].") - if(istype(target, /mob/living/)) - var/mob/living/bug = target - bug.death(1) - else - qdel(target) - -/obj/item/circlegame - name = "circled hand" - desc = "" - icon_state = "madeyoulook" - force = 0 - throwforce = 0 - item_flags = DROPDEL | ABSTRACT - attack_verb = list("bopped") - -/obj/item/slapper - name = "slapper" - desc = "" - icon_state = "latexballon" - item_state = "nothing" - force = 0 - throwforce = 0 - item_flags = DROPDEL | ABSTRACT - attack_verb = list("slapped") - hitsound = 'sound/blank.ogg' - -/obj/item/slapper/attack(mob/M, mob/living/carbon/human/user) - if(ishuman(M)) - var/mob/living/carbon/human/L = M - if(L && L.dna && L.dna.species) - L.dna.species.stop_wagging_tail(M) - user.do_attack_animation(M) - playsound(M, 'sound/blank.ogg', 50, TRUE, -1) - user.visible_message("[user] slaps [M]!", - "I slap [M]!",\ - "I hear a slap.") - return -/obj/item/proc/can_trigger_gun(mob/living/user) - if(!user.can_use_guns(src)) - return FALSE - return TRUE - -/obj/item/extendohand - name = "extendo-hand" - desc = "" - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "extendohand" - item_state = "extendohand" - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' - force = 0 - throwforce = 5 - reach = 2 - var/min_reach = 2 - -/obj/item/extendohand/acme - name = "\improper ACME Extendo-Hand" - desc = "" - -/obj/item/extendohand/attack(atom/M, mob/living/carbon/human/user) - var/dist = get_dist(M, user) - if(dist < min_reach) - to_chat(user, "[M] is too close to use [src] on.") - return - M.attack_hand(user) - -/obj/item/gohei - name = "gohei" - desc = "" - force = 5 - throwforce = 5 - hitsound = "swing_hit" - attack_verb = list("whacked", "thwacked", "walloped", "socked") - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "gohei" - item_state = "gohei" - lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi' diff --git a/code/game/objects/lighting/_base_light.dm b/code/game/objects/lighting/_base_light.dm index 1ff7f07904..7fc1ded9fa 100644 --- a/code/game/objects/lighting/_base_light.dm +++ b/code/game/objects/lighting/_base_light.dm @@ -34,7 +34,6 @@ var/bulb_colour = "#FFFFFF" // befault colour of the light. var/status = LIGHT_OK // LIGHT_OK, _EMPTY, _BURNED or _BROKEN var/flickering = FALSE - var/light_type = /obj/item/light/tube // the type of light item var/fitting = "tube" var/switchcount = 0 // count of number of times switched on/off // this is used to calc the probability the light burns out @@ -79,7 +78,6 @@ fitting = "bulb" brightness = 4 desc = "" - light_type = /obj/item/light/bulb /obj/machinery/light/small/broken status = LIGHT_BROKEN @@ -230,58 +228,6 @@ on = (s && status == LIGHT_OK) update() -// attack with item - insert light (if right type), otherwise try to break the light - -/obj/machinery/light/attackby(obj/item/W, mob/living/user, params) - - //Light replacer code - if(istype(W, /obj/item/lightreplacer)) - var/obj/item/lightreplacer/LR = W - LR.ReplaceLight(src, user) - - // attempt to insert light - else if(istype(W, /obj/item/light)) - if(status == LIGHT_OK) - to_chat(user, "There is a [fitting] already inserted!") - else - src.add_fingerprint(user) - var/obj/item/light/L = W - if(istype(L, light_type)) - if(!user.temporarilyRemoveItemFromInventory(L)) - return - - src.add_fingerprint(user) - if(status != LIGHT_EMPTY) - drop_light_tube(user) - to_chat(user, "I replace [L].") - else - to_chat(user, "I insert [L].") - status = L.status - switchcount = L.switchcount - rigged = L.rigged - brightness = L.brightness - on = has_power() - update() - - qdel(L) - - if(on && rigged) - explode() - else - to_chat(user, "This type of light requires a [fitting]!") - - // attempt to stick weapon into light socket - else if(status == LIGHT_EMPTY) - if(W.tool_behaviour == TOOL_SCREWDRIVER) //If it's a screwdriver open it. - W.play_tool_sound(src, 75) - user.visible_message("[user.name] opens [src]'s casing.", \ - "I open [src]'s casing.", "I hear a noise.") - deconstruct() - else - to_chat(user, "I stick \the [W] into the light socket!") - else - return ..() - /obj/machinery/light/deconstruct(disassembled = TRUE) qdel(src) @@ -340,38 +286,6 @@ add_fingerprint(user) -/obj/machinery/light/proc/drop_light_tube(mob/user) - var/obj/item/light/L = new light_type() - L.status = status - L.rigged = rigged - L.brightness = brightness - - // light item inherits the switchcount, then zero it - L.switchcount = switchcount - switchcount = 0 - - L.update() - L.forceMove(loc) - - if(user) //puts it in our active hand - L.add_fingerprint(user) - user.put_in_active_hand(L) - - status = LIGHT_EMPTY - update() - return L - -/obj/machinery/light/attack_tk(mob/user) - if(status == LIGHT_EMPTY) - to_chat(user, "There is no [fitting] in this light!") - return - - to_chat(user, "I telekinetically remove the light [fitting].") - // create a light tube/bulb item and put it in the user's hand - var/obj/item/light/L = drop_light_tube() - L.attack_tk(user) - - // break the light and make sparks if was on /obj/machinery/light/proc/break_light_tube(skip_sound_and_sparks = 0) @@ -418,126 +332,6 @@ sleep(1) qdel(src) -// the light item -// can be tube or bulb subtypes -// will fit into empty /obj/machinery/light of the corresponding type - -/obj/item/light - icon = 'icons/obj/lighting.dmi' - force = 2 - throwforce = 5 - w_class = WEIGHT_CLASS_TINY - var/status = LIGHT_OK // LIGHT_OK, LIGHT_BURNED or LIGHT_BROKEN - var/base_state - var/switchcount = 0 // number of times switched - custom_materials = list(/datum/material/glass=100) - grind_results = list(/datum/reagent/silicon = 5, /datum/reagent/nitrogen = 10) //Nitrogen is used as a cheaper alternative to argon in incandescent lighbulbs - var/rigged = FALSE // true if rigged to explode - var/brightness = 2 //how much light it gives off - -/obj/item/light/suicide_act(mob/living/carbon/user) - if (status == LIGHT_BROKEN) - user.visible_message("[user] begins to stab [user.p_them()]self with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!") - return BRUTELOSS - else - user.visible_message("[user] begins to eat \the [src]! It looks like [user.p_theyre()] not very bright!") - shatter() - return BRUTELOSS - -/obj/item/light/tube - name = "light tube" - desc = "" - icon_state = "ltube" - base_state = "ltube" - item_state = "c_tube" - brightness = 8 - -/obj/item/light/tube/broken - status = LIGHT_BROKEN - -/obj/item/light/bulb - name = "light bulb" - desc = "" - icon_state = "lbulb" - base_state = "lbulb" - item_state = "contvapour" - lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' - brightness = 4 - -/obj/item/light/bulb/broken - status = LIGHT_BROKEN - -/obj/item/light/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) - if(!..()) //not caught by a mob - shatter() - -// update the icon state and description of the light - -/obj/item/light/proc/update() - switch(status) - if(LIGHT_OK) - icon_state = base_state - desc = "" - if(LIGHT_BURNED) - icon_state = "[base_state]-burned" - desc = "" - if(LIGHT_BROKEN) - icon_state = "[base_state]-broken" - desc = "" - -/obj/item/light/Initialize() - . = ..() - update() - -/obj/item/light/ComponentInitialize() - . = ..() - AddComponent(/datum/component/caltrop, force) - -/obj/item/light/Crossed(mob/living/L) - . = ..() - if(istype(L) && has_gravity(loc)) - playsound(loc, 'sound/blank.ogg', HAS_TRAIT(L, TRAIT_LIGHT_STEP) ? 30 : 50, TRUE) - if(status == LIGHT_BURNED || status == LIGHT_OK) - shatter() - -// attack bulb/tube with object -// if a syringe, can inject plasma to make it explode -/obj/item/light/attackby(obj/item/I, mob/user, params) - ..() - if(istype(I, /obj/item/reagent_containers/syringe)) - var/obj/item/reagent_containers/syringe/S = I - - to_chat(user, "I inject the solution into \the [src].") - - if(S.reagents.has_reagent(/datum/reagent/toxin/plasma, 5)) - - rigged = TRUE - - S.reagents.clear_reagents() - else - ..() - return - -/obj/item/light/attack(mob/living/M, mob/living/user, def_zone) - ..() - shatter() - -/obj/item/light/attack_obj(obj/O, mob/living/user) - ..() - shatter() - -/obj/item/light/proc/shatter() - if(status == LIGHT_OK || status == LIGHT_BURNED) - visible_message("[src] shatters.","I hear a small glass object shatter.") - status = LIGHT_BROKEN - force = 5 - playsound(src.loc, 'sound/blank.ogg', 75, TRUE) - if(rigged) - atmos_spawn_air("plasma=5") //5u of plasma are required to rig a light bulb/tube - update() - - /obj/machinery/light/floor name = "floor light" icon = 'icons/obj/lighting.dmi' @@ -545,5 +339,4 @@ icon_state = "floor" brightness = 4 layer = 2.5 - light_type = /obj/item/light/bulb fitting = "bulb" diff --git a/code/game/objects/structures/artstuff.dm b/code/game/objects/structures/artstuff.dm index 911642b955..74990a31b8 100644 --- a/code/game/objects/structures/artstuff.dm +++ b/code/game/objects/structures/artstuff.dm @@ -113,10 +113,6 @@ GLOBAL_LIST_INIT(globalBlankCanvases, new(AMT_OF_CANVASES)) DrawPixelOn(theOriginalPix,pixX,pixY) qdel(masterpiece) - //Drawing one pixel with a crayon - else if(istype(I, /obj/item/toy/crayon)) - var/obj/item/toy/crayon/C = I - DrawPixelOn(C.paint_color, pixX, pixY) else return ..() diff --git a/code/game/objects/structures/barricades.dm b/code/game/objects/structures/barricades.dm index 754e73e1c3..5ea2ebf757 100644 --- a/code/game/objects/structures/barricades.dm +++ b/code/game/objects/structures/barricades.dm @@ -79,23 +79,6 @@ icon_state = "woodenbarricade_r2" max_integrity = 40 -/obj/structure/barricade/wooden/attackby(obj/item/I, mob/user) - if(istype(I,/obj/item/stack/sheet/mineral/wood)) - var/obj/item/stack/sheet/mineral/wood/W = I - if(W.amount < 5) - to_chat(user, "I need at least five wooden planks to make a wall!") - return - else - to_chat(user, "I start adding [I] to [src]...") - if(do_after(user, 50, target=src)) - W.use(5) - var/turf/T = get_turf(src) - T.PlaceOnTop(/turf/closed/wall/mineral/wood/nonmetal) - qdel(src) - return - return ..() - - /obj/structure/barricade/wooden/crude name = "crude plank barricade" desc = "" @@ -109,9 +92,6 @@ icon_state = "woodenbarricade-snow-old" max_integrity = 75 -/obj/structure/barricade/wooden/make_debris() - new /obj/item/stack/sheet/mineral/wood(get_turf(src), drop_amount) - #undef SINGLE #undef VERTICAL #undef HORIZONTAL diff --git a/code/game/objects/structures/barsigns.dm b/code/game/objects/structures/barsigns.dm deleted file mode 100644 index b03ec3e767..0000000000 --- a/code/game/objects/structures/barsigns.dm +++ /dev/null @@ -1,301 +0,0 @@ -/obj/structure/sign/barsign // All Signs are 64 by 32 pixels, they take two tiles - name = "bar sign" - desc = "" - icon = 'icons/obj/barsigns.dmi' - icon_state = "empty" - req_access = list(ACCESS_BAR) - max_integrity = 500 - integrity_failure = 0.5 - armor = list("melee" = 20, "bullet" = 20, "laser" = 20, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) - buildable_sign = 0 - - var/panel_open = FALSE - var/datum/barsign/chosen_sign - -/obj/structure/sign/barsign/Initialize() - . = ..() - set_sign(new /datum/barsign/hiddensigns/signoff) - -/obj/structure/sign/barsign/proc/set_sign(datum/barsign/sign) - if(!istype(sign)) - return - - icon_state = sign.icon - - if(sign.name) - name = "[initial(name)] ([sign.name])" - else - name = "[initial(name)]" - - if(sign.desc) - desc = sign.desc - - if(sign.rename_area && sign.name) - rename_area(src, sign.name) - - return sign - -/obj/structure/sign/barsign/proc/set_sign_by_name(sign_name) - for(var/d in subtypesof(/datum/barsign)) - var/datum/barsign/D = d - if(initial(D.name) == sign_name) - var/new_sign = new D - return set_sign(new_sign) - -/obj/structure/sign/barsign/obj_break(damage_flag) - if(!broken && !(flags_1 & NODECONSTRUCT_1)) - broken = TRUE - ..() - -/obj/structure/sign/barsign/deconstruct(disassembled = TRUE) - new /obj/item/stack/sheet/metal(drop_location(), 2) - qdel(src) - -/obj/structure/sign/barsign/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) - switch(damage_type) - if(BRUTE) - playsound(src.loc, 'sound/blank.ogg', 75, TRUE) - if(BURN) - playsound(src.loc, 'sound/blank.ogg', 100, TRUE) - -/obj/structure/sign/barsign/attack_hand(mob/user) - . = ..() - if(.) - return - if(!allowed(user)) - to_chat(user, "Access denied.") - return - if(broken) - to_chat(user, "The controls seem unresponsive.") - return - pick_sign(user) - -/obj/structure/sign/barsign/attackby(obj/item/I, mob/user) - if(I.tool_behaviour == TOOL_SCREWDRIVER) - if(!panel_open) - to_chat(user, "I open the maintenance panel.") - set_sign(new /datum/barsign/hiddensigns/signoff) - panel_open = TRUE - else - to_chat(user, "I close the maintenance panel.") - if(!broken) - if(!chosen_sign) - set_sign(new /datum/barsign/hiddensigns/signoff) - else - set_sign(chosen_sign) - else - set_sign(new /datum/barsign/hiddensigns/empbarsign) - panel_open = FALSE - - else - return ..() - - -/obj/structure/sign/barsign/emp_act(severity) - . = ..() - if(. & EMP_PROTECT_SELF) - return - set_sign(new /datum/barsign/hiddensigns/empbarsign) - broken = TRUE - -/obj/structure/sign/barsign/emag_act(mob/user) - if(broken) - to_chat(user, "Nothing interesting happens!") - return - to_chat(user, "I load an illegal barsign into the memory buffer...") - sleep(10 SECONDS) - chosen_sign = set_sign(new /datum/barsign/hiddensigns/syndibarsign) - - -/obj/structure/sign/barsign/proc/pick_sign(mob/user) - var/picked_name = input(user, "Available Signage", "Bar Sign", name) as null|anything in sortList(get_bar_names()) - if(!picked_name) - return - chosen_sign = set_sign_by_name(picked_name) - SSblackbox.record_feedback("tally", "barsign_picked", 1, chosen_sign.type) - -/proc/get_bar_names() - var/list/names = list() - for(var/d in subtypesof(/datum/barsign)) - var/datum/barsign/D = d - if(initial(D.name) && !initial(D.hidden)) - names += initial(D.name) - . = names - -/datum/barsign - var/name = "Name" - var/icon = "Icon" - var/desc = "" - var/hidden = FALSE - var/rename_area = TRUE - -/datum/barsign/New() - if(!desc) - desc = "" - -// Specific bar signs. - -/datum/barsign/maltesefalcon - name = "Maltese Falcon" - icon = "maltesefalcon" - desc = "" - -/datum/barsign/thebark - name = "The Bark" - icon = "thebark" - desc = "" - -/datum/barsign/harmbaton - name = "The Harmbaton" - icon = "theharmbaton" - desc = "" - -/datum/barsign/thesingulo - name = "The Singulo" - icon = "thesingulo" - desc = "" - -/datum/barsign/thedrunkcarp - name = "The Drunk Carp" - icon = "thedrunkcarp" - desc = "" - -/datum/barsign/scotchservinwill - name = "Scotch Servin Willy's" - icon = "scotchservinwill" - desc = "" - -/datum/barsign/officerbeersky - name = "Officer Beersky's" - icon = "officerbeersky" - desc = "" - -/datum/barsign/thecavern - name = "The Cavern" - icon = "thecavern" - desc = "" - -/datum/barsign/theouterspess - name = "The Outer Spess" - icon = "theouterspess" - desc = "" - -/datum/barsign/slipperyshots - name = "Slippery Shots" - icon = "slipperyshots" - desc = "" - -/datum/barsign/thegreytide - name = "The Grey Tide" - icon = "thegreytide" - desc = "" - -/datum/barsign/honkednloaded - name = "Honked 'n' Loaded" - icon = "honkednloaded" - desc = "" - -/datum/barsign/thenest - name = "The Nest" - icon = "thenest" - desc = "" - -/datum/barsign/thecoderbus - name = "The Coderbus" - icon = "thecoderbus" - desc = "" - -/datum/barsign/theadminbus - name = "The Adminbus" - icon = "theadminbus" - desc = "" - -/datum/barsign/oldcockinn - name = "The Old Cock Inn" - icon = "oldcockinn" - desc = "" - -/datum/barsign/thewretchedhive - name = "The Wretched Hive" - icon = "thewretchedhive" - desc = "" - -/datum/barsign/robustacafe - name = "The Robusta Cafe" - icon = "robustacafe" - desc = "" - -/datum/barsign/emergencyrumparty - name = "The Emergency Rum Party" - icon = "emergencyrumparty" - desc = "" - -/datum/barsign/combocafe - name = "The Combo Cafe" - icon = "combocafe" - desc = "" - -/datum/barsign/vladssaladbar - name = "Vlad's Salad Bar" - icon = "vladssaladbar" - desc = "" - -/datum/barsign/theshaken - name = "The Shaken" - icon = "theshaken" - desc = "" - -/datum/barsign/thealenath - name = "The Ale' Nath" - icon = "thealenath" - desc = "" - -/datum/barsign/thealohasnackbar - name = "The Aloha Snackbar" - icon = "alohasnackbar" - desc = "" - -/datum/barsign/thenet - name = "The Net" - icon = "thenet" - desc = "" - -/datum/barsign/maidcafe - name = "Maid Cafe" - icon = "maidcafe" - desc = "" - -/datum/barsign/the_lightbulb - name = "The Lightbulb" - icon = "the_lightbulb" - desc = "" - -/datum/barsign/goose - name = "The Loose Goose" - icon = "goose" - desc = "" - -/datum/barsign/hiddensigns - hidden = TRUE - - -//Hidden signs list below this point - - - -/datum/barsign/hiddensigns/empbarsign - name = null - icon = "empbarsign" - desc = "" - rename_area = FALSE - -/datum/barsign/hiddensigns/syndibarsign - name = "Syndi Cat" - icon = "syndibarsign" - desc = "" - -/datum/barsign/hiddensigns/signoff - name = null - icon = "empty" - desc = "" - rename_area = FALSE diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm index b7d2442647..229ff8d4e4 100644 --- a/code/game/objects/structures/beds_chairs/chair.dm +++ b/code/game/objects/structures/beds_chairs/chair.dm @@ -9,7 +9,6 @@ resistance_flags = NONE max_integrity = 250 integrity_failure = 0.1 - custom_materials = list(/datum/material/iron = 2000) var/buildstacktype var/buildstackamount = 1 var/item_chair = /obj/item/chair // if null it can't be picked up @@ -371,52 +370,6 @@ /obj/item/chair/wood/wings icon_state = "wooden_chair_wings_toppled" origin_type = /obj/structure/chair/wood/wings - -/obj/structure/chair/old - name = "strange chair" - desc = "" - icon_state = "chairold" - item_chair = null - -/obj/structure/chair/bronze - name = "brass chair" - desc = "" - anchored = FALSE - icon_state = "brass_chair" - buildstacktype = /obj/item/stack/tile/bronze - buildstackamount = 1 - item_chair = null - var/turns = 0 - -/obj/structure/chair/bronze/Destroy() - STOP_PROCESSING(SSfastprocess, src) - . = ..() - -/obj/structure/chair/bronze/process() - setDir(turn(dir,-90)) - playsound(src, 'sound/blank.ogg', 50, FALSE) - turns++ - if(turns >= 8) - STOP_PROCESSING(SSfastprocess, src) - -/obj/structure/chair/bronze/Moved() - . = ..() - if(has_gravity()) - playsound(src, 'sound/blank.ogg', 50, TRUE) - -/obj/structure/chair/bronze/AltClick(mob/living/user) - turns = 0 - if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) - return - if(!(datum_flags & PROCESSING_FAST)) - user.visible_message("[user] spins [src] around, and the last vestiges of Ratvarian technology keeps it spinning FOREVER.", \ - "Automated spinny chairs. The pinnacle of ancient Ratvarian technology.") - START_PROCESSING(SSfastprocess, src) - else - user.visible_message("[user] stops [src]'s uncontrollable spinning.", \ - "I grab [src] and stop its wild spinning.") - STOP_PROCESSING(SSfastprocess, src) - /obj/structure/chair/mime name = "invisible chair" desc = "" @@ -432,46 +385,3 @@ /obj/structure/chair/mime/post_unbuckle_mob(mob/living/M) M.pixel_y -= 5 - - -/obj/structure/chair/plastic - icon_state = "plastic_chair" - name = "folding plastic chair" - desc = "" - resistance_flags = FLAMMABLE - max_integrity = 50 - custom_materials = list(/datum/material/plastic = 2000) - buildstacktype = /obj/item/stack/sheet/plastic - buildstackamount = 2 - item_chair = /obj/item/chair/plastic - -/obj/structure/chair/plastic/post_buckle_mob(mob/living/Mob) - Mob.pixel_y -= 2 - .=..() - if(iscarbon(Mob)) - INVOKE_ASYNC(src, PROC_REF(snap_check), Mob) - -/obj/structure/chair/plastic/post_unbuckle_mob(mob/living/Mob) - Mob.pixel_y += 2 - -/obj/structure/chair/plastic/proc/snap_check(mob/living/carbon/Mob) - if (Mob.nutrition >= NUTRITION_LEVEL_FAT) - to_chat(Mob, "The chair begins to pop and crack, you're too heavy!") - if(do_after(Mob, 60, 1, Mob, 0)) - Mob.visible_message("The plastic chair snaps under [Mob]'s weight!") - qdel(src) - -/obj/item/chair/plastic - name = "folding plastic chair" - desc = "" - icon = 'icons/obj/chairs.dmi' - icon_state = "folded_chair" - item_state = "folded_chair" - lefthand_file = 'icons/mob/inhands/misc/chairs_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/chairs_righthand.dmi' - w_class = WEIGHT_CLASS_NORMAL - force = 7 - throw_range = 5 //Lighter Weight --> Flies Farther. - custom_materials = list(/datum/material/plastic = 2000) - break_chance = 25 - origin_type = /obj/structure/chair/plastic diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm deleted file mode 100644 index f70d5a9810..0000000000 --- a/code/game/objects/structures/bedsheet_bin.dm +++ /dev/null @@ -1,445 +0,0 @@ -/* -CONTAINS: -BEDSHEETS -LINEN BINS -*/ - -/obj/item/bedsheet - name = "bedsheet" - desc = "" - icon = 'icons/obj/bedsheets.dmi' - lefthand_file = 'icons/mob/inhands/misc/bedsheet_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/bedsheet_righthand.dmi' - icon_state = "sheetwhite" - item_state = "sheetwhite" - layer = MOB_LAYER - throwforce = 0 - throw_speed = 1 - throw_range = 2 - w_class = WEIGHT_CLASS_TINY - resistance_flags = FLAMMABLE - dying_key = DYE_REGISTRY_BEDSHEET - - dog_fashion = /datum/dog_fashion/head/ghost - var/list/dream_messages = list("white") - -/obj/item/bedsheet/attack_self(mob/user) - if(!user.CanReach(src)) //No telekenetic grabbing. - return - if(!user.dropItemToGround(src)) - return - if(layer == initial(layer)) - layer = ABOVE_MOB_LAYER - to_chat(user, "I cover myself with [src].") - pixel_x = 0 - pixel_y = 0 - else - layer = initial(layer) - to_chat(user, "I smooth [src] out beneath you.") - add_fingerprint(user) - return - -/obj/item/bedsheet/attackby(obj/item/I, mob/user, params) - if(I.tool_behaviour == TOOL_WIRECUTTER || I.get_sharpness()) - var/obj/item/stack/sheet/cloth/C = new (get_turf(src), 3) - transfer_fingerprints_to(C) - C.add_fingerprint(user) - qdel(src) - to_chat(user, "I tear [src] up.") - else - return ..() - -/obj/item/bedsheet/blue - icon_state = "sheetblue" - item_state = "sheetblue" - dream_messages = list("blue") - -/obj/item/bedsheet/green - icon_state = "sheetgreen" - item_state = "sheetgreen" - dream_messages = list("green") - -/obj/item/bedsheet/grey - icon_state = "sheetgrey" - item_state = "sheetgrey" - dream_messages = list("grey") - -/obj/item/bedsheet/orange - icon_state = "sheetorange" - item_state = "sheetorange" - dream_messages = list("orange") - -/obj/item/bedsheet/purple - icon_state = "sheetpurple" - item_state = "sheetpurple" - dream_messages = list("purple") - -/obj/item/bedsheet/patriot - name = "patriotic bedsheet" - desc = "" - icon_state = "sheetUSA" - item_state = "sheetUSA" - dream_messages = list("America", "freedom", "fireworks", "bald eagles") - -/obj/item/bedsheet/rainbow - name = "rainbow bedsheet" - desc = "" - icon_state = "sheetrainbow" - item_state = "sheetrainbow" - dream_messages = list("red", "orange", "yellow", "green", "blue", "purple", "a rainbow") - -/obj/item/bedsheet/red - icon_state = "sheetred" - item_state = "sheetred" - dream_messages = list("red") - -/obj/item/bedsheet/yellow - icon_state = "sheetyellow" - item_state = "sheetyellow" - dream_messages = list("yellow") - -/obj/item/bedsheet/mime - name = "mime's blanket" - desc = "" - icon_state = "sheetmime" - item_state = "sheetmime" - dream_messages = list("silence", "gestures", "a pale face", "a gaping mouth", "the mime") - -/obj/item/bedsheet/clown - name = "clown's blanket" - desc = "" - icon_state = "sheetclown" - item_state = "sheetrainbow" - dream_messages = list("honk", "laughter", "a prank", "a joke", "a smiling face", "the clown") - -/obj/item/bedsheet/captain - name = "captain's bedsheet" - desc = "" - icon_state = "sheetcaptain" - item_state = "sheetcaptain" - dream_messages = list("authority", "a golden ID", "sunglasses", "a green disc", "an antique gun", "the captain") - -/obj/item/bedsheet/rd - name = "research director's bedsheet" - desc = "" - icon_state = "sheetrd" - item_state = "sheetrd" - dream_messages = list("authority", "a silvery ID", "a bomb", "a mech", "a facehugger", "maniacal laughter", "the research director") - -// for Free Golems. -/obj/item/bedsheet/rd/royal_cape - name = "Royal Cape of the Liberator" - desc = "" - dream_messages = list("mining", "stone", "a golem", "freedom", "doing whatever") - -/obj/item/bedsheet/medical - name = "medical blanket" - desc = "" - icon_state = "sheetmedical" - item_state = "sheetmedical" - dream_messages = list("healing", "life", "surgery", "a doctor") - -/obj/item/bedsheet/cmo - name = "chief medical officer's bedsheet" - desc = "" - icon_state = "sheetcmo" - item_state = "sheetcmo" - dream_messages = list("authority", "a silvery ID", "healing", "life", "surgery", "a cat", "the chief medical officer") - -/obj/item/bedsheet/hos - name = "head of security's bedsheet" - desc = "" - icon_state = "sheethos" - item_state = "sheethos" - dream_messages = list("authority", "a silvery ID", "handcuffs", "a baton", "a flashbang", "sunglasses", "the head of security") - -/obj/item/bedsheet/hop - name = "head of personnel's bedsheet" - desc = "" - icon_state = "sheethop" - item_state = "sheethop" - dream_messages = list("authority", "a silvery ID", "obligation", "a computer", "an ID", "a corgi", "the head of personnel") - -/obj/item/bedsheet/ce - name = "chief engineer's bedsheet" - desc = "" - icon_state = "sheetce" - item_state = "sheetce" - dream_messages = list("authority", "a silvery ID", "the engine", "power tools", "an APC", "a parrot", "the chief engineer") - -/obj/item/bedsheet/qm - name = "quartermaster's bedsheet" - desc = "" - icon_state = "sheetqm" - item_state = "sheetqm" - dream_messages = list("a grey ID", "a shuttle", "a crate", "a sloth", "the quartermaster") - -/obj/item/bedsheet/brown - icon_state = "sheetbrown" - item_state = "sheetbrown" - dream_messages = list("brown") - -/obj/item/bedsheet/black - icon_state = "sheetblack" - item_state = "sheetblack" - dream_messages = list("black") - -/obj/item/bedsheet/centcom - name = "\improper CentCom bedsheet" - desc = "" - icon_state = "sheetcentcom" - item_state = "sheetcentcom" - dream_messages = list("a unique ID", "authority", "artillery", "an ending") - -/obj/item/bedsheet/syndie - name = "syndicate bedsheet" - desc = "" - icon_state = "sheetsyndie" - item_state = "sheetsyndie" - dream_messages = list("a green disc", "a red crystal", "a glowing blade", "a wire-covered ID") - -/obj/item/bedsheet/cult - name = "cultist's bedsheet" - desc = "" - icon_state = "sheetcult" - item_state = "sheetcult" - dream_messages = list("a tome", "a floating red crystal", "a glowing sword", "a bloody symbol", "a massive humanoid figure") - -/obj/item/bedsheet/wiz - name = "wizard's bedsheet" - desc = "" - icon_state = "sheetwiz" - item_state = "sheetwiz" - dream_messages = list("a book", "an explosion", "lightning", "a staff", "a skeleton", "a robe", "magic") - -/obj/item/bedsheet/nanotrasen - name = "nanotrasen bedsheet" - desc = "" - icon_state = "sheetNT" - item_state = "sheetNT" - dream_messages = list("authority", "an ending") - -/obj/item/bedsheet/ian - icon_state = "sheetian" - item_state = "sheetian" - dream_messages = list("a dog", "a corgi", "woof", "bark", "arf") - -/obj/item/bedsheet/cosmos - name = "cosmic space bedsheet" - desc = "" - icon_state = "sheetcosmos" - item_state = "sheetcosmos" - dream_messages = list("the infinite cosmos", "Hans Zimmer music", "a flight through space", "the galaxy", "being fabulous", "shooting stars") - light_power = 2 - light_outer_range = 1.4 - -/obj/item/bedsheet/rogue/cloth - desc = "" - icon = 'icons/roguetown/misc/structure.dmi' - icon_state = "cloth_bedsheet" - item_state = "cloth_bedsheet" - pixel_y = 5 - -/obj/item/bedsheet/rogue/pelt - desc = "" - icon = 'icons/roguetown/misc/structure.dmi' - icon_state = "pelt_bedsheet" - item_state = "pelt_bedsheet" - pixel_y = 5 - -/obj/item/bedsheet/rogue/wool - desc = "" - icon = 'icons/roguetown/misc/structure.dmi' - icon_state = "wool_bedsheet" - item_state = "wool_bedsheet" - pixel_y = 5 - -/obj/item/bedsheet/rogue/double_pelt - desc = "" - icon = 'icons/roguetown/misc/structure.dmi' - icon_state = "double_pelt_bedsheet" - item_state = "double_pelt_bedsheet" - -/obj/item/bedsheet/rogue/fabric - desc = "" - icon = 'icons/roguetown/misc/structure.dmi' - icon_state = "fabric_bedsheet" - item_state = "fabric_bedsheet" - pixel_y = 5 - -/obj/item/bedsheet/rogue/fabric_double - desc = "" - icon = 'icons/roguetown/misc/structure.dmi' - icon_state = "double_fabric_bedsheet" - item_state = "double_fabric_bedsheet" - -/obj/item/bedsheet/random - icon_state = "random_bedsheet" - name = "random bedsheet" - desc = "" - -/obj/item/bedsheet/random/Initialize() - ..() - var/type = pick(typesof(/obj/item/bedsheet) - /obj/item/bedsheet/random) - new type(loc) - return INITIALIZE_HINT_QDEL - -/obj/item/bedsheet/dorms - icon_state = "random_bedsheet" - name = "random dorms bedsheet" - desc = "" - -/obj/item/bedsheet/dorms/Initialize() - ..() - var/type = pickweight(list("Colors" = 80, "Special" = 20)) - switch(type) - if("Colors") - type = pick(list(/obj/item/bedsheet, - /obj/item/bedsheet/blue, - /obj/item/bedsheet/green, - /obj/item/bedsheet/grey, - /obj/item/bedsheet/orange, - /obj/item/bedsheet/purple, - /obj/item/bedsheet/red, - /obj/item/bedsheet/yellow, - /obj/item/bedsheet/brown, - /obj/item/bedsheet/black)) - if("Special") - type = pick(list(/obj/item/bedsheet/patriot, - /obj/item/bedsheet/rainbow, - /obj/item/bedsheet/ian, - /obj/item/bedsheet/cosmos, - /obj/item/bedsheet/nanotrasen)) - new type(loc) - return INITIALIZE_HINT_QDEL - -/obj/structure/bedsheetbin - name = "linen bin" - desc = "" - icon = 'icons/obj/structures.dmi' - icon_state = "linenbin-full" - anchored = TRUE - resistance_flags = FLAMMABLE - max_integrity = 70 - var/amount = 10 - var/list/sheets = list() - var/obj/item/hidden = null - -/obj/structure/bedsheetbin/empty - amount = 0 - icon_state = "linenbin-empty" - anchored = FALSE - - -/obj/structure/bedsheetbin/examine(mob/user) - . = ..() - if(amount < 1) - . += "There are no bed sheets in the bin." - else if(amount == 1) - . += "There is one bed sheet in the bin." - else - . += "There are [amount] bed sheets in the bin." - - -/obj/structure/bedsheetbin/update_icon() - switch(amount) - if(0) - icon_state = "linenbin-empty" - if(1 to 5) - icon_state = "linenbin-half" - else - icon_state = "linenbin-full" - -/obj/structure/bedsheetbin/fire_act(added, maxstacks) - if(amount) - amount = 0 - update_icon() - ..() - -/obj/structure/bedsheetbin/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/bedsheet)) - if(!user.transferItemToLoc(I, src)) - return - sheets.Add(I) - amount++ - to_chat(user, "I tuck [I] in [src].") - update_icon() - - else if(default_unfasten_wrench(user, I, 5)) - return - - else if(I.tool_behaviour == TOOL_SCREWDRIVER) - if(flags_1 & NODECONSTRUCT_1) - return - if(amount) - to_chat(user, "The [src] must be empty first!") - return - if(I.use_tool(src, user, 5, volume=50)) - to_chat(user, "I disassemble the [src].") - new /obj/item/stack/rods(loc, 2) - qdel(src) - - else if(amount && !hidden && I.w_class < WEIGHT_CLASS_BULKY) //make sure there's sheets to hide it among, make sure nothing else is hidden in there. - if(!user.transferItemToLoc(I, src)) - to_chat(user, "\The [I] is stuck to your hand, you cannot hide it among the sheets!") - return - hidden = I - to_chat(user, "I hide [I] among the sheets.") - - -/obj/structure/bedsheetbin/attack_paw(mob/user) - return attack_hand(user) - -/obj/structure/bedsheetbin/attack_hand(mob/user) - . = ..() - if(.) - return - if(isliving(user)) - var/mob/living/L = user - if(!(L.mobility_flags & MOBILITY_PICKUP)) - return - if(amount >= 1) - amount-- - - var/obj/item/bedsheet/B - if(sheets.len > 0) - B = sheets[sheets.len] - sheets.Remove(B) - - else - B = new /obj/item/bedsheet(loc) - - B.forceMove(drop_location()) - user.put_in_hands(B) - to_chat(user, "I take [B] out of [src].") - update_icon() - - if(hidden) - hidden.forceMove(drop_location()) - to_chat(user, "[hidden] falls out of [B]!") - hidden = null - - - add_fingerprint(user) -/obj/structure/bedsheetbin/attack_tk(mob/user) - if(amount >= 1) - amount-- - - var/obj/item/bedsheet/B - if(sheets.len > 0) - B = sheets[sheets.len] - sheets.Remove(B) - - else - B = new /obj/item/bedsheet(loc) - - B.forceMove(drop_location()) - to_chat(user, "I telekinetically remove [B] from [src].") - update_icon() - - if(hidden) - hidden.forceMove(drop_location()) - hidden = null - - - add_fingerprint(user) diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 89f6e04828..9d7e6cc2f8 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -27,7 +27,6 @@ var/max_mob_size = MOB_SIZE_HUMAN //Biggest mob_size accepted by the container var/mob_storage_capacity = 2 // how many human sized mob/living can fit together inside a closet. var/storage_capacity = 30 //This is so that someone can't pack hundreds of items in a locker/crate then open it in a populated area to crash clients. - var/cutting_tool = /obj/item/weldingtool var/open_sound = 'sound/misc/cupboard_open.ogg' var/close_sound = 'sound/misc/cupboard_close.ogg' var/open_sound_volume = 100 @@ -217,7 +216,7 @@ return FALSE else if(isitem(AM) && !HAS_TRAIT(AM, TRAIT_NODROP)) return TRUE - else if(!allow_objects && !istype(AM, /obj/effect/dummy/chameleon)) + else if(!allow_objects) return FALSE // for(var/mob/living/M in contents) // return FALSE diff --git a/code/game/objects/structures/crates_lockers/closets/bodybag.dm b/code/game/objects/structures/crates_lockers/closets/bodybag.dm deleted file mode 100644 index f15bd81ba7..0000000000 --- a/code/game/objects/structures/crates_lockers/closets/bodybag.dm +++ /dev/null @@ -1,115 +0,0 @@ - -/obj/structure/closet/body_bag - name = "body bag" - desc = "" - icon = 'icons/obj/bodybag.dmi' - icon_state = "bodybag" - density = FALSE - mob_storage_capacity = 2 - open_sound = 'sound/blank.ogg' - close_sound = 'sound/blank.ogg' - open_sound_volume = 15 - close_sound_volume = 15 - integrity_failure = 0 - material_drop = /obj/item/stack/sheet/cloth - delivery_icon = null //unwrappable - anchorable = FALSE - mouse_drag_pointer = MOUSE_ACTIVE_POINTER - drag_slowdown = 0 - var/foldedbag_path = /obj/item/bodybag - var/obj/item/bodybag/foldedbag_instance = null - var/tagged = 0 // so closet code knows to put the tag overlay back - -/obj/structure/closet/body_bag/Destroy() - // If we have a stored bag, and it's in nullspace (not in someone's hand), delete it. - if (foldedbag_instance && !foldedbag_instance.loc) - QDEL_NULL(foldedbag_instance) - return ..() - -/obj/structure/closet/body_bag/attackby(obj/item/I, mob/user, params) - if (istype(I, /obj/item/pen) || istype(I, /obj/item/toy/crayon)) - if(!user.is_literate()) - to_chat(user, "I scribble illegibly on [src]!") - return - var/t = stripped_input(user, "What would you like the label to be?", name, null, 53) - if(user.get_active_held_item() != I) - return - if(!user.canUseTopic(src, BE_CLOSE)) - return - if(t) - name = "body bag - [t]" - tagged = 1 - update_icon() - else - name = "body bag" - return - else if(I.tool_behaviour == TOOL_WIRECUTTER) - to_chat(user, "I cut the tag off [src].") - name = "body bag" - tagged = 0 - update_icon() - -/obj/structure/closet/body_bag/update_icon() - ..() - if (tagged) - add_overlay("bodybag_label") - -/obj/structure/closet/body_bag/open(mob/living/user) - . = ..() - if(.) - mouse_drag_pointer = MOUSE_INACTIVE_POINTER - -/obj/structure/closet/body_bag/close() - . = ..() - if(.) - density = FALSE - mouse_drag_pointer = MOUSE_ACTIVE_POINTER - -/obj/structure/closet/body_bag/MouseDrop(over_object, src_location, over_location) - . = ..() - if(over_object == usr && Adjacent(usr) && (in_range(src, usr) || usr.contents.Find(src))) - if(!ishuman(usr)) - return - if(opened) - to_chat(usr, "I wrestle with [src], but it won't fold while unzipped.") - return - if(contents.len) - to_chat(usr, "There are too many things inside of [src] to fold it up!") - return - visible_message("[usr] folds up [src].") - var/obj/item/bodybag/B = foldedbag_instance || new foldedbag_path - usr.put_in_hands(B) - qdel(src) - - -/obj/structure/closet/body_bag/bluespace - name = "bluespace body bag" - desc = "" - icon = 'icons/obj/bodybag.dmi' - icon_state = "bluebodybag" - foldedbag_path = /obj/item/bodybag/bluespace - mob_storage_capacity = 15 - max_mob_size = MOB_SIZE_LARGE - -/obj/structure/closet/body_bag/bluespace/MouseDrop(over_object, src_location, over_location) - . = ..() - if(over_object == usr && Adjacent(usr) && (in_range(src, usr) || usr.contents.Find(src))) - if(!ishuman(usr)) - return - if(opened) - to_chat(usr, "I wrestle with [src], but it won't fold while unzipped.") - return - if(contents.len >= mob_storage_capacity / 2) - to_chat(usr, "There are too many things inside of [src] to fold it up!") - return - for(var/obj/item/bodybag/bluespace/B in src) - to_chat(usr, "I can't recursively fold bluespace body bags!" ) - return - visible_message("[usr] folds up [src].") - var/obj/item/bodybag/B = foldedbag_instance || new foldedbag_path - usr.put_in_hands(B) - for(var/atom/movable/A in contents) - A.forceMove(B) - if(isliving(A)) - to_chat(A, "You're suddenly forced into a tiny, compressed space!") - qdel(src) diff --git a/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm b/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm deleted file mode 100644 index b364bb58f7..0000000000 --- a/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm +++ /dev/null @@ -1,88 +0,0 @@ -#define SNAKE_SPAM_TICKS 600 //how long between cardboard box openings that trigger the '!' -/obj/structure/closet/cardboard - name = "large cardboard box" - desc = "" - icon_state = "cardboard" - mob_storage_capacity = 1 - resistance_flags = FLAMMABLE - max_integrity = 70 - integrity_failure = 0 - can_weld_shut = 0 - cutting_tool = /obj/item/wirecutters - material_drop = /obj/item/stack/sheet/cardboard - delivery_icon = "deliverybox" - anchorable = FALSE - open_sound = 'sound/blank.ogg' - close_sound = 'sound/blank.ogg' - open_sound_volume = 35 - close_sound_volume = 35 - var/move_speed_multiplier = 1 - var/move_delay = FALSE - var/egged = 0 - -/obj/structure/closet/cardboard/relaymove(mob/living/user, direction) - if(!istype(user) || opened || move_delay || user.incapacitated() || !isturf(loc) || !has_gravity(loc)) - return - move_delay = TRUE - if(step(src, direction)) - addtimer(CALLBACK(src, PROC_REF(ResetMoveDelay)), CONFIG_GET(number/movedelay/walk_delay) * move_speed_multiplier) - else - ResetMoveDelay() - -/obj/structure/closet/cardboard/proc/ResetMoveDelay() - move_delay = FALSE - -/obj/structure/closet/cardboard/open() - if(opened || !can_open()) - return 0 - var/list/alerted = null - if(egged < world.time) - var/mob/living/Snake = null - for(var/mob/living/L in src.contents) - Snake = L - break - if(Snake) - alerted = viewers(7,src) - ..() - if(LAZYLEN(alerted)) - egged = world.time + SNAKE_SPAM_TICKS - for(var/mob/living/L in alerted) - if(!L.stat) - if(!L.incapacitated(ignore_restraints = 1)) - L.face_atom(src) - L.do_alert_animation(L) - playsound(loc, 'sound/blank.ogg', 50, FALSE, -5) - -/mob/living/proc/do_alert_animation(atom/A) - var/image/I = image('icons/obj/closet.dmi', A, "cardboard_special", A.layer+1) - flick_overlay_view(I, A, 8) - I.alpha = 0 - animate(I, pixel_z = 32, alpha = 255, time = 5, easing = ELASTIC_EASING) - - -/obj/structure/closet/cardboard/metal - name = "large metal box" - desc = "" - icon_state = "metalbox" - max_integrity = 500 - mob_storage_capacity = 5 - resistance_flags = NONE - move_speed_multiplier = 2 - cutting_tool = /obj/item/weldingtool - open_sound = 'sound/blank.ogg' - close_sound = 'sound/blank.ogg' - open_sound_volume = 35 - close_sound_volume = 50 - material_drop = /obj/item/stack/sheet/plasteel -#undef SNAKE_SPAM_TICKS - -/obj/structure/closet/cardboard/relaymove(mob/living/user, direction) - if(!istype(user) || opened || move_delay || user.incapacitated() || !isturf(loc) || !has_gravity(loc)) - return - move_delay = TRUE - var/oldloc = loc - step(src, direction) - if(oldloc != loc) - addtimer(CALLBACK(src, PROC_REF(ResetMoveDelay)), CONFIG_GET(number/movedelay/walk_delay) * move_speed_multiplier) - else - move_delay = FALSE diff --git a/code/game/objects/structures/crates_lockers/closets/gimmick.dm b/code/game/objects/structures/crates_lockers/closets/gimmick.dm deleted file mode 100644 index d59404a507..0000000000 --- a/code/game/objects/structures/crates_lockers/closets/gimmick.dm +++ /dev/null @@ -1,93 +0,0 @@ -/obj/structure/closet/cabinet - name = "cabinet" - desc = "" - icon_state = "cabinet" - resistance_flags = FLAMMABLE - open_sound = 'sound/blank.ogg' - close_sound = 'sound/blank.ogg' - open_sound_volume = 25 - close_sound_volume = 50 - max_integrity = 70 - -/obj/structure/closet/acloset - name = "strange closet" - desc = "" - icon_state = "alien" - - -/obj/structure/closet/gimmick - name = "administrative supply closet" - desc = "" - icon_state = "syndicate" - -/obj/structure/closet/gimmick/russian - name = "\improper Russian surplus closet" - desc = "" - -/obj/structure/closet/gimmick/russian/PopulateContents() - ..() - for(var/i in 1 to 5) - new /obj/item/clothing/head/ushanka(src) - for(var/i in 1 to 5) - new /obj/item/clothing/under/costume/soviet(src) - -/obj/structure/closet/gimmick/tacticool - name = "tacticool gear closet" - desc = "" - -/obj/structure/closet/gimmick/tacticool/PopulateContents() - ..() - new /obj/item/clothing/glasses/eyepatch(src) - new /obj/item/clothing/glasses/sunglasses(src) - new /obj/item/clothing/gloves/combat(src) - new /obj/item/clothing/gloves/combat(src) - new /obj/item/clothing/head/helmet/swat(src) - new /obj/item/clothing/head/helmet/swat(src) - new /obj/item/clothing/mask/gas/sechailer/swat(src) - new /obj/item/clothing/mask/gas/sechailer/swat(src) - new /obj/item/clothing/shoes/combat/swat(src) - new /obj/item/clothing/shoes/combat/swat(src) - new /obj/item/clothing/under/syndicate/tacticool(src) - new /obj/item/clothing/under/syndicate/tacticool(src) - - -/obj/structure/closet/thunderdome - name = "\improper Thunderdome closet" - desc = "" - anchored = TRUE - -/obj/structure/closet/thunderdome/tdred - name = "red-team Thunderdome closet" - icon_door = "red" - -/obj/structure/closet/thunderdome/tdred/PopulateContents() - ..() - for(var/i in 1 to 3) - new /obj/item/clothing/suit/armor/tdome/red(src) - for(var/i in 1 to 3) - new /obj/item/storage/box/flashbangs(src) - for(var/i in 1 to 3) - new /obj/item/clothing/head/helmet/thunderdome(src) - -/obj/structure/closet/thunderdome/tdgreen - name = "green-team Thunderdome closet" - icon_door = "green" - -/obj/structure/closet/thunderdome/tdgreen/PopulateContents() - ..() - for(var/i in 1 to 3) - new /obj/item/clothing/suit/armor/tdome/green(src) - for(var/i in 1 to 3) - new /obj/item/storage/box/flashbangs(src) - for(var/i in 1 to 3) - new /obj/item/clothing/head/helmet/thunderdome(src) - -/obj/structure/closet/malf/suits - desc = "" - icon_state = "syndicate" - -/obj/structure/closet/malf/suits/PopulateContents() - ..() - new /obj/item/clothing/mask/breath(src) - new /obj/item/crowbar(src) - new /obj/item/multitool(src) diff --git a/code/game/objects/structures/crates_lockers/closets/infinite.dm b/code/game/objects/structures/crates_lockers/closets/infinite.dm deleted file mode 100644 index 20792405a6..0000000000 --- a/code/game/objects/structures/crates_lockers/closets/infinite.dm +++ /dev/null @@ -1,33 +0,0 @@ -/obj/structure/closet/infinite - name = "infinite closet" - desc = "" - var/replicating_type - var/stop_replicating_at = 4 - var/auto_close_time = 15 SECONDS // Set to 0 to disable auto-closing. - -/obj/structure/closet/infinite/Initialize() - . = ..() - START_PROCESSING(SSobj, src) - -/obj/structure/closet/infinite/Destroy() - STOP_PROCESSING(SSobj, src) - . = ..() - -/obj/structure/closet/infinite/process() - if(!replicating_type) - if(!length(contents)) - return - else - replicating_type = contents[1].type - - if(replicating_type && !opened && (length(contents) < stop_replicating_at)) - new replicating_type(src) - -/obj/structure/closet/infinite/open() - . = ..() - if(. && auto_close_time) - addtimer(CALLBACK(src, PROC_REF(close_on_my_own)), auto_close_time, TIMER_OVERRIDE|TIMER_UNIQUE) - -/obj/structure/closet/infinite/proc/close_on_my_own() - if(close()) - visible_message("\The [src] closes on its own.") diff --git a/code/game/objects/structures/crates_lockers/closets/l3closet.dm b/code/game/objects/structures/crates_lockers/closets/l3closet.dm deleted file mode 100644 index cb34222f19..0000000000 --- a/code/game/objects/structures/crates_lockers/closets/l3closet.dm +++ /dev/null @@ -1,54 +0,0 @@ -/obj/structure/closet/l3closet - name = "level 3 biohazard gear closet" - desc = "" - icon_state = "bio" - -/obj/structure/closet/l3closet/PopulateContents() - new /obj/item/storage/bag/bio(src) - new /obj/item/clothing/suit/bio_suit/general(src) - new /obj/item/clothing/head/bio_hood/general(src) - new /obj/item/clothing/mask/breath(src) - new /obj/item/tank/internals/oxygen(src) - - -/obj/structure/closet/l3closet/virology - icon_state = "bio_viro" - -/obj/structure/closet/l3closet/virology/PopulateContents() - new /obj/item/storage/bag/bio(src) - new /obj/item/clothing/suit/bio_suit/virology(src) - new /obj/item/clothing/head/bio_hood/virology(src) - new /obj/item/clothing/mask/breath(src) - new /obj/item/tank/internals/oxygen(src) - - -/obj/structure/closet/l3closet/security - icon_state = "bio_sec" - -/obj/structure/closet/l3closet/security/PopulateContents() - new /obj/item/clothing/suit/bio_suit/security(src) - new /obj/item/clothing/head/bio_hood/security(src) - new /obj/item/clothing/mask/breath(src) - new /obj/item/tank/internals/oxygen(src) - - -/obj/structure/closet/l3closet/janitor - icon_state = "bio_jan" - -/obj/structure/closet/l3closet/janitor/PopulateContents() - new /obj/item/clothing/suit/bio_suit/janitor(src) - new /obj/item/clothing/head/bio_hood/janitor(src) - new /obj/item/clothing/mask/breath(src) - new /obj/item/tank/internals/oxygen(src) - - -/obj/structure/closet/l3closet/scientist - icon_state = "bio_viro" - -/obj/structure/closet/l3closet/scientist/PopulateContents() - new /obj/item/storage/bag/bio(src) - new /obj/item/clothing/suit/bio_suit/scientist(src) - new /obj/item/clothing/head/bio_hood/scientist(src) - new /obj/item/clothing/mask/breath(src) - new /obj/item/tank/internals/oxygen(src) - diff --git a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm deleted file mode 100644 index c2e5c1f56e..0000000000 --- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm +++ /dev/null @@ -1,204 +0,0 @@ -/obj/structure/closet/wardrobe - name = "wardrobe" - desc = "" - icon_door = "blue" - -/obj/structure/closet/wardrobe/PopulateContents() - ..() - for(var/i in 1 to 3) - new /obj/item/clothing/under/color/blue(src) - for(var/i in 1 to 3) - new /obj/item/clothing/under/color/jumpskirt/blue(src) - for(var/i in 1 to 3) - new /obj/item/clothing/shoes/sneakers/brown(src) - return - -/obj/structure/closet/wardrobe/pink - name = "pink wardrobe" - icon_door = "pink" - -/obj/structure/closet/wardrobe/pink/PopulateContents() - for(var/i in 1 to 3) - new /obj/item/clothing/under/color/pink(src) - for(var/i in 1 to 3) - new /obj/item/clothing/under/color/jumpskirt/pink(src) - for(var/i in 1 to 3) - new /obj/item/clothing/shoes/sneakers/brown(src) - return - -/obj/structure/closet/wardrobe/black - name = "black wardrobe" - icon_door = "black" - -/obj/structure/closet/wardrobe/black/PopulateContents() - for(var/i in 1 to 3) - new /obj/item/clothing/under/color/black(src) - for(var/i in 1 to 3) - new /obj/item/clothing/under/color/jumpskirt/black(src) - if(prob(25)) - new /obj/item/clothing/suit/jacket/leather(src) - if(prob(20)) - new /obj/item/clothing/suit/jacket/leather/overcoat(src) - for(var/i in 1 to 3) - new /obj/item/clothing/shoes/sneakers/black(src) - for(var/i in 1 to 3) - new /obj/item/clothing/head/that(src) - for(var/i in 1 to 3) - new /obj/item/clothing/head/soft/black(src) - new /obj/item/clothing/mask/bandana/black(src) - new /obj/item/clothing/mask/bandana/black(src) - if(prob(40)) - new /obj/item/clothing/mask/bandana/skull(src) - return - - -/obj/structure/closet/wardrobe/green - name = "green wardrobe" - icon_door = "green" - -/obj/structure/closet/wardrobe/green/PopulateContents() - for(var/i in 1 to 3) - new /obj/item/clothing/under/color/green(src) - for(var/i in 1 to 3) - new /obj/item/clothing/under/color/jumpskirt/green(src) - for(var/i in 1 to 3) - new /obj/item/clothing/shoes/sneakers/black(src) - new /obj/item/clothing/mask/bandana/green(src) - new /obj/item/clothing/mask/bandana/green(src) - return - - -/obj/structure/closet/wardrobe/orange - name = "prison wardrobe" - desc = "" - icon_door = "orange" - -/obj/structure/closet/wardrobe/orange/PopulateContents() - for(var/i in 1 to 3) - new /obj/item/clothing/under/rank/prisoner(src) - for(var/i in 1 to 3) - new /obj/item/clothing/under/rank/prisoner/skirt(src) - for(var/i in 1 to 3) - new /obj/item/clothing/shoes/sneakers/orange(src) - return - - -/obj/structure/closet/wardrobe/yellow - name = "yellow wardrobe" - icon_door = "yellow" - -/obj/structure/closet/wardrobe/yellow/PopulateContents() - for(var/i in 1 to 3) - new /obj/item/clothing/under/color/yellow(src) - for(var/i in 1 to 3) - new /obj/item/clothing/under/color/jumpskirt/yellow(src) - for(var/i in 1 to 3) - new /obj/item/clothing/shoes/sneakers/orange(src) - new /obj/item/clothing/mask/bandana/gold(src) - new /obj/item/clothing/mask/bandana/gold(src) - return - - -/obj/structure/closet/wardrobe/white - name = "white wardrobe" - icon_door = "white" - -/obj/structure/closet/wardrobe/white/PopulateContents() - for(var/i in 1 to 3) - new /obj/item/clothing/under/color/white(src) - for(var/i in 1 to 3) - new /obj/item/clothing/under/color/jumpskirt/white(src) - for(var/i in 1 to 3) - new /obj/item/clothing/shoes/sneakers/white(src) - for(var/i in 1 to 3) - new /obj/item/clothing/head/soft/mime(src) - return - -/obj/structure/closet/wardrobe/pjs - name = "pajama wardrobe" - icon_door = "white" - -/obj/structure/closet/wardrobe/pjs/PopulateContents() - new /obj/item/clothing/under/misc/pj/red(src) - new /obj/item/clothing/under/misc/pj/red(src) - new /obj/item/clothing/under/misc/pj/blue(src) - new /obj/item/clothing/under/misc/pj/blue(src) - for(var/i in 1 to 4) - new /obj/item/clothing/shoes/sneakers/white(src) - return - - -/obj/structure/closet/wardrobe/grey - name = "grey wardrobe" - icon_door = "grey" - -/obj/structure/closet/wardrobe/grey/PopulateContents() - for(var/i in 1 to 3) - new /obj/item/clothing/under/color/grey(src) - for(var/i in 1 to 3) - new /obj/item/clothing/under/color/jumpskirt/grey(src) - for(var/i in 1 to 3) - new /obj/item/clothing/shoes/sneakers/black(src) - for(var/i in 1 to 3) - new /obj/item/clothing/head/soft/grey(src) - if(prob(50)) - new /obj/item/storage/backpack/duffelbag(src) - if(prob(40)) - new /obj/item/clothing/mask/bandana/black(src) - new /obj/item/clothing/mask/bandana/black(src) - if(prob(40)) - new /obj/item/clothing/under/misc/assistantformal(src) - if(prob(40)) - new /obj/item/clothing/under/misc/assistantformal(src) - if(prob(30)) - new /obj/item/clothing/suit/hooded/wintercoat(src) - new /obj/item/clothing/shoes/winterboots(src) - if(prob(30)) - new /obj/item/clothing/accessory/pocketprotector(src) - return - - -/obj/structure/closet/wardrobe/mixed - name = "mixed wardrobe" - icon_door = "mixed" - -/obj/structure/closet/wardrobe/mixed/PopulateContents() - if(prob(40)) - new /obj/item/clothing/suit/jacket(src) - if(prob(40)) - new /obj/item/clothing/suit/jacket(src) - new /obj/item/clothing/under/color/white(src) - new /obj/item/clothing/under/color/jumpskirt/white(src) - new /obj/item/clothing/under/color/blue(src) - new /obj/item/clothing/under/color/jumpskirt/blue(src) - new /obj/item/clothing/under/color/yellow(src) - new /obj/item/clothing/under/color/jumpskirt/yellow(src) - new /obj/item/clothing/under/color/green(src) - new /obj/item/clothing/under/color/jumpskirt/green(src) - new /obj/item/clothing/under/color/orange(src) - new /obj/item/clothing/under/color/jumpskirt/orange(src) - new /obj/item/clothing/under/color/pink(src) - new /obj/item/clothing/under/color/jumpskirt/pink(src) - new /obj/item/clothing/under/color/red(src) - new /obj/item/clothing/under/color/jumpskirt/red(src) - new /obj/item/clothing/under/color/darkblue(src) - new /obj/item/clothing/under/color/jumpskirt/darkblue(src) - new /obj/item/clothing/under/color/teal(src) - new /obj/item/clothing/under/color/jumpskirt/teal(src) - new /obj/item/clothing/under/color/lightpurple(src) - new /obj/item/clothing/under/color/jumpskirt/lightpurple(src) - new /obj/item/clothing/under/color/green(src) - new /obj/item/clothing/under/color/jumpskirt/green(src) - new /obj/item/clothing/mask/bandana/red(src) - new /obj/item/clothing/mask/bandana/red(src) - new /obj/item/clothing/mask/bandana/blue(src) - new /obj/item/clothing/mask/bandana/blue(src) - new /obj/item/clothing/mask/bandana/gold(src) - new /obj/item/clothing/mask/bandana/gold(src) - new /obj/item/clothing/shoes/sneakers/black(src) - new /obj/item/clothing/shoes/sneakers/brown(src) - new /obj/item/clothing/shoes/sneakers/white(src) - if(prob(30)) - new /obj/item/clothing/suit/hooded/wintercoat(src) - new /obj/item/clothing/shoes/winterboots(src) - return diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 226e003955..72f77765ba 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -98,101 +98,3 @@ close_sound = 'sound/blank.ogg' open_sound_volume = 25 close_sound_volume = 50 - -/obj/structure/closet/crate/internals - desc = "" - name = "internals crate" - icon_state = "o2crate" - -/obj/structure/closet/crate/trashcart - desc = "" - name = "trash cart" - icon_state = "trashcart" - -/obj/structure/closet/crate/medical - desc = "" - name = "medical crate" - icon_state = "medicalcrate" - -/obj/structure/closet/crate/freezer - desc = "" - name = "freezer" - icon_state = "freezer" - -//Snowflake organ freezer code -//Order is important, since we check source, we need to do the check whenever we have all the organs in the crate - -/obj/structure/closet/crate/freezer/open() - recursive_organ_check(src) - ..() - -/obj/structure/closet/crate/freezer/close() - ..() - recursive_organ_check(src) - -/obj/structure/closet/crate/freezer/Destroy() - recursive_organ_check(src) - ..() - -/obj/structure/closet/crate/freezer/Initialize() - . = ..() - recursive_organ_check(src) - - - -/obj/structure/closet/crate/freezer/blood - name = "blood freezer" - desc = "" - -/obj/structure/closet/crate/freezer/blood/PopulateContents() - . = ..() - new /obj/item/reagent_containers/blood(src) - new /obj/item/reagent_containers/blood(src) - new /obj/item/reagent_containers/blood/AMinus(src) - new /obj/item/reagent_containers/blood/BMinus(src) - new /obj/item/reagent_containers/blood/BPlus(src) - new /obj/item/reagent_containers/blood/OMinus(src) - new /obj/item/reagent_containers/blood/OPlus(src) - new /obj/item/reagent_containers/blood/lizard(src) - new /obj/item/reagent_containers/blood/ethereal(src) - for(var/i in 1 to 3) - new /obj/item/reagent_containers/blood/random(src) - -/obj/structure/closet/crate/radiation - desc = "" - name = "radiation crate" - icon_state = "radiation" - -/obj/structure/closet/crate/hydroponics - name = "hydroponics crate" - desc = "" - icon_state = "hydrocrate" - -/obj/structure/closet/crate/engineering - name = "engineering crate" - icon_state = "engi_crate" - -/obj/structure/closet/crate/engineering/electrical - icon_state = "engi_e_crate" - -/obj/structure/closet/crate/science - name = "science crate" - desc = "" - icon_state = "scicrate" - -/obj/structure/closet/crate/goldcrate - name = "gold crate" - -/obj/structure/closet/crate/goldcrate/PopulateContents() - ..() - for(var/i in 1 to 3) - new /obj/item/stack/sheet/mineral/gold(src, 1, FALSE) - new /obj/item/storage/belt/champion(src) - -/obj/structure/closet/crate/silvercrate - name = "silver crate" - -/obj/structure/closet/crate/silvercrate/PopulateContents() - ..() - for(var/i in 1 to 5) - new /obj/item/coin/silver(src) diff --git a/code/game/objects/structures/crates_lockers/crates/bins.dm b/code/game/objects/structures/crates_lockers/crates/bins.dm deleted file mode 100644 index c745aa5d6e..0000000000 --- a/code/game/objects/structures/crates_lockers/crates/bins.dm +++ /dev/null @@ -1,44 +0,0 @@ -/obj/structure/closet/crate/bin - desc = "" - name = "trash bin" - icon_state = "largebins" - open_sound = 'sound/blank.ogg' - close_sound = 'sound/blank.ogg' - anchored = TRUE - horizontal = FALSE - delivery_icon = null - -/obj/structure/closet/crate/bin/Initialize() - . = ..() - update_icon() - -/obj/structure/closet/crate/bin/update_icon() - ..() - cut_overlays() - if(contents.len == 0) - add_overlay("largebing") - else if(contents.len >= storage_capacity) - add_overlay("largebinr") - else - add_overlay("largebino") - -/obj/structure/closet/crate/bin/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/storage/bag/trash)) - var/obj/item/storage/bag/trash/T = W - to_chat(user, "I fill the bag.") - for(var/obj/item/O in src) - SEND_SIGNAL(T, COMSIG_TRY_STORAGE_INSERT, O, user, TRUE) - T.update_icon() - do_animate() - return TRUE - else - return ..() - -/obj/structure/closet/crate/bin/proc/do_animate() - playsound(loc, open_sound, 15, TRUE, -3) - flick("animate_largebins", src) - addtimer(CALLBACK(src, PROC_REF(do_close)), 13) - -/obj/structure/closet/crate/bin/proc/do_close() - playsound(loc, close_sound, 15, TRUE, -3) - update_icon() diff --git a/code/game/objects/structures/crates_lockers/crates/critter.dm b/code/game/objects/structures/crates_lockers/crates/critter.dm deleted file mode 100644 index 9befa28403..0000000000 --- a/code/game/objects/structures/crates_lockers/crates/critter.dm +++ /dev/null @@ -1,47 +0,0 @@ -/obj/structure/closet/crate/critter - name = "critter crate" - desc = "" - icon_state = "crittercrate" - horizontal = FALSE - allow_objects = FALSE - breakout_time = 600 - material_drop_amount = 4 - delivery_icon = "deliverybox" - open_sound = 'sound/blank.ogg' - close_sound = 'sound/blank.ogg' - open_sound_volume = 25 - close_sound_volume = 50 - var/obj/item/tank/internals/emergency_oxygen/tank - -/obj/structure/closet/crate/critter/Initialize() - . = ..() - tank = new - -/obj/structure/closet/crate/critter/Destroy() - var/turf/T = get_turf(src) - if(tank) - tank.forceMove(T) - tank = null - - return ..() - -/obj/structure/closet/crate/critter/update_icon() - cut_overlays() - if(opened) - add_overlay("crittercrate_door_open") - else - add_overlay("crittercrate_door") - if(manifest) - add_overlay("manifest") - -/obj/structure/closet/crate/critter/return_air() - if(tank) - return tank.air_contents - else - return loc.return_air() - -/obj/structure/closet/crate/critter/return_analyzable_air() - if(tank) - return tank.return_analyzable_air() - else - return null diff --git a/code/game/objects/structures/crates_lockers/crates/large.dm b/code/game/objects/structures/crates_lockers/crates/large.dm deleted file mode 100644 index 050d3fcfce..0000000000 --- a/code/game/objects/structures/crates_lockers/crates/large.dm +++ /dev/null @@ -1,46 +0,0 @@ -/obj/structure/closet/crate/large - name = "large crate" - desc = "" - icon_state = "largecrate" - density = TRUE - material_drop_amount = 4 - delivery_icon = "deliverybox" - integrity_failure = 0 //Makes the crate break when integrity reaches 0, instead of opening and becoming an invisible sprite. - open_sound = 'sound/blank.ogg' - close_sound = 'sound/blank.ogg' - open_sound_volume = 25 - close_sound_volume = 50 - -/obj/structure/closet/crate/large/attack_hand(mob/user) - add_fingerprint(user) - if(manifest) - tear_manifest(user) - else - to_chat(user, "I need a crowbar to pry this open!") - -/obj/structure/closet/crate/large/attackby(obj/item/W, mob/user, params) - if(W.tool_behaviour == TOOL_CROWBAR) - if(manifest) - tear_manifest(user) - - user.visible_message("[user] pries \the [src] open.", \ - "I pry open \the [src].", \ - "I hear splitting wood.") - playsound(src.loc, 'sound/blank.ogg', 75, TRUE) - - var/turf/T = get_turf(src) - for(var/i in 1 to material_drop_amount) - new material_drop(src) - for(var/atom/movable/AM in contents) - AM.forceMove(T) - - qdel(src) - - else - if(user.used_intent.type == INTENT_HARM) //Only return ..() if intent is harm, otherwise return 0 or just end it. - return ..() //Stops it from opening and turning invisible when items are used on it. - - else - to_chat(user, "I need a crowbar to pry this open!") - return FALSE //Just stop. Do nothing. Don't turn into an invisible sprite. Don't open like a locker. - //The large crate has no non-attack interactions other than the crowbar, anyway. diff --git a/code/game/objects/structures/crates_lockers/crates/wooden.dm b/code/game/objects/structures/crates_lockers/crates/wooden.dm deleted file mode 100644 index f3a32a18be..0000000000 --- a/code/game/objects/structures/crates_lockers/crates/wooden.dm +++ /dev/null @@ -1,21 +0,0 @@ -/obj/structure/closet/crate/wooden - name = "wooden crate" - desc = "" - material_drop_amount = 6 - icon_state = "wooden" - open_sound = 'sound/blank.ogg' - close_sound = 'sound/blank.ogg' - open_sound_volume = 25 - close_sound_volume = 50 - -/obj/structure/closet/crate/wooden/toy - name = "toy box" - desc = "" - -/obj/structure/closet/crate/wooden/toy/PopulateContents() - . = ..() - new /obj/item/megaphone/clown(src) - new /obj/item/reagent_containers/food/drinks/soda_cans/canned_laughter(src) - new /obj/item/pneumatic_cannon/pie(src) - new /obj/item/reagent_containers/food/snacks/pie/cream(src) - new /obj/item/storage/crayons(src) diff --git a/code/game/objects/structures/curtain.dm b/code/game/objects/structures/curtain.dm new file mode 100644 index 0000000000..0c1888acaa --- /dev/null +++ b/code/game/objects/structures/curtain.dm @@ -0,0 +1,75 @@ +/obj/structure/curtain + name = "curtain" + desc = "" + icon = 'icons/obj/watercloset.dmi' + icon_state = "bathroom-open" + var/icon_type = "bathroom"//used in making the icon state + color = "#ACD1E9" //Default color, didn't bother hardcoding other colors, mappers can and should easily change it. + alpha = 200 //Mappers can also just set this to 255 if they want curtains that can't be seen through + layer = SIGN_LAYER + anchored = TRUE + opacity = 0 + density = FALSE + var/open = TRUE + +/obj/structure/curtain/proc/toggle() + open = !open + update_icon() + +/obj/structure/curtain/update_icon() + if(!open) + icon_state = "[icon_type]-closed" + layer = WALL_OBJ_LAYER + density = TRUE + open = FALSE + + else + icon_state = "[icon_type]-open" + layer = SIGN_LAYER + density = FALSE + open = TRUE + +/obj/structure/curtain/wrench_act(mob/living/user, obj/item/I) + ..() + default_unfasten_wrench(user, I, 50) + return TRUE + +/obj/structure/curtain/wirecutter_act(mob/living/user, obj/item/I) + ..() + if(anchored) + return TRUE + + user.visible_message("[user] cuts apart [src].", + "I start to cut apart [src].", "I hear cutting.") + if(I.use_tool(src, user, 50, volume=100) && !anchored) + to_chat(user, "I cut apart [src].") + deconstruct() + + return TRUE + + +/obj/structure/curtain/attack_hand(mob/user) + . = ..() + if(.) + return + playsound(loc, 'sound/blank.ogg', 50, TRUE) + toggle() + +/obj/structure/curtain/deconstruct(disassembled = TRUE) + qdel(src) + +/obj/structure/curtain/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) + switch(damage_type) + if(BRUTE) + if(damage_amount) + playsound(src.loc, 'sound/blank.ogg', 80, TRUE) + else + playsound(loc, 'sound/blank.ogg', 50, TRUE) + if(BURN) + playsound(loc, 'sound/blank.ogg', 80, TRUE) + +/obj/structure/curtain/bounty + icon_type = "bounty" + icon_state = "bounty-open" + color = null + alpha = 255 diff --git a/code/game/objects/structures/decorations/bones.dm b/code/game/objects/structures/decorations/bones.dm index c48a9b2eb9..619207229e 100644 --- a/code/game/objects/structures/decorations/bones.dm +++ b/code/game/objects/structures/decorations/bones.dm @@ -1,7 +1,7 @@ /obj/structure/statue/bone anchored = TRUE max_integrity = 120 - material_drop_type = /obj/item/stack/sheet/bone + material_drop_type = /obj/item/alch/bone impressiveness = 18 // Carved from the bones of a massive creature, it's going to be a specticle to say the least layer = ABOVE_ALL_MOB_LAYER diff --git a/code/game/objects/structures/deer_trophy.dm b/code/game/objects/structures/deer_trophy.dm new file mode 100644 index 0000000000..43c8747ee1 --- /dev/null +++ b/code/game/objects/structures/deer_trophy.dm @@ -0,0 +1,7 @@ +/obj/structure/rogue/trophy/deer + name = "saiga trophy" + desc = "A saiga head, mounted on a display as a trophy of a good hunt. An unsavory decoration for Dendorites." + icon = 'icons/roguetown/misc/structure.dmi' + icon_state = "deer_trophy" + dir = SOUTH + pixel_y = 32 diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index 5db5b35a44..3a4433a4b2 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -124,17 +124,6 @@ showpiece = W to_chat(user, "I put [W] on display.") update_icon() - else if(istype(W, /obj/item/stack/sheet/glass) && broken) - var/obj/item/stack/sheet/glass/G = W - if(G.get_amount() < 2) - to_chat(user, "I need two glass sheets to fix the case!") - return - to_chat(user, "I start fixing [src]...") - if(do_after(user, 20, target = src)) - G.use(2) - broken = 0 - obj_integrity = max_integrity - update_icon() else return ..() @@ -169,38 +158,6 @@ user.do_attack_animation(src, ATTACK_EFFECT_KICK) take_damage(2) -/obj/structure/displaycase_chassis - anchored = TRUE - density = FALSE - name = "display case chassis" - desc = "" - icon = 'icons/obj/stationobjs.dmi' - icon_state = "glassbox_chassis" - var/obj/item/electronics/airlock/electronics - - -/obj/structure/displaycase_chassis/attackby(obj/item/I, mob/user, params) - if(I.tool_behaviour == TOOL_WRENCH) //The player can only deconstruct the wooden frame - to_chat(user, "I start disassembling [src]...") - I.play_tool_sound(src) - if(I.use_tool(src, user, 30)) - playsound(src.loc, 'sound/blank.ogg', 50, TRUE) - new /obj/item/stack/sheet/mineral/wood(get_turf(src), 5) - qdel(src) - - else if(istype(I, /obj/item/stack/sheet/glass)) - var/obj/item/stack/sheet/glass/G = I - if(G.get_amount() < 10) - to_chat(user, "I need ten glass sheets to do this!") - return - to_chat(user, "I start adding [G] to [src]...") - if(do_after(user, 20, target = src)) - G.use(10) - new /obj/structure/displaycase(src.loc) - qdel(src) - else - return ..() - /obj/structure/displaycase/trophy name = "trophy display case" desc = "" diff --git a/code/game/objects/structures/dresser.dm b/code/game/objects/structures/dresser.dm deleted file mode 100644 index 83c1c7ce56..0000000000 --- a/code/game/objects/structures/dresser.dm +++ /dev/null @@ -1,58 +0,0 @@ -/obj/structure/dresser - name = "dresser" - desc = "" - icon = 'icons/obj/stationobjs.dmi' - icon_state = "dresser" - density = TRUE - anchored = TRUE - -/obj/structure/dresser/attackby(obj/item/I, mob/user, params) - if(I.tool_behaviour == TOOL_WRENCH) - to_chat(user, "I begin to [anchored ? "unwrench" : "wrench"] [src].") - if(I.use_tool(src, user, 20, volume=50)) - to_chat(user, "I successfully [anchored ? "unwrench" : "wrench"] [src].") - setAnchored(!anchored) - else - return ..() - -/obj/structure/dresser/deconstruct(disassembled = TRUE) - new /obj/item/stack/sheet/mineral/wood(drop_location(), 10) - qdel(src) - -/obj/structure/dresser/attack_hand(mob/user) - . = ..() - if(.) - return - if(!Adjacent(user))//no tele-grooming - return - if(ishuman(user)) - var/mob/living/carbon/human/H = user - - if(H.dna && H.dna.species && (NO_UNDERWEAR in H.dna.species.species_traits)) - to_chat(user, "I are not capable of wearing underwear.") - return - - var/choice = input(user, "Underwear, Undershirt, or Socks?", "Changing") as null|anything in list("Underwear","Underwear Color","Undershirt","Socks") - - if(!Adjacent(user)) - return - switch(choice) - if("Underwear") - var/new_undies = input(user, "Select your underwear", "Changing") as null|anything in GLOB.underwear_list - if(new_undies) - H.underwear = new_undies - if("Underwear Color") - var/new_underwear_color = input(H, "Choose your underwear color", "Underwear Color","#"+H.underwear_color) as color|null - if(new_underwear_color) - H.underwear_color = sanitize_hexcolor(new_underwear_color) - if("Undershirt") - var/new_undershirt = input(user, "Select your undershirt", "Changing") as null|anything in GLOB.undershirt_list - if(new_undershirt) - H.undershirt = new_undershirt - if("Socks") - var/new_socks = input(user, "Select your socks", "Changing") as null|anything in GLOB.socks_list - if(new_socks) - H.socks= new_socks - - add_fingerprint(H) - H.update_body() diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm deleted file mode 100644 index a8b6f0cdf7..0000000000 --- a/code/game/objects/structures/extinguisher.dm +++ /dev/null @@ -1,151 +0,0 @@ -/obj/structure/extinguisher_cabinet - name = "extinguisher cabinet" - desc = "" - icon = 'icons/obj/wallmounts.dmi' - icon_state = "extinguisher_closed" - anchored = TRUE - density = FALSE - max_integrity = 200 - integrity_failure = 0.25 - var/obj/item/extinguisher/stored_extinguisher - var/opened = FALSE - -/obj/structure/extinguisher_cabinet/Initialize(mapload, ndir, building) - . = ..() - if(building) - setDir(ndir) - pixel_x = (dir & 3)? 0 : (dir == 4 ? -27 : 27) - pixel_y = (dir & 3)? (dir ==1 ? -30 : 30) : 0 - opened = TRUE - icon_state = "extinguisher_empty" - else - stored_extinguisher = new /obj/item/extinguisher(src) - -/obj/structure/extinguisher_cabinet/examine(mob/user) - . = ..() - . += "Alt-click to [opened ? "close":"open"] it." - -/obj/structure/extinguisher_cabinet/Destroy() - if(stored_extinguisher) - qdel(stored_extinguisher) - stored_extinguisher = null - return ..() - -/obj/structure/extinguisher_cabinet/contents_explosion(severity, target) - if(stored_extinguisher) - stored_extinguisher.ex_act(severity, target) - -/obj/structure/extinguisher_cabinet/handle_atom_del(atom/A) - if(A == stored_extinguisher) - stored_extinguisher = null - update_icon() - -/obj/structure/extinguisher_cabinet/attackby(obj/item/I, mob/user, params) - if(I.tool_behaviour == TOOL_WRENCH && !stored_extinguisher) - to_chat(user, "I start unsecuring [name]...") - I.play_tool_sound(src) - if(I.use_tool(src, user, 60)) - playsound(loc, 'sound/blank.ogg', 50, TRUE) - to_chat(user, "I unsecure [name].") - deconstruct(TRUE) - return - - if(istype(I, /obj/item/extinguisher)) - if(!stored_extinguisher && opened) - if(!user.transferItemToLoc(I, src)) - return - stored_extinguisher = I - to_chat(user, "I place [I] in [src].") - update_icon() - return TRUE - else - toggle_cabinet(user) - else if(user.used_intent.type != INTENT_HARM) - toggle_cabinet(user) - else - return ..() - - -/obj/structure/extinguisher_cabinet/attack_hand(mob/user) - . = ..() - if(.) - return - if(stored_extinguisher) - user.put_in_hands(stored_extinguisher) - to_chat(user, "I take [stored_extinguisher] from [src].") - stored_extinguisher = null - if(!opened) - opened = 1 - playsound(loc, 'sound/blank.ogg', 15, TRUE, -3) - update_icon() - else - toggle_cabinet(user) - - -/obj/structure/extinguisher_cabinet/attack_tk(mob/user) - if(stored_extinguisher) - stored_extinguisher.forceMove(loc) - to_chat(user, "I telekinetically remove [stored_extinguisher] from [src].") - stored_extinguisher = null - opened = 1 - playsound(loc, 'sound/blank.ogg', 15, TRUE, -3) - update_icon() - else - toggle_cabinet(user) - - -/obj/structure/extinguisher_cabinet/attack_paw(mob/user) - return attack_hand(user) - -/obj/structure/extinguisher_cabinet/AltClick(mob/living/user) - if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) - return - toggle_cabinet(user) - -/obj/structure/extinguisher_cabinet/proc/toggle_cabinet(mob/user) - if(opened && broken) - to_chat(user, "[src] is broken open.") - else - playsound(loc, 'sound/blank.ogg', 15, TRUE, -3) - opened = !opened - update_icon() - -/obj/structure/extinguisher_cabinet/update_icon() - if(!opened) - icon_state = "extinguisher_closed" - return - if(stored_extinguisher) - if(istype(stored_extinguisher, /obj/item/extinguisher/mini)) - icon_state = "extinguisher_mini" - else - icon_state = "extinguisher_full" - else - icon_state = "extinguisher_empty" - -/obj/structure/extinguisher_cabinet/obj_break(damage_flag) - if(!broken && !(flags_1 & NODECONSTRUCT_1)) - broken = 1 - opened = 1 - if(stored_extinguisher) - stored_extinguisher.forceMove(loc) - stored_extinguisher = null - update_icon() - ..() - - -/obj/structure/extinguisher_cabinet/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) - if(disassembled) - new /obj/item/wallframe/extinguisher_cabinet(loc) - else - new /obj/item/stack/sheet/metal (loc, 2) - if(stored_extinguisher) - stored_extinguisher.forceMove(loc) - stored_extinguisher = null - qdel(src) - -/obj/item/wallframe/extinguisher_cabinet - name = "extinguisher cabinet frame" - desc = "" - icon_state = "extinguisher" - result_path = /obj/structure/extinguisher_cabinet diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm deleted file mode 100644 index 24f5250797..0000000000 --- a/code/game/objects/structures/false_walls.dm +++ /dev/null @@ -1,305 +0,0 @@ -/* - * False Walls - */ -/obj/structure/falsewall - name = "wall" - desc = "" - anchored = TRUE - icon = 'icons/turf/walls/wall.dmi' - icon_state = "wall" - layer = LOW_OBJ_LAYER - density = TRUE - opacity = 1 - max_integrity = 100 - - canSmoothWith = list( - /turf/closed/wall, - /turf/closed/wall/r_wall, - /obj/structure/falsewall, - /obj/structure/falsewall/reinforced, - /turf/closed/wall/rust, - /turf/closed/wall/r_wall/rust) - smooth = SMOOTH_TRUE - can_be_unanchored = FALSE - CanAtmosPass = ATMOS_PASS_DENSITY - rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE - rad_insulation = RAD_MEDIUM_INSULATION - var/mineral = /obj/item/stack/sheet/metal - var/mineral_amount = 2 - var/walltype = /turf/closed/wall - var/girder_type = /obj/structure/girder/displaced - var/opening = FALSE - - -/obj/structure/falsewall/Initialize() - . = ..() - air_update_turf(TRUE) - -/obj/structure/falsewall/attack_hand(mob/user) - if(opening) - return - . = ..() - if(.) - return - - opening = TRUE - update_icon() - if(!density) - var/srcturf = get_turf(src) - for(var/mob/living/obstacle in srcturf) //Stop people from using this as a shield - opening = FALSE - return - addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/structure/falsewall, toggle_open)), 5) - -/obj/structure/falsewall/proc/toggle_open() - if(!QDELETED(src)) - density = !density - set_opacity(density) - opening = FALSE - update_icon() - air_update_turf(TRUE) - -/obj/structure/falsewall/update_icon()//Calling icon_update will refresh the smoothwalls if it's closed, otherwise it will make sure the icon is correct if it's open - if(opening) - if(density) - icon_state = "fwall_opening" - smooth = SMOOTH_FALSE - clear_smooth_overlays() - else - icon_state = "fwall_closing" - else - if(density) - icon_state = initial(icon_state) - smooth = SMOOTH_TRUE - queue_smooth(src) - else - icon_state = "fwall_open" - -/obj/structure/falsewall/proc/ChangeToWall(delete = 1) - var/turf/T = get_turf(src) - T.PlaceOnTop(walltype) - if(delete) - qdel(src) - return T - -/obj/structure/falsewall/attackby(obj/item/W, mob/user, params) - if(opening) - to_chat(user, "I must wait until the door has stopped moving!") - return - - if(W.tool_behaviour == TOOL_SCREWDRIVER) - if(density) - var/turf/T = get_turf(src) - if(T.density) - to_chat(user, "[src] is blocked!") - return - if(!isfloorturf(T)) - to_chat(user, "[src] bolts must be tightened on the floor!") - return - user.visible_message("[user] tightens some bolts on the wall.", "I tighten the bolts on the wall.") - ChangeToWall() - else - to_chat(user, "I can't reach, close it first!") - - else if(W.tool_behaviour == TOOL_WELDER) - if(W.use_tool(src, user, 0, volume=50)) - dismantle(user, TRUE) - else - return ..() - -/obj/structure/falsewall/proc/dismantle(mob/user, disassembled=TRUE, obj/item/tool = null) - user.visible_message("[user] dismantles the false wall.", "I dismantle the false wall.") - if(tool) - tool.play_tool_sound(src, 100) - else - playsound(src, 'sound/blank.ogg', 100, TRUE) - deconstruct(disassembled) - -/obj/structure/falsewall/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) - if(disassembled) - new girder_type(loc) - if(mineral_amount) - for(var/i in 1 to mineral_amount) - new mineral(loc) - qdel(src) - -/obj/structure/falsewall/get_dumping_location(obj/item/storage/source,mob/user) - return null - -/obj/structure/falsewall/examine_status(mob/user) //So you can't detect falsewalls by examine. - to_chat(user, "The outer plating is welded firmly in place.") - return null - -/* - * False R-Walls - */ - -/obj/structure/falsewall/reinforced - name = "reinforced wall" - desc = "" - icon = 'icons/turf/walls/reinforced_wall.dmi' - icon_state = "r_wall" - walltype = /turf/closed/wall/r_wall - mineral = /obj/item/stack/sheet/plasteel - -/obj/structure/falsewall/reinforced/examine_status(mob/user) - to_chat(user, "The outer grille is fully intact.") - return null - -/obj/structure/falsewall/reinforced/attackby(obj/item/tool, mob/user) - ..() - if(tool.tool_behaviour == TOOL_WIRECUTTER) - dismantle(user, TRUE, tool) - -/* - * Uranium Falsewalls - */ - -/obj/structure/falsewall/uranium - name = "uranium wall" - desc = "" - icon = 'icons/turf/walls/uranium_wall.dmi' - icon_state = "uranium" - mineral = /obj/item/stack/sheet/mineral/uranium - walltype = /turf/closed/wall/mineral/uranium - var/active = null - var/last_event = 0 - canSmoothWith = list(/obj/structure/falsewall/uranium, /turf/closed/wall/mineral/uranium) - -/obj/structure/falsewall/uranium/attackby(obj/item/W, mob/user, params) - radiate() - return ..() - -/obj/structure/falsewall/uranium/attack_hand(mob/user) - radiate() - . = ..() - -/obj/structure/falsewall/uranium/proc/radiate() - if(!active) - if(world.time > last_event+15) - active = 1 - radiation_pulse(src, 150) - for(var/turf/closed/wall/mineral/uranium/T in orange(1,src)) - T.radiate() - last_event = world.time - active = null - return - return -/* - * Other misc falsewall types - */ - -/obj/structure/falsewall/gold - name = "gold wall" - desc = "" - icon = 'icons/turf/walls/gold_wall.dmi' - icon_state = "gold" - mineral = /obj/item/stack/sheet/mineral/gold - walltype = /turf/closed/wall/mineral/gold - canSmoothWith = list(/obj/structure/falsewall/gold, /turf/closed/wall/mineral/gold) - -/obj/structure/falsewall/silver - name = "silver wall" - desc = "" - icon = 'icons/turf/walls/silver_wall.dmi' - icon_state = "silver" - mineral = /obj/item/stack/sheet/mineral/silver - walltype = /turf/closed/wall/mineral/silver - canSmoothWith = list(/obj/structure/falsewall/silver, /turf/closed/wall/mineral/silver) - -/obj/structure/falsewall/diamond - name = "diamond wall" - desc = "" - icon = 'icons/turf/walls/diamond_wall.dmi' - icon_state = "diamond" - mineral = /obj/item/stack/sheet/mineral/diamond - walltype = /turf/closed/wall/mineral/diamond - canSmoothWith = list(/obj/structure/falsewall/diamond, /turf/closed/wall/mineral/diamond) - max_integrity = 800 - -/obj/structure/falsewall/plasma - name = "plasma wall" - desc = "" - icon = 'icons/turf/walls/plasma_wall.dmi' - icon_state = "plasma" - mineral = /obj/item/stack/sheet/mineral/plasma - walltype = /turf/closed/wall/mineral/plasma - canSmoothWith = list(/obj/structure/falsewall/plasma, /turf/closed/wall/mineral/plasma) - -/obj/structure/falsewall/plasma/attackby(obj/item/W, mob/user, params) - if(W.get_temperature() > 300) - var/turf/T = get_turf(src) - message_admins("Plasma falsewall ignited by [ADMIN_LOOKUPFLW(user)] in [ADMIN_VERBOSEJMP(T)]") - log_game("Plasma falsewall ignited by [key_name(user)] in [AREACOORD(T)]") - burnbabyburn() - else - return ..() - -/obj/structure/falsewall/plasma/proc/burnbabyburn(user) - playsound(src, 'sound/blank.ogg', 100, TRUE) - atmos_spawn_air("plasma=400;TEMP=1000") - new /obj/structure/girder/displaced(loc) - qdel(src) - -/obj/structure/falsewall/plasma/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if(exposed_temperature > 300) - burnbabyburn() - -/obj/structure/falsewall/bananium - name = "bananium wall" - desc = "" - icon = 'icons/turf/walls/bananium_wall.dmi' - icon_state = "bananium" - mineral = /obj/item/stack/sheet/mineral/bananium - walltype = /turf/closed/wall/mineral/bananium - canSmoothWith = list(/obj/structure/falsewall/bananium, /turf/closed/wall/mineral/bananium) - - -/obj/structure/falsewall/sandstone - name = "sandstone wall" - desc = "" - icon = 'icons/turf/walls/sandstone_wall.dmi' - icon_state = "sandstone" - mineral = /obj/item/stack/sheet/mineral/sandstone - walltype = /turf/closed/wall/mineral/sandstone - canSmoothWith = list(/obj/structure/falsewall/sandstone, /turf/closed/wall/mineral/sandstone) - -/obj/structure/falsewall/wood - name = "wooden wall" - desc = "" - icon = 'icons/turf/walls/wood_wall.dmi' - icon_state = "wood" - mineral = /obj/item/stack/sheet/mineral/wood - walltype = /turf/closed/wall/mineral/wood - canSmoothWith = list(/obj/structure/falsewall/wood, /turf/closed/wall/mineral/wood) - -/obj/structure/falsewall/iron - name = "rough metal wall" - desc = "" - icon = 'icons/turf/walls/shuttle_wall.dmi' - icon_state = "iron" - mineral = /obj/item/stack/rods - mineral_amount = 5 - walltype = /turf/closed/wall/mineral/iron - canSmoothWith = list(/obj/structure/falsewall/iron, /turf/closed/wall/mineral/iron) - -/obj/structure/falsewall/titanium - name = "wall" - desc = "" - icon = 'icons/turf/walls/shuttle_wall.dmi' - icon_state = "shuttle" - mineral = /obj/item/stack/sheet/mineral/titanium - walltype = /turf/closed/wall/mineral/titanium - smooth = SMOOTH_MORE - canSmoothWith = list(/turf/closed/wall/mineral/titanium, /obj/structure/window/shuttle, /obj/structure/shuttle/engine/heater) - -/obj/structure/falsewall/plastitanium - name = "wall" - desc = "" - icon = 'icons/turf/walls/plastitanium_wall.dmi' - icon_state = "shuttle" - mineral = /obj/item/stack/sheet/mineral/plastitanium - walltype = /turf/closed/wall/mineral/plastitanium - smooth = SMOOTH_MORE - canSmoothWith = list(/turf/closed/wall/mineral/plastitanium, /obj/structure/window/shuttle, /obj/structure/shuttle/engine/heater) diff --git a/code/game/objects/structures/fireplace.dm b/code/game/objects/structures/fireplace.dm deleted file mode 100644 index a20e309b4b..0000000000 --- a/code/game/objects/structures/fireplace.dm +++ /dev/null @@ -1,152 +0,0 @@ -#define LOG_BURN_TIMER 150 -#define PAPER_BURN_TIMER 5 -#define MAXIMUM_BURN_TIMER 3000 - -/obj/structure/fireplace - name = "fireplace" - desc = "" - icon = 'icons/obj/fireplace.dmi' - icon_state = "fireplace" - density = FALSE - anchored = TRUE - pixel_x = -16 - resistance_flags = FIRE_PROOF - var/lit = FALSE - - var/fuel_added = 0 - var/flame_expiry_timer - -/obj/structure/fireplace/New() - ..() - START_PROCESSING(SSobj, src) - -/obj/structure/fireplace/Destroy() - STOP_PROCESSING(SSobj, src) - . = ..() - -/obj/structure/fireplace/proc/try_light(obj/item/O, mob/user) - if(lit) - to_chat(user, "It's already lit!") - return FALSE - if(!fuel_added) - to_chat(user, "[src] needs some fuel to burn!") - return FALSE - var/msg = O.ignition_effect(src, user) - if(msg) - visible_message(msg) - ignite() - return TRUE - -/obj/structure/fireplace/attackby(obj/item/T, mob/user) - if(istype(T, /obj/item/stack/sheet/mineral/wood)) - var/obj/item/stack/sheet/mineral/wood/wood = T - var/space_remaining = MAXIMUM_BURN_TIMER - burn_time_remaining() - var/space_for_logs = round(space_remaining / LOG_BURN_TIMER) - if(space_for_logs < 1) - to_chat(user, "I can't fit any more of [T] in [src]!") - return - var/logs_used = min(space_for_logs, wood.amount) - wood.use(logs_used) - adjust_fuel_timer(LOG_BURN_TIMER * logs_used) - user.visible_message("[user] tosses some \ - wood into [src].", "I add \ - some fuel to [src].") - else if(istype(T, /obj/item/paper_bin)) - var/obj/item/paper_bin/paper_bin = T - user.visible_message("[user] throws [T] into \ - [src].", "I add [T] to [src].\ - ") - adjust_fuel_timer(PAPER_BURN_TIMER * paper_bin.total_paper) - qdel(paper_bin) - else if(istype(T, /obj/item/paper)) - user.visible_message("[user] throws [T] into \ - [src].", "I throw [T] into [src].\ - ") - adjust_fuel_timer(PAPER_BURN_TIMER) - qdel(T) - else if(try_light(T,user)) - return - else - . = ..() - -/obj/structure/fireplace/update_icon() - cut_overlays() - if(lit) - switch(burn_time_remaining()) - if(0 to 500) - add_overlay("fireplace_fire0") - if(500 to 1000) - add_overlay("fireplace_fire1") - if(1000 to 1500) - add_overlay("fireplace_fire2") - if(1500 to 2000) - add_overlay("fireplace_fire3") - if(2000 to MAXIMUM_BURN_TIMER) - add_overlay("fireplace_fire4") - add_overlay("fireplace_glow") - -/obj/structure/fireplace/proc/adjust_light() - if(!lit) - set_light(0) - return - - switch(burn_time_remaining()) - if(0 to 500) - set_light(1) - if(500 to 1000) - set_light(2) - if(1000 to 1500) - set_light(3) - if(1500 to 2000) - set_light(4) - if(2000 to MAXIMUM_BURN_TIMER) - set_light(6) - -/obj/structure/fireplace/process() - if(!lit) - return - if(world.time > flame_expiry_timer) - put_out() - return - - playsound(src, 'sound/blank.ogg',50,FALSE, FALSE, TRUE) - var/turf/T = get_turf(src) - T.hotspot_expose(700, 5) - update_icon() - adjust_light() - -/obj/structure/fireplace/extinguish() - if(lit) - var/fuel = burn_time_remaining() - flame_expiry_timer = 0 - put_out() - adjust_fuel_timer(fuel) - . = ..() - -/obj/structure/fireplace/proc/adjust_fuel_timer(amount) - if(lit) - flame_expiry_timer += amount - if(burn_time_remaining() < MAXIMUM_BURN_TIMER) - flame_expiry_timer = world.time + MAXIMUM_BURN_TIMER - else - fuel_added = CLAMP(fuel_added + amount, 0, MAXIMUM_BURN_TIMER) - -/obj/structure/fireplace/proc/burn_time_remaining() - if(lit) - return max(0, flame_expiry_timer - world.time) - else - return max(0, fuel_added) - -/obj/structure/fireplace/proc/ignite() - lit = TRUE - desc = "" - flame_expiry_timer = world.time + fuel_added - fuel_added = 0 - update_icon() - adjust_light() - -/obj/structure/fireplace/proc/put_out() - lit = FALSE - update_icon() - adjust_light() - desc = initial(desc) diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm deleted file mode 100644 index 17b4ff54dd..0000000000 --- a/code/game/objects/structures/flora.dm +++ /dev/null @@ -1,461 +0,0 @@ -/obj/structure/flora - resistance_flags = FLAMMABLE - max_integrity = 150 - anchored = TRUE - -/obj/structure/flora/Initialize() - . = ..() - if(isclosedturf(loc)) - return INITIALIZE_HINT_QDEL - -//trees -/obj/structure/flora/tree - name = "tree" - desc = "" - density = TRUE - pixel_x = -16 - layer = FLY_LAYER - var/log_amount = 10 - -/obj/structure/flora/tree/attackby(obj/item/W, mob/user, params) - if(log_amount && (!(flags_1 & NODECONSTRUCT_1))) - if(W.get_sharpness() && W.force > 0) - if(W.hitsound) - playsound(get_turf(src), W.hitsound, 100, FALSE, FALSE) - user.visible_message("[user] begins to cut down [src] with [W].","I begin to cut down [src] with [W].", "I hear the sound of sawing.") - if(do_after(user, 1000/W.force, target = src)) //5 seconds with 20 force, 8 seconds with a hatchet, 20 seconds with a shard. - user.visible_message("[user] fells [src] with the [W].","I fell [src] with the [W].", "I hear the sound of a tree falling.") - playsound(get_turf(src), 'sound/blank.ogg', 100 , FALSE, FALSE) - for(var/i=1 to log_amount) - new /obj/item/grown/log/tree(get_turf(src)) - - var/obj/structure/flora/stump/S = new(loc) - S.name = "[name] stump" - - qdel(src) - - else - return ..() - -/obj/structure/flora/stump - name = "stump" - desc = "" //running naked through the trees - icon = 'icons/obj/flora/pinetrees.dmi' - icon_state = "tree_stump" - density = FALSE - pixel_x = -16 - -/obj/structure/flora/tree/pine - name = "pine tree" - desc = "" - icon = 'icons/obj/flora/pinetrees.dmi' - icon_state = "pine_1" - var/list/icon_states = list("pine_1", "pine_2", "pine_3") - -/obj/structure/flora/tree/pine/Initialize() - . = ..() - - if(islist(icon_states && icon_states.len)) - icon_state = pick(icon_states) - -/obj/structure/flora/tree/pine/xmas - name = "xmas tree" - desc = "" - icon_state = "pine_c" - icon_states = null - -/obj/structure/flora/tree/pine/xmas/presents - icon_state = "pinepresents" - desc = "" - var/gift_type = /obj/item/a_gift/anything - var/unlimited = FALSE - var/static/list/took_presents //shared between all xmas trees - -/obj/structure/flora/tree/pine/xmas/presents/Initialize() - . = ..() - if(!took_presents) - took_presents = list() - -/obj/structure/flora/tree/pine/xmas/presents/attack_hand(mob/living/user) - . = ..() - if(.) - return - if(!user.ckey) - return - - if(took_presents[user.ckey] && !unlimited) - to_chat(user, "There are no presents with your name on.") - return - to_chat(user, "After a bit of rummaging, you locate a gift with your name on it!") - - if(!unlimited) - took_presents[user.ckey] = TRUE - - var/obj/item/G = new gift_type(src) - user.put_in_hands(G) - -/obj/structure/flora/tree/pine/xmas/presents/unlimited - desc = "" - unlimited = TRUE - -/obj/structure/flora/tree/dead - icon = 'icons/obj/flora/deadtrees.dmi' - desc = "" - icon_state = "tree_1" - -/obj/structure/flora/tree/palm - icon = 'icons/misc/beach2.dmi' - desc = "" - icon_state = "palm1" - -/obj/structure/flora/tree/palm/Initialize() - . = ..() - icon_state = pick("palm1","palm2") - pixel_x = 0 - -/obj/structure/festivus - name = "festivus pole" - icon = 'icons/obj/flora/pinetrees.dmi' - icon_state = "festivus_pole" - desc = "" - -/obj/structure/festivus/anchored - name = "suplexed rod" - desc = "" - icon_state = "anchored_rod" - anchored = TRUE - -/obj/structure/flora/tree/dead/Initialize() - icon_state = "tree_[rand(1, 6)]" - . = ..() - -/obj/structure/flora/tree/jungle - name = "tree" - icon_state = "tree" - desc = "" - icon = 'icons/obj/flora/jungletrees.dmi' - pixel_x = -48 - pixel_y = -20 - -/obj/structure/flora/tree/jungle/Initialize() - icon_state = "[icon_state][rand(1, 6)]" - . = ..() - -/obj/structure/flora/tree/jungle/small - pixel_y = 0 - pixel_x = -32 - icon = 'icons/obj/flora/jungletreesmall.dmi' - -//grass -/obj/structure/flora/grass - name = "grass" - desc = "" - icon = 'icons/obj/flora/snowflora.dmi' - gender = PLURAL //"this is grass" not "this is a grass" - -/obj/structure/flora/grass/brown - icon_state = "snowgrass1bb" - -/obj/structure/flora/grass/brown/Initialize() - icon_state = "snowgrass[rand(1, 3)]bb" - . = ..() - - -/obj/structure/flora/grass/green - icon_state = "snowgrass1gb" - -/obj/structure/flora/grass/green/Initialize() - icon_state = "snowgrass[rand(1, 3)]gb" - . = ..() - -/obj/structure/flora/grass/both - icon_state = "snowgrassall1" - -/obj/structure/flora/grass/both/Initialize() - icon_state = "snowgrassall[rand(1, 3)]" - . = ..() - - -//bushes -/obj/structure/flora/bush - name = "bush" - desc = "" - icon = 'icons/obj/flora/snowflora.dmi' - icon_state = "snowbush1" - anchored = TRUE - -/obj/structure/flora/bush/Initialize() - icon_state = "snowbush[rand(1, 6)]" - . = ..() - -// ausbush - -/obj/structure/flora/ausbushes - name = "bush" - desc = "" - icon = 'icons/obj/flora/ausflora.dmi' - icon_state = "firstbush_1" - -/obj/structure/flora/ausbushes/Initialize() - if(icon_state == "firstbush_1") - icon_state = "firstbush_[rand(1, 4)]" - . = ..() - -/obj/structure/flora/ausbushes/reedbush - icon_state = "reedbush_1" - -/obj/structure/flora/ausbushes/reedbush/Initialize() - icon_state = "reedbush_[rand(1, 4)]" - . = ..() - -/obj/structure/flora/ausbushes/leafybush - icon_state = "leafybush_1" - -/obj/structure/flora/ausbushes/leafybush/Initialize() - icon_state = "leafybush_[rand(1, 3)]" - . = ..() - -/obj/structure/flora/ausbushes/palebush - icon_state = "palebush_1" - -/obj/structure/flora/ausbushes/palebush/Initialize() - icon_state = "palebush_[rand(1, 4)]" - . = ..() - -/obj/structure/flora/ausbushes/stalkybush - icon_state = "stalkybush_1" - -/obj/structure/flora/ausbushes/stalkybush/Initialize() - icon_state = "stalkybush_[rand(1, 3)]" - . = ..() - -/obj/structure/flora/ausbushes/grassybush - icon_state = "grassybush_1" - -/obj/structure/flora/ausbushes/grassybush/Initialize() - icon_state = "grassybush_[rand(1, 4)]" - . = ..() - -/obj/structure/flora/ausbushes/fernybush - icon_state = "fernybush_1" - -/obj/structure/flora/ausbushes/fernybush/Initialize() - icon_state = "fernybush_[rand(1, 3)]" - . = ..() - -/obj/structure/flora/ausbushes/sunnybush - icon_state = "sunnybush_1" - -/obj/structure/flora/ausbushes/sunnybush/Initialize() - icon_state = "sunnybush_[rand(1, 3)]" - . = ..() - -/obj/structure/flora/ausbushes/genericbush - icon_state = "genericbush_1" - -/obj/structure/flora/ausbushes/genericbush/Initialize() - icon_state = "genericbush_[rand(1, 4)]" - . = ..() - -/obj/structure/flora/ausbushes/pointybush - icon_state = "pointybush_1" - -/obj/structure/flora/ausbushes/pointybush/Initialize() - icon_state = "pointybush_[rand(1, 4)]" - . = ..() - -/obj/structure/flora/ausbushes/lavendergrass - icon_state = "lavendergrass_1" - -/obj/structure/flora/ausbushes/lavendergrass/Initialize() - icon_state = "lavendergrass_[rand(1, 4)]" - . = ..() - -/obj/structure/flora/ausbushes/ywflowers - icon_state = "ywflowers_1" - -/obj/structure/flora/ausbushes/ywflowers/Initialize() - icon_state = "ywflowers_[rand(1, 3)]" - . = ..() - -/obj/structure/flora/ausbushes/brflowers - icon_state = "brflowers_1" - -/obj/structure/flora/ausbushes/brflowers/Initialize() - icon_state = "brflowers_[rand(1, 3)]" - . = ..() - -/obj/structure/flora/ausbushes/ppflowers - icon_state = "ppflowers_1" - -/obj/structure/flora/ausbushes/ppflowers/Initialize() - icon_state = "ppflowers_[rand(1, 3)]" - . = ..() - -/obj/structure/flora/ausbushes/sparsegrass - icon_state = "sparsegrass_1" - -/obj/structure/flora/ausbushes/sparsegrass/Initialize() - icon_state = "sparsegrass_[rand(1, 3)]" - . = ..() - -/obj/structure/flora/ausbushes/fullgrass - icon_state = "fullgrass_1" - -/obj/structure/flora/ausbushes/fullgrass/Initialize() - icon_state = "fullgrass_[rand(1, 3)]" - . = ..() - -/obj/item/twohanded/required/kirbyplants - name = "potted plant" - icon = 'icons/obj/flora/plants.dmi' - icon_state = "plant-01" - desc = "" - layer = ABOVE_MOB_LAYER - w_class = WEIGHT_CLASS_HUGE - force = 10 - force_wielded = 10 - throwforce = 13 - throw_speed = 2 - throw_range = 4 - -/obj/item/twohanded/required/kirbyplants/Initialize() - . = ..() - AddComponent(/datum/component/tactical) - addtimer(CALLBACK(src, TYPE_PROC_REF(/datum, AddComponent), /datum/component/beauty, 500), 0) - -/obj/item/twohanded/required/kirbyplants/random - icon = 'icons/obj/flora/_flora.dmi' - icon_state = "random_plant" - var/list/static/states - -/obj/item/twohanded/required/kirbyplants/random/Initialize() - . = ..() - icon = 'icons/obj/flora/plants.dmi' - if(!states) - generate_states() - icon_state = pick(states) - -/obj/item/twohanded/required/kirbyplants/random/proc/generate_states() - states = list() - for(var/i in 1 to 25) - var/number - if(i < 10) - number = "0[i]" - else - number = "[i]" - states += "plant-[number]" - states += "applebush" - - -/obj/item/twohanded/required/kirbyplants/dead - name = "RD's potted plant" - desc = "" - icon_state = "plant-25" - -/obj/item/twohanded/required/kirbyplants/photosynthetic - name = "photosynthetic potted plant" - desc = "" - icon_state = "plant-09" - light_color = "#2cb2e8" - light_outer_range = 3 - - -//a rock is flora according to where the icon file is -//and now these defines - -/obj/structure/flora/rock - icon_state = "basalt" - desc = "" - icon = 'icons/obj/flora/rocks.dmi' - resistance_flags = FIRE_PROOF - density = TRUE - -/obj/structure/flora/rock/Initialize() - . = ..() - icon_state = "[icon_state][rand(1,3)]" - -/obj/structure/flora/rock/pile - icon_state = "lavarocks" - desc = "" - -//Jungle grass - -/obj/structure/flora/grass/jungle - name = "jungle grass" - desc = "" - icon = 'icons/obj/flora/jungleflora.dmi' - icon_state = "grassa" - - -/obj/structure/flora/grass/jungle/Initialize() - icon_state = "[icon_state][rand(1, 5)]" - . = ..() - -/obj/structure/flora/grass/jungle/b - icon_state = "grassb" - -//Jungle rocks - -/obj/structure/flora/rock/jungle - icon_state = "rock" - desc = "" - icon = 'icons/obj/flora/jungleflora.dmi' - density = FALSE - -/obj/structure/flora/rock/jungle/Initialize() - . = ..() - icon_state = "[initial(icon_state)][rand(1,5)]" - - -//Jungle bushes - -/obj/structure/flora/junglebush - name = "bush" - desc = "" - icon = 'icons/obj/flora/jungleflora.dmi' - icon_state = "busha" - -/obj/structure/flora/junglebush/Initialize() - icon_state = "[icon_state][rand(1, 3)]" - . = ..() - -/obj/structure/flora/junglebush/b - icon_state = "bushb" - -/obj/structure/flora/junglebush/c - icon_state = "bushc" - -/obj/structure/flora/junglebush/large - icon_state = "bush" - icon = 'icons/obj/flora/largejungleflora.dmi' - pixel_x = -16 - pixel_y = -12 - layer = ABOVE_ALL_MOB_LAYER - -/obj/structure/flora/rock/pile/largejungle - name = "rocks" - icon_state = "rocks" - icon = 'icons/obj/flora/largejungleflora.dmi' - density = FALSE - pixel_x = -16 - pixel_y = -16 - -/obj/structure/flora/rock/pile/largejungle/Initialize() - . = ..() - icon_state = "[initial(icon_state)][rand(1,3)]" - - - - - - - - - - - - - - - diff --git a/code/game/objects/structures/fluff.dm b/code/game/objects/structures/fluff.dm index 27413ab752..a22aef8d38 100644 --- a/code/game/objects/structures/fluff.dm +++ b/code/game/objects/structures/fluff.dm @@ -12,103 +12,6 @@ max_integrity = 150 var/deconstructible = TRUE -/obj/structure/fluff/attackby(obj/item/I, mob/living/user, params) - if(I.tool_behaviour == TOOL_WRENCH && deconstructible) - user.visible_message("[user] starts disassembling [src]...", "I start disassembling [src]...") - I.play_tool_sound(src) - if(I.use_tool(src, user, 50)) - user.visible_message("[user] disassembles [src]!", "I break down [src] into scrap metal.") - playsound(user, 'sound/blank.ogg', 50, TRUE) - new/obj/item/stack/sheet/metal(drop_location()) - qdel(src) - return - ..() - -/obj/structure/fluff/empty_terrarium //Empty terrariums are created when a preserved terrarium in a lavaland seed vault is activated. - name = "empty terrarium" - desc = "" - icon = 'icons/obj/lavaland/spawners.dmi' - icon_state = "terrarium_open" - density = TRUE - -/obj/structure/fluff/empty_sleeper //Empty sleepers are created by a good few ghost roles in lavaland. - name = "empty sleeper" - desc = "" - icon = 'icons/obj/machines/sleeper.dmi' - icon_state = "sleeper-open" - -/obj/structure/fluff/empty_sleeper/nanotrasen - name = "broken hypersleep chamber" - desc = "A Nanotrasen hypersleep chamber - this one appears broken. \ - There are exposed bolts for easy disassembly using a wrench." - icon_state = "sleeper-o" - -/obj/structure/fluff/empty_sleeper/syndicate - icon_state = "sleeper_s-open" - -/obj/structure/fluff/empty_cryostasis_sleeper //Empty cryostasis sleepers are created when a malfunctioning cryostasis sleeper in a lavaland shelter is activated - name = "empty cryostasis sleeper" - desc = "" - icon = 'icons/obj/lavaland/spawners.dmi' - icon_state = "cryostasis_sleeper_open" - -/obj/structure/fluff/broken_flooring - name = "broken tiling" - desc = "" - icon = 'icons/obj/brokentiling.dmi' - icon_state = "corner" - -/obj/structure/fluff/drake_statue //Ash drake status spawn on either side of the necropolis gate in lavaland. - name = "drake statue" - desc = "" - icon = 'icons/effects/64x64.dmi' - icon_state = "drake_statue" - pixel_x = -16 - density = TRUE - deconstructible = FALSE - layer = EDGED_TURF_LAYER - -/obj/structure/fluff/drake_statue/falling //A variety of statue in disrepair; parts are broken off and a gemstone is missing - desc = "" - icon_state = "drake_statue_falling" - - -/obj/structure/fluff/bus - name = "bus" - desc = "" - icon = 'icons/obj/bus.dmi' - density = TRUE - anchored = TRUE - deconstructible = FALSE - -/obj/structure/fluff/bus/dense - name = "bus" - icon_state = "backwall" - -/obj/structure/fluff/bus/passable - name = "bus" - icon_state = "frontwalltop" - density = FALSE - layer = ABOVE_ALL_MOB_LAYER //except for the stairs tile, which should be set to OBJ_LAYER aka 3. - - -/obj/structure/fluff/bus/passable/seat - name = "seat" - desc = "" - icon_state = "backseat" - pixel_y = 17 - layer = OBJ_LAYER - - -/obj/structure/fluff/bus/passable/seat/driver - name = "driver's seat" - desc = "" - icon_state = "driverseat" - -/obj/structure/fluff/bus/passable/seat/driver/attack_hand(mob/user) - playsound(src, 'sound/blank.ogg', 50, TRUE) - . = ..() - /obj/structure/fluff/paper name = "dense lining of papers" desc = "" @@ -124,52 +27,6 @@ desc = "" icon_state = "paperstack" - -/obj/structure/fluff/divine - name = "Miracle" - icon = 'icons/obj/hand_of_god_structures.dmi' - anchored = TRUE - density = TRUE - -/obj/structure/fluff/divine/nexus - name = "nexus" - desc = "" - icon_state = "nexus" - -/obj/structure/fluff/divine/conduit - name = "conduit" - desc = "" - icon_state = "conduit" - -/obj/structure/fluff/divine/convertaltar - name = "conversion altar" - desc = "" - icon_state = "convertaltar" - density = FALSE - can_buckle = 1 - -/obj/structure/fluff/divine/powerpylon - name = "power pylon" - desc = "" - icon_state = "powerpylon" - can_buckle = 1 - -/obj/structure/fluff/divine/defensepylon - name = "defense pylon" - desc = "" - icon_state = "defensepylon" - -/obj/structure/fluff/divine/shrine - name = "shrine" - desc = "" - icon_state = "shrine" - -/obj/structure/fluff/fokoff_sign - name = "crude sign" - desc = "" - icon = 'icons/obj/fluff.dmi' - icon_state = "fokof" - /obj/structure/fluff/big_chain name = "giant chain" desc = "" @@ -397,15 +254,6 @@ plane = -3 layer = WALL_OBJ_LAYER+0.05 -/* -/obj/structure/bars/CheckExit(atom/movable/O, turf/target) - if(istype(O) && (O.pass_flags & PASSGRILLE)) - return 1 - if(O.throwing && !ismob(O)) - return 1 - return !density - ..() -*/ /obj/structure/bars/obj_break(damage_flag) icon_state = "[initial(icon_state)]b" density = FALSE @@ -572,9 +420,6 @@ if(!broke) . += "Oh no, it's [station_time_timestamp("hh:mm")]." . += "(Round Time: [gameTimestamp("hh:mm:ss", REALTIMEOFDAY - SSticker.round_start_irl)].)" -// if(SSshuttle.emergency.mode == SHUTTLE_DOCKED) -// if(SSshuttle.emergency.timeLeft() < 30 MINUTES) -// . += "The last boat will leave in [round(SSshuttle.emergency.timeLeft()/600)] minutes." /obj/structure/fluff/clock/CanPass(atom/movable/mover, turf/target) if(get_dir(loc, mover) == dir) @@ -618,10 +463,6 @@ if(!broke) . += "Oh no, it's [station_time_timestamp("hh:mm")]." . += "(Round Time: [gameTimestamp("hh:mm:ss", REALTIMEOFDAY - SSticker.round_start_irl)].)" -// testing("mode is [SSshuttle.emergency.mode] should be [SHUTTLE_DOCKED]") -// if(SSshuttle.emergency.mode == SHUTTLE_DOCKED) -// if(SSshuttle.emergency.timeLeft() < 30 MINUTES) -// . += "The last boat will leave in [round(SSshuttle.emergency.timeLeft()/600)] minutes." /obj/structure/fluff/wallclock/Initialize() soundloop = new(list(src), FALSE) diff --git a/code/game/objects/structures/ghost_role_spawners.dm b/code/game/objects/structures/ghost_role_spawners.dm deleted file mode 100644 index 031c65a3f8..0000000000 --- a/code/game/objects/structures/ghost_role_spawners.dm +++ /dev/null @@ -1,473 +0,0 @@ -//Objects that spawn ghosts in as a certain role when they click on it, i.e. away mission bartenders. - -//Preserved terrarium/seed vault: Spawns in seed vault structures in lavaland. Ghosts become plantpeople and are advised to begin growing plants in the room near them. -/obj/effect/mob_spawn/human/seed_vault - name = "preserved terrarium" - desc = "" - mob_name = "a lifebringer" - icon = 'icons/obj/lavaland/spawners.dmi' - icon_state = "terrarium" - density = TRUE - roundstart = FALSE - death = FALSE - mob_species = /datum/species/pod - flavour_text = "I are a sentient ecosystem, an example of the mastery over life that my creators possessed. Your masters, benevolent as they were, created uncounted \ - seed vaults and spread them across the universe to every planet they could chart. You are in one such seed vault. Your goal is to cultivate and spread life wherever it will go while waiting \ - for contact from my creators. Estimated time of last contact: Deployment, 5x10^3 millennia ago." - assignedrole = "Lifebringer" - -/obj/effect/mob_spawn/human/seed_vault/special(mob/living/new_spawn) - var/plant_name = pick("Tomato", "Potato", "Broccoli", "Carrot", "Ambrosia", "Pumpkin", "Ivy", "Kudzu", "Banana", "Moss", "Flower", "Bloom", "Root", "Bark", "Glowshroom", "Petal", "Leaf", \ - "Venus", "Sprout","Cocoa", "Strawberry", "Citrus", "Oak", "Cactus", "Pepper", "Juniper") - new_spawn.fully_replace_character_name(null,plant_name) - if(ishuman(new_spawn)) - var/mob/living/carbon/human/H = new_spawn - H.underwear = "Nude" //You're a plant, partner - H.update_body() - -/obj/effect/mob_spawn/human/seed_vault/Destroy() - new/obj/structure/fluff/empty_terrarium(get_turf(src)) - return ..() - -/obj/effect/mob_spawn/human/exile - name = "timeless prison" - desc = "" - mob_name = "a penitent exile" - icon = 'icons/obj/machines/sleeper.dmi' - icon_state = "sleeper" - roundstart = FALSE - death = FALSE - mob_species = /datum/species/shadow - flavour_text = "I are cursed. Years ago, you sacrificed the lives of my trusted friends and the humanity of myself to reach the Wish Granter. Though you \ - did so, it has come at a cost: my very body rejects the light, dooming you to wander endlessly in this horrible wasteland." - assignedrole = "Exile" - -/obj/effect/mob_spawn/human/exile/Destroy() - new/obj/structure/fluff/empty_sleeper(get_turf(src)) - return ..() - -/obj/effect/mob_spawn/human/exile/special(mob/living/new_spawn) - new_spawn.fully_replace_character_name(null,"Wish Granter's Victim ([rand(1,999)])") - var/wish = rand(1,4) - switch(wish) - if(1) - to_chat(new_spawn, "I wished to kill, and kill you did. You've lost track of how many, but the spark of excitement that murder once held has winked out. You feel only regret.") - if(2) - to_chat(new_spawn, "I wished for unending wealth, but no amount of money was worth this existence. Maybe charity might redeem my soul?") - if(3) - to_chat(new_spawn, "I wished for power. Little good it did you, cast out of the light. You are the [gender == MALE ? "king" : "queen"] of a hell that holds no subjects. You feel only remorse.") - if(4) - to_chat(new_spawn, "I wished for immortality, even as my friends lay dying behind you. No matter how many times you cast myself into the lava, you awaken in this room again within a few days. There is no escape.") - -//Golem shells: Spawns in Free Golem ships in lavaland. Ghosts become mineral golems and are advised to spread personal freedom. -/obj/effect/mob_spawn/human/golem - name = "inert free golem shell" - desc = "" - mob_name = "a free golem" - icon = 'icons/obj/wizard.dmi' - icon_state = "construct" - mob_species = /datum/species/golem - roundstart = FALSE - death = FALSE - anchored = FALSE - move_resist = MOVE_FORCE_NORMAL - density = FALSE - var/has_owner = FALSE - var/can_transfer = TRUE //if golems can switch bodies to this new shell - var/mob/living/owner = null //golem's owner if it has one - flavour_text = "I are a Free Golem. Your family worships The Liberator. In his infinite and divine wisdom, he set my clan free to \ - travel the stars with a single declaration: \"Yeah go do whatever.\" Though you are bound to the one who created you, it is customary in my society to repeat those same words to newborn \ - golems, so that no golem may ever be forced to serve again." - -/obj/effect/mob_spawn/human/golem/Initialize(mapload, datum/species/golem/species = null, mob/creator = null) - if(species) //spawners list uses object name to register so this goes before ..() - name += " ([initial(species.prefix)])" - mob_species = species - . = ..() - var/area/A = get_area(src) - if(!mapload && A) - notify_ghosts("\A [initial(species.prefix)] golem shell has been completed in \the [A.name].", source = src, action=NOTIFY_ATTACK, flashwindow = FALSE, ignore_key = POLL_IGNORE_GOLEM) - if(has_owner && creator) - flavour_text = "I are a Golem. You move slowly, but are highly resistant to heat and cold as well as blunt trauma. You are unable to wear clothes, but can still use most tools. \ - Serve [creator], and assist [creator.p_them()] in completing [creator.p_their()] goals at any cost." - owner = creator - -/obj/effect/mob_spawn/human/golem/special(mob/living/new_spawn, name) - var/datum/species/golem/X = mob_species - to_chat(new_spawn, "[initial(X.info_text)]") - if(!owner) - to_chat(new_spawn, "Build golem shells in the autolathe, and feed refined mineral sheets to the shells to bring them to life! You are generally a peaceful group unless provoked.") - else - new_spawn.mind.store_memory("Serve [owner.real_name], my creator.") - new_spawn.mind.enslave_mind_to_creator(owner) - log_game("[key_name(new_spawn)] possessed a golem shell enslaved to [key_name(owner)].") - log_admin("[key_name(new_spawn)] possessed a golem shell enslaved to [key_name(owner)].") - if(ishuman(new_spawn)) - var/mob/living/carbon/human/H = new_spawn - if(has_owner) - var/datum/species/golem/G = H.dna.species - G.owner = owner - H.set_cloned_appearance() - if(!name) - if(has_owner) - H.fully_replace_character_name(null, "[initial(X.prefix)] Golem ([rand(1,999)])") - else - H.fully_replace_character_name(null, H.dna.species.random_name()) - else - H.fully_replace_character_name(null, name) - if(has_owner) - new_spawn.mind.assigned_role = "Servant Golem" - else - new_spawn.mind.assigned_role = "Free Golem" - -/obj/effect/mob_spawn/human/golem/attack_hand(mob/user) - . = ..() - if(.) - return - if(isgolem(user) && can_transfer) - var/mob/living/carbon/human/H = user - var/transfer_choice = alert("Transfer my soul to [src]? (Warning, my old body will die!)",,"Yes","No") - if(transfer_choice != "Yes") - return - if(QDELETED(src) || uses <= 0) - return - log_game("[key_name(H)] golem-swapped into [src]") - H.visible_message("A faint light leaves [H], moving to [src] and animating it!","I leave my old body behind, and transfer into [src]!") - show_flavour = FALSE - var/mob/living/carbon/human/newgolem = create(newname = H.real_name) - H.transfer_trait_datums(newgolem) - H.mind.transfer_to(newgolem) - H.death() - return - -/obj/effect/mob_spawn/human/golem/servant - has_owner = TRUE - name = "inert servant golem shell" - mob_name = "a servant golem" - - -/obj/effect/mob_spawn/human/golem/adamantine - name = "dust-caked free golem shell" - desc = "" - mob_name = "a free golem" - can_transfer = FALSE - mob_species = /datum/species/golem/adamantine - -//Malfunctioning cryostasis sleepers: Spawns in makeshift shelters in lavaland. Ghosts become hermits with knowledge of how they got to where they are now. -/obj/effect/mob_spawn/human/hermit - name = "malfunctioning cryostasis sleeper" - desc = "" - mob_name = "a stranded hermit" - icon = 'icons/obj/lavaland/spawners.dmi' - icon_state = "cryostasis_sleeper" - outfit = /datum/outfit/hermit - roundstart = FALSE - death = FALSE - random = TRUE - mob_species = /datum/species/human - flavour_text = "You've been stranded in this godless prison of a planet for longer than you can remember. Each day you barely scrape by, and between the terrible \ - conditions of my makeshift shelter, the hostile creatures, and the ash drakes swooping down from the cloudless skies, all you can wish for is the feel of soft grass between my toes and \ - the fresh air of Earth. These thoughts are dispelled by yet another recollection of how you got here... " - assignedrole = "Hermit" - -/obj/effect/mob_spawn/human/hermit/Initialize(mapload) - . = ..() - var/arrpee = rand(1,4) - switch(arrpee) - if(1) - flavour_text += "you were a [pick("arms dealer", "shipwright", "docking manager")]'s assistant on a small trading station several sectors from here. Raiders attacked, and there was \ - only one pod left when you got to the escape bay. You took it and launched it alone, and the crowd of terrified faces crowding at the airlock door as my pod's engines burst to \ - life and sent you to this hell are forever branded into my memory." - outfit.uniform = /obj/item/clothing/under/misc/assistantformal - if(2) - flavour_text += "you're an exile from the Tiger Cooperative. Their technological fanaticism drove you to question the power and beliefs of the Exolitics, and they saw you as a \ - heretic and subjected you to hours of horrible torture. You were hours away from execution when a high-ranking friend of yours in the Cooperative managed to secure you a pod, \ - scrambled its destination's coordinates, and launched it. You awoke from stasis when you landed and have been surviving - barely - ever since." - outfit.uniform = /obj/item/clothing/under/rank/prisoner - outfit.shoes = /obj/item/clothing/shoes/sneakers/orange - if(3) - flavour_text += "you were a doctor on one of Nanotrasen's space stations, but you left behind that damn corporation's tyranny and everything it stood for. From a metaphorical hell \ - to a literal one, you find myself nonetheless missing the recycled air and warm floors of what you left behind... but you'd still rather be here than there." - outfit.uniform = /obj/item/clothing/under/rank/medical/doctor - outfit.suit = /obj/item/clothing/suit/toggle/labcoat - outfit.back = /obj/item/storage/backpack/medic - if(4) - flavour_text += "you were always joked about by my friends for \"not playing with a full deck\", as they so kindly put it. It seems that they were right when you, on a tour \ - at one of Nanotrasen's state-of-the-art research facilities, were in one of the escape pods alone and saw the red button. It was big and shiny, and it caught my eye. You pressed \ - it, and after a terrifying and fast ride for days, you landed here. You've had time to wisen up since then, and you think that my old friends wouldn't be laughing now." - -/obj/effect/mob_spawn/human/hermit/Destroy() - new/obj/structure/fluff/empty_cryostasis_sleeper(get_turf(src)) - return ..() - -/datum/outfit/hermit - name = "Lavaland hermit" - uniform = /obj/item/clothing/under/color/grey/glorf - shoes = /obj/item/clothing/shoes/sneakers/black - back = /obj/item/storage/backpack - mask = /obj/item/clothing/mask/breath - l_pocket = /obj/item/tank/internals/emergency_oxygen - r_pocket = /obj/item/flashlight/glowstick - -//Prisoner containment sleeper: Spawns in crashed prison ships in lavaland. Ghosts become escaped prisoners and are advised to find a way out of the mess they've gotten themselves into. -/obj/effect/mob_spawn/human/prisoner_transport - name = "prisoner containment sleeper" - desc = "" - mob_name = "an escaped prisoner" - icon = 'icons/obj/machines/sleeper.dmi' - icon_state = "sleeper_s" - outfit = /datum/outfit/lavalandprisoner - roundstart = FALSE - death = FALSE - flavour_text = "Good. It seems as though my ship crashed. You're a prisoner, sentenced to hard work in one of Nanotrasen's labor camps, but it seems as \ - though fate has other plans for you. You remember that you were convicted of " - assignedrole = "Escaped Prisoner" - -/obj/effect/mob_spawn/human/prisoner_transport/special(mob/living/L) - L.fully_replace_character_name(null,"NTP #LL-0[rand(111,999)]") //Nanotrasen Prisoner #Lavaland-(numbers) - -/obj/effect/mob_spawn/human/prisoner_transport/Initialize(mapload) - . = ..() - var/list/crimes = list("murder", "larceny", "embezzlement", "unionization", "dereliction of duty", "kidnapping", "gross incompetence", "grand theft", "collaboration with the Syndicate", \ - "worship of a forbidden deity", "interspecies relations", "mutiny") - flavour_text += "[pick(crimes)]. but regardless of that, it seems like my crime doesn't matter now. You don't know where you are, but you know that it's out to kill you, and you're not going \ - to lose this opportunity. Find a way to get out of this mess and back to where you rightfully belong - my [pick("house", "apartment", "spaceship", "station")]." - -/datum/outfit/lavalandprisoner - name = "Lavaland Prisoner" - uniform = /obj/item/clothing/under/rank/prisoner - mask = /obj/item/clothing/mask/breath - shoes = /obj/item/clothing/shoes/sneakers/orange - r_pocket = /obj/item/tank/internals/emergency_oxygen - - -/obj/effect/mob_spawn/human/prisoner_transport/Destroy() - new/obj/structure/fluff/empty_sleeper/syndicate(get_turf(src)) - return ..() - -//Space Hotel Staff -/obj/effect/mob_spawn/human/hotel_staff //not free antag u little shits - name = "staff sleeper" - desc = "" - mob_name = "hotel staff member" - icon = 'icons/obj/machines/sleeper.dmi' - icon_state = "sleeper_s" - objectives = "Cater to visiting guests with my fellow staff. Do not leave my assigned hotel and always remember: The customer is always right!" - death = FALSE - roundstart = FALSE - random = TRUE - outfit = /datum/outfit/hotelstaff - flavour_text = "I are a staff member of a top-of-the-line space hotel! Cater to guests and DON'T leave the hotel, lest the manager fire you for\ - dereliction of duty!" - assignedrole = "Hotel Staff" - -/datum/outfit/hotelstaff - name = "Hotel Staff" - uniform = /obj/item/clothing/under/misc/assistantformal - shoes = /obj/item/clothing/shoes/laceup - back = /obj/item/storage/backpack - -/obj/effect/mob_spawn/human/hotel_staff/security - name = "hotel security sleeper" - mob_name = "hotel security member" - outfit = /datum/outfit/hotelstaff/security - flavour_text = "I are a peacekeeper assigned to this hotel to protect the interests of the company while keeping the peace between \ - guests and the staff. Do NOT leave the hotel, as that is grounds for contract termination." - objectives = "Do not leave my assigned hotel. Try and keep the peace between staff and guests, non-lethal force heavily advised if possible." - -/datum/outfit/hotelstaff/security - name = "Hotel Security" - uniform = /obj/item/clothing/under/rank/security/officer/blueshirt - shoes = /obj/item/clothing/shoes/jackboots - suit = /obj/item/clothing/suit/armor/vest/blueshirt - head = /obj/item/clothing/head/helmet/blueshirt - back = /obj/item/storage/backpack/security - belt = /obj/item/storage/belt/security/full - -/obj/effect/mob_spawn/human/hotel_staff/Destroy() - new/obj/structure/fluff/empty_sleeper/syndicate(get_turf(src)) - ..() - -/obj/effect/mob_spawn/human/demonic_friend - name = "Essence of friendship" - desc = "" - mob_name = "Demonic friend" - icon = 'icons/obj/cardboard_cutout.dmi' - icon_state = "cutout_basic" - outfit = /datum/outfit/demonic_friend - death = FALSE - roundstart = FALSE - random = TRUE - id_job = "SuperFriend" - id_access = "assistant" - var/obj/effect/proc_holder/spell/targeted/summon_friend/spell - var/datum/mind/owner - assignedrole = "SuperFriend" - -/obj/effect/mob_spawn/human/demonic_friend/Initialize(mapload, datum/mind/owner_mind, obj/effect/proc_holder/spell/targeted/summon_friend/summoning_spell) - . = ..() - owner = owner_mind - flavour_text = "I have been given a reprieve from my eternity of torment, to be [owner.name]'s friend for [owner.p_their()] short mortal coil. Be aware that if you do not live up to [owner.name]'s expectations, they can send you back to hell with a single thought. [owner.name]'s death will also return you to hell." - var/area/A = get_area(src) - if(!mapload && A) - notify_ghosts("\A friendship shell has been completed in \the [A.name].", source = src, action=NOTIFY_ATTACK, flashwindow = FALSE) - objectives = "Be [owner.name]'s friend, and keep [owner.name] alive, so you don't get sent back to hell." - spell = summoning_spell - - -/obj/effect/mob_spawn/human/demonic_friend/special(mob/living/L) - if(!QDELETED(owner.current) && owner.current.stat != DEAD) - L.fully_replace_character_name(null,"[owner.name]'s best friend") - soullink(/datum/soullink/oneway, owner.current, L) - spell.friend = L - spell.charge_counter = spell.charge_max - L.mind.hasSoul = FALSE - else - to_chat(L, "My owner is already dead! You will soon perish.") - addtimer(CALLBACK(L, TYPE_PROC_REF(/mob, dust), 150)) //Give em a few seconds as a mercy. - -/datum/outfit/demonic_friend - name = "Demonic Friend" - uniform = /obj/item/clothing/under/misc/assistantformal - shoes = /obj/item/clothing/shoes/laceup - back = /obj/item/storage/backpack - -/obj/effect/mob_spawn/human/syndicate - name = "Syndicate Operative" - roundstart = FALSE - death = FALSE - icon = 'icons/obj/machines/sleeper.dmi' - icon_state = "sleeper_s" - outfit = /datum/outfit/syndicate_empty - assignedrole = "Space Syndicate" //I know this is really dumb, but Syndicate operative is nuke ops - -/datum/outfit/syndicate_empty - name = "Syndicate Operative Empty" - uniform = /obj/item/clothing/under/syndicate - shoes = /obj/item/clothing/shoes/combat - gloves = /obj/item/clothing/gloves/combat - back = /obj/item/storage/backpack - implants = list(/obj/item/implant/weapons_auth) - -/datum/outfit/syndicate_empty/post_equip(mob/living/carbon/human/H) - H.faction |= ROLE_SYNDICATE - -/obj/effect/mob_spawn/human/syndicate/battlecruiser - name = "Syndicate Battlecruiser Ship Operative" - flavour_text = "I are a crewmember aboard the syndicate flagship: the SBC Starfury. My job is to follow my captain's orders, maintain the ship, and keep the engine running. If you are not familiar with how the supermatter engine functions: do not attempt to start it.
\ -
\ - The armory is not a candy store, and my role is not to assault the station directly, leave that work to the assault operatives." - outfit = /datum/outfit/syndicate_empty/SBC - -/datum/outfit/syndicate_empty/SBC - name = "Syndicate Battlecruiser Ship Operative" - l_pocket = /obj/item/gun/ballistic/automatic/pistol - r_pocket = /obj/item/kitchen/knife/combat/survival - belt = /obj/item/storage/belt/military/assault - -/obj/effect/mob_spawn/human/syndicate/battlecruiser/assault - name = "Syndicate Battlecruiser Assault Operative" - flavour_text = "I are an assault operative aboard the syndicate flagship: the SBC Starfury. My job is to follow my captain's orders, keep intruders out of the ship, and assault Space Station 13. There is an armory, multiple assault ships, and beam cannons to attack the station with.
\ -
\ - Work as a team with my fellow operatives and work out a plan of attack. If you are overwhelmed, escape back to my ship!
" - outfit = /datum/outfit/syndicate_empty/SBC/assault - -/datum/outfit/syndicate_empty/SBC/assault - name = "Syndicate Battlecruiser Assault Operative" - uniform = /obj/item/clothing/under/syndicate/combat - l_pocket = /obj/item/ammo_box/magazine/m10mm - r_pocket = /obj/item/kitchen/knife/combat/survival - belt = /obj/item/storage/belt/military - suit = /obj/item/clothing/suit/armor/vest - suit_store = /obj/item/gun/ballistic/automatic/pistol - back = /obj/item/storage/backpack/security - mask = /obj/item/clothing/mask/gas/syndicate - -/obj/effect/mob_spawn/human/syndicate/battlecruiser/captain - name = "Syndicate Battlecruiser Captain" - flavour_text = "I are the captain aboard the syndicate flagship: the SBC Starfury. My job is to oversee my crew, defend the ship, and destroy Space Station 13. The ship has an armory, multiple ships, beam cannons, and multiple crewmembers to accomplish this goal.
\ -
\ - As the captain, this whole operation falls on my shoulders. You do not need to nuke the station, causing sufficient damage and preventing my ship from being destroyed will be enough.
" - outfit = /datum/outfit/syndicate_empty/SBC/assault/captain - id_access_list = list(150,151) - -/datum/outfit/syndicate_empty/SBC/assault/captain - name = "Syndicate Battlecruiser Captain" - r_pocket = /obj/item/melee/classic_baton/telescopic - suit = /obj/item/clothing/suit/armor/vest/capcarapace/syndicate - suit_store = /obj/item/gun/ballistic/revolver/mateba - back = /obj/item/storage/backpack/satchel/leather - head = /obj/item/clothing/head/HoS/syndicate - mask = /obj/item/clothing/mask/cigarette/cigar/havana - glasses = /obj/item/clothing/glasses/thermal/eyepatch - -//Ancient cryogenic sleepers. Players become NT crewmen from a hundred year old space station, now on the verge of collapse. -/obj/effect/mob_spawn/human/oldsec - name = "old cryogenics pod" - desc = "" - mob_name = "a security officer" - icon = 'icons/obj/machines/sleeper.dmi' - icon_state = "sleeper" - roundstart = FALSE - death = FALSE - random = TRUE - mob_species = /datum/species/human - flavour_text = "I are a security officer working for Nanotrasen, stationed onboard a state of the art research station. You vaguely recall rushing into a \ - cryogenics pod due to an oncoming radiation storm. The last thing you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \ - your eyes, everything seems rusted and broken, a dark feeling swells in my gut as you climb out of my pod. \ - Work as a team with my fellow survivors and do not abandon them." - uniform = /obj/item/clothing/under/rank/security/officer - shoes = /obj/item/clothing/shoes/jackboots - r_pocket = /obj/item/restraints/handcuffs - assignedrole = "Ancient Crew" - -/obj/effect/mob_spawn/human/oldsec/Destroy() - new/obj/structure/showcase/machinery/oldpod/used(drop_location()) - return ..() - -/obj/effect/mob_spawn/human/oldeng - name = "old cryogenics pod" - desc = "" - mob_name = "an engineer" - icon = 'icons/obj/machines/sleeper.dmi' - icon_state = "sleeper" - roundstart = FALSE - death = FALSE - random = TRUE - mob_species = /datum/species/human - flavour_text = "I are an engineer working for Nanotrasen, stationed onboard a state of the art research station. You vaguely recall rushing into a \ - cryogenics pod due to an oncoming radiation storm. The last thing you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \ - your eyes, everything seems rusted and broken, a dark feeling swells in my gut as you climb out of my pod. \ - Work as a team with my fellow survivors and do not abandon them." - uniform = /obj/item/clothing/under/rank/engineering/engineer - shoes = /obj/item/clothing/shoes/workboots - gloves = /obj/item/clothing/gloves/color/fyellow/old - l_pocket = /obj/item/tank/internals/emergency_oxygen - assignedrole = "Ancient Crew" - -/obj/effect/mob_spawn/human/oldeng/Destroy() - new/obj/structure/showcase/machinery/oldpod/used(drop_location()) - return ..() - -/obj/effect/mob_spawn/human/oldsci - name = "old cryogenics pod" - desc = "" - mob_name = "a scientist" - icon = 'icons/obj/machines/sleeper.dmi' - icon_state = "sleeper" - roundstart = FALSE - death = FALSE - random = TRUE - mob_species = /datum/species/human - flavour_text = "I are a scientist working for Nanotrasen, stationed onboard a state of the art research station. You vaguely recall rushing into a \ - cryogenics pod due to an oncoming radiation storm. The last thing you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \ - your eyes, everything seems rusted and broken, a dark feeling swells in my gut as you climb out of my pod. \ - Work as a team with my fellow survivors and do not abandon them." - uniform = /obj/item/clothing/under/rank/rnd/scientist - shoes = /obj/item/clothing/shoes/laceup - l_pocket = /obj/item/stack/medical/bruise_pack - assignedrole = "Ancient Crew" - -/obj/effect/mob_spawn/human/oldsci/Destroy() - new/obj/structure/showcase/machinery/oldpod/used(drop_location()) - return ..() diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm deleted file mode 100644 index 9ab9b6cc1a..0000000000 --- a/code/game/objects/structures/girders.dm +++ /dev/null @@ -1,386 +0,0 @@ -/obj/structure/girder - name = "girder" - icon_state = "girder" - desc = "" - anchored = TRUE - density = TRUE - var/state = GIRDER_NORMAL - var/girderpasschance = 20 // percentage chance that a projectile passes through the girder. - var/can_displace = TRUE //If the girder can be moved around by wrenching it - max_integrity = 200 - rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE - rad_insulation = RAD_VERY_LIGHT_INSULATION - -/obj/structure/girder/examine(mob/user) - . = ..() - switch(state) - if(GIRDER_REINF) - . += "The support struts are screwed in place." - if(GIRDER_REINF_STRUTS) - . += "The support struts are unscrewed and the inner grille is intact." - if(GIRDER_NORMAL) - if(can_displace) - . += "The bolts are wrenched in place." - if(GIRDER_DISPLACED) - . += "The bolts are loosened, but the screws are holding [src] together." - if(GIRDER_DISASSEMBLED) - . += "[src] is disassembled! You probably shouldn't be able to see this examine message." - -/obj/structure/girder/attackby(obj/item/W, mob/user, params) - add_fingerprint(user) - - if(istype(W, /obj/item/stack)) - if(iswallturf(loc)) - to_chat(user, "There is already a wall present!") - return - if(!isfloorturf(src.loc)) - to_chat(user, "A floor must be present to build a false wall!") - return - if (locate(/obj/structure/falsewall) in src.loc.contents) - to_chat(user, "There is already a false wall present!") - return - - if(istype(W, /obj/item/stack/rods)) - var/obj/item/stack/rods/S = W - if(state == GIRDER_DISPLACED) - if(S.get_amount() < 2) - to_chat(user, "I need at least two rods to create a false wall!") - return - to_chat(user, "I start building a reinforced false wall...") - if(do_after(user, 20, target = src)) - if(S.get_amount() < 2) - return - S.use(2) - to_chat(user, "I create a false wall. Push on it to open or close the passage.") - var/obj/structure/falsewall/iron/FW = new (loc) - transfer_fingerprints_to(FW) - qdel(src) - else - if(S.get_amount() < 5) - to_chat(user, "I need at least five rods to add plating!") - return - to_chat(user, "I start adding plating...") - if(do_after(user, 40, target = src)) - if(S.get_amount() < 5) - return - S.use(5) - to_chat(user, "I add the plating.") - var/turf/T = get_turf(src) - T.PlaceOnTop(/turf/closed/wall/mineral/iron) - transfer_fingerprints_to(T) - qdel(src) - return - - if(!istype(W, /obj/item/stack/sheet)) - return - - var/obj/item/stack/sheet/S = W - if(istype(S, /obj/item/stack/sheet/metal)) - if(state == GIRDER_DISPLACED) - if(S.get_amount() < 2) - to_chat(user, "I need two sheets of metal to create a false wall!") - return - to_chat(user, "I start building a false wall...") - if(do_after(user, 20, target = src)) - if(S.get_amount() < 2) - return - S.use(2) - to_chat(user, "I create a false wall. Push on it to open or close the passage.") - var/obj/structure/falsewall/F = new (loc) - transfer_fingerprints_to(F) - qdel(src) - else - if(S.get_amount() < 2) - to_chat(user, "I need two sheets of metal to finish a wall!") - return - to_chat(user, "I start adding plating...") - if (do_after(user, 40, target = src)) - if(S.get_amount() < 2) - return - S.use(2) - to_chat(user, "I add the plating.") - var/turf/T = get_turf(src) - T.PlaceOnTop(/turf/closed/wall) - transfer_fingerprints_to(T) - qdel(src) - return - - if(istype(S, /obj/item/stack/sheet/plasteel)) - if(state == GIRDER_DISPLACED) - if(S.get_amount() < 2) - to_chat(user, "I need at least two sheets to create a false wall!") - return - to_chat(user, "I start building a reinforced false wall...") - if(do_after(user, 20, target = src)) - if(S.get_amount() < 2) - return - S.use(2) - to_chat(user, "I create a reinforced false wall. Push on it to open or close the passage.") - var/obj/structure/falsewall/reinforced/FW = new (loc) - transfer_fingerprints_to(FW) - qdel(src) - else - if(state == GIRDER_REINF) - if(S.get_amount() < 1) - return - to_chat(user, "I start finalizing the reinforced wall...") - if(do_after(user, 50, target = src)) - if(S.get_amount() < 1) - return - S.use(1) - to_chat(user, "I fully reinforce the wall.") - var/turf/T = get_turf(src) - T.PlaceOnTop(/turf/closed/wall/r_wall) - transfer_fingerprints_to(T) - qdel(src) - return - else - if(S.get_amount() < 1) - return - to_chat(user, "I start reinforcing the girder...") - if(do_after(user, 60, target = src)) - if(S.get_amount() < 1) - return - S.use(1) - to_chat(user, "I reinforce the girder.") - var/obj/structure/girder/reinforced/R = new (loc) - transfer_fingerprints_to(R) - qdel(src) - return - - if(S.sheettype && S.sheettype != "runed") - var/M = S.sheettype - if(state == GIRDER_DISPLACED) - if(S.get_amount() < 2) - to_chat(user, "I need at least two sheets to create a false wall!") - return - if(do_after(user, 20, target = src)) - if(S.get_amount() < 2) - return - S.use(2) - to_chat(user, "I create a false wall. Push on it to open or close the passage.") - var/F = text2path("/obj/structure/falsewall/[M]") - var/obj/structure/FW = new F (loc) - transfer_fingerprints_to(FW) - qdel(src) - else - if(S.get_amount() < 2) - to_chat(user, "I need at least two sheets to add plating!") - return - to_chat(user, "I start adding plating...") - if (do_after(user, 40, target = src)) - if(S.get_amount() < 2) - return - S.use(2) - to_chat(user, "I add the plating.") - var/turf/T = get_turf(src) - T.PlaceOnTop(text2path("/turf/closed/wall/mineral/[M]")) - transfer_fingerprints_to(T) - qdel(src) - return - - add_hiddenprint(user) - - else - return ..() - -// Screwdriver behavior for girders -/obj/structure/girder/screwdriver_act(mob/user, obj/item/tool) - if(..()) - return TRUE - - . = FALSE - if(state == GIRDER_DISPLACED) - user.visible_message("[user] disassembles the girder.", - "I start to disassemble the girder...", - "I hear clanking and banging noises.") - if(tool.use_tool(src, user, 40, volume=100)) - if(state != GIRDER_DISPLACED) - return - state = GIRDER_DISASSEMBLED - to_chat(user, "I disassemble the girder.") - var/obj/item/stack/sheet/metal/M = new (loc, 2) - M.add_fingerprint(user) - qdel(src) - return TRUE - - else if(state == GIRDER_REINF) - to_chat(user, "I start unsecuring support struts...") - if(tool.use_tool(src, user, 40, volume=100)) - if(state != GIRDER_REINF) - return - to_chat(user, "I unsecure the support struts.") - state = GIRDER_REINF_STRUTS - return TRUE - - else if(state == GIRDER_REINF_STRUTS) - to_chat(user, "I start securing support struts...") - if(tool.use_tool(src, user, 40, volume=100)) - if(state != GIRDER_REINF_STRUTS) - return - to_chat(user, "I secure the support struts.") - state = GIRDER_REINF - return TRUE - -// Wirecutter behavior for girders -/obj/structure/girder/wirecutter_act(mob/user, obj/item/tool) - . = ..() - if(state == GIRDER_REINF_STRUTS) - to_chat(user, "I start removing the inner grille...") - if(tool.use_tool(src, user, 40, volume=100)) - to_chat(user, "I remove the inner grille.") - new /obj/item/stack/sheet/plasteel(get_turf(src)) - var/obj/structure/girder/G = new (loc) - transfer_fingerprints_to(G) - qdel(src) - return TRUE - -/obj/structure/girder/wrench_act(mob/user, obj/item/tool) - . = ..() - if(state == GIRDER_DISPLACED) - if(!isfloorturf(loc)) - to_chat(user, "A floor must be present to secure the girder!") - - to_chat(user, "I start securing the girder...") - if(tool.use_tool(src, user, 40, volume=100)) - to_chat(user, "I secure the girder.") - var/obj/structure/girder/G = new (loc) - transfer_fingerprints_to(G) - qdel(src) - return TRUE - else if(state == GIRDER_NORMAL && can_displace) - to_chat(user, "I start unsecuring the girder...") - if(tool.use_tool(src, user, 40, volume=100)) - to_chat(user, "I unsecure the girder.") - var/obj/structure/girder/displaced/D = new (loc) - transfer_fingerprints_to(D) - qdel(src) - return TRUE - -/obj/structure/girder/CanPass(atom/movable/mover, turf/target) - if(istype(mover) && (mover.pass_flags & PASSGRILLE)) - return prob(girderpasschance) - else - if(istype(mover, /obj/projectile)) - return prob(girderpasschance) - else - return 0 - -/obj/structure/girder/CanAStarPass(ID, dir, caller) - . = !density - if(ismovableatom(caller)) - var/atom/movable/mover = caller - . = . || (mover.pass_flags & PASSGRILLE) - -/obj/structure/girder/deconstruct(disassembled = TRUE) -// if(!(flags_1 & NODECONSTRUCT_1)) -// var/remains = pick(/obj/item/stack/rods, /obj/item/stack/sheet/metal) -// new remains(loc) - qdel(src) - -/obj/structure/girder/narsie_act() - new /obj/structure/girder/cult(loc) - qdel(src) - -/obj/structure/girder/displaced - name = "displaced girder" - icon_state = "displaced" - anchored = FALSE - state = GIRDER_DISPLACED - girderpasschance = 25 - max_integrity = 120 - -/obj/structure/girder/reinforced - name = "reinforced girder" - icon_state = "reinforced" - state = GIRDER_REINF - girderpasschance = 0 - max_integrity = 350 - - - -//////////////////////////////////////////// cult girder ////////////////////////////////////////////// - -/obj/structure/girder/cult - name = "runed girder" - desc = "" - icon = 'icons/obj/cult.dmi' - icon_state= "cultgirder" - can_displace = FALSE - -/obj/structure/girder/cult/attackby(obj/item/W, mob/user, params) - add_fingerprint(user) - - if(W.tool_behaviour == TOOL_WELDER) - if(!W.tool_start_check(user, amount=0)) - return - - to_chat(user, "I start slicing apart the girder...") - if(W.use_tool(src, user, 40, volume=50)) - to_chat(user, "I slice apart the girder.") - var/obj/item/stack/sheet/runed_metal/R = new(drop_location(), 1) - transfer_fingerprints_to(R) - qdel(src) - - else if(istype(W, /obj/item/stack/sheet/runed_metal)) - var/obj/item/stack/sheet/runed_metal/R = W - if(R.get_amount() < 1) - to_chat(user, "I need at least one sheet of runed metal to construct a runed wall!") - return 0 - user.visible_message("[user] begins laying runed metal on [src]...", "I begin constructing a runed wall...") - if(do_after(user, 50, target = src)) - if(R.get_amount() < 1) - return - user.visible_message("[user] plates [src] with runed metal.", "I construct a runed wall.") - R.use(1) - var/turf/T = get_turf(src) - T.PlaceOnTop(/turf/closed/wall/mineral/cult) - qdel(src) - - else - return ..() - -/obj/structure/girder/cult/narsie_act() - return - -/obj/structure/girder/cult/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) - new /obj/item/stack/sheet/runed_metal(drop_location(), 1) - qdel(src) - -/obj/structure/girder/bronze - name = "wall gear" - desc = "" - icon = 'icons/obj/clockwork_objects.dmi' - icon_state = "wall_gear" - can_displace = FALSE - -/obj/structure/girder/bronze/attackby(obj/item/W, mob/living/user, params) - add_fingerprint(user) - if(W.tool_behaviour == TOOL_WELDER) - if(!W.tool_start_check(user, amount = 0)) - return - to_chat(user, "I start slicing apart [src]...") - if(W.use_tool(src, user, 40, volume=50)) - to_chat(user, "I slice apart [src].") - var/obj/item/stack/tile/bronze/B = new(drop_location(), 2) - transfer_fingerprints_to(B) - qdel(src) - - else if(istype(W, /obj/item/stack/tile/bronze)) - var/obj/item/stack/tile/bronze/B = W - if(B.get_amount() < 2) - to_chat(user, "I need at least two bronze sheets to build a bronze wall!") - return 0 - user.visible_message("[user] begins plating [src] with bronze...", "I begin constructing a bronze wall...") - if(do_after(user, 50, target = src)) - if(B.get_amount() < 2) - return - user.visible_message("[user] plates [src] with bronze!", "I construct a bronze wall.") - B.use(2) - var/turf/T = get_turf(src) - T.PlaceOnTop(/turf/closed/wall/mineral/bronze) - qdel(src) - - else - return ..() diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm deleted file mode 100644 index a397aa4155..0000000000 --- a/code/game/objects/structures/grille.dm +++ /dev/null @@ -1,189 +0,0 @@ -/obj/structure/grille - desc = "" - name = "grille" - icon = 'icons/obj/structures.dmi' - icon_state = "grille" - density = TRUE - anchored = TRUE - flags_1 = CONDUCT_1 - pressure_resistance = 5*ONE_ATMOSPHERE - armor = list("melee" = 50, "bullet" = 70, "laser" = 70, "energy" = 100, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 0, "acid" = 0) - max_integrity = 50 - integrity_failure = 0.4 - var/rods_type = /obj/item/stack/rods - var/rods_amount = 2 - var/rods_broken = TRUE - var/grille_type = null - var/broken_type = /obj/structure/grille/broken - rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE - -/obj/structure/grille/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) - . = ..() - update_icon() - -/obj/structure/grille/update_icon() - if(QDELETED(src) || broken) - return - - var/ratio = obj_integrity / max_integrity - ratio = CEILING(ratio*4, 1) * 25 - - if(smooth) - queue_smooth(src) - - if(ratio > 50) - return - icon_state = "grille50_[rand(0,3)]" - -/obj/structure/grille/examine(mob/user) - . = ..() -// if(anchored) -// . += "It's secured in place with screws. The rods look like they could be cut through." -// if(!anchored) -// . += "The anchoring screws are unscrewed. The rods look like they could be cut through." - - -/obj/structure/grille/attack_paw(mob/user) - return attack_hand(user) - -/obj/structure/grille/hulk_damage() - return 60 - -/obj/structure/grille/attack_hand(mob/living/user) - . = ..() - if(.) - return - user.changeNext_move(CLICK_CD_MELEE) - user.do_attack_animation(src, ATTACK_EFFECT_KICK) - user.visible_message("[user] hits [src].", null, null, COMBAT_MESSAGE_RANGE) - log_combat(user, src, "hit") - - -/obj/structure/grille/CanPass(atom/movable/mover, turf/target) - if(istype(mover) && (mover.pass_flags & PASSGRILLE)) - return TRUE - else - if(istype(mover, /obj/projectile) && density) - return prob(30) - else - return !density - -/obj/structure/grille/CanAStarPass(ID, dir, caller) - . = !density - if(ismovableatom(caller)) - var/atom/movable/mover = caller - . = . || (mover.pass_flags & PASSGRILLE) - -/obj/structure/grille/attackby(obj/item/W, mob/user, params) - user.changeNext_move(CLICK_CD_MELEE) - add_fingerprint(user) - if(W.tool_behaviour == TOOL_WIRECUTTER) - W.play_tool_sound(src, 100) - deconstruct() - else if((W.tool_behaviour == TOOL_SCREWDRIVER) && (isturf(loc) || anchored)) - W.play_tool_sound(src, 100) - setAnchored(!anchored) - user.visible_message("[user] [anchored ? "fastens" : "unfastens"] [src].", \ - "I [anchored ? "fasten [src] to" : "unfasten [src] from"] the floor.") - return - else if(istype(W, /obj/item/stack/rods) && broken) - var/obj/item/stack/rods/R = W - user.visible_message("[user] rebuilds the broken grille.", \ - "I rebuild the broken grille.") - new grille_type(src.loc) - R.use(1) - qdel(src) - return - -//window placing begin - else if(is_glass_sheet(W)) - if (!broken) - var/obj/item/stack/ST = W - if (ST.get_amount() < 2) - to_chat(user, "I need at least two sheets of glass for that!") - return - var/dir_to_set = SOUTHWEST - if(!anchored) - to_chat(user, "[src] needs to be fastened to the floor first!") - return - for(var/obj/structure/window/WINDOW in loc) - to_chat(user, "There is already a window there!") - return - to_chat(user, "I start placing the window...") - if(do_after(user,20, target = src)) - if(!src.loc || !anchored) //Grille broken or unanchored while waiting - return - for(var/obj/structure/window/WINDOW in loc) //Another window already installed on grille - return - var/obj/structure/window/WD - if(istype(W, /obj/item/stack/sheet/plasmarglass)) - WD = new/obj/structure/window/plasma/reinforced/fulltile(drop_location()) //reinforced plasma window - else if(istype(W, /obj/item/stack/sheet/plasmaglass)) - WD = new/obj/structure/window/plasma/fulltile(drop_location()) //plasma window - else if(istype(W, /obj/item/stack/sheet/rglass)) - WD = new/obj/structure/window/reinforced/fulltile(drop_location()) //reinforced window - else if(istype(W, /obj/item/stack/sheet/titaniumglass)) - WD = new/obj/structure/window/shuttle(drop_location()) - else if(istype(W, /obj/item/stack/sheet/plastitaniumglass)) - WD = new/obj/structure/window/plasma/reinforced/plastitanium(drop_location()) - else - WD = new/obj/structure/window/fulltile(drop_location()) //normal window - WD.setDir(dir_to_set) - WD.ini_dir = dir_to_set - WD.setAnchored(FALSE) - WD.state = 0 - ST.use(2) - to_chat(user, "I place [WD] on [src].") - return -//window placing end - - else if(istype(W, /obj/item/shard)) - return ..() - -/obj/structure/grille/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) - switch(damage_type) - if(BRUTE) - if(damage_amount) - playsound(src, 'sound/blank.ogg', 80, TRUE) - else - playsound(src, 'sound/blank.ogg', 50, TRUE) - if(BURN) - playsound(src, 'sound/blank.ogg', 80, TRUE) - - -/obj/structure/grille/deconstruct(disassembled = TRUE) - if(!loc) //if already qdel'd somehow, we do nothing - return -// if(!(flags_1&NODECONSTRUCT_1)) -// var/obj/R = new rods_type(drop_location(), rods_amount) -// transfer_fingerprints_to(R) -// qdel(src) - ..() - -/obj/structure/grille/obj_break() -// if(!broken && !(flags_1 & NODECONSTRUCT_1)) -// new broken_type(src.loc) -// var/obj/R = new rods_type(drop_location(), rods_broken) -// transfer_fingerprints_to(R) - ..() - - - -/obj/structure/grille/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if(!broken) - if(exposed_temperature > T0C + 1500) - take_damage(1, BURN, 0, 0) - ..() - -/obj/structure/grille/get_dumping_location(datum/component/storage/source,mob/user) - return null - -/obj/structure/grille/broken // Pre-broken grilles for map placement - icon_state = "brokengrille" - density = FALSE - obj_integrity = 20 - broken = TRUE - rods_amount = 1 - rods_broken = FALSE - grille_type = /obj/structure/grille - broken_type = null diff --git a/code/game/objects/structures/guillotine.dm b/code/game/objects/structures/guillotine.dm index f05c0ca5e6..0ff2652915 100644 --- a/code/game/objects/structures/guillotine.dm +++ b/code/game/objects/structures/guillotine.dm @@ -35,19 +35,6 @@ LAZYINITLIST(buckled_mobs) . = ..() -/obj/structure/guillotine/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/stack/sheet/plasteel)) - to_chat(user, "I start repairing the guillotine with the plasteel...") - if(blade_sharpness<10) - if(do_after(user,100,target=user)) - blade_sharpness = min(10,blade_sharpness+3) - I.use(1) - to_chat(user, "I repair the guillotine with the plasteel.") - else - to_chat(user, "I stop repairing the guillotine with the plasteel.") - else - to_chat(user, "The guillotine is already fully repaired!") - /obj/structure/guillotine/examine(mob/user) . = ..() diff --git a/code/game/objects/structures/guncase.dm b/code/game/objects/structures/guncase.dm deleted file mode 100644 index ca284ec46e..0000000000 --- a/code/game/objects/structures/guncase.dm +++ /dev/null @@ -1,102 +0,0 @@ -//GUNCASES// -/obj/structure/guncase - name = "gun locker" - desc = "" - icon = 'icons/obj/closet.dmi' - icon_state = "shotguncase" - anchored = FALSE - density = TRUE - opacity = 0 - var/case_type = "" - var/gun_category = /obj/item/gun - var/open = TRUE - var/capacity = 4 - -/obj/structure/guncase/Initialize(mapload) - . = ..() - if(mapload) - for(var/obj/item/I in loc.contents) - if(istype(I, gun_category)) - I.forceMove(src) - if(contents.len >= capacity) - break - update_icon() - -/obj/structure/guncase/update_icon() - cut_overlays() - if(case_type && LAZYLEN(contents)) - var/mutable_appearance/gun_overlay = mutable_appearance(icon, case_type) - for(var/i in 1 to contents.len) - gun_overlay.pixel_x = 3 * (i - 1) - add_overlay(gun_overlay) - if(open) - add_overlay("[icon_state]_open") - else - add_overlay("[icon_state]_door") - -/obj/structure/guncase/attackby(obj/item/I, mob/user, params) - if(istype(I, gun_category) && open) - if(LAZYLEN(contents) < capacity) - if(!user.transferItemToLoc(I, src)) - return - to_chat(user, "I place [I] in [src].") - update_icon() - else - to_chat(user, "[src] is full.") - return - - else if(user.used_intent.type != INTENT_HARM) - open = !open - update_icon() - else - return ..() - -/obj/structure/guncase/attack_hand(mob/user) - . = ..() - if(.) - return - if(contents.len && open) - ShowWindow(user) - else - open = !open - update_icon() - -/obj/structure/guncase/proc/ShowWindow(mob/user) - var/dat = {"
-

Stored Guns

- "} - if(LAZYLEN(contents)) - for(var/i in 1 to contents.len) - var/obj/item/I = contents[i] - dat += "[I.name]
" - dat += "
" - - var/datum/browser/popup = new(user, "gunlocker", "
[name]
", 350, 300) - popup.set_content(dat) - popup.open(FALSE) - -/obj/structure/guncase/Topic(href, href_list) - if(href_list["retrieve"]) - var/obj/item/O = locate(href_list["retrieve"]) in contents - if(!O || !istype(O)) - return - if(!usr.canUseTopic(src, BE_CLOSE) || !open) - return - if(ishuman(usr)) - if(!usr.put_in_hands(O)) - O.forceMove(get_turf(src)) - update_icon() - -/obj/structure/guncase/handle_atom_del(atom/A) - update_icon() - -/obj/structure/guncase/contents_explosion(severity, target) - for(var/atom/A in contents) - A.ex_act(severity++, target) - CHECK_TICK - -/obj/structure/guncase/shotgun - name = "shotgun locker" - desc = "" - case_type = "shotgun" - gun_category = /obj/item/gun/ballistic/shotgun diff --git a/code/game/objects/structures/headpike.dm b/code/game/objects/structures/headpike.dm deleted file mode 100644 index e794a3ad77..0000000000 --- a/code/game/objects/structures/headpike.dm +++ /dev/null @@ -1,48 +0,0 @@ -/obj/structure/headpike - name = "spooky head on a spear" - desc = "" - icon = 'icons/obj/structures.dmi' - icon_state = "headpike" - density = FALSE - anchored = TRUE - var/bonespear = FALSE - var/obj/item/twohanded/spear/spear - var/obj/item/bodypart/head/victim - -/obj/structure/headpike/bone //for bone spears - icon_state = "headpike-bone" - bonespear = TRUE - -/obj/structure/headpike/CheckParts(list/parts_list) - ..() - victim = locate(/obj/item/bodypart/head) in parts_list - name = "[victim.name] on a spear" - update_icon() - if(bonespear) - spear = locate(/obj/item/twohanded/spear/bonespear) in parts_list - else - spear = locate(/obj/item/twohanded/spear) in parts_list - -/obj/structure/headpike/Initialize() - . = ..() - pixel_x = rand(-8, 8) - -/obj/structure/headpike/update_icon() - ..() - var/obj/item/bodypart/head/H = locate() in contents - var/mutable_appearance/MA = new() - if(H) - MA.copy_overlays(H) - MA.pixel_y = 12 - add_overlay(H) - -/obj/structure/headpike/attack_hand(mob/user) - . = ..() - if(.) - return - to_chat(user, "I take down [src].") - victim.forceMove(drop_location()) - victim = null - spear.forceMove(drop_location()) - spear = null - qdel(src) diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm deleted file mode 100644 index 5c1e46cbbc..0000000000 --- a/code/game/objects/structures/janicart.dm +++ /dev/null @@ -1,166 +0,0 @@ -/obj/structure/janitorialcart - name = "janitorial cart" - desc = "" - icon = 'icons/obj/janitor.dmi' - icon_state = "cart" - anchored = FALSE - density = TRUE - //copypaste sorry - 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/reagent_containers/spray/cleaner/myspray = null - var/obj/item/lightreplacer/myreplacer = null - var/signs = 0 - var/const/max_signs = 4 - - -/obj/structure/janitorialcart/Initialize() - . = ..() - create_reagents(100, OPENCONTAINER) - -/obj/structure/janitorialcart/proc/wet_mop(obj/item/mop, mob/user) - if(reagents.total_volume < 1) - to_chat(user, "[src] is out of water!") - return 0 - else - var/obj/item/mop/M = mop - reagents.trans_to(mop, M.mopcap, transfered_by = user) - to_chat(user, "I wet [mop] in [src].") - playsound(loc, 'sound/blank.ogg', 25, TRUE) - return 1 - -/obj/structure/janitorialcart/proc/put_in_cart(obj/item/I, mob/user) - if(!user.transferItemToLoc(I, src)) - return - updateUsrDialog() - to_chat(user, "I put [I] into [src].") - return - - -/obj/structure/janitorialcart/attackby(obj/item/I, mob/user, params) - var/fail_msg = "There is already one of those in [src]!" - - if(istype(I, /obj/item/mop)) - var/obj/item/mop/m=I - if(m.reagents.total_volume < m.reagents.maximum_volume) - if (wet_mop(m, user)) - return - if(!mymop) - m.janicart_insert(user, src) - else - to_chat(user, fail_msg) - - else if(istype(I, /obj/item/storage/bag/trash)) - if(!mybag) - var/obj/item/storage/bag/trash/t=I - t.janicart_insert(user, src) - else - to_chat(user, fail_msg) - else if(istype(I, /obj/item/reagent_containers/spray/cleaner)) - if(!myspray) - put_in_cart(I, user) - myspray=I - update_icon() - else - to_chat(user, fail_msg) - else if(istype(I, /obj/item/lightreplacer)) - if(!myreplacer) - var/obj/item/lightreplacer/l=I - l.janicart_insert(user,src) - else - to_chat(user, fail_msg) - else if(istype(I, /obj/item/clothing/suit/caution)) - if(signs < max_signs) - put_in_cart(I, user) - signs++ - update_icon() - else - to_chat(user, "[src] can't hold any more signs!") - else if(mybag) - mybag.attackby(I, user) - else if(I.tool_behaviour == TOOL_CROWBAR) - user.visible_message("[user] begins to empty the contents of [src].", "I begin to empty the contents of [src]...") - if(I.use_tool(src, user, 30)) - to_chat(usr, "I empty the contents of [src]'s bucket onto the floor.") - reagents.reaction(src.loc) - src.reagents.clear_reagents() - else - return ..() - -/obj/structure/janitorialcart/attack_hand(mob/user) - . = ..() - if(.) - return - user.set_machine(src) - var/dat - if(mybag) - dat += "[mybag.name]
" - if(mymop) - dat += "[mymop.name]
" - if(myspray) - dat += "[myspray.name]
" - if(myreplacer) - dat += "[myreplacer.name]
" - if(signs) - dat += "[signs] sign\s
" - var/datum/browser/popup = new(user, "janicart", name, 240, 160) - popup.set_content(dat) - popup.open() - - -/obj/structure/janitorialcart/Topic(href, href_list) - if(!in_range(src, usr)) - return - if(!isliving(usr)) - return - var/mob/living/user = usr - if(href_list["garbage"]) - if(mybag) - user.put_in_hands(mybag) - to_chat(user, "I take [mybag] from [src].") - mybag = null - if(href_list["mop"]) - if(mymop) - user.put_in_hands(mymop) - to_chat(user, "I take [mymop] from [src].") - mymop = null - if(href_list["spray"]) - if(myspray) - user.put_in_hands(myspray) - to_chat(user, "I take [myspray] from [src].") - myspray = null - if(href_list["replacer"]) - if(myreplacer) - user.put_in_hands(myreplacer) - to_chat(user, "I take [myreplacer] from [src].") - myreplacer = null - if(href_list["sign"]) - if(signs) - var/obj/item/clothing/suit/caution/Sign = locate() in src - if(Sign) - user.put_in_hands(Sign) - to_chat(user, "I take \a [Sign] from [src].") - signs-- - else - WARNING("Signs ([signs]) didn't match contents") - signs = 0 - - update_icon() - updateUsrDialog() - - -/obj/structure/janitorialcart/update_icon() - cut_overlays() - if(mybag) - add_overlay("cart_garbage") - if(mymop) - add_overlay("cart_mop") - if(myspray) - add_overlay("cart_spray") - if(myreplacer) - add_overlay("cart_replacer") - if(signs) - add_overlay("cart_sign[signs]") - if(reagents.total_volume > 0) - add_overlay("cart_water") diff --git a/code/game/objects/structures/kitchen_spike.dm b/code/game/objects/structures/kitchen_spike.dm index cb53099c1e..5d806bfad3 100644 --- a/code/game/objects/structures/kitchen_spike.dm +++ b/code/game/objects/structures/kitchen_spike.dm @@ -1,41 +1,5 @@ //////Kitchen Spike #define VIABLE_MOB_CHECK(X) (isliving(X)) - -/obj/structure/kitchenspike_frame - name = "meatspike frame" - icon = 'icons/obj/kitchen.dmi' - icon_state = "spikeframe" - desc = "" - density = TRUE - anchored = FALSE - max_integrity = 200 - -/obj/structure/kitchenspike_frame/attackby(obj/item/I, mob/user, params) - add_fingerprint(user) - if(default_unfasten_wrench(user, I)) - return - else if(istype(I, /obj/item/stack/rods)) - var/obj/item/stack/rods/R = I - if(R.get_amount() >= 4) - R.use(4) - to_chat(user, "I add spikes to the frame.") - var/obj/F = new /obj/structure/kitchenspike(src.loc) - transfer_fingerprints_to(F) - qdel(src) - else if(I.tool_behaviour == TOOL_WELDER) - if(!I.tool_start_check(user, amount=0)) - return - to_chat(user, "I begin cutting \the [src] apart...") - if(I.use_tool(src, user, 50, volume=50)) - visible_message("[user] slices apart \the [src].", - "I cut \the [src] apart with \the [I].", - "I hear welding.") - new /obj/item/stack/sheet/metal(src.loc, 4) - qdel(src) - return - else - return ..() - /obj/structure/kitchenspike name = "meat spike" icon = 'icons/obj/kitchen.dmi' @@ -137,13 +101,4 @@ release_mob(L) return ..() -/obj/structure/kitchenspike/deconstruct(disassembled = TRUE) - if(disassembled) - var/obj/F = new /obj/structure/kitchenspike_frame(src.loc) - transfer_fingerprints_to(F) - else - new /obj/item/stack/sheet/metal(src.loc, 4) - new /obj/item/stack/rods(loc, 4) - qdel(src) - #undef VIABLE_MOB_CHECK diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm deleted file mode 100644 index 90aa6b766d..0000000000 --- a/code/game/objects/structures/lattice.dm +++ /dev/null @@ -1,61 +0,0 @@ -/obj/structure/lattice - name = "lattice" - desc = "" - icon = 'icons/obj/smooth_structures/lattice.dmi' - icon_state = "lattice" - density = FALSE - anchored = TRUE - armor = list("melee" = 50, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 50) - max_integrity = 50 - layer = LATTICE_LAYER //under pipes - plane = FLOOR_PLANE - var/number_of_rods = 1 - canSmoothWith = list(/obj/structure/lattice, - /turf/open/floor, - /turf/closed/wall, - /obj/structure/falsewall) - smooth = SMOOTH_MORE - // flags = CONDUCT_1 - -/obj/structure/lattice/examine(mob/user) - . = ..() - . += deconstruction_hints(user) - -/obj/structure/lattice/proc/deconstruction_hints(mob/user) - return "The rods look like they could be cut. There's space for more rods or a tile." - -/obj/structure/lattice/Initialize(mapload) - . = ..() - for(var/obj/structure/lattice/LAT in loc) - if(LAT != src) - QDEL_IN(LAT, 0) - -/obj/structure/lattice/attackby(obj/item/C, mob/user, params) - if(resistance_flags & INDESTRUCTIBLE) - return - if(C.tool_behaviour == TOOL_WIRECUTTER) - to_chat(user, "Slicing [name] joints ...") - deconstruct() - else - var/turf/T = get_turf(src) - return T.attackby(C, user) //hand this off to the turf instead (for building plating, catwalks, etc) - -/obj/structure/lattice/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) - new /obj/item/stack/rods(get_turf(src), number_of_rods) - qdel(src) - -/obj/structure/lattice/singularity_pull() - -/obj/structure/lattice/catwalk - name = "catwalk" - desc = "" - icon = 'icons/obj/smooth_structures/catwalk.dmi' - icon_state = "catwalk" - number_of_rods = 2 - smooth = SMOOTH_TRUE - canSmoothWith = null - obj_flags = CAN_BE_HIT - -/obj/structure/lattice/catwalk/deconstruction_hints(mob/user) - return "The supporting rods look like they could be cut." diff --git a/code/game/objects/structures/loom.dm b/code/game/objects/structures/loom.dm deleted file mode 100644 index bca4c799be..0000000000 --- a/code/game/objects/structures/loom.dm +++ /dev/null @@ -1,41 +0,0 @@ -#define FABRIC_PER_SHEET 4 - - -///This is a loom. It's usually made out of wood and used to weave fabric like durathread or cotton into their respective cloth types. -/obj/structure/loom - name = "loom" - desc = "" - icon = 'icons/obj/hydroponics/equipment.dmi' - icon_state = "loom" - density = TRUE - anchored = TRUE - -/obj/structure/loom/attackby(obj/item/I, mob/user) - if(weave(I, user)) - return - return ..() - -/obj/structure/loom/wrench_act(mob/living/user, obj/item/I) - ..() - default_unfasten_wrench(user, I, 5) - return TRUE - -///Handles the weaving. -/obj/structure/loom/proc/weave(obj/item/stack/sheet/cotton/W, mob/user) - if(!istype(W)) - return FALSE - if(!anchored) - user.show_message("The loom needs to be wrenched down.", MSG_VISUAL) - return FALSE - if(W.amount < FABRIC_PER_SHEET) - user.show_message("I need at least [FABRIC_PER_SHEET] units of fabric before using this.", MSG_VISUAL) - return FALSE - user.show_message("I start weaving \the [W.name] through the loom..", MSG_VISUAL) - if(W.use_tool(src, user, W.pull_effort)) - if(W.amount >= FABRIC_PER_SHEET) - new W.loom_result(drop_location()) - W.use(FABRIC_PER_SHEET) - user.show_message("I weave \the [W.name] into a workable fabric.", MSG_VISUAL) - return TRUE - -#undef FABRIC_PER_SHEET diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm index 15d7e1e478..4439daecc6 100644 --- a/code/game/objects/structures/mineral_doors.dm +++ b/code/game/objects/structures/mineral_doors.dm @@ -26,7 +26,6 @@ var/openSound = 'sound/blank.ogg' var/closeSound = 'sound/blank.ogg' - var/sheetType = /obj/item/stack/sheet/metal //what we're made of var/sheetAmount = 7 //how much we drop when deconstructed var/windowed = FALSE @@ -552,151 +551,6 @@ user.visible_message(span_notice("[user] pried [src] into pieces!"), span_notice("I pried apart [src]!")) deconstruct(TRUE) - -/////////////////////// END TOOL OVERRIDES /////////////////////// -/* - -/obj/structure/mineral_door/deconstruct(disassembled = TRUE) -// var/turf/T = get_turf(src) -// if(disassembled) -// new sheetType(T, sheetAmount) -// else -// new sheetType(T, max(sheetAmount - 2, 1)) -// qdel(src) -*/ - - -/obj/structure/mineral_door/iron - name = "iron door" - max_integrity = 300 - -/obj/structure/mineral_door/silver - name = "silver door" - icon_state = "silver" - sheetType = /obj/item/stack/sheet/mineral/silver - max_integrity = 300 - rad_insulation = RAD_HEAVY_INSULATION - -/obj/structure/mineral_door/gold - name = "gold door" - icon_state = "gold" - sheetType = /obj/item/stack/sheet/mineral/gold - rad_insulation = RAD_HEAVY_INSULATION - -/obj/structure/mineral_door/uranium - name = "uranium door" - icon_state = "uranium" - sheetType = /obj/item/stack/sheet/mineral/uranium - max_integrity = 300 - light_outer_range = 2 - -/obj/structure/mineral_door/uranium/ComponentInitialize() - return - -/obj/structure/mineral_door/sandstone - name = "sandstone door" - icon_state = "sandstone" - sheetType = /obj/item/stack/sheet/mineral/sandstone - max_integrity = 100 - -/obj/structure/mineral_door/transparent - opacity = FALSE - rad_insulation = RAD_VERY_LIGHT_INSULATION - -/obj/structure/mineral_door/transparent/Close() - ..() - set_opacity(FALSE) - -/obj/structure/mineral_door/transparent/plasma - name = "plasma door" - icon_state = "plasma" - sheetType = /obj/item/stack/sheet/mineral/plasma - -/obj/structure/mineral_door/transparent/plasma/ComponentInitialize() - return - -/obj/structure/mineral_door/transparent/plasma/welder_act(mob/living/user, obj/item/I) - return - -/obj/structure/mineral_door/transparent/plasma/attackby(obj/item/W, mob/user, params) - if(W.get_temperature()) - var/turf/T = get_turf(src) - message_admins("Plasma mineral door ignited by [ADMIN_LOOKUPFLW(user)] in [ADMIN_VERBOSEJMP(T)]") - log_game("Plasma mineral door ignited by [key_name(user)] in [AREACOORD(T)]") - TemperatureAct() - else - return ..() - -/obj/structure/mineral_door/transparent/plasma/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if(exposed_temperature > 300) - TemperatureAct() - -/obj/structure/mineral_door/transparent/plasma/proc/TemperatureAct() - atmos_spawn_air("plasma=500;TEMP=1000") - deconstruct(FALSE) - -/obj/structure/mineral_door/transparent/diamond - name = "diamond door" - icon_state = "diamond" - sheetType = /obj/item/stack/sheet/mineral/diamond - max_integrity = 1000 - rad_insulation = RAD_EXTREME_INSULATION - - - - -/obj/structure/mineral_door/paperframe - name = "paper frame door" - icon_state = "paperframe" - openSound = 'sound/foley/doors/creak.ogg' - closeSound = 'sound/foley/doors/shut.ogg' - sheetType = /obj/item/stack/sheet/paperframes - sheetAmount = 3 - resistance_flags = FLAMMABLE - max_integrity = 20 - -/obj/structure/mineral_door/paperframe/Initialize() - . = ..() - queue_smooth_neighbors(src) - -/obj/structure/mineral_door/paperframe/examine(mob/user) - . = ..() - if(obj_integrity < max_integrity) - . += span_info("It looks a bit damaged, you may be able to fix it with some paper.") - -/obj/structure/mineral_door/paperframe/pickaxe_door(mob/living/user, obj/item/I) - return - -/obj/structure/mineral_door/paperframe/welder_act(mob/living/user, obj/item/I) - return - -/obj/structure/mineral_door/paperframe/crowbar_act(mob/living/user, obj/item/I) - return crowbar_door(user, I) - -/obj/structure/mineral_door/paperframe/attackby(obj/item/I, mob/living/user) - if(I.get_temperature()) //BURN IT ALL DOWN JIM - fire_act(I.get_temperature()) - return - - if((user.used_intent.type != INTENT_HARM) && istype(I, /obj/item/paper) && (obj_integrity < max_integrity)) - user.visible_message(span_notice("[user] starts to patch the holes in [src]."), span_notice("I start patching some of the holes in [src]!")) - if(do_after(user, 20, TRUE, src)) - obj_integrity = min(obj_integrity+4,max_integrity) - qdel(I) - user.visible_message(span_notice("[user] patches some of the holes in [src]."), span_notice("I patch some of the holes in [src]!")) - return TRUE - - return ..() - -/obj/structure/mineral_door/paperframe/ComponentInitialize() - return - -/obj/structure/mineral_door/paperframe/Destroy() - queue_smooth_neighbors(src) - return ..() - - - //ROGUEDOOR /obj/structure/mineral_door/wood @@ -705,7 +559,6 @@ icon_state = "woodhandle" openSound = list('sound/foley/doors/creak.ogg') closeSound = 'sound/foley/doors/shut.ogg' - sheetType = null resistance_flags = FLAMMABLE max_integrity = 1000 damage_deflection = 12 @@ -766,7 +619,6 @@ icon_state = "woodhandle" openSound = 'sound/foley/doors/creak.ogg' closeSound = 'sound/foley/doors/shut.ogg' - sheetType = null resistance_flags = FLAMMABLE max_integrity = 1000 damage_deflection = 12 @@ -923,7 +775,6 @@ opacity = FALSE windowed = TRUE keylock = TRUE - sheetType = null locksound = 'sound/foley/doors/lock.ogg' unlocksound = 'sound/foley/doors/unlock.ogg' rattlesound = 'sound/foley/doors/lockrattlemetal.ogg' diff --git a/code/game/objects/structures/mop_bucket.dm b/code/game/objects/structures/mop_bucket.dm deleted file mode 100644 index 8f8bbd61e9..0000000000 --- a/code/game/objects/structures/mop_bucket.dm +++ /dev/null @@ -1,30 +0,0 @@ -/obj/structure/mopbucket - name = "mop bucket" - desc = "" - icon = 'icons/obj/janitor.dmi' - icon_state = "mopbucket" - density = TRUE - var/amount_per_transfer_from_this = 5 //shit I dunno, adding this so syringes stop runtime erroring. --NeoFite - - -/obj/structure/mopbucket/Initialize() - . = ..() - create_reagents(100, OPENCONTAINER) - -/obj/structure/mopbucket/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/mop)) - if(reagents.total_volume < 1) - to_chat(user, "[src] is out of water!") - else - reagents.trans_to(I, 5, transfered_by = user) - to_chat(user, "I wet [I] in [src].") - playsound(loc, 'sound/blank.ogg', 25, TRUE) - update_icon() - else - . = ..() - update_icon() - -/obj/structure/mopbucket/update_icon() - cut_overlays() - if(reagents.total_volume > 0) - add_overlay("mopbucket_water") diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm deleted file mode 100644 index 839e363105..0000000000 --- a/code/game/objects/structures/morgue.dm +++ /dev/null @@ -1,385 +0,0 @@ -/* Morgue stuff - * Contains: - * Morgue - * Morgue tray - * Crematorium - * Creamatorium - * Crematorium tray - * Crematorium button - */ - -/* - * Bodycontainer - * Parent class for morgue and crematorium - * For overriding only - */ -GLOBAL_LIST_EMPTY(bodycontainers) //Let them act as spawnpoints for revenants and other ghosties. - -/obj/structure/bodycontainer - icon = 'icons/obj/stationobjs.dmi' - icon_state = "morgue1" - density = TRUE - anchored = TRUE - max_integrity = 400 - - var/obj/structure/tray/connected = null - var/locked = FALSE - dir = SOUTH - var/message_cooldown - var/breakout_time = 600 - -/obj/structure/bodycontainer/Initialize() - . = ..() - GLOB.bodycontainers += src - recursive_organ_check(src) - -/obj/structure/bodycontainer/Destroy() - GLOB.bodycontainers -= src - open() - if(connected) - qdel(connected) - connected = null - return ..() - -/obj/structure/bodycontainer/on_log(login) - ..() - update_icon() - -/obj/structure/bodycontainer/update_icon() - return - -/obj/structure/bodycontainer/relaymove(mob/user) - if(user.stat || !isturf(loc)) - return - if(locked) - if(message_cooldown <= world.time) - message_cooldown = world.time + 50 - to_chat(user, "[src]'s door won't budge!") - return - open() - -/obj/structure/bodycontainer/attack_paw(mob/user) - return attack_hand(user) - -/obj/structure/bodycontainer/attack_hand(mob/user) - . = ..() - if(.) - return - if(locked) - to_chat(user, "It's locked.") - return - if(!connected) - to_chat(user, "That doesn't appear to have a tray.") - return - if(connected.loc == src) - open() - else - close() - add_fingerprint(user) - - -/obj/structure/bodycontainer/attackby(obj/P, mob/user, params) - add_fingerprint(user) - if(istype(P, /obj/item/pen)) - if(!user.is_literate()) - to_chat(user, "I scribble illegibly on the side of [src]!") - return - var/t = stripped_input(user, "What would you like the label to be?", text("[]", name), null) - if (user.get_active_held_item() != P) - return - if(!user.canUseTopic(src, BE_CLOSE)) - return - if (t) - name = text("[]- '[]'", initial(name), t) - else - name = initial(name) - else - return ..() - -/obj/structure/bodycontainer/deconstruct(disassembled = TRUE) - new /obj/item/stack/sheet/metal (loc, 5) - recursive_organ_check(src) - qdel(src) - -/obj/structure/bodycontainer/container_resist(mob/living/user) - if(!locked) - open() - return - user.changeNext_move(CLICK_CD_BREAKOUT) - user.last_special = world.time + CLICK_CD_BREAKOUT - user.visible_message(null, \ - "I lean on the back of [src] and start pushing the tray open... (this will take about [DisplayTimeText(breakout_time)].)", \ - "I hear a metallic creaking from [src].") - if(do_after(user,(breakout_time), target = src)) - if(!user || user.stat != CONSCIOUS || user.loc != src ) - return - user.visible_message("[user] successfully broke out of [src]!", \ - "I successfully break out of [src]!") - open() - -/obj/structure/bodycontainer/proc/open() - recursive_organ_check(src) - playsound(src.loc, 'sound/blank.ogg', 50, TRUE) - playsound(src, 'sound/blank.ogg', 5, TRUE) - var/turf/T = get_step(src, dir) - connected.setDir(dir) - for(var/atom/movable/AM in src) - AM.forceMove(T) - update_icon() - -/obj/structure/bodycontainer/proc/close() - playsound(src, 'sound/blank.ogg', 5, TRUE) - playsound(src, 'sound/blank.ogg', 50, TRUE) - for(var/atom/movable/AM in connected.loc) - if(!AM.anchored || AM == connected) - if(ismob(AM) && !isliving(AM)) - continue - AM.forceMove(src) - recursive_organ_check(src) - update_icon() - -/obj/structure/bodycontainer/get_remote_view_fullscreens(mob/user) - if(user.stat == DEAD || !(user.sight & (SEEOBJS|SEEMOBS))) - user.overlay_fullscreen("remote_view", /atom/movable/screen/fullscreen/impaired, 2) -/* - * Morgue - */ -/obj/structure/bodycontainer/morgue - name = "morgue" - desc = "" - icon_state = "morgue1" - dir = EAST - var/beeper = TRUE - var/beep_cooldown = 50 - var/next_beep = 0 - -/obj/structure/bodycontainer/morgue/Initialize() - . = ..() - connected = new/obj/structure/tray/m_tray(src) - connected.connected = src - -/obj/structure/bodycontainer/morgue/examine(mob/user) - . = ..() - . += "The speaker is [beeper ? "enabled" : "disabled"]. Alt-click to toggle it." - -/obj/structure/bodycontainer/morgue/AltClick(mob/user) - ..() - if(!user.canUseTopic(src, TRUE)) - return - beeper = !beeper - to_chat(user, "I turn the speaker function [beeper ? "on" : "off"].") - -/obj/structure/bodycontainer/morgue/update_icon() - if (!connected || connected.loc != src) // Open or tray is gone. - icon_state = "morgue0" - else - if(contents.len == 1) // Empty - icon_state = "morgue1" - else - icon_state = "morgue2" // Dead, brainded mob. - var/list/compiled = recursive_mob_check(src, 0, 0) // Search for mobs in all contents. - if(!length(compiled)) // No mobs? - icon_state = "morgue3" - return - - for(var/mob/living/M in compiled) - var/mob/living/mob_occupant = get_mob_or_brainmob(M) - if(mob_occupant.client && !mob_occupant.suiciding && !(HAS_TRAIT(mob_occupant, TRAIT_BADDNA)) && !mob_occupant.hellbound) - icon_state = "morgue4" // Cloneable - if(mob_occupant.stat == DEAD && beeper) - if(world.time > next_beep) - playsound(src, 'sound/blank.ogg', 50, FALSE) //Clone them you blind fucks - next_beep = world.time + beep_cooldown - break - - -/obj/item/paper/guides/jobs/medical/morgue - name = "morgue memo" - info = "Since this station's medbay never seems to fail to be staffed by the mindless monkeys meant for genetics experiments, I'm leaving a reminder here for anyone handling the pile of cadavers the quacks are sure to leave.

Red lights mean there's a plain ol' dead body inside.

Yellow lights mean there's non-body objects inside.
Probably stuff pried off a corpse someone grabbed, or if you're lucky it's stashed booze.

Green lights mean the morgue system detects the body may be able to be cloned.

I don't know how that works, but keep it away from the kitchen and go yell at the geneticists.

- CentCom medical inspector" - -/* - * Crematorium - */ -GLOBAL_LIST_EMPTY(crematoriums) -/obj/structure/bodycontainer/crematorium - name = "crematorium" - desc = "" - icon_state = "crema1" - dir = SOUTH - var/id = 1 - -/obj/structure/bodycontainer/crematorium/Destroy() - GLOB.crematoriums.Remove(src) - return ..() - -/obj/structure/bodycontainer/crematorium/New() - GLOB.crematoriums.Add(src) - ..() - -/obj/structure/bodycontainer/crematorium/Initialize() - . = ..() - connected = new /obj/structure/tray/c_tray(src) - connected.connected = src - -/obj/structure/bodycontainer/crematorium/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock, idnum, override=FALSE) - id = "[idnum][id]" - -/obj/structure/bodycontainer/crematorium/update_icon() - if(!connected || connected.loc != src) - icon_state = "crema0" - else - - if(src.contents.len > 1) - src.icon_state = "crema2" - else - src.icon_state = "crema1" - - if(locked) - src.icon_state = "crema_active" - - return - -/obj/structure/bodycontainer/crematorium/proc/cremate(mob/user) - if(locked) - return //don't let you cremate something twice or w/e - // Make sure we don't delete the actual morgue and its tray - var/list/conts = GetAllContents() - src - connected - - if(!conts.len) - audible_message("I hear a hollow crackle.") - return - - else - audible_message("I hear a roar as the crematorium activates.") - - locked = TRUE - update_icon() - - for(var/mob/living/M in conts) - if (M.stat != DEAD) - M.emote("scream") - if(user) - log_combat(user, M, "cremated") - else - M.log_message("was cremated", LOG_ATTACK) - - M.death(1) - if(M) //some animals get automatically deleted on death. - M.ghostize() - qdel(M) - - for(var/obj/O in conts) //conts defined above, ignores crematorium and tray - qdel(O) - - if(!locate(/obj/item/ash) in get_step(src, dir))//prevent pile-up - new/obj/item/ash(src) - - sleep(30) - - if(!QDELETED(src)) - locked = FALSE - update_icon() - playsound(src.loc, 'sound/blank.ogg', 50, TRUE) //you horrible people - -/obj/structure/bodycontainer/crematorium/creamatorium - name = "creamatorium" - desc = "" - -/obj/structure/bodycontainer/crematorium/creamatorium/cremate(mob/user) - var/list/icecreams = new() - for(var/i_scream in GetAllContents(/mob/living)) - var/obj/item/reagent_containers/food/snacks/icecream/IC = new() - IC.set_cone_type("waffle") - IC.add_mob_flavor(i_scream) - icecreams += IC - . = ..() - for(var/obj/IC in icecreams) - IC.forceMove(src) - -/* - * Generic Tray - * Parent class for morguetray and crematoriumtray - * For overriding only - */ -/obj/structure/tray - icon = 'icons/obj/stationobjs.dmi' - density = TRUE - var/obj/structure/bodycontainer/connected = null - anchored = TRUE - pass_flags = LETPASSTHROW - max_integrity = 350 - -/obj/structure/tray/Destroy() - if(connected) - connected.connected = null - connected.update_icon() - connected = null - return ..() - -/obj/structure/tray/deconstruct(disassembled = TRUE) - new /obj/item/stack/sheet/metal (loc, 2) - qdel(src) - -/obj/structure/tray/attack_paw(mob/user) - return attack_hand(user) - -/obj/structure/tray/attack_hand(mob/user) - . = ..() - if(.) - return - if (src.connected) - connected.close() - add_fingerprint(user) - else - to_chat(user, "That's not connected to anything!") - -/obj/structure/tray/MouseDrop_T(atom/movable/O as mob|obj, mob/user) - if(!ismovableatom(O) || O.anchored || !Adjacent(user) || !user.Adjacent(O) || O.loc == user) - return - if(!ismob(O)) - if(!istype(O, /obj/structure/closet/body_bag)) - return - else - var/mob/M = O - if(M.buckled) - return - if(!ismob(user) || user.incapacitated()) - return - if(isliving(user)) - var/mob/living/L = user - if(!(L.mobility_flags & MOBILITY_STAND)) - return - O.forceMove(src.loc) - if (user != O) - visible_message("[user] stuffs [O] into [src].") - return - -/* - * Crematorium tray - */ -/obj/structure/tray/c_tray - name = "crematorium tray" - desc = "" - icon_state = "cremat" - -/* - * Morgue tray - */ -/obj/structure/tray/m_tray - name = "morgue tray" - desc = "" - icon_state = "morguet" - -/obj/structure/tray/m_tray/CanPass(atom/movable/mover, turf/target) - if(istype(mover) && (mover.pass_flags & PASSTABLE)) - return 1 - if(locate(/obj/structure/table) in get_turf(mover)) - return 1 - else - return 0 - -/obj/structure/tray/m_tray/CanAStarPass(ID, dir, caller) - . = !density - if(ismovableatom(caller)) - var/atom/movable/mover = caller - . = . || (mover.pass_flags & PASSTABLE) diff --git a/code/game/objects/structures/musician.dm b/code/game/objects/structures/musician.dm deleted file mode 100644 index ead9dc932d..0000000000 --- a/code/game/objects/structures/musician.dm +++ /dev/null @@ -1,386 +0,0 @@ - -#define MUSICIAN_HEARCHECK_MINDELAY 4 -#define MUSIC_MAXLINES 300 -#define MUSIC_MAXLINECHARS 50 - -/datum/song - var/name = "Untitled" - var/list/lines = new() - var/tempo = 5 // delay between notes - - var/playing = 0 // if we're playing - var/help = 0 // if help is open - var/edit = 1 // if we're in editing mode - var/repeat = 0 // number of times remaining to repeat - var/max_repeats = 10 // maximum times we can repeat - - var/instrumentDir = "piano" // the folder with the sounds - var/instrumentExt = "ogg" // the file extension - var/obj/instrumentObj = null // the associated obj playing the sound - var/last_hearcheck = 0 - var/list/hearing_mobs - -/datum/song/New(dir, obj, ext = "ogg") - tempo = sanitize_tempo(tempo) - instrumentDir = dir - instrumentObj = obj - instrumentExt = ext - -/datum/song/Destroy() - instrumentObj = null - return ..() - -// note is a number from 1-7 for A-G -// acc is either "b", "n", or "#" -// oct is 1-8 (or 9 for C) -/datum/song/proc/playnote(mob/user, note, acc as text, oct) - // handle accidental -> B<>C of E<>F - if(acc == "b" && (note == 3 || note == 6)) // C or F - if(note == 3) - oct-- - note-- - acc = "n" - else if(acc == "#" && (note == 2 || note == 5)) // B or E - if(note == 2) - oct++ - note++ - acc = "n" - else if(acc == "#" && (note == 7)) //G# - note = 1 - acc = "b" - else if(acc == "#") // mass convert all sharps to flats, octave jump already handled - acc = "b" - note++ - - // check octave, C is allowed to go to 9 - if(oct < 1 || (note == 3 ? oct > 9 : oct > 8)) - return - - // now generate name - var/soundfile = "sound/instruments/[instrumentDir]/[ascii2text(note+64)][acc][oct].[instrumentExt]" - soundfile = file(soundfile) - // make sure the note exists - if(!fexists(soundfile)) - return - // and play - var/turf/source = get_turf(instrumentObj) - if((world.time - MUSICIAN_HEARCHECK_MINDELAY) > last_hearcheck) - LAZYCLEARLIST(hearing_mobs) - for(var/mob/M in get_hearers_in_view(15, source)) - LAZYADD(hearing_mobs, M) - last_hearcheck = world.time - - var/sound/music_played = sound(soundfile) - for(var/i in hearing_mobs) - var/mob/M = i - if(HAS_TRAIT(user, TRAIT_MUSICIAN) && isliving(M)) - var/mob/living/L = M - L.apply_status_effect(STATUS_EFFECT_GOOD_MUSIC) - if(!M.client || !(M.client.prefs.toggles & SOUND_INSTRUMENTS)) - continue - M.playsound_local(source, null, 100, falloff = 5, S = music_played) - -/datum/song/proc/updateDialog(mob/user) - instrumentObj.updateDialog() // assumes it's an object in world, override if otherwise - -/datum/song/proc/shouldStopPlaying(mob/user) - if(instrumentObj) - if(!user.canUseTopic(instrumentObj, BE_CLOSE, FALSE, NO_TK)) - return TRUE - return !instrumentObj.anchored // add special cases to stop in subclasses - else - return TRUE - -/datum/song/proc/playsong(mob/user) - while(repeat >= 0) - var/cur_oct[7] - var/cur_acc[7] - for(var/i = 1 to 7) - cur_oct[i] = 3 - cur_acc[i] = "n" - - for(var/line in lines) - for(var/beat in splittext(lowertext(line), ",")) - var/list/notes = splittext(beat, "/") - for(var/note in splittext(notes[1], "-")) - if(!playing || shouldStopPlaying(user))//If the instrument is playing, or special case - playing = FALSE - hearing_mobs = null - return - if(!length(note)) - continue - var/cur_note = text2ascii(note) - 96 - if(cur_note < 1 || cur_note > 7) - continue - for(var/i=2 to length(note)) - var/ni = copytext(note,i,i+1) - if(!text2num(ni)) - if(ni == "#" || ni == "b" || ni == "n") - cur_acc[cur_note] = ni - else if(ni == "s") - cur_acc[cur_note] = "#" // so shift is never required - else - cur_oct[cur_note] = text2num(ni) - if(user.dizziness > 0 && prob(user.dizziness / 2)) - cur_note = CLAMP(cur_note + rand(round(-user.dizziness / 10), round(user.dizziness / 10)), 1, 7) - if(user.dizziness > 0 && prob(user.dizziness / 5)) - if(prob(30)) - cur_acc[cur_note] = "#" - else if(prob(42)) - cur_acc[cur_note] = "b" - else if(prob(75)) - cur_acc[cur_note] = "n" - playnote(user, cur_note, cur_acc[cur_note], cur_oct[cur_note]) - if(notes.len >= 2 && text2num(notes[2])) - sleep(sanitize_tempo(tempo / text2num(notes[2]))) - else - sleep(tempo) - repeat-- - hearing_mobs = null - playing = FALSE - repeat = 0 - updateDialog(user) - -/datum/song/proc/interact(mob/user) - var/dat = "" - - if(lines.len > 0) - dat += "

Playback

" - if(!playing) - dat += "Play Stop

" - dat += "Repeat Song: " - dat += repeat > 0 ? "--" : "--" - dat += " [repeat] times " - dat += repeat < max_repeats ? "++" : "++" - dat += "
" - else - dat += "Play Stop
" - dat += "Repeats left: [repeat]
" - if(!edit) - dat += "
Show Editor
" - else - dat += "

Editing

" - dat += "Hide Editor" - dat += " Start a New Song" - dat += " Import a Song

" - var/bpm = round(600 / tempo) - dat += "Tempo: - [bpm] BPM +

" - var/linecount = 0 - for(var/line in lines) - linecount += 1 - dat += "Line [linecount]: Edit X [line]
" - dat += "Add Line

" - if(help) - dat += "Hide Help
" - dat += {" - Lines are a series of chords, separated by commas (,), each with notes separated by hyphens (-).
- Every note in a chord will play together, with chord timed by the tempo.
-
- Notes are played by the names of the note, and optionally, the accidental, and/or the octave number.
- By default, every note is natural and in octave 3. Defining otherwise is remembered for each note.
- Example: C,D,E,F,G,A,B will play a C major scale.
- After a note has an accidental placed, it will be remembered: C,C4,C,C3 is C3,C4,C4,C3
- Chords can be played simply by seperating each note with a hyphon: A-C#,Cn-E,E-G#,Gn-B
- A pause may be denoted by an empty chord: C,E,,C,G
- To make a chord be a different time, end it with /x, where the chord length will be length
- defined by tempo / x: C,G/2,E/4
- Combined, an example is: E-E4/4,F#/2,G#/8,B/8,E3-E4/4 -
- Lines may be up to [MUSIC_MAXLINECHARS] characters.
- A song may only contain up to [MUSIC_MAXLINES] lines.
- "} - else - dat += "Show Help
" - - var/datum/browser/popup = new(user, "instrument", instrumentObj.name, 700, 500) - popup.set_content(dat) - popup.set_title_image(user.browse_rsc_icon(instrumentObj.icon, instrumentObj.icon_state)) - popup.open() - -/datum/song/proc/ParseSong(text) - set waitfor = FALSE - //split into lines - lines = splittext(text, "\n") - if(lines.len) - if(copytext(lines[1],1,6) == "BPM: ") - tempo = sanitize_tempo(600 / text2num(copytext(lines[1],6))) - lines.Cut(1,2) - else - tempo = sanitize_tempo(5) // default 120 BPM - if(lines.len > MUSIC_MAXLINES) - to_chat(usr, "Too many lines!") - lines.Cut(MUSIC_MAXLINES + 1) - var/linenum = 1 - for(var/l in lines) - if(length(l) > MUSIC_MAXLINECHARS) - to_chat(usr, "Line [linenum] too long!") - lines.Remove(l) - else - linenum++ - updateDialog(usr) // make sure updates when complete - -/datum/song/Topic(href, href_list) - if(!usr.canUseTopic(instrumentObj, BE_CLOSE, FALSE, NO_TK)) - usr << browse(null, "window=instrument") - usr.unset_machine() - return - - instrumentObj.add_fingerprint(usr) - - if(href_list["newsong"]) - lines = new() - tempo = sanitize_tempo(5) // default 120 BPM - name = "" - - else if(href_list["import"]) - var/t = "" - do - t = html_encode(input(usr, "Please paste the entire song, formatted:", text("[]", name), t) as message) - if(!usr.canUseTopic(instrumentObj, BE_CLOSE, FALSE, NO_TK)) - return - - if(length(t) >= MUSIC_MAXLINES * MUSIC_MAXLINECHARS) - var/cont = input(usr, "Your message is too long! Would you like to continue editing it?", "", "yes") in list("yes", "no") - if(!usr.canUseTopic(instrumentObj, BE_CLOSE, FALSE, NO_TK)) - return - if(cont == "no") - break - while(length(t) > MUSIC_MAXLINES * MUSIC_MAXLINECHARS) - ParseSong(t) - - else if(href_list["help"]) - help = text2num(href_list["help"]) - 1 - - else if(href_list["edit"]) - edit = text2num(href_list["edit"]) - 1 - - if(href_list["repeat"]) //Changing this from a toggle to a number of repeats to avoid infinite loops. - if(playing) - return //So that people cant keep adding to repeat. If the do it intentionally, it could result in the server crashing. - repeat += round(text2num(href_list["repeat"])) - if(repeat < 0) - repeat = 0 - if(repeat > max_repeats) - repeat = max_repeats - - else if(href_list["tempo"]) - tempo = sanitize_tempo(tempo + text2num(href_list["tempo"])) - - else if(href_list["play"]) - playing = TRUE - INVOKE_ASYNC(src, PROC_REF(playsong), usr) - - else if(href_list["newline"]) - var/newline = html_encode(input("Enter your line: ", instrumentObj.name) as text|null) - if(!newline || !usr.canUseTopic(instrumentObj, BE_CLOSE, FALSE, NO_TK)) - return - if(lines.len > MUSIC_MAXLINES) - return - if(length(newline) > MUSIC_MAXLINECHARS) - newline = copytext(newline, 1, MUSIC_MAXLINECHARS) - lines.Add(newline) - - else if(href_list["deleteline"]) - var/num = round(text2num(href_list["deleteline"])) - if(num > lines.len || num < 1) - return - lines.Cut(num, num+1) - - else if(href_list["modifyline"]) - var/num = round(text2num(href_list["modifyline"]),1) - var/content = html_encode(input("Enter your line: ", instrumentObj.name, lines[num]) as text|null) - if(!content || !usr.canUseTopic(instrumentObj, BE_CLOSE, FALSE, NO_TK)) - return - if(length(content) > MUSIC_MAXLINECHARS) - content = copytext(content, 1, MUSIC_MAXLINECHARS) - if(num > lines.len || num < 1) - return - lines[num] = content - - else if(href_list["stop"]) - playing = FALSE - hearing_mobs = null - - updateDialog(usr) - return - -/datum/song/proc/sanitize_tempo(new_tempo) - new_tempo = abs(new_tempo) - return max(round(new_tempo, world.tick_lag), world.tick_lag) - -// subclass for handheld instruments, like violin -/datum/song/handheld - -/datum/song/handheld/updateDialog(mob/user) - instrumentObj.interact(user) - -/datum/song/handheld/shouldStopPlaying() - if(instrumentObj) - return !isliving(instrumentObj.loc) - else - return TRUE - - -////////////////////////////////////////////////////////////////////////// - - -/obj/structure/piano - name = "space minimoog" - icon = 'icons/obj/musician.dmi' - icon_state = "minimoog" - anchored = TRUE - density = TRUE - var/datum/song/song - -/obj/structure/piano/unanchored - anchored = FALSE - -/obj/structure/piano/Initialize() - . = ..() - song = new("piano", src) - - if(prob(50) && icon_state == initial(icon_state)) - name = "space minimoog" - desc = "" - icon_state = "minimoog" - else - name = "space piano" - desc = "" - icon_state = "piano" - -/obj/structure/piano/Destroy() - qdel(song) - song = null - return ..() - -/obj/structure/piano/Initialize(mapload) - . = ..() - if(mapload) - song.tempo = song.sanitize_tempo(song.tempo) // tick_lag isn't set when the map is loaded - -/obj/structure/piano/attack_hand(mob/user) - . = ..() - if(.) - return - interact(user) - -/obj/structure/piano/attack_paw(mob/user) - return attack_hand(user) - -/obj/structure/piano/interact(mob/user) - ui_interact(user) - -/obj/structure/piano/ui_interact(mob/user) - if(!user || !anchored) - return - - if(!user.IsAdvancedToolUser()) - to_chat(user, "I don't have the dexterity to do this!") - return 1 - user.set_machine(src) - song.interact(user) - -/obj/structure/piano/wrench_act(mob/living/user, obj/item/I) - ..() - default_unfasten_wrench(user, I, 40) - return TRUE diff --git a/code/game/objects/structures/noticeboard.dm b/code/game/objects/structures/noticeboard.dm index 77e15b8f41..22a2e4cb89 100644 --- a/code/game/objects/structures/noticeboard.dm +++ b/code/game/objects/structures/noticeboard.dm @@ -72,7 +72,7 @@ return var/obj/item/P = locate(href_list["write"]) in contents if(istype(P) && P.loc == src) - var/obj/item/I = usr.is_holding_item_of_type(/obj/item/pen) + var/obj/item/I = usr.is_holding_item_of_type(/obj/item/natural/feather) if(I) add_fingerprint(usr) P.attackby(I, usr) @@ -83,50 +83,3 @@ var/obj/item/I = locate(href_list["read"]) in contents if(istype(I) && I.loc == src) usr.examinate(I) - -/obj/structure/noticeboard/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) - new /obj/item/stack/sheet/metal (loc, 1) - qdel(src) - -// Notice boards for the heads of staff (plus the qm) - -/obj/structure/noticeboard/captain - name = "Captain's Notice Board" - desc = "" - req_access = list(ACCESS_CAPTAIN) - -/obj/structure/noticeboard/hop - name = "Head of Personnel's Notice Board" - desc = "" - req_access = list(ACCESS_HOP) - -/obj/structure/noticeboard/ce - name = "Chief Engineer's Notice Board" - desc = "" - req_access = list(ACCESS_CE) - -/obj/structure/noticeboard/hos - name = "Head of Security's Notice Board" - desc = "" - req_access = list(ACCESS_HOS) - -/obj/structure/noticeboard/cmo - name = "Chief Medical Officer's Notice Board" - desc = "" - req_access = list(ACCESS_CMO) - -/obj/structure/noticeboard/rd - name = "Research Director's Notice Board" - desc = "" - req_access = list(ACCESS_RD) - -/obj/structure/noticeboard/qm - name = "Quartermaster's Notice Board" - desc = "" - req_access = list(ACCESS_QM) - -/obj/structure/noticeboard/staff - name = "Staff Notice Board" - desc = "" - req_access = list(ACCESS_HEADS) diff --git a/code/game/objects/structures/plastic_flaps.dm b/code/game/objects/structures/plastic_flaps.dm index dec188ea4c..eff59096ec 100644 --- a/code/game/objects/structures/plastic_flaps.dm +++ b/code/game/objects/structures/plastic_flaps.dm @@ -38,19 +38,6 @@ else return TRUE -/obj/structure/plasticflaps/wirecutter_act(mob/living/user, obj/item/W) - . = ..() - if(!anchored) - user.visible_message("[user] cuts apart [src].", "I start to cut apart [src].", "I hear cutting.") - if(W.use_tool(src, user, 50, volume=100)) - if(anchored) - return TRUE - to_chat(user, "I cut apart [src].") - var/obj/item/stack/sheet/plastic/five/P = new(loc) - P.add_fingerprint(user) - qdel(src) - return TRUE - /obj/structure/plasticflaps/proc/check_anchored_state(check_anchored) if(anchored != check_anchored) return FALSE @@ -74,22 +61,12 @@ if(istype(A, /obj/structure/bed) && (B.has_buckled_mobs() || B.density))//if it's a bed/chair and is dense or someone is buckled, it will not pass return FALSE - if(istype(A, /obj/structure/closet/cardboard)) - var/obj/structure/closet/cardboard/C = A - if(C.move_delay) - return FALSE - else if(isliving(A)) // You Shall Not Pass! var/mob/living/M = A if((M.mobility_flags & MOBILITY_STAND) && !M.ventcrawler && M.mob_size != MOB_SIZE_TINY) //If your not laying down, or a ventcrawler or a small creature, no pass. return FALSE return ..() -/obj/structure/plasticflaps/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) - new /obj/item/stack/sheet/plastic/five(loc) - qdel(src) - /obj/structure/plasticflaps/Initialize() . = ..() air_update_turf(TRUE) diff --git a/code/game/objects/structures/showcase.dm b/code/game/objects/structures/showcase.dm deleted file mode 100644 index 8bc459f5ae..0000000000 --- a/code/game/objects/structures/showcase.dm +++ /dev/null @@ -1,142 +0,0 @@ -#define SHOWCASE_CONSTRUCTED 1 -#define SHOWCASE_SCREWDRIVERED 2 - -/*Completely generic structures for use by mappers to create fake objects, i.e. display rooms*/ -/obj/structure/showcase - name = "showcase" - icon = 'icons/obj/stationobjs.dmi' - icon_state = "showcase_1" - desc = "" - density = TRUE - anchored = TRUE - var/deconstruction_state = SHOWCASE_CONSTRUCTED - -/obj/structure/showcase/fakeid - name = "\improper CentCom identification console" - desc = "" - icon = 'icons/obj/computer.dmi' - icon_state = "computer" - -/obj/structure/showcase/fakeid/Initialize() - . = ..() - add_overlay("id") - add_overlay("id_key") - -/obj/structure/showcase/fakesec - name = "\improper CentCom security records" - desc = "" - icon = 'icons/obj/computer.dmi' - icon_state = "computer" - -/obj/structure/showcase/fakesec/Initialize() - . = ..() - add_overlay("security") - add_overlay("security_key") - -/obj/structure/showcase/horrific_experiment - name = "horrific experiment" - desc = "" - icon = 'icons/obj/machines/cloning.dmi' - icon_state = "pod_g" - -/obj/structure/showcase/machinery/oldpod - name = "damaged cryogenic pod" - desc = "" - icon = 'icons/obj/machines/sleeper.dmi' - icon_state = "sleeper-open" - -/obj/structure/showcase/machinery/oldpod/used - name = "opened cryogenic pod" - desc = "" - -/obj/structure/showcase/cyborg/old - name = "Cyborg Statue" - desc = "" - icon = 'icons/mob/robots.dmi' - icon_state = "robot_old" - density = FALSE - -/obj/structure/showcase/mecha/marauder - name = "combat mech exhibit" - desc = "" - icon = 'icons/mecha/mecha.dmi' - icon_state = "marauder" - -/obj/structure/showcase/mecha/ripley - name = "construction mech exhibit" - desc = "" - icon = 'icons/mecha/mecha.dmi' - icon_state = "firefighter" - -/obj/structure/showcase/machinery/implanter - name = "Nanotrasen automated mindshield implanter exhibit" - desc = "" - icon = 'icons/obj/machines/implantchair.dmi' - icon_state = "implantchair" - -/obj/structure/showcase/machinery/microwave - name = "Nanotrasen-brand microwave" - desc = "" - icon = 'icons/obj/kitchen.dmi' - icon_state = "mw" - -/obj/structure/showcase/machinery/cloning_pod - name = "cloning pod exhibit" - desc = "" - icon = 'icons/obj/machines/cloning.dmi' - icon_state = "pod_0" - -/obj/structure/showcase/perfect_employee - name = "'Perfect Man' employee exhibit" - desc = "" - -/obj/structure/showcase/machinery/tv - name = "Nanotrasen corporate newsfeed" - desc = "" - icon = 'icons/obj/computer.dmi' - icon_state = "television" - -/obj/structure/showcase/machinery/signal_decrypter - name = "subsystem signal decrypter" - desc = "" - icon = 'icons/obj/machines/telecomms.dmi' - icon_state = "processor" - - - -//Deconstructing -//Showcases can be any sprite, so it makes sense that they can't be constructed. -//However if a player wants to move an existing showcase or remove one, this is for that. - -/obj/structure/showcase/attackby(obj/item/W, mob/user) - if(W.tool_behaviour == TOOL_SCREWDRIVER && !anchored) - if(deconstruction_state == SHOWCASE_SCREWDRIVERED) - to_chat(user, "I screw the screws back into the showcase.") - W.play_tool_sound(src, 100) - deconstruction_state = SHOWCASE_CONSTRUCTED - else if (deconstruction_state == SHOWCASE_CONSTRUCTED) - to_chat(user, "I unscrew the screws.") - W.play_tool_sound(src, 100) - deconstruction_state = SHOWCASE_SCREWDRIVERED - - if(W.tool_behaviour == TOOL_CROWBAR && deconstruction_state == SHOWCASE_SCREWDRIVERED) - if(W.use_tool(src, user, 20, volume=100)) - to_chat(user, "I start to crowbar the showcase apart...") - new /obj/item/stack/sheet/metal(drop_location(), 4) - qdel(src) - - if(deconstruction_state == SHOWCASE_CONSTRUCTED && default_unfasten_wrench(user, W)) - return - -//Feedback is given in examine because showcases can basically have any sprite assigned to them - -/obj/structure/showcase/examine(mob/user) - . = ..() - - switch(deconstruction_state) - if(SHOWCASE_CONSTRUCTED) - . += "The showcase is fully constructed." - if(SHOWCASE_SCREWDRIVERED) - . += "The showcase has its screws loosened." - else - . += "If you see this, something is wrong." diff --git a/code/game/objects/structures/shower.dm b/code/game/objects/structures/shower.dm deleted file mode 100644 index 613c4f4746..0000000000 --- a/code/game/objects/structures/shower.dm +++ /dev/null @@ -1,233 +0,0 @@ -#define SHOWER_FREEZING "freezing" -#define SHOWER_NORMAL "normal" -#define SHOWER_BOILING "boiling" - -/obj/machinery/shower - name = "shower" - desc = "" - icon = 'icons/obj/watercloset.dmi' - icon_state = "shower" - density = FALSE - use_power = NO_POWER_USE - var/on = FALSE - var/current_temperature = SHOWER_NORMAL - var/datum/looping_sound/showering/soundloop - var/reagent_id = /datum/reagent/water - var/reaction_volume = 200 - -/obj/machinery/shower/Initialize() - . = ..() - create_reagents(reaction_volume) - reagents.add_reagent(reagent_id, reaction_volume) - - soundloop = new(list(src), FALSE) - -/obj/machinery/shower/Destroy() - QDEL_NULL(soundloop) - QDEL_NULL(reagents) - return ..() - -/obj/machinery/shower/interact(mob/M) - on = !on - update_icon() - handle_mist() - add_fingerprint(M) - if(on) - START_PROCESSING(SSmachines, src) - process() - soundloop.start() - else - soundloop.stop() - if(isopenturf(loc)) - var/turf/open/tile = loc - tile.MakeSlippery(TURF_WET_WATER, min_wet_time = 5 SECONDS, wet_time_to_add = 1 SECONDS) - -/obj/machinery/shower/attackby(obj/item/I, mob/user, params) - if(I.tool_behaviour == TOOL_ANALYZER) - to_chat(user, "The water temperature seems to be [current_temperature].") - else - return ..() - -/obj/machinery/shower/wrench_act(mob/living/user, obj/item/I) - ..() - to_chat(user, "I begin to adjust the temperature valve with \the [I]...") - if(I.use_tool(src, user, 50)) - switch(current_temperature) - if(SHOWER_NORMAL) - current_temperature = SHOWER_FREEZING - if(SHOWER_FREEZING) - current_temperature = SHOWER_BOILING - if(SHOWER_BOILING) - current_temperature = SHOWER_NORMAL - user.visible_message("[user] adjusts the shower with \the [I].", "I adjust the shower with \the [I] to [current_temperature] temperature.") - user.log_message("has wrenched a shower at [AREACOORD(src)] to [current_temperature].", LOG_ATTACK) - add_hiddenprint(user) - handle_mist() - return TRUE - - -/obj/machinery/shower/update_icon() - cut_overlays() - - if(on) - add_overlay(mutable_appearance('icons/obj/watercloset.dmi', "water", ABOVE_MOB_LAYER)) - -/obj/machinery/shower/proc/handle_mist() - // If there is no mist, and the shower was turned on (on a non-freezing temp): make mist in 5 seconds - // If there was already mist, and the shower was turned off (or made cold): remove the existing mist in 25 sec - var/obj/effect/mist/mist = locate() in loc - if(!mist && on && current_temperature != SHOWER_FREEZING) - addtimer(CALLBACK(src, PROC_REF(make_mist)), 5 SECONDS) - - if(mist && (!on || current_temperature == SHOWER_FREEZING)) - addtimer(CALLBACK(src, PROC_REF(clear_mist)), 25 SECONDS) - -/obj/machinery/shower/proc/make_mist() - var/obj/effect/mist/mist = locate() in loc - if(!mist && on && current_temperature != SHOWER_FREEZING) - new /obj/effect/mist(loc) - -/obj/machinery/shower/proc/clear_mist() - var/obj/effect/mist/mist = locate() in loc - if(mist && (!on || current_temperature == SHOWER_FREEZING)) - qdel(mist) - - -/obj/machinery/shower/Crossed(atom/movable/AM) - ..() - if(on) - wash_atom(AM) - -/proc/wash_atom(atom/A, clean = CLEAN_WEAK) - SEND_SIGNAL(A, COMSIG_COMPONENT_CLEAN_ACT, clean) -//eagents.reaction(A, TOUCH, reaction_volume) - - if(isobj(A)) - wash_obj(A,clean) - var/obj/O = A - O.wash_act(clean) - else if(isturf(A)) - wash_turf(A,clean) - else if(isliving(A)) - wash_mob(A,clean) -// check_heat(A) - -// contamination_cleanse(A) - -/obj/proc/wash_act(clean = CLEAN_WEAK) - return - -/proc/wash_obj(obj/O, clean = CLEAN_WEAK) - . = SEND_SIGNAL(O, COMSIG_COMPONENT_CLEAN_ACT, clean) -// O.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) - - -/proc/wash_turf(turf/tile, clean = CLEAN_WEAK) - SEND_SIGNAL(tile, COMSIG_COMPONENT_CLEAN_ACT, clean) -// tile.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) - - -/proc/wash_mob(mob/living/L, clean = CLEAN_WEAK) - SEND_SIGNAL(L, COMSIG_COMPONENT_CLEAN_ACT, clean) -// L.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) - if(iscarbon(L)) - var/mob/living/carbon/M = L - . = TRUE - - for(var/obj/item/I in M.held_items) - wash_obj(I) - - if(M.back && wash_obj(M.back)) - M.update_inv_back(0) - - var/list/obscured = M.check_obscured_slots() - - if(M.head && wash_obj(M.head,clean)) - M.update_inv_head() - - if(M.glasses && !(SLOT_GLASSES in obscured) && wash_obj(M.glasses,clean)) - M.update_inv_glasses() - - if(M.wear_mask && !(SLOT_WEAR_MASK in obscured) && wash_obj(M.wear_mask,clean)) - M.update_inv_wear_mask() - - if(M.ears && !(HIDEEARS in obscured) && wash_obj(M.ears,clean)) - M.update_inv_ears() - - if(M.wear_neck && !(SLOT_NECK in obscured) && wash_obj(M.wear_neck,clean)) - M.update_inv_neck() - - if(M.shoes && !(HIDESHOES in obscured) && wash_obj(M.shoes,clean)) - M.update_inv_shoes() - - var/washgloves = FALSE - if(M.gloves && !(HIDEGLOVES in obscured)) - washgloves = TRUE - - if(ishuman(M)) - var/mob/living/carbon/human/H = M - - if(H.wear_armor && wash_obj(H.wear_armor,clean)) - H.update_inv_armor() - else if(H.wear_shirt && wash_obj(H.wear_shirt,clean)) - H.update_inv_shirt() - else if(H.wear_pants && wash_obj(H.wear_pants,clean)) - H.update_inv_pants() - - if(washgloves) - SEND_SIGNAL(H, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) - - if(!H.is_mouth_covered()) - H.lip_style = null - H.update_body() - - if(H.belt && wash_obj(H.belt,clean)) - H.update_inv_belt() - else - SEND_SIGNAL(M, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) - else - SEND_SIGNAL(L, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) - -/obj/machinery/shower/proc/contamination_cleanse(atom/thing) - var/datum/component/radioactive/healthy_green_glow = thing.GetComponent(/datum/component/radioactive) - if(!healthy_green_glow || QDELETED(healthy_green_glow)) - return - var/strength = healthy_green_glow.strength - if(strength <= RAD_BACKGROUND_RADIATION) - qdel(healthy_green_glow) - return - healthy_green_glow.strength -= max(0, (healthy_green_glow.strength - (RAD_BACKGROUND_RADIATION * 2)) * 0.2) - -/obj/machinery/shower/process() - if(on) - wash_atom(loc) - for(var/AM in loc) - wash_atom(AM) - else - return PROCESS_KILL - -/obj/machinery/shower/deconstruct(disassembled = TRUE) - new /obj/item/stack/sheet/metal(drop_location(), 3) - qdel(src) - -/obj/machinery/shower/proc/check_heat(mob/living/L) - var/mob/living/carbon/C = L - - if(current_temperature == SHOWER_FREEZING) - if(iscarbon(L)) - C.adjust_bodytemperature(-80, 80) - to_chat(L, "[src] is freezing!") - else if(current_temperature == SHOWER_BOILING) - if(iscarbon(L)) - C.adjust_bodytemperature(35, 0, 500) - L.adjustFireLoss(5) - to_chat(L, "[src] is searing!") - - -/obj/effect/mist - name = "mist" - icon = 'icons/obj/watercloset.dmi' - icon_state = "mist" - layer = FLY_LAYER - anchored = TRUE - mouse_opacity = MOUSE_OPACITY_TRANSPARENT diff --git a/code/game/objects/structures/signs/_signs.dm b/code/game/objects/structures/signs/_signs.dm deleted file mode 100644 index 02214771de..0000000000 --- a/code/game/objects/structures/signs/_signs.dm +++ /dev/null @@ -1,148 +0,0 @@ -/obj/structure/sign - icon = 'icons/obj/decals.dmi' - anchored = TRUE - opacity = 0 - density = FALSE - layer = SIGN_LAYER - max_integrity = 100 - armor = list("melee" = 50, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) - var/buildable_sign = 1 //unwrenchable and modifiable - rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE - -/obj/structure/sign/basic - name = "blank sign" - desc = "" - icon_state = "backing" - -/obj/structure/sign/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) - switch(damage_type) - if(BRUTE) - if(damage_amount) - playsound(src.loc, 'sound/blank.ogg', 80, TRUE) - else - playsound(loc, 'sound/blank.ogg', 50, TRUE) - if(BURN) - playsound(loc, 'sound/blank.ogg', 80, TRUE) - -/obj/structure/sign/attackby(obj/item/I, mob/user, params) - if(I.tool_behaviour == TOOL_WRENCH && buildable_sign) - user.visible_message("[user] starts removing [src]...", \ - "I start unfastening [src].") - I.play_tool_sound(src) - if(I.use_tool(src, user, 40)) - playsound(src, 'sound/blank.ogg', 50, TRUE) - user.visible_message("[user] unfastens [src].", \ - "I unfasten [src].") - var/obj/item/sign_backing/SB = new (get_turf(user)) - SB.icon_state = icon_state - SB.sign_path = type - SB.setDir(dir) - qdel(src) - return - else if(istype(I, /obj/item/pen) && buildable_sign) - var/list/sign_types = list("Secure Area", "Biohazard", "High Voltage", "Radiation", "Hard Vacuum Ahead", "Disposal: Leads To Space", "Danger: Fire", "No Smoking", "Medbay", "Science", "Chemistry", \ - "Hydroponics", "Xenobiology", "Test Chamber","Firing Range", "Extreme Cold", "Extreme Heat", "Gas Mask", "Nanites Lab", "Maintenance", "Reactive Chemicals") - var/obj/structure/sign/sign_type - switch(input(user, "Select a sign type.", "Sign Customization") as null|anything in sortList(sign_types)) - if("Blank") - sign_type = /obj/structure/sign/basic - if("Secure Area") - sign_type = /obj/structure/sign/warning/securearea - if("Biohazard") - sign_type = /obj/structure/sign/warning/biohazard - if("High Voltage") - sign_type = /obj/structure/sign/warning/electricshock - if("Radiation") - sign_type = /obj/structure/sign/warning/radiation - if("Hard Vacuum Ahead") - sign_type = /obj/structure/sign/warning/vacuum - if("Disposal: Leads To Space") - sign_type = /obj/structure/sign/warning/deathsposal - if("Danger: Fire") - sign_type = /obj/structure/sign/warning/fire - if("No Smoking") - sign_type = /obj/structure/sign/warning/nosmoking/circle - if("Test Chamber") - sign_type = /obj/structure/sign/warning/testchamber - if("Firing Range") - sign_type = /obj/structure/sign/warning/firingrange - if("Extreme Cold") - sign_type = /obj/structure/sign/warning/coldtemp - if("Extreme Heat") - sign_type = /obj/structure/sign/warning/hottemp - if("Gas Mask") - sign_type = /obj/structure/sign/warning/gasmask - if("Reactive Chemicals") - sign_type = /obj/structure/sign/warning/chemdiamond - if("Medbay") - sign_type = /obj/structure/sign/departments/medbay/alt - if("Science") - sign_type = /obj/structure/sign/departments/science - if("Chemistry") - sign_type = /obj/structure/sign/departments/chemistry - if("Hydroponics") - sign_type = /obj/structure/sign/departments/botany - if("Xenobiology") - sign_type = /obj/structure/sign/departments/xenobio - if("Nanites Lab") - sign_type = /obj/structure/sign/departments/nanites - if("Maintenance") - sign_type = /obj/structure/sign/departments/mait - - //Make sure user is adjacent still - if(!Adjacent(user)) - return - - if(!sign_type) - return - - //It's import to clone the pixel layout information - //Otherwise signs revert to being on the turf and - //move jarringly - var/obj/structure/sign/newsign = new sign_type(get_turf(src)) - newsign.pixel_x = pixel_x - newsign.pixel_y = pixel_y - qdel(src) - else - return ..() - -/obj/item/sign_backing - name = "sign backing" - desc = "" - icon = 'icons/obj/decals.dmi' - icon_state = "backing" - w_class = WEIGHT_CLASS_NORMAL - custom_materials = list(/datum/material/plastic = 2000) - resistance_flags = FLAMMABLE - var/sign_path = /obj/structure/sign/basic //the type of sign that will be created when placed on a turf - -/obj/item/sign_backing/afterattack(atom/target, mob/user, proximity) - . = ..() - if(isturf(target) && proximity) - var/turf/T = target - user.visible_message("[user] fastens [src] to [T].", \ - "I attach the sign to [T].") - playsound(T, 'sound/blank.ogg', 50, TRUE) - var/obj/structure/sign/S = new sign_path(T) - S.setDir(dir) - qdel(src) - -/obj/item/sign_backing/Move(atom/new_loc, direct = 0) - // pulling, throwing, or conveying a sign backing does not rotate it - var/old_dir = dir - . = ..() - setDir(old_dir) - -/obj/item/sign_backing/attack_self(mob/user) - . = ..() - setDir(turn(dir, 90)) - -/obj/structure/sign/nanotrasen - name = "\improper Nanotrasen Logo" - desc = "" - icon_state = "nanotrasen" - -/obj/structure/sign/logo - name = "nanotrasen logo" - desc = "" - icon_state = "nanotrasen_sign1" diff --git a/code/game/objects/structures/signs/signs_departments.dm b/code/game/objects/structures/signs/signs_departments.dm deleted file mode 100644 index 4f5d388756..0000000000 --- a/code/game/objects/structures/signs/signs_departments.dm +++ /dev/null @@ -1,87 +0,0 @@ -//departmental signs - -/obj/structure/sign/departments/examroom - name = "\improper EXAM ROOM" - desc = "" - icon_state = "examroom" - -/obj/structure/sign/departments/science //These 3 have multiple types, just var-edit the icon_state to whatever one you want on the map - name = "\improper SCIENCE" - desc = "" - icon_state = "science1" - -/obj/structure/sign/departments/chemistry - name = "\improper CHEMISTRY" - desc = "" - icon_state = "chemistry1" - -/obj/structure/sign/departments/botany - name = "\improper HYDROPONICS" - desc = "" - icon_state = "hydro1" - -/obj/structure/sign/departments/xenobio - name = "\improper XENOBIOLOGY" - desc = "" - icon_state = "xenobio" - -/obj/structure/sign/departments/evac - name = "\improper EVACUATION" - desc = "" - icon_state = "evac" - -/obj/structure/sign/departments/drop - name = "\improper DROP PODS" - desc = "" - icon_state = "drop" - -/obj/structure/sign/departments/custodian - name = "\improper CUSTODIAN" - desc = "" - icon_state = "custodian" - -/obj/structure/sign/departments/engineering - name = "\improper ENGINEERING" - desc = "" - icon_state = "engine" - -/obj/structure/sign/departments/cargo - name = "\improper CARGO" - desc = "" - icon_state = "cargo" - -/obj/structure/sign/departments/security - name = "\improper SECURITY" - desc = "" - icon_state = "security" - -/obj/structure/sign/departments/holy - name = "\improper HOLY" - desc = "" - icon_state = "holy" - -/obj/structure/sign/departments/restroom - name = "\improper RESTROOM" - desc = "" - icon_state = "restroom" - -/obj/structure/sign/departments/medbay - name = "\improper MEDBAY" - desc = "" - icon_state = "bluecross" - -/obj/structure/sign/departments/medbay/alt - icon_state = "bluecross2" - -/obj/structure/sign/departments/mait - name = "\improper MAINTENANCE TUNNEL" - desc = "" - icon_state = "mait1" - -/obj/structure/sign/departments/mait/alt - icon_state = "mait2" - -/obj/structure/sign/departments/nanites - name = "\improper NANITE LAB" - desc = "" - icon_state = "nanites" diff --git a/code/game/objects/structures/signs/signs_maps.dm b/code/game/objects/structures/signs/signs_maps.dm deleted file mode 100644 index 6c17f70d57..0000000000 --- a/code/game/objects/structures/signs/signs_maps.dm +++ /dev/null @@ -1,47 +0,0 @@ -//map and direction signs - -/obj/structure/sign/map - name = "station map" - desc = "" - max_integrity = 500 - -/obj/structure/sign/map/left - icon_state = "map-left" - -/obj/structure/sign/map/right - icon_state = "map-right" - -/obj/structure/sign/directions/science - name = "science department" - desc = "" - icon_state = "direction_sci" - -/obj/structure/sign/directions/engineering - name = "engineering department" - desc = "" - icon_state = "direction_eng" - -/obj/structure/sign/directions/security - name = "security department" - desc = "" - icon_state = "direction_sec" - -/obj/structure/sign/directions/medical - name = "medical bay" - desc = "" - icon_state = "direction_med" - -/obj/structure/sign/directions/evac - name = "escape arm" - desc = "" - icon_state = "direction_evac" - -/obj/structure/sign/directions/supply - name = "cargo bay" - desc = "" - icon_state = "direction_supply" - -/obj/structure/sign/directions/command - name = "command department" - desc = "" - icon_state = "direction_bridge" diff --git a/code/game/objects/structures/signs/signs_plaques.dm b/code/game/objects/structures/signs/signs_plaques.dm deleted file mode 100644 index 620a29881e..0000000000 --- a/code/game/objects/structures/signs/signs_plaques.dm +++ /dev/null @@ -1,56 +0,0 @@ -//plaques and memorials - -/obj/structure/sign/plaques - name = "plaque" - desc = "" - icon_state = "atmosplaque" - -/obj/structure/sign/plaques/atmos - name = "\improper FEA Atmospherics Division plaque" - desc = "" - -/obj/structure/sign/plaques/thunderdome - name = "Thunderdome Plaque" - desc = "" - -/obj/structure/sign/plaques/golden - name = "The Most Robust Men Award for Robustness" - desc = "" - icon_state = "goldenplaque" - -/obj/structure/sign/plaques/golden/captain - name = "The Most Robust Captain Award for Robustness" - -/obj/structure/sign/plaques/kiddie - name = "\improper AI developers plaque" - desc = "" - icon_state = "kiddieplaque" - -/obj/structure/sign/plaques/kiddie/badger - name = "\improper Remembrance Plaque" - desc = "" - -/obj/structure/sign/plaques/kiddie/library - name = "Library Rules Sign" - desc = "" - -/obj/structure/sign/plaques/kiddie/perfect_man - name = "\improper 'Perfect Man' sign" - desc = "" - -/obj/structure/sign/plaques/kiddie/perfect_drone - name = "\improper 'Perfect Drone' sign" - desc = "" - -/obj/structure/sign/plaques/deempisi - name = "Mr. Deempisi portrait" - desc = "" - icon_state = "monkey_painting" - -/obj/structure/rogue/trophy/deer - name = "saiga trophy" - desc = "A saiga head, mounted on a display as a trophy of a good hunt. An unsavory decoration for Dendorites." - icon = 'icons/roguetown/misc/structure.dmi' - icon_state = "deer_trophy" - dir = SOUTH - pixel_y = 32 diff --git a/code/game/objects/structures/signs/signs_warning.dm b/code/game/objects/structures/signs/signs_warning.dm deleted file mode 100644 index dca9bc034e..0000000000 --- a/code/game/objects/structures/signs/signs_warning.dm +++ /dev/null @@ -1,122 +0,0 @@ -/obj/structure/sign/warning - name = "\improper WARNING" - desc = "" - icon_state = "securearea" - -/obj/structure/sign/warning/securearea - name = "\improper SECURE AREA" - desc = "" - -/obj/structure/sign/warning/docking - name = "\improper KEEP CLEAR: DOCKING AREA" - desc = "" - -/obj/structure/sign/warning/biohazard - name = "\improper BIOHAZARD" - desc = "" - icon_state = "bio" - -/obj/structure/sign/warning/electricshock - name = "\improper HIGH VOLTAGE" - desc = "" - icon_state = "shock" - -/obj/structure/sign/warning/vacuum - name = "\improper HARD VACUUM AHEAD" - desc = "" - icon_state = "space" - -/obj/structure/sign/warning/vacuum/external - name = "\improper EXTERNAL AIRLOCK" - desc = "" - layer = MOB_LAYER - -/obj/structure/sign/warning/deathsposal - name = "\improper DISPOSAL: LEADS TO SPACE" - desc = "" - icon_state = "deathsposal" - -/obj/structure/sign/warning/bodysposal - name = "\improper DISPOSAL: LEADS TO MORGUE" - desc = "" - icon_state = "bodysposal" - -/obj/structure/sign/warning/pods - name = "\improper ESCAPE PODS" - desc = "" - icon_state = "pods" - -/obj/structure/sign/warning/fire - name = "\improper DANGER: FIRE" - desc = "" - icon_state = "fire" - resistance_flags = FIRE_PROOF - -/obj/structure/sign/warning/nosmoking - name = "\improper NO SMOKING" - desc = "" - icon_state = "nosmoking2" - resistance_flags = FLAMMABLE - -/obj/structure/sign/warning/nosmoking/circle - icon_state = "nosmoking" - -/obj/structure/sign/warning/radiation - name = "\improper HAZARDOUS RADIATION" - desc = "" - icon_state = "radiation" - -/obj/structure/sign/warning/radiation/rad_area - name = "\improper RADIOACTIVE AREA" - desc = "" - -/obj/structure/sign/warning/xeno_mining - name = "\improper DANGEROUS ALIEN LIFE" - desc = "" - icon = 'icons/obj/mining.dmi' - icon_state = "xeno_warning" - -/obj/structure/sign/warning/enginesafety - name = "\improper ENGINEERING SAFETY" - desc = "" - icon_state = "safety" - -/obj/structure/sign/warning/explosives - name = "\improper HIGH EXPLOSIVES" - desc = "" - icon_state = "explosives" - -/obj/structure/sign/warning/explosives/alt - name = "\improper HIGH EXPLOSIVES" - desc = "" - icon_state = "explosives2" - -/obj/structure/sign/warning/testchamber - name = "\improper TESTING AREA" - desc = "" - icon_state = "testchamber" - -/obj/structure/sign/warning/firingrange - name = "\improper FIRING RANGE" - desc = "" - icon_state = "firingrange" - -/obj/structure/sign/warning/coldtemp - name = "\improper FREEZING AIR" - desc = "" - icon_state = "cold" - -/obj/structure/sign/warning/hottemp - name = "\improper SUPERHEATED AIR" - desc = "" - icon_state = "heat" - -/obj/structure/sign/warning/gasmask - name = "\improper CONTAMINATED AIR" - desc = "" - icon_state = "gasmask" - -/obj/structure/sign/warning/chemdiamond - name = "\improper REACTIVE CHEMICALS" - desc = "" - icon_state = "chemdiamond" diff --git a/code/game/objects/structures/spawner.dm b/code/game/objects/structures/spawner.dm index b1f15b0683..0a29c43846 100644 --- a/code/game/objects/structures/spawner.dm +++ b/code/game/objects/structures/spawner.dm @@ -10,7 +10,7 @@ var/max_mobs = 5 var/spawn_time = 300 //30 seconds default - var/mob_types = list(/mob/living/simple_animal/hostile/carp) + var/mob_types = list(/mob/living/simple_animal/hostile/rogue/werewolf) var/spawn_text = "emerges from" var/faction = list("hostile") var/spawner_type = /datum/component/spawner @@ -23,36 +23,3 @@ if(faction_check(faction, M.faction, FALSE)&&!M.client) return ..() - - -/obj/structure/spawner/syndicate - name = "warp beacon" - icon = 'icons/obj/device.dmi' - icon_state = "syndbeacon" - spawn_text = "warps in from" - mob_types = list(/mob/living/simple_animal/hostile/syndicate/ranged) - faction = list(ROLE_SYNDICATE) - -/obj/structure/spawner/skeleton - name = "bone pit" - desc = "" - icon_state = "hole" - icon = 'icons/mob/nest.dmi' - max_integrity = 150 - max_mobs = 15 - spawn_time = 150 - mob_types = list(/mob/living/simple_animal/hostile/skeleton) - spawn_text = "climbs out of" - faction = list("skeleton") - -/obj/structure/spawner/clown - name = "Laughing Larry" - desc = "" - icon_state = "clownbeacon" - icon = 'icons/obj/device.dmi' - max_integrity = 200 - max_mobs = 15 - spawn_time = 150 - mob_types = list(/mob/living/simple_animal/hostile/retaliate/clown, /mob/living/simple_animal/hostile/retaliate/clown/fleshclown, /mob/living/simple_animal/hostile/retaliate/clown/clownhulk, /mob/living/simple_animal/hostile/retaliate/clown/longface, /mob/living/simple_animal/hostile/retaliate/clown/clownhulk/chlown, /mob/living/simple_animal/hostile/retaliate/clown/clownhulk/honcmunculus, /mob/living/simple_animal/hostile/retaliate/clown/mutant/blob, /mob/living/simple_animal/hostile/retaliate/clown/banana, /mob/living/simple_animal/hostile/retaliate/clown/honkling, /mob/living/simple_animal/hostile/retaliate/clown/lube) - spawn_text = "climbs out of" - faction = list("clown") diff --git a/code/game/objects/structures/statues.dm b/code/game/objects/structures/statues.dm index 2ef5b6859d..45b3c3cbdb 100644 --- a/code/game/objects/structures/statues.dm +++ b/code/game/objects/structures/statues.dm @@ -7,7 +7,7 @@ anchored = FALSE max_integrity = 100 var/oreAmount = 5 - var/material_drop_type = /obj/item/stack/sheet/metal + var/material_drop_type var/impressiveness = 15 CanAtmosPass = ATMOS_PASS_DENSITY var/art_type = /datum/component/art @@ -17,24 +17,6 @@ AddComponent(art_type, impressiveness) addtimer(CALLBACK(src, TYPE_PROC_REF(/datum, AddComponent), /datum/component/beauty, impressiveness * 75), 0) -/obj/structure/statue/attackby(obj/item/W, mob/living/user, params) - add_fingerprint(user) - if(!(flags_1 & NODECONSTRUCT_1)) - if(default_unfasten_wrench(user, W)) - return - if(W.tool_behaviour == TOOL_WELDER) - if(!W.tool_start_check(user, amount=0)) - return FALSE - - user.visible_message("[user] is slicing apart the [name].", \ - "I are slicing apart the [name]...") - if(W.use_tool(src, user, 40, volume=50)) - user.visible_message("[user] slices apart the [name].", \ - "I slice apart the [name]!") - deconstruct(TRUE) - return - return ..() - /obj/structure/statue/deconstruct(disassembled = TRUE) if(!(flags_1 & NODECONSTRUCT_1)) if(material_drop_type) @@ -44,260 +26,3 @@ if(drop_amt > 0) new material_drop_type(get_turf(src), drop_amt) qdel(src) - -//////////////////////////////////////STATUES///////////////////////////////////////////////////////////// -////////////////////////uranium/////////////////////////////////// - -/obj/structure/statue/uranium - max_integrity = 300 - light_outer_range = 2 - material_drop_type = /obj/item/stack/sheet/mineral/uranium - var/last_event = 0 - var/active = null - impressiveness = 25 // radiation makes an impression - - -/obj/structure/statue/uranium/nuke - name = "statue of a nuclear fission explosive" - desc = "" - icon_state = "nuke" - -/obj/structure/statue/uranium/eng - name = "Statue of an engineer" - desc = "" - icon_state = "eng" - -/obj/structure/statue/uranium/attackby(obj/item/W, mob/user, params) - radiate() - return ..() - -/obj/structure/statue/uranium/Bumped(atom/movable/AM) - radiate() - ..() - -/obj/structure/statue/uranium/attack_hand(mob/user) - radiate() - . = ..() - -/obj/structure/statue/uranium/attack_paw(mob/user) - radiate() - . = ..() - -/obj/structure/statue/uranium/proc/radiate() - if(!active) - if(world.time > last_event+15) - active = 1 - radiation_pulse(src, 30) - last_event = world.time - active = null - return - return - -////////////////////////////plasma/////////////////////////////////////////////////////////////////////// - -/obj/structure/statue/plasma - max_integrity = 200 - material_drop_type = /obj/item/stack/sheet/mineral/plasma - impressiveness = 20 - desc = "" - -/obj/structure/statue/plasma/scientist - name = "statue of a scientist" - icon_state = "sci" - -/obj/structure/statue/plasma/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if(exposed_temperature > 300) - PlasmaBurn(exposed_temperature) - - -/obj/structure/statue/plasma/bullet_act(obj/projectile/Proj) - var/burn = FALSE - if(!(Proj.nodamage) && Proj.damage_type == BURN && !QDELETED(src)) - burn = TRUE - if(burn) - var/turf/T = get_turf(src) - if(Proj.firer) - message_admins("Plasma statue ignited by [ADMIN_LOOKUPFLW(Proj.firer)] in [ADMIN_VERBOSEJMP(T)]") - log_game("Plasma statue ignited by [key_name(Proj.firer)] in [AREACOORD(T)]") - else - message_admins("Plasma statue ignited by [Proj]. No known firer, in [ADMIN_VERBOSEJMP(T)]") - log_game("Plasma statue ignited by [Proj] in [AREACOORD(T)]. No known firer.") - PlasmaBurn(2500) - . = ..() - -/obj/structure/statue/plasma/attackby(obj/item/W, mob/user, params) - if(W.get_temperature() > 300 && !QDELETED(src))//If the temperature of the object is over 300, then ignite - var/turf/T = get_turf(src) - message_admins("Plasma statue ignited by [ADMIN_LOOKUPFLW(user)] in [ADMIN_VERBOSEJMP(T)]") - log_game("Plasma statue ignited by [key_name(user)] in [AREACOORD(T)]") - ignite(W.get_temperature()) - else - return ..() - -/obj/structure/statue/plasma/proc/PlasmaBurn(added) - if(QDELETED(src)) - return - atmos_spawn_air("plasma=[oreAmount*10];TEMP=[added]") - deconstruct(FALSE) - -/obj/structure/statue/plasma/proc/ignite(exposed_temperature) - if(exposed_temperature > 300) - PlasmaBurn(exposed_temperature) - -//////////////////////gold/////////////////////////////////////// - -/obj/structure/statue/gold - max_integrity = 300 - material_drop_type = /obj/item/stack/sheet/mineral/gold - impressiveness = 25 - desc = "" - -/obj/structure/statue/gold/hos - name = "statue of the head of security" - icon_state = "hos" - -/obj/structure/statue/gold/hop - name = "statue of the head of personnel" - icon_state = "hop" - -/obj/structure/statue/gold/cmo - name = "statue of the chief medical officer" - icon_state = "cmo" - -/obj/structure/statue/gold/ce - name = "statue of the chief engineer" - icon_state = "ce" - -/obj/structure/statue/gold/rd - name = "statue of the research director" - icon_state = "rd" - -//////////////////////////silver/////////////////////////////////////// - -/obj/structure/statue/silver - max_integrity = 300 - material_drop_type = /obj/item/stack/sheet/mineral/silver - impressiveness = 25 - desc = "" - -/obj/structure/statue/silver/md - name = "statue of a medical officer" - icon_state = "md" - -/obj/structure/statue/silver/janitor - name = "statue of a janitor" - icon_state = "jani" - -/obj/structure/statue/silver/sec - name = "statue of a security officer" - icon_state = "sec" - -/obj/structure/statue/silver/secborg - name = "statue of a security cyborg" - icon_state = "secborg" - -/obj/structure/statue/silver/medborg - name = "statue of a medical cyborg" - icon_state = "medborg" - -/////////////////////////diamond///////////////////////////////////////// - -/obj/structure/statue/diamond - max_integrity = 1000 - material_drop_type = /obj/item/stack/sheet/mineral/diamond - impressiveness = 50 - desc = "" - -/obj/structure/statue/diamond/captain - name = "statue of THE captain." - icon_state = "cap" - -/obj/structure/statue/diamond/ai1 - name = "statue of the AI hologram." - icon_state = "ai1" - -/obj/structure/statue/diamond/ai2 - name = "statue of the AI core." - icon_state = "ai2" - -////////////////////////bananium/////////////////////////////////////// - -/obj/structure/statue/bananium - max_integrity = 300 - material_drop_type = /obj/item/stack/sheet/mineral/bananium - impressiveness = 50 - desc = "" - var/spam_flag = 0 - -/obj/structure/statue/bananium/clown - name = "statue of a clown" - icon_state = "clown" - -/obj/structure/statue/bananium/Bumped(atom/movable/AM) - honk() - ..() - -/obj/structure/statue/bananium/attackby(obj/item/W, mob/user, params) - honk() - return ..() - -/obj/structure/statue/bananium/attack_hand(mob/user) - honk() - . = ..() - -/obj/structure/statue/bananium/attack_paw(mob/user) - honk() - ..() - -/obj/structure/statue/bananium/proc/honk() - if(!spam_flag) - spam_flag = TRUE - playsound(src.loc, 'sound/blank.ogg', 50, TRUE) - addtimer(VARSET_CALLBACK(src, spam_flag, FALSE), 2 SECONDS) - -/////////////////////sandstone///////////////////////////////////////// - -/obj/structure/statue/sandstone - max_integrity = 50 - material_drop_type = /obj/item/stack/sheet/mineral/sandstone - impressiveness = 15 - -/obj/structure/statue/sandstone/assistant - name = "statue of an assistant" - desc = "" - icon_state = "assist" - - -/obj/structure/statue/sandstone/venus //call me when we add marble i guess - name = "statue of a pure maiden" - desc = "" - icon = 'icons/obj/statuelarge.dmi' - icon_state = "venus" - -/////////////////////snow///////////////////////////////////////// - -/obj/structure/statue/snow - max_integrity = 50 - material_drop_type = /obj/item/stack/sheet/mineral/snow - -/obj/structure/statue/snow/snowman - name = "snowman" - desc = "" - icon_state = "snowman" - -/obj/structure/statue/snow/snowlegion - name = "snowlegion" - desc = "" - icon_state = "snowlegion" - -///////////////////////////////bronze/////////////////////////////////// - -/obj/structure/statue/bronze - material_drop_type = /obj/item/stack/tile/bronze - -/obj/structure/statue/bronze/marx - name = "\improper Karl Marx bust" - desc = "" - icon_state = "marx" - art_type = /datum/component/art/rev - diff --git a/code/game/objects/structures/table_frames.dm b/code/game/objects/structures/table_frames.dm deleted file mode 100644 index 784bce59e9..0000000000 --- a/code/game/objects/structures/table_frames.dm +++ /dev/null @@ -1,101 +0,0 @@ -/* Table Frames - * Contains: - * Frames - * Wooden Frames - */ - - -/* - * Normal Frames - */ - -/obj/structure/table_frame - name = "table frame" - desc = "" - icon = 'icons/obj/structures.dmi' - icon_state = "table_frame" - density = FALSE - anchored = FALSE - layer = PROJECTILE_HIT_THRESHHOLD_LAYER - max_integrity = 100 - var/framestack = /obj/item/stack/rods - var/framestackamount = 2 - -/obj/structure/table_frame/attackby(obj/item/I, mob/user, params) - if(I.tool_behaviour == TOOL_WRENCH) - to_chat(user, "I start disassembling [src]...") - I.play_tool_sound(src) - if(I.use_tool(src, user, 30)) - playsound(src.loc, 'sound/blank.ogg', 50, TRUE) - deconstruct(TRUE) - return - - var/obj/item/stack/material = I - if (istype(I, /obj/item/stack)) - if(material?.tableVariant) - if(material.get_amount() < 1) - to_chat(user, "I need one [material.name] sheet to do this!") - return - to_chat(user, "I start adding [material] to [src]...") - if(do_after(user, 20, target = src) && material.use(1)) - make_new_table(material.tableVariant) - else - if(material.get_amount() < 1) - to_chat(user, "I need one metal sheet to do this!") - return - to_chat(user, "I start adding [material] to [src]...") - if(do_after(user, 20, target = src) && material.use(1)) - var/list/material_list = list() - if(material.material_type) - material_list[material.material_type] = MINERAL_MATERIAL_AMOUNT - make_new_table(/obj/structure/table/greyscale, material_list) - else - return ..() - -/obj/structure/table_frame/proc/make_new_table(table_type, custom_materials) //makes sure the new table made retains what we had as a frame - var/obj/structure/table/T = new table_type(loc) - T.frame = type - T.framestack = framestack - T.framestackamount = framestackamount - if(custom_materials) - T.set_custom_materials(custom_materials) - qdel(src) - -/obj/structure/table_frame/deconstruct(disassembled = TRUE) - new framestack(get_turf(src), framestackamount) - qdel(src) - -/obj/structure/table_frame/narsie_act() - new /obj/structure/table_frame/wood(src.loc) - qdel(src) - -/* - * Wooden Frames - */ - -/obj/structure/table_frame/wood - name = "wooden table frame" - desc = "" - icon_state = "wood_frame" - framestack = /obj/item/stack/sheet/mineral/wood - framestackamount = 2 - resistance_flags = FLAMMABLE - -/obj/structure/table_frame/wood/attackby(obj/item/I, mob/user, params) - if (istype(I, /obj/item/stack)) - var/obj/item/stack/material = I - var/toConstruct // stores the table variant - if(istype(I, /obj/item/stack/sheet/mineral/wood)) - toConstruct = /obj/structure/table/wood - else if(istype(I, /obj/item/stack/tile/carpet)) - toConstruct = /obj/structure/table/wood/poker - - if (toConstruct) - if(material.get_amount() < 1) - to_chat(user, "I need one [material.name] sheet to do this!") - return - to_chat(user, "I start adding [material] to [src]...") - if(do_after(user, 20, target = src) && material.use(1)) - make_new_table(toConstruct) - else - return ..() diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 5b62a83add..0c376f1f72 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -22,29 +22,21 @@ layer = TABLE_LAYER climbable = TRUE pass_flags = LETPASSTHROW //You can throw objects over this, despite it's density.") - var/frame = /obj/structure/table_frame + var/frame var/framestack var/buildstack var/busy = FALSE var/buildstackamount = 1 var/framestackamount = 2 var/deconstruction_ready = 1 - custom_materials = list(/datum/material/iron = 2000) max_integrity = 100 integrity_failure = 0.33 smooth = SMOOTH_TRUE - canSmoothWith = list(/obj/structure/table, /obj/structure/table/reinforced, /obj/structure/table/greyscale) + canSmoothWith = list(/obj/structure/table, /obj/structure/table/greyscale) destroy_sound = 'sound/combat/hits/onwood/destroyfurniture.ogg' attacked_sound = list('sound/combat/hits/onwood/woodimpact (1).ogg','sound/combat/hits/onwood/woodimpact (2).ogg') blade_dulling = DULLING_BASHCHOP -/obj/structure/table/examine(mob/user) - . = ..() -// . += deconstruction_hints(user) - -/obj/structure/table/proc/deconstruction_hints(mob/user) - return "The top is screwed on, but the main bolts are also visible." - /obj/structure/table/update_icon() if(smooth) queue_smooth(src) @@ -449,7 +441,6 @@ desc = "" icon = 'icons/obj/smooth_structures/poker_table.dmi' icon_state = "poker_table" - buildstack = /obj/item/stack/tile/carpet /obj/structure/table/wood/poker/narsie_act() ..(FALSE) @@ -459,7 +450,6 @@ desc = "" icon = 'icons/obj/structures.dmi' icon_state = "fancy_table" - frame = /obj/structure/table_frame canSmoothWith = list(/obj/structure/table/wood/fancy, /obj/structure/table/wood/fancy/black, /obj/structure/table/wood/fancy/blue, @@ -482,47 +472,38 @@ /obj/structure/table/wood/fancy/black icon_state = "fancy_table_black" - buildstack = /obj/item/stack/tile/carpet/black smooth_icon = 'icons/obj/smooth_structures/fancy_table_black.dmi' /obj/structure/table/wood/fancy/blue icon_state = "fancy_table_blue" - buildstack = /obj/item/stack/tile/carpet/blue smooth_icon = 'icons/obj/smooth_structures/fancy_table_blue.dmi' /obj/structure/table/wood/fancy/cyan icon_state = "fancy_table_cyan" - buildstack = /obj/item/stack/tile/carpet/cyan smooth_icon = 'icons/obj/smooth_structures/fancy_table_cyan.dmi' /obj/structure/table/wood/fancy/green icon_state = "fancy_table_green" - buildstack = /obj/item/stack/tile/carpet/green smooth_icon = 'icons/obj/smooth_structures/fancy_table_green.dmi' /obj/structure/table/wood/fancy/orange icon_state = "fancy_table_orange" - buildstack = /obj/item/stack/tile/carpet/orange smooth_icon = 'icons/obj/smooth_structures/fancy_table_orange.dmi' /obj/structure/table/wood/fancy/purple icon_state = "fancy_table_purple" - buildstack = /obj/item/stack/tile/carpet/purple smooth_icon = 'icons/obj/smooth_structures/fancy_table_purple.dmi' /obj/structure/table/wood/fancy/red icon_state = "fancy_table_red" - buildstack = /obj/item/stack/tile/carpet/red smooth_icon = 'icons/obj/smooth_structures/fancy_table_red.dmi' /obj/structure/table/wood/fancy/royalblack icon_state = "fancy_table_royalblack" - buildstack = /obj/item/stack/tile/carpet/royalblack smooth_icon = 'icons/obj/smooth_structures/fancy_table_royalblack.dmi' /obj/structure/table/wood/fancy/royalblue icon_state = "fancy_table_royalblue" - buildstack = /obj/item/stack/tile/carpet/royalblue smooth_icon = 'icons/obj/smooth_structures/fancy_table_royalblue.dmi' /* .................. More tables ................... */ @@ -546,91 +527,6 @@ /obj/structure/table/wood/nice/decorated_alt icon_state = "tablefine_alt2" -/* - * Reinforced tables - */ - -/obj/structure/table/reinforced - name = "reinforced table" - desc = "" - icon = 'icons/obj/smooth_structures/reinforced_table.dmi' - icon_state = "r_table" - deconstruction_ready = 0 - buildstack = /obj/item/stack/sheet/plasteel - canSmoothWith = list(/obj/structure/table/reinforced, /obj/structure/table) - max_integrity = 200 - integrity_failure = 0.25 - armor = list("melee" = 10, "bullet" = 30, "laser" = 30, "energy" = 100, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 70) - -/obj/structure/table/reinforced/deconstruction_hints(mob/user) - if(deconstruction_ready) - return "The top cover has been welded loose and the main frame's bolts are exposed." - else - return "The top cover is firmly welded on." - -/obj/structure/table/reinforced/attackby(obj/item/W, mob/user, params) - if(W.tool_behaviour == TOOL_WELDER && user.used_intent.type != INTENT_HELP) - if(!W.tool_start_check(user, amount=0)) - return - - if(deconstruction_ready) - to_chat(user, "I start strengthening the reinforced table...") - if (W.use_tool(src, user, 50, volume=50)) - to_chat(user, "I strengthen the table.") - deconstruction_ready = 0 - else - to_chat(user, "I start weakening the reinforced table...") - if (W.use_tool(src, user, 50, volume=50)) - to_chat(user, "I weaken the table.") - deconstruction_ready = 1 - else - . = ..() - -/obj/structure/table/bronze - name = "bronze table" - desc = "" - icon = 'icons/obj/smooth_structures/brass_table.dmi' - icon_state = "brass_table" - resistance_flags = FIRE_PROOF | ACID_PROOF - buildstack = /obj/item/stack/tile/bronze - canSmoothWith = list(/obj/structure/table/bronze) - -/obj/structure/table/bronze/tablepush(mob/living/user, mob/living/pushed_mob) - ..() - playsound(src, 'sound/blank.ogg', 50, TRUE) - -/* - * Surgery Tables - */ - -/obj/structure/table/optable - name = "operating table" - desc = "" - icon = 'icons/obj/surgery.dmi' - icon_state = "optable" - buildstack = /obj/item/stack/sheet/mineral/silver - smooth = SMOOTH_FALSE - can_buckle = 1 - buckle_lying = -1 - buckle_requires_restraints = 1 - var/mob/living/carbon/human/patient = null - -/obj/structure/table/optable/tablepush(mob/living/user, mob/living/pushed_mob) - pushed_mob.forceMove(loc) - pushed_mob.set_resting(TRUE, TRUE) - visible_message("[user] has laid [pushed_mob] on [src].") - check_patient() - -/obj/structure/table/optable/proc/check_patient() - var/mob/living/carbon/human/M = locate(/mob/living/carbon/human, loc) - if(M) - if(M.resting) - patient = M - return TRUE - else - patient = null - return FALSE - /* * Racks */ @@ -697,28 +593,7 @@ /obj/structure/rack/attack_paw(mob/living/user) attack_hand(user) -/* -/obj/structure/rack/attack_hand(mob/living/user) - . = ..() - if(.) - return - if(!(user.mobility_flags & MOBILITY_STAND) || user.get_num_legs() < 2) - return - user.changeNext_move(CLICK_CD_MELEE) - user.do_attack_animation(src, ATTACK_EFFECT_KICK) - user.visible_message("[user] kicks [src].", null, null, COMBAT_MESSAGE_RANGE) - take_damage(rand(4,8), BRUTE, "melee", 1)*/ -/* - * Rack Destruction - */ - -/obj/structure/rack/deconstruct(disassembled = TRUE) - if(!(flags_1&NODECONSTRUCT_1)) - density = FALSE - var/obj/item/rack_parts/newparts = new(loc) - transfer_fingerprints_to(newparts) - qdel(src) /obj/structure/rack/rogue @@ -765,40 +640,33 @@ else . = ..() -// temporary -/obj/item/cooking/platter -/* - * Rack Parts - */ - -/obj/item/rack_parts - name = "rack parts" +/obj/structure/table/optable + name = "operating table" desc = "" - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "rack_parts" - flags_1 = CONDUCT_1 - custom_materials = list(/datum/material/iron=2000) - var/building = FALSE - -/obj/item/rack_parts/attackby(obj/item/W, mob/user, params) - if (W.tool_behaviour == TOOL_WRENCH) - new /obj/item/stack/sheet/metal(user.loc) - qdel(src) - else - . = ..() + icon = 'icons/obj/surgery.dmi' + icon_state = "optable" + smooth = SMOOTH_FALSE + can_buckle = 1 + buckle_lying = -1 + buckle_requires_restraints = 1 + var/mob/living/carbon/human/patient = null -/obj/item/rack_parts/attack_self(mob/user) - if(building) - return - building = TRUE - to_chat(user, "I start constructing a rack...") - if(do_after(user, 50, target = user, progress=TRUE)) - if(!user.temporarilyRemoveItemFromInventory(src)) - return - var/obj/structure/rack/R = new /obj/structure/rack(user.loc) - user.visible_message("[user] assembles \a [R].\ - ", "I assemble \a [R].") - R.add_fingerprint(user) - qdel(src) - building = FALSE +/obj/structure/table/optable/Initialize() + . = ..() + +/obj/structure/table/optable/tablepush(mob/living/user, mob/living/pushed_mob) + pushed_mob.forceMove(loc) + pushed_mob.set_resting(TRUE, TRUE) + visible_message("[user] has laid [pushed_mob] on [src].") + check_patient() + +/obj/structure/table/optable/proc/check_patient() + var/mob/living/carbon/human/M = locate(/mob/living/carbon/human, loc) + if(M) + if(M.resting) + patient = M + return TRUE + else + patient = null + return FALSE diff --git a/code/game/objects/structures/toilet.dm b/code/game/objects/structures/toilet.dm new file mode 100644 index 0000000000..ac86906ac5 --- /dev/null +++ b/code/game/objects/structures/toilet.dm @@ -0,0 +1,85 @@ +/obj/structure/toilet + name = "toilet" + desc = "" + icon = 'icons/roguetown/misc/structure.dmi' + icon_state = "toilet" + density = FALSE + anchored = TRUE + var/open = FALSE //if the lid is up + var/cistern = 1 //if the cistern bit is open + var/w_items = 0 //the combined w_class of all the items in the cistern + var/mob/living/swirlie = null //the mob being given a swirlie + var/buildstacktype + var/buildstackamount = 1 + +/obj/structure/toilet/Initialize() + . = ..() + +/obj/structure/toilet/attack_hand(mob/living/user) + . = ..() + if(.) + return + + if(cistern && user.CanReach(src)) + if(!contents.len) + to_chat(user, "The toilet is empty.") + else + var/obj/item/I = pick(contents) + if(ishuman(user)) + user.put_in_hands(I) + else + I.forceMove(drop_location()) + to_chat(user, "I find [I] in the toilet.") + w_items -= I.w_class + +/obj/structure/toilet/update_icon_state() + icon_state = "toilet" + +/obj/structure/toilet/deconstruct() + if(!(flags_1 & NODECONSTRUCT_1)) + if(buildstacktype) + new buildstacktype(loc,buildstackamount) + else + for(var/i in custom_materials) + var/datum/material/M = i + new M.sheet_type(loc, FLOOR(custom_materials[M] / MINERAL_MATERIAL_AMOUNT, 1)) + ..() + +/obj/structure/toilet/attackby(obj/item/I, mob/living/user, params) + add_fingerprint(user) + if(I.tool_behaviour == TOOL_CROWBAR) + to_chat(user, "I start to [cistern ? "replace the lid on the cistern" : "lift the lid off the cistern"]...") + playsound(loc, 'sound/blank.ogg', 50, TRUE) + if(I.use_tool(src, user, 30)) + user.visible_message("[user] [cistern ? "replaces the lid on the cistern" : "lifts the lid off the cistern"]!", "I [cistern ? "replace the lid on the cistern" : "lift the lid off the cistern"]!", "I hear grinding porcelain.") + cistern = !cistern + update_icon() + else if(I.tool_behaviour == TOOL_WRENCH && !(flags_1&NODECONSTRUCT_1)) + I.play_tool_sound(src) + deconstruct() + else if(cistern) + if(user.used_intent.type != INTENT_HARM) + if(I.w_class > WEIGHT_CLASS_NORMAL) + to_chat(user, "[I] does not fit!") + return + if(w_items + I.w_class > WEIGHT_CLASS_HUGE) + to_chat(user, "The toilet is full!") + return + if(!user.transferItemToLoc(I, src)) + to_chat(user, "\The [I] is stuck to your hand, you cannot put it in the cistern!") + return + w_items += I.w_class + to_chat(user, "I carefully place [I] into the toilet.") + + else if(istype(I, /obj/item/reagent_containers)) + if (!open) + return + if(istype(I, /obj/item/reagent_containers/food/snacks/monkeycube)) + var/obj/item/reagent_containers/food/snacks/monkeycube/cube = I + cube.Expand() + return + var/obj/item/reagent_containers/RG = I + RG.reagents.add_reagent(/datum/reagent/water/gross, min(RG.volume - RG.reagents.total_volume, RG.amount_per_transfer_from_this)) + to_chat(user, "I fill [RG] from [src].") + else + return ..() diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm deleted file mode 100644 index bbbcb3e42d..0000000000 --- a/code/game/objects/structures/watercloset.dm +++ /dev/null @@ -1,473 +0,0 @@ -/obj/structure/toilet - name = "toilet" - desc = "" - icon = 'icons/roguetown/misc/structure.dmi' - icon_state = "toilet" - density = FALSE - anchored = TRUE - var/open = FALSE //if the lid is up - var/cistern = 1 //if the cistern bit is open - var/w_items = 0 //the combined w_class of all the items in the cistern - var/mob/living/swirlie = null //the mob being given a swirlie - var/buildstacktype = /obj/item/stack/sheet/metal //they're metal now, shut up - var/buildstackamount = 1 - -/obj/structure/toilet/Initialize() - . = ..() -// open = round(rand(0, 1)) -// update_icon() - - -/obj/structure/toilet/attack_hand(mob/living/user) - . = ..() - if(.) - return -/* if(swirlie) - user.changeNext_move(CLICK_CD_MELEE) - playsound(src.loc, "swing_hit", 25, TRUE) - swirlie.visible_message("[user] slams the toilet seat onto [swirlie]'s head!", "[user] slams the toilet seat onto your head!", "I hear reverberating porcelain.") - swirlie.adjustBruteLoss(5) - - else if(user.pulling && user.used_intent.type == INTENT_GRAB && isliving(user.pulling)) - user.changeNext_move(CLICK_CD_MELEE) - var/mob/living/GM = user.pulling - if(user.grab_state >= GRAB_AGGRESSIVE) - if(GM.loc != get_turf(src)) - to_chat(user, "[GM] needs to be on [src]!") - return - if(!swirlie) - if(open) - GM.visible_message("[user] starts to give [GM] a swirlie!", "[user] starts to give you a swirlie...") - swirlie = GM - if(do_after(user, 30, 0, target = src)) - GM.visible_message("[user] gives [GM] a swirlie!", "[user] gives you a swirlie!", "I hear a toilet flushing.") - if(iscarbon(GM)) - var/mob/living/carbon/C = GM - if(!C.internal) - C.adjustOxyLoss(5) - else - GM.adjustOxyLoss(5) - swirlie = null - else - playsound(src.loc, 'sound/blank.ogg', 25, TRUE) - GM.visible_message("[user] slams [GM.name] into [src]!", "[user] slams you into [src]!") - GM.adjustBruteLoss(5) - else - to_chat(user, "I need a tighter grip!")*/ - - if(cistern && user.CanReach(src)) - if(!contents.len) - to_chat(user, "The toilet is empty.") - else - var/obj/item/I = pick(contents) - if(ishuman(user)) - user.put_in_hands(I) - else - I.forceMove(drop_location()) - to_chat(user, "I find [I] in the toilet.") - w_items -= I.w_class -// else -// open = !open -// update_icon() - - -/obj/structure/toilet/update_icon_state() - icon_state = "toilet" - -/obj/structure/toilet/deconstruct() - if(!(flags_1 & NODECONSTRUCT_1)) - if(buildstacktype) - new buildstacktype(loc,buildstackamount) - else - for(var/i in custom_materials) - var/datum/material/M = i - new M.sheet_type(loc, FLOOR(custom_materials[M] / MINERAL_MATERIAL_AMOUNT, 1)) - ..() - -/obj/structure/toilet/attackby(obj/item/I, mob/living/user, params) - add_fingerprint(user) - if(I.tool_behaviour == TOOL_CROWBAR) - to_chat(user, "I start to [cistern ? "replace the lid on the cistern" : "lift the lid off the cistern"]...") - playsound(loc, 'sound/blank.ogg', 50, TRUE) - if(I.use_tool(src, user, 30)) - user.visible_message("[user] [cistern ? "replaces the lid on the cistern" : "lifts the lid off the cistern"]!", "I [cistern ? "replace the lid on the cistern" : "lift the lid off the cistern"]!", "I hear grinding porcelain.") - cistern = !cistern - update_icon() - else if(I.tool_behaviour == TOOL_WRENCH && !(flags_1&NODECONSTRUCT_1)) - I.play_tool_sound(src) - deconstruct() - else if(cistern) - if(user.used_intent.type != INTENT_HARM) - if(I.w_class > WEIGHT_CLASS_NORMAL) - to_chat(user, "[I] does not fit!") - return - if(w_items + I.w_class > WEIGHT_CLASS_HUGE) - to_chat(user, "The toilet is full!") - return - if(!user.transferItemToLoc(I, src)) - to_chat(user, "\The [I] is stuck to your hand, you cannot put it in the cistern!") - return - w_items += I.w_class - to_chat(user, "I carefully place [I] into the toilet.") - - else if(istype(I, /obj/item/reagent_containers)) - if (!open) - return - if(istype(I, /obj/item/reagent_containers/food/snacks/monkeycube)) - var/obj/item/reagent_containers/food/snacks/monkeycube/cube = I - cube.Expand() - return - var/obj/item/reagent_containers/RG = I - RG.reagents.add_reagent(/datum/reagent/water/gross, min(RG.volume - RG.reagents.total_volume, RG.amount_per_transfer_from_this)) - to_chat(user, "I fill [RG] from [src].") - else - return ..() - -/obj/structure/toilet/secret - var/obj/item/secret - var/secret_type = null - -/obj/structure/toilet/secret/Initialize(mapload) - . = ..() - if (secret_type) - secret = new secret_type(src) - secret.desc += " It's a secret!" - w_items += secret.w_class - contents += secret - -/obj/structure/toilet/greyscale - material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR - buildstacktype = null - -/obj/structure/urinal - name = "urinal" - desc = "" - icon = 'icons/obj/watercloset.dmi' - icon_state = "urinal" - density = FALSE - anchored = TRUE - var/exposed = 0 // can you currently put an item inside - var/obj/item/hiddenitem = null // what's in the urinal - -/obj/structure/urinal/Initialize() - . = ..() - hiddenitem = new /obj/item/reagent_containers/food/snacks/urinalcake - -/obj/structure/urinal/attack_hand(mob/user) - . = ..() - if(.) - return - if(user.pulling && user.used_intent.type == INTENT_GRAB && isliving(user.pulling)) - var/mob/living/GM = user.pulling - if(user.grab_state >= GRAB_AGGRESSIVE) - if(GM.loc != get_turf(src)) - to_chat(user, "[GM.name] needs to be on [src].") - return - user.changeNext_move(CLICK_CD_MELEE) - user.visible_message("[user] slams [GM] into [src]!", "I slam [GM] into [src]!") - GM.adjustBruteLoss(8) - else - to_chat(user, "I need a tighter grip!") - - else if(exposed) - if(!hiddenitem) - to_chat(user, "There is nothing in the drain holder!") - else - if(ishuman(user)) - user.put_in_hands(hiddenitem) - else - hiddenitem.forceMove(get_turf(src)) - to_chat(user, "I fish [hiddenitem] out of the drain enclosure.") - hiddenitem = null - else - ..() - -/obj/structure/urinal/attackby(obj/item/I, mob/living/user, params) - if(exposed) - if (hiddenitem) - to_chat(user, "There is already something in the drain enclosure!") - return - if(I.w_class > 1) - to_chat(user, "[I] is too large for the drain enclosure.") - return - if(!user.transferItemToLoc(I, src)) - to_chat(user, "\[I] is stuck to your hand, you cannot put it in the drain enclosure!") - return - hiddenitem = I - to_chat(user, "I place [I] into the drain enclosure.") - else - return ..() - -/obj/structure/urinal/screwdriver_act(mob/living/user, obj/item/I) - if(..()) - return TRUE - to_chat(user, "I start to [exposed ? "screw the cap back into place" : "unscrew the cap to the drain protector"]...") - playsound(loc, 'sound/blank.ogg', 50, TRUE) - if(I.use_tool(src, user, 20)) - user.visible_message("[user] [exposed ? "screws the cap back into place" : "unscrew the cap to the drain protector"]!", - "I [exposed ? "screw the cap back into place" : "unscrew the cap on the drain"]!", - "I hear metal and squishing noises.") - exposed = !exposed - return TRUE - - -/obj/item/reagent_containers/food/snacks/urinalcake - name = "urinal cake" - desc = "" - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "urinalcake" - w_class = WEIGHT_CLASS_TINY - list_reagents = list(/datum/reagent/chlorine = 3, /datum/reagent/ammonia = 1) - foodtype = TOXIC | GROSS - -/obj/item/reagent_containers/food/snacks/urinalcake/attack_self(mob/living/user) - user.visible_message("[user] squishes [src]!", "I squish [src].", "I hear a squish.") - icon_state = "urinalcake_squish" - addtimer(VARSET_CALLBACK(src, icon_state, "urinalcake"), 8) - -/obj/item/bikehorn/rubberducky - name = "rubber ducky" - desc = "" //thanks doohl - icon = 'icons/obj/watercloset.dmi' - icon_state = "rubberducky" - item_state = "rubberducky" - - -/obj/structure/sink - name = "sink" - icon = 'icons/obj/watercloset.dmi' - icon_state = "sink" - desc = "" - anchored = TRUE - var/busy = FALSE //Something's being washed at the moment - var/dispensedreagent = /datum/reagent/water // for whenever plumbing happens - var/buildstacktype = /obj/item/stack/sheet/metal - var/buildstackamount = 1 - -/obj/structure/sink/attack_hand(mob/living/user) - . = ..() - if(.) - return - if(!user || !istype(user)) - return - if(!iscarbon(user)) - return - if(!Adjacent(user)) - return - - if(busy) - to_chat(user, "Someone's already washing here!") - return - var/selected_area = parse_zone(user.zone_selected) - var/washing_face = 0 - if(selected_area in list(BODY_ZONE_HEAD, BODY_ZONE_PRECISE_MOUTH, BODY_ZONE_PRECISE_R_EYE)) - washing_face = 1 - user.visible_message("[user] starts washing [user.p_their()] [washing_face ? "face" : "hands"]...", \ - "I start washing your [washing_face ? "face" : "hands"]...") - busy = TRUE - - if(!do_after(user, 40, target = src)) - busy = FALSE - return - - busy = FALSE - - user.visible_message("[user] washes [user.p_their()] [washing_face ? "face" : "hands"] using [src].", \ - "I wash your [washing_face ? "face" : "hands"] using [src].") - if(washing_face) - SEND_SIGNAL(user, COMSIG_COMPONENT_CLEAN_FACE_ACT, CLEAN_STRENGTH_BLOOD) - if(ishuman(user)) - var/mob/living/carbon/human/H = user - H.lip_style = null //Washes off lipstick - H.lip_color = initial(H.lip_color) - H.regenerate_icons() - user.drowsyness = max(user.drowsyness - rand(2,3), 0) //Washing your face wakes you up if you're falling asleep - else - SEND_SIGNAL(user, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) - -/obj/structure/sink/attackby(obj/item/O, mob/living/user, params) - if(busy) - to_chat(user, "Someone's already washing here!") - return - - if(istype(O, /obj/item/reagent_containers)) - var/obj/item/reagent_containers/RG = O - if(RG.is_refillable()) - if(!RG.reagents.holder_full()) - RG.reagents.add_reagent(dispensedreagent, min(RG.volume - RG.reagents.total_volume, RG.amount_per_transfer_from_this)) - to_chat(user, "I fill [RG] from [src].") - return TRUE - to_chat(user, "\The [RG] is full.") - return FALSE - - if(istype(O, /obj/item/mop)) - O.reagents.add_reagent(dispensedreagent, 5) - to_chat(user, "I wet [O] in [src].") - playsound(loc, 'sound/blank.ogg', 25, TRUE) - return - - if(O.tool_behaviour == TOOL_WRENCH && !(flags_1&NODECONSTRUCT_1)) - O.play_tool_sound(src) - deconstruct() - return - - if(istype(O, /obj/item/stack/medical/gauze)) - var/obj/item/stack/medical/gauze/G = O - new /obj/item/reagent_containers/glass/rag(src.loc) - to_chat(user, "I tear off a strip of gauze and make a rag.") - G.use(1) - return - - if(!istype(O)) - return - if(O.item_flags & ABSTRACT) //Abstract items like grabs won't wash. No-drop items will though because it's still technically an item in your hand. - return - - if(user.used_intent.type != INTENT_HARM) - to_chat(user, "I start washing [O]...") - busy = TRUE - if(!do_after(user, 40, target = src)) - busy = FALSE - return 1 - busy = FALSE - SEND_SIGNAL(O, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) - O.acid_level = 0 - create_reagents(5) - reagents.add_reagent(dispensedreagent, 5) - reagents.reaction(O, TOUCH) - user.visible_message("[user] washes [O] using [src].", \ - "I wash [O] using [src].") - return 1 - else - return ..() - -/obj/structure/sink/deconstruct() - if(!(flags_1 & NODECONSTRUCT_1)) - drop_materials() - ..() - -/obj/structure/sink/proc/drop_materials() - if(buildstacktype) - new buildstacktype(loc,buildstackamount) - else - for(var/i in custom_materials) - var/datum/material/M = i - new M.sheet_type(loc, FLOOR(custom_materials[M] / MINERAL_MATERIAL_AMOUNT, 1)) - -/obj/structure/sink/kitchen - name = "kitchen sink" - icon_state = "sink_alt" - - -/obj/structure/sink/puddle //splishy splashy ^_^ - name = "puddle" - desc = "" - icon_state = "puddle" - resistance_flags = UNACIDABLE - -//ATTACK HAND IGNORING PARENT RETURN VALUE -/obj/structure/sink/puddle/attack_hand(mob/M) - icon_state = "puddle-splash" - . = ..() - icon_state = "puddle" - -/obj/structure/sink/puddle/attackby(obj/item/O, mob/user, params) - icon_state = "puddle-splash" - . = ..() - icon_state = "puddle" - -/obj/structure/sink/puddle/deconstruct(disassembled = TRUE) - qdel(src) - -/obj/structure/sink/greyscale - icon_state = "sink_greyscale" - material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR - buildstacktype = null - -//Shower Curtains// -//Defines used are pre-existing in layers.dm// - -/obj/structure/curtain - name = "curtain" - desc = "" - icon = 'icons/obj/watercloset.dmi' - icon_state = "bathroom-open" - var/icon_type = "bathroom"//used in making the icon state - color = "#ACD1E9" //Default color, didn't bother hardcoding other colors, mappers can and should easily change it. - alpha = 200 //Mappers can also just set this to 255 if they want curtains that can't be seen through - layer = SIGN_LAYER - anchored = TRUE - opacity = 0 - density = FALSE - var/open = TRUE - -/obj/structure/curtain/proc/toggle() - open = !open - update_icon() - -/obj/structure/curtain/update_icon() - if(!open) - icon_state = "[icon_type]-closed" - layer = WALL_OBJ_LAYER - density = TRUE - open = FALSE - - else - icon_state = "[icon_type]-open" - layer = SIGN_LAYER - density = FALSE - open = TRUE - -/obj/structure/curtain/attackby(obj/item/W, mob/user) - if (istype(W, /obj/item/toy/crayon)) - color = input(user,"","Choose Color",color) as color - else - return ..() - -/obj/structure/curtain/wrench_act(mob/living/user, obj/item/I) - ..() - default_unfasten_wrench(user, I, 50) - return TRUE - -/obj/structure/curtain/wirecutter_act(mob/living/user, obj/item/I) - ..() - if(anchored) - return TRUE - - user.visible_message("[user] cuts apart [src].", - "I start to cut apart [src].", "I hear cutting.") - if(I.use_tool(src, user, 50, volume=100) && !anchored) - to_chat(user, "I cut apart [src].") - deconstruct() - - return TRUE - - -/obj/structure/curtain/attack_hand(mob/user) - . = ..() - if(.) - return - playsound(loc, 'sound/blank.ogg', 50, TRUE) - toggle() - -/obj/structure/curtain/deconstruct(disassembled = TRUE) - new /obj/item/stack/sheet/cloth (loc, 2) - new /obj/item/stack/sheet/plastic (loc, 2) - new /obj/item/stack/rods (loc, 1) - qdel(src) - -/obj/structure/curtain/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) - switch(damage_type) - if(BRUTE) - if(damage_amount) - playsound(src.loc, 'sound/blank.ogg', 80, TRUE) - else - playsound(loc, 'sound/blank.ogg', 50, TRUE) - if(BURN) - playsound(loc, 'sound/blank.ogg', 80, TRUE) - -/obj/structure/curtain/bounty - icon_type = "bounty" - icon_state = "bounty-open" - color = null - alpha = 255 diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm deleted file mode 100644 index 32acf655a8..0000000000 --- a/code/game/objects/structures/window.dm +++ /dev/null @@ -1,790 +0,0 @@ -/obj/structure/window - name = "window" - desc = "" - icon_state = "window" - density = TRUE - layer = ABOVE_OBJ_LAYER //Just above doors - pressure_resistance = 4*ONE_ATMOSPHERE - anchored = TRUE //initially is 0 for tile smoothing - flags_1 = ON_BORDER_1 - max_integrity = 25 - can_be_unanchored = TRUE - resistance_flags = ACID_PROOF - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 100) - CanAtmosPass = ATMOS_PASS_PROC - rad_insulation = RAD_VERY_LIGHT_INSULATION - rad_flags = RAD_PROTECT_CONTENTS - var/ini_dir = null - var/state = WINDOW_OUT_OF_FRAME - var/reinf = FALSE - var/heat_resistance = 800 - var/decon_speed = 30 - var/wtype = "glass" - var/fulltile = FALSE - var/glass_type = /obj/item/stack/sheet/glass - var/glass_amount = 1 - var/mutable_appearance/crack_overlay - var/real_explosion_block //ignore this, just use explosion_block - var/breaksound = "shatter" - var/hitsound = 'sound/blank.ogg' - - -/obj/structure/window/examine(mob/user) - . = ..() - if(reinf) - if(anchored && state == WINDOW_SCREWED_TO_FRAME) - . += "The window is screwed to the frame." - else if(anchored && state == WINDOW_IN_FRAME) - . += "The window is unscrewed but pried into the frame." - else if(anchored && state == WINDOW_OUT_OF_FRAME) - . += "The window is out of the frame, but could be pried in. It is screwed to the floor." - else if(!anchored) - . += "The window is unscrewed from the floor, and could be deconstructed by wrenching." - else - if(anchored) - . += "The window is screwed to the floor." - else - . += "The window is unscrewed from the floor, and could be deconstructed by wrenching." - -/obj/structure/window/Initialize(mapload, direct) - . = ..() - if(direct) - setDir(direct) - if(reinf && anchored) - state = RWINDOW_SECURE - - ini_dir = dir - air_update_turf(1) - - if(fulltile) - setDir() - - //windows only block while reinforced and fulltile, so we'll use the proc - real_explosion_block = explosion_block - explosion_block = EXPLOSION_BLOCK_PROC - -/obj/structure/window/ComponentInitialize() - . = ..() - AddComponent(/datum/component/simple_rotation,ROTATION_ALTCLICK | ROTATION_CLOCKWISE | ROTATION_COUNTERCLOCKWISE | ROTATION_VERBS ,null,CALLBACK(src, PROC_REF(can_be_rotated)),CALLBACK(src,PROC_REF(after_rotation))) - -/obj/structure/window/narsie_act() - add_atom_colour(NARSIE_WINDOW_COLOUR, FIXED_COLOUR_PRIORITY) - -/obj/structure/window/singularity_pull() - -/obj/structure/window/setDir(direct) - if(!fulltile) - ..() - else - ..(FULLTILE_WINDOW_DIR) - -/obj/structure/window/CanPass(atom/movable/mover, turf/target) - if(istype(mover) && (mover.pass_flags & PASSGLASS)) - return 1 - if(dir == FULLTILE_WINDOW_DIR) - return 0 //full tile window, you can't move into it! - if(get_dir(loc, target) == dir) - return !density - if(istype(mover, /obj/structure/window)) - var/obj/structure/window/W = mover - if(!valid_window_location(loc, W.ini_dir)) - return FALSE - return 1 - -/obj/structure/window/CheckExit(atom/movable/O, turf/target) - if(istype(O) && (O.pass_flags & PASSGLASS)) - return 1 - if(get_dir(O.loc, target) == dir) - return 0 - return 1 - -/obj/structure/window/attack_tk(mob/user) - user.changeNext_move(CLICK_CD_MELEE) - user.visible_message("Something knocks on [src].") - add_fingerprint(user) - playsound(src, 'sound/blank.ogg', 50, TRUE) - -/obj/structure/window/attack_hulk(mob/living/carbon/human/user, does_attack_animation = 0) - if(!can_be_reached(user)) - return - . = ..() - -/obj/structure/window/attack_hand(mob/user) - . = ..() - if(.) - return - if(!can_be_reached(user)) - return - user.changeNext_move(CLICK_CD_MELEE) - user.visible_message("[user] knocks on [src].", \ - "I knock on [src].") - add_fingerprint(user) - playsound(src, 'sound/blank.ogg', 50, TRUE) - -/obj/structure/window/attack_paw(mob/user) - return attack_hand(user) - -/obj/structure/window/attack_generic(mob/user, damage_amount = 0, damage_type = BRUTE, damage_flag = 0, sound_effect = 1) //used by attack_alien, attack_animal, and attack_slime - if(!can_be_reached(user)) - return - ..() - -/obj/structure/window/attackby(obj/item/I, mob/living/user, params) - if(!can_be_reached(user)) - return 1 //skip the afterattack - - add_fingerprint(user) - - if(I.tool_behaviour == TOOL_WELDER && user.used_intent.type == INTENT_HELP) - if(obj_integrity < max_integrity) - if(!I.tool_start_check(user, amount=0)) - return - - to_chat(user, "I begin repairing [src]...") - if(I.use_tool(src, user, 40, volume=50)) - obj_integrity = max_integrity - update_nearby_icons() - to_chat(user, "I repair [src].") - else - to_chat(user, "[src] is already in good condition!") - return - - if(!(flags_1&NODECONSTRUCT_1) && !(reinf && state >= RWINDOW_FRAME_BOLTED)) - if(I.tool_behaviour == TOOL_SCREWDRIVER) - to_chat(user, "I begin to [anchored ? "unscrew the window from":"screw the window to"] the floor...") - if(I.use_tool(src, user, decon_speed, volume = 75, extra_checks = CALLBACK(src, PROC_REF(check_anchored), anchored))) - setAnchored(!anchored) - to_chat(user, "I [anchored ? "fasten the window to":"unfasten the window from"] the floor.") - return - else if(I.tool_behaviour == TOOL_WRENCH && !anchored) - to_chat(user, "I begin to disassemble [src]...") - if(I.use_tool(src, user, decon_speed, volume = 75, extra_checks = CALLBACK(src, PROC_REF(check_state_and_anchored), state, anchored))) - var/obj/item/stack/sheet/G = new glass_type(user.loc, glass_amount) - G.add_fingerprint(user) - playsound(src, 'sound/blank.ogg', 50, TRUE) - to_chat(user, "I successfully disassemble [src].") - qdel(src) - return - else if(I.tool_behaviour == TOOL_CROWBAR && reinf && (state == WINDOW_OUT_OF_FRAME) && anchored) - to_chat(user, "I begin to lever the window into the frame...") - if(I.use_tool(src, user, 100, volume = 75, extra_checks = CALLBACK(src, PROC_REF(check_state_and_anchored), state, anchored))) - state = RWINDOW_SECURE - to_chat(user, "I pry the window into the frame.") - return - - return ..() - -/obj/structure/window/setAnchored(anchorvalue) - ..() - air_update_turf(TRUE) - update_nearby_icons() - -/obj/structure/window/proc/check_state(checked_state) - if(state == checked_state) - return TRUE - -/obj/structure/window/proc/check_anchored(checked_anchored) - if(anchored == checked_anchored) - return TRUE - -/obj/structure/window/proc/check_state_and_anchored(checked_state, checked_anchored) - return check_state(checked_state) && check_anchored(checked_anchored) - -/obj/structure/window/proc/can_be_reached(mob/user) - if(!fulltile) - if(get_dir(user,src) & dir) - for(var/obj/O in loc) - if(!O.CanPass(user, user.loc, 1)) - return 0 - return 1 - -/obj/structure/window/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1) - . = ..() - if(.) //received damage - update_nearby_icons() - -/obj/structure/window/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) - switch(damage_type) - if(BRUTE) - if(damage_amount) - playsound(src, hitsound, 75, TRUE) - else - playsound(src, 'sound/blank.ogg', 50, TRUE) - if(BURN) - playsound(src, 'sound/blank.ogg', 100, TRUE) - - -/obj/structure/window/deconstruct(disassembled = TRUE) - if(QDELETED(src)) - return - if(!disassembled) - playsound(src, breaksound, 70, TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) - for(var/obj/item/shard/debris in spawnDebris(drop_location())) - transfer_fingerprints_to(debris) // transfer fingerprints to shards only - qdel(src) - update_nearby_icons() - -/obj/structure/window/proc/spawnDebris(location) - . = list() - . += new /obj/item/shard(location) - . += new /obj/effect/decal/cleanable/glass(location) - if (reinf) - . += new /obj/item/stack/rods(location, (fulltile ? 2 : 1)) - if (fulltile) - . += new /obj/item/shard(location) - -/obj/structure/window/proc/can_be_rotated(mob/user,rotation_type) - if(anchored) - to_chat(user, "[src] cannot be rotated while it is fastened to the floor!") - return FALSE - - var/target_dir = turn(dir, rotation_type == ROTATION_CLOCKWISE ? -90 : 90) - - if(!valid_window_location(loc, target_dir)) - to_chat(user, "[src] cannot be rotated in that direction!") - return FALSE - return TRUE - -/obj/structure/window/proc/after_rotation(mob/user,rotation_type) - air_update_turf(1) - ini_dir = dir - add_fingerprint(user) - -/obj/structure/window/Destroy() - density = FALSE - air_update_turf(1) - update_nearby_icons() - return ..() - - -/obj/structure/window/Move() - var/turf/T = loc - . = ..() - setDir(ini_dir) - move_update_air(T) - -/obj/structure/window/CanAtmosPass(turf/T) - if(!anchored || !density) - return TRUE - return !(FULLTILE_WINDOW_DIR == dir || dir == get_dir(loc, T)) - -//This proc is used to update the icons of nearby windows. -/obj/structure/window/proc/update_nearby_icons() - update_icon() - if(smooth) - queue_smooth_neighbors(src) - -//merges adjacent full-tile windows into one -/obj/structure/window/update_icon() - if(!QDELETED(src)) - if(!fulltile) - return - - var/ratio = obj_integrity / max_integrity - ratio = CEILING(ratio*4, 1) * 25 - - if(smooth) - queue_smooth(src) - - cut_overlay(crack_overlay) - if(ratio > 75) - return - crack_overlay = mutable_appearance('icons/obj/structures.dmi', "damage[ratio]", -(layer+0.1)) - add_overlay(crack_overlay) - -/obj/structure/window/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) - - if(exposed_temperature > (T0C + heat_resistance)) - take_damage(round(exposed_volume / 100), BURN, 0, 0) - ..() - -/obj/structure/window/get_dumping_location(obj/item/storage/source,mob/user) - return null - -/obj/structure/window/CanAStarPass(ID, to_dir) - if(!density) - return 1 - if((dir == FULLTILE_WINDOW_DIR) || (dir == to_dir)) - return 0 - - return 1 - -/obj/structure/window/GetExplosionBlock() - return reinf && fulltile ? real_explosion_block : 0 - -/obj/structure/window/spawner/east - dir = EAST - -/obj/structure/window/spawner/west - dir = WEST - -/obj/structure/window/spawner/north - dir = NORTH - -/obj/structure/window/unanchored - anchored = FALSE - -/obj/structure/window/reinforced - name = "reinforced window" - desc = "" - icon_state = "rwindow" - reinf = TRUE - heat_resistance = 1600 - armor = list("melee" = 80, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 25, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 100) - max_integrity = 75 - explosion_block = 1 - damage_deflection = 11 - state = RWINDOW_SECURE - glass_type = /obj/item/stack/sheet/rglass - rad_insulation = RAD_HEAVY_INSULATION - -//this is shitcode but all of construction is shitcode and needs a refactor, it works for now -//If you find this like 4 years later and construction still hasn't been refactored, I'm so sorry for this -/obj/structure/window/reinforced/attackby(obj/item/I, mob/living/user, params) - switch(state) - if(RWINDOW_SECURE) - if(I.tool_behaviour == TOOL_WELDER && user.used_intent.type == INTENT_HARM) - user.visible_message("[user] holds \the [I] to the security screws on \the [src]...", - "I begin heating the security screws on \the [src]...") - if(I.use_tool(src, user, 150, volume = 100)) - to_chat(user, "The security bolts are glowing white hot and look ready to be removed.") - state = RWINDOW_BOLTS_HEATED - addtimer(CALLBACK(src, PROC_REF(cool_bolts)), 300) - return - if(RWINDOW_BOLTS_HEATED) - if(I.tool_behaviour == TOOL_SCREWDRIVER) - user.visible_message("[user] digs into the heated security screws and starts removing them...", - "I dig into the heated screws hard and they start turning...") - if(I.use_tool(src, user, 50, volume = 50)) - state = RWINDOW_BOLTS_OUT - to_chat(user, "The screws come out, and a gap forms around the edge of the pane.") - return - if(RWINDOW_BOLTS_OUT) - if(I.tool_behaviour == TOOL_CROWBAR) - user.visible_message("[user] wedges \the [I] into the gap in the frame and starts prying...", - "I wedge \the [I] into the gap in the frame and start prying...") - if(I.use_tool(src, user, 40, volume = 50)) - state = RWINDOW_POPPED - to_chat(user, "The panel pops out of the frame, exposing some thin metal bars that looks like they can be cut.") - return - if(RWINDOW_POPPED) - if(I.tool_behaviour == TOOL_WIRECUTTER) - user.visible_message("[user] starts cutting the exposed bars on \the [src]...", - "I start cutting the exposed bars on \the [src]") - if(I.use_tool(src, user, 20, volume = 50)) - state = RWINDOW_BARS_CUT - to_chat(user, "The panels falls out of the way exposing the frame bolts.") - return - if(RWINDOW_BARS_CUT) - if(I.tool_behaviour == TOOL_WRENCH) - user.visible_message("[user] starts unfastening \the [src] from the frame...", - "I start unfastening the bolts from the frame...") - if(I.use_tool(src, user, 40, volume = 50)) - to_chat(user, "I unscrew the bolts from the frame and the window pops loose.") - state = WINDOW_OUT_OF_FRAME - setAnchored(FALSE) - return - return ..() - -/obj/structure/window/proc/cool_bolts() - if(state == RWINDOW_BOLTS_HEATED) - state = RWINDOW_SECURE - visible_message("The bolts on \the [src] look like they've cooled off...") - -/obj/structure/window/reinforced/examine(mob/user) - . = ..() - switch(state) - if(RWINDOW_SECURE) - . += "It's been screwed in with one way screws, you'd need to heat them to have any chance of backing them out." - if(RWINDOW_BOLTS_HEATED) - . += "The screws are glowing white hot, and you'll likely be able to unscrew them now." - if(RWINDOW_BOLTS_OUT) - . += "The screws have been removed, revealing a small gap you could fit a prying tool in." - if(RWINDOW_POPPED) - . += "The main plate of the window has popped out of the frame, exposing some bars that look like they can be cut." - if(RWINDOW_BARS_CUT) - . += "The main pane can be easily moved out of the way to reveal some bolts holding the frame in." - -/obj/structure/window/reinforced/spawner/east - dir = EAST - -/obj/structure/window/reinforced/spawner/west - dir = WEST - -/obj/structure/window/reinforced/spawner/north - dir = NORTH - -/obj/structure/window/reinforced/unanchored - anchored = FALSE - state = WINDOW_OUT_OF_FRAME - -/obj/structure/window/plasma - name = "plasma window" - desc = "" - icon_state = "plasmawindow" - reinf = FALSE - heat_resistance = 25000 - armor = list("melee" = 80, "bullet" = 5, "laser" = 0, "energy" = 0, "bomb" = 45, "bio" = 100, "rad" = 100, "fire" = 99, "acid" = 100) - max_integrity = 200 - explosion_block = 1 - glass_type = /obj/item/stack/sheet/plasmaglass - rad_insulation = RAD_NO_INSULATION - -/obj/structure/window/plasma/spawnDebris(location) - . = list() - . += new /obj/item/shard/plasma(location) - . += new /obj/effect/decal/cleanable/glass/plasma(location) - if (reinf) - . += new /obj/item/stack/rods(location, (fulltile ? 2 : 1)) - if (fulltile) - . += new /obj/item/shard/plasma(location) - -/obj/structure/window/plasma/spawner/east - dir = EAST - -/obj/structure/window/plasma/spawner/west - dir = WEST - -/obj/structure/window/plasma/spawner/north - dir = NORTH - -/obj/structure/window/plasma/unanchored - anchored = FALSE - -/obj/structure/window/plasma/reinforced - name = "reinforced plasma window" - desc = "" - icon_state = "plasmarwindow" - reinf = TRUE - heat_resistance = 50000 - armor = list("melee" = 80, "bullet" = 20, "laser" = 0, "energy" = 0, "bomb" = 60, "bio" = 100, "rad" = 100, "fire" = 99, "acid" = 100) - max_integrity = 500 - damage_deflection = 21 - explosion_block = 2 - glass_type = /obj/item/stack/sheet/plasmarglass - -//entirely copypasted code -//take this out when construction is made a component or otherwise modularized in some way -/obj/structure/window/plasma/reinforced/attackby(obj/item/I, mob/living/user, params) - switch(state) - if(RWINDOW_SECURE) - if(I.tool_behaviour == TOOL_WELDER && user.used_intent.type == INTENT_HARM) - user.visible_message("[user] holds \the [I] to the security screws on \the [src]...", - "I begin heating the security screws on \the [src]...") - if(I.use_tool(src, user, 180, volume = 100)) - to_chat(user, "The security screws are glowing white hot and look ready to be removed.") - state = RWINDOW_BOLTS_HEATED - addtimer(CALLBACK(src, PROC_REF(cool_bolts)), 300) - return - if(RWINDOW_BOLTS_HEATED) - if(I.tool_behaviour == TOOL_SCREWDRIVER) - user.visible_message("[user] digs into the heated security screws and starts removing them...", - "I dig into the heated screws hard and they start turning...") - if(I.use_tool(src, user, 80, volume = 50)) - state = RWINDOW_BOLTS_OUT - to_chat(user, "The screws come out, and a gap forms around the edge of the pane.") - return - if(RWINDOW_BOLTS_OUT) - if(I.tool_behaviour == TOOL_CROWBAR) - user.visible_message("[user] wedges \the [I] into the gap in the frame and starts prying...", - "I wedge \the [I] into the gap in the frame and start prying...") - if(I.use_tool(src, user, 50, volume = 50)) - state = RWINDOW_POPPED - to_chat(user, "The panel pops out of the frame, exposing some thin metal bars that looks like they can be cut.") - return - if(RWINDOW_POPPED) - if(I.tool_behaviour == TOOL_WIRECUTTER) - user.visible_message("[user] starts cutting the exposed bars on \the [src]...", - "I start cutting the exposed bars on \the [src]") - if(I.use_tool(src, user, 30, volume = 50)) - state = RWINDOW_BARS_CUT - to_chat(user, "The panels falls out of the way exposing the frame bolts.") - return - if(RWINDOW_BARS_CUT) - if(I.tool_behaviour == TOOL_WRENCH) - user.visible_message("[user] starts unfastening \the [src] from the frame...", - "I start unfastening the bolts from the frame...") - if(I.use_tool(src, user, 50, volume = 50)) - to_chat(user, "I unfasten the bolts from the frame and the window pops loose.") - state = WINDOW_OUT_OF_FRAME - setAnchored(FALSE) - return - return ..() - -/obj/structure/window/plasma/reinforced/examine(mob/user) - . = ..() - switch(state) - if(RWINDOW_SECURE) - . += "It's been screwed in with one way screws, you'd need to heat them to have any chance of backing them out." - if(RWINDOW_BOLTS_HEATED) - . += "The screws are glowing white hot, and you'll likely be able to unscrew them now." - if(RWINDOW_BOLTS_OUT) - . += "The screws have been removed, revealing a small gap you could fit a prying tool in." - if(RWINDOW_POPPED) - . += "The main plate of the window has popped out of the frame, exposing some bars that look like they can be cut." - if(RWINDOW_BARS_CUT) - . += "The main pane can be easily moved out of the way to reveal some bolts holding the frame in." - -/obj/structure/window/plasma/reinforced/spawner/east - dir = EAST - -/obj/structure/window/plasma/reinforced/spawner/west - dir = WEST - -/obj/structure/window/plasma/reinforced/spawner/north - dir = NORTH - -/obj/structure/window/plasma/reinforced/unanchored - anchored = FALSE - state = WINDOW_OUT_OF_FRAME - -/obj/structure/window/reinforced/tinted - name = "tinted window" - icon_state = "twindow" - opacity = 1 -/obj/structure/window/reinforced/tinted/frosted - name = "frosted window" - icon_state = "fwindow" - -/* Full Tile Windows (more obj_integrity) */ - -/obj/structure/window/fulltile - icon = 'icons/obj/smooth_structures/window.dmi' - icon_state = "window" - dir = FULLTILE_WINDOW_DIR - max_integrity = 50 - fulltile = TRUE - flags_1 = PREVENT_CLICK_UNDER_1 - smooth = SMOOTH_TRUE - canSmoothWith = list(/obj/structure/window/fulltile, /obj/structure/window/reinforced/fulltile, /obj/structure/window/reinforced/tinted/fulltile, /obj/structure/window/plasma/fulltile, /obj/structure/window/plasma/reinforced/fulltile) - glass_amount = 2 - -/obj/structure/window/fulltile/unanchored - anchored = FALSE - -/obj/structure/window/plasma/fulltile - icon = 'icons/obj/smooth_structures/plasma_window.dmi' - icon_state = "plasmawindow" - dir = FULLTILE_WINDOW_DIR - max_integrity = 300 - fulltile = TRUE - flags_1 = PREVENT_CLICK_UNDER_1 - smooth = SMOOTH_TRUE - canSmoothWith = list(/obj/structure/window/fulltile, /obj/structure/window/reinforced/fulltile, /obj/structure/window/reinforced/tinted/fulltile, /obj/structure/window/plasma/fulltile, /obj/structure/window/plasma/reinforced/fulltile) - glass_amount = 2 - -/obj/structure/window/plasma/fulltile/unanchored - anchored = FALSE - -/obj/structure/window/plasma/reinforced/fulltile - icon = 'icons/obj/smooth_structures/rplasma_window.dmi' - icon_state = "rplasmawindow" - dir = FULLTILE_WINDOW_DIR - state = RWINDOW_SECURE - max_integrity = 1000 - fulltile = TRUE - flags_1 = PREVENT_CLICK_UNDER_1 - smooth = SMOOTH_TRUE - glass_amount = 2 - -/obj/structure/window/plasma/reinforced/fulltile/unanchored - anchored = FALSE - state = WINDOW_OUT_OF_FRAME - -/obj/structure/window/reinforced/fulltile - icon = 'icons/obj/smooth_structures/reinforced_window.dmi' - icon_state = "r_window" - dir = FULLTILE_WINDOW_DIR - max_integrity = 150 - fulltile = TRUE - flags_1 = PREVENT_CLICK_UNDER_1 - smooth = SMOOTH_TRUE - state = RWINDOW_SECURE - canSmoothWith = list(/obj/structure/window/fulltile, /obj/structure/window/reinforced/fulltile, /obj/structure/window/reinforced/tinted/fulltile, /obj/structure/window/plasma/fulltile, /obj/structure/window/plasma/reinforced/fulltile) - level = 3 - glass_amount = 2 - -/obj/structure/window/reinforced/fulltile/unanchored - anchored = FALSE - state = WINDOW_OUT_OF_FRAME - -/obj/structure/window/reinforced/tinted/fulltile - icon = 'icons/obj/smooth_structures/tinted_window.dmi' - icon_state = "tinted_window" - dir = FULLTILE_WINDOW_DIR - fulltile = TRUE - flags_1 = PREVENT_CLICK_UNDER_1 - smooth = SMOOTH_TRUE - canSmoothWith = list(/obj/structure/window/fulltile, /obj/structure/window/reinforced/fulltile, /obj/structure/window/reinforced/tinted/fulltile, /obj/structure/window/plasma/fulltile, /obj/structure/window/plasma/reinforced/fulltile) - level = 3 - glass_amount = 2 - -/obj/structure/window/reinforced/fulltile/ice - icon = 'icons/obj/smooth_structures/rice_window.dmi' - icon_state = "ice_window" - max_integrity = 150 - canSmoothWith = list(/obj/structure/window/fulltile, /obj/structure/window/reinforced/fulltile, /obj/structure/window/reinforced/tinted/fulltile, /obj/structure/window/plasma/fulltile, /obj/structure/window/plasma/reinforced/fulltile) - level = 3 - glass_amount = 2 - -/obj/structure/window/shuttle - name = "shuttle window" - desc = "" - icon = 'icons/obj/smooth_structures/shuttle_window.dmi' - icon_state = "shuttle_window" - dir = FULLTILE_WINDOW_DIR - max_integrity = 150 - wtype = "shuttle" - fulltile = TRUE - flags_1 = PREVENT_CLICK_UNDER_1 - reinf = TRUE - heat_resistance = 1600 - armor = list("melee" = 90, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 100) - smooth = SMOOTH_TRUE - canSmoothWith = null - explosion_block = 3 - level = 3 - glass_type = /obj/item/stack/sheet/titaniumglass - glass_amount = 2 - -/obj/structure/window/shuttle/narsie_act() - add_atom_colour("#3C3434", FIXED_COLOUR_PRIORITY) - -/obj/structure/window/shuttle/tinted - opacity = TRUE - -/obj/structure/window/shuttle/unanchored - anchored = FALSE - -/obj/structure/window/plasma/reinforced/plastitanium - name = "plastitanium window" - desc = "" - icon = 'icons/obj/smooth_structures/plastitanium_window.dmi' - icon_state = "plastitanium_window" - dir = FULLTILE_WINDOW_DIR - max_integrity = 200 - wtype = "shuttle" - fulltile = TRUE - flags_1 = PREVENT_CLICK_UNDER_1 - heat_resistance = 1600 - armor = list("melee" = 95, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 100) - smooth = SMOOTH_TRUE - canSmoothWith = null - explosion_block = 3 - damage_deflection = 11 //The same as normal reinforced windows. - level = 3 - glass_type = /obj/item/stack/sheet/plastitaniumglass - glass_amount = 2 - rad_insulation = RAD_HEAVY_INSULATION - -/obj/structure/window/plasma/reinforced/plastitanium/unanchored - anchored = FALSE - state = WINDOW_OUT_OF_FRAME - -/obj/structure/window/paperframe - name = "paper frame" - desc = "" - icon = 'icons/obj/smooth_structures/paperframes.dmi' - icon_state = "frame" - dir = FULLTILE_WINDOW_DIR - opacity = TRUE - max_integrity = 15 - fulltile = TRUE - flags_1 = PREVENT_CLICK_UNDER_1 - smooth = SMOOTH_TRUE - canSmoothWith = list(/obj/structure/window/paperframe, /obj/structure/mineral_door/paperframe) - glass_amount = 2 - glass_type = /obj/item/stack/sheet/paperframes - heat_resistance = 233 - decon_speed = 10 - CanAtmosPass = ATMOS_PASS_YES - resistance_flags = FLAMMABLE - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - breaksound = 'sound/blank.ogg' - hitsound = 'sound/blank.ogg' - var/static/mutable_appearance/torn = mutable_appearance('icons/obj/smooth_structures/paperframes.dmi',icon_state = "torn", layer = ABOVE_OBJ_LAYER - 0.1) - var/static/mutable_appearance/paper = mutable_appearance('icons/obj/smooth_structures/paperframes.dmi',icon_state = "paper", layer = ABOVE_OBJ_LAYER - 0.1) - -/obj/structure/window/paperframe/Initialize() - . = ..() - update_icon() - -/obj/structure/window/paperframe/examine(mob/user) - . = ..() - if(obj_integrity < max_integrity) - . += "It looks a bit damaged, you may be able to fix it with some paper." - -/obj/structure/window/paperframe/spawnDebris(location) - . = list(new /obj/item/stack/sheet/mineral/wood(location)) - for (var/i in 1 to rand(1,4)) - . += new /obj/item/paper/natural(location) - -/obj/structure/window/paperframe/attack_hand(mob/user) - . = ..() - if(.) - return - add_fingerprint(user) - if(user.used_intent.type != INTENT_HARM) - user.changeNext_move(CLICK_CD_MELEE) - user.visible_message("[user] knocks on [src].") - playsound(src, "pageturn", 50, TRUE) - else - take_damage(4,BRUTE,"melee", 0) - playsound(src, hitsound, 50, TRUE) - if(!QDELETED(src)) - user.visible_message("[user] tears a hole in [src].") - update_icon() - -/obj/structure/window/paperframe/update_icon() - if(obj_integrity < max_integrity) - cut_overlay(paper) - add_overlay(torn) - set_opacity(FALSE) - else - cut_overlay(torn) - add_overlay(paper) - set_opacity(TRUE) - queue_smooth(src) - - -/obj/structure/window/paperframe/attackby(obj/item/W, mob/user) - if(W.get_temperature()) - fire_act(W.get_temperature()) - return - if(user.used_intent.type == INTENT_HARM) - return ..() - if(istype(W, /obj/item/paper) && obj_integrity < max_integrity) - user.visible_message("[user] starts to patch the holes in \the [src].") - if(do_after(user, 20, target = src)) - obj_integrity = min(obj_integrity+4,max_integrity) - qdel(W) - user.visible_message("[user] patches some of the holes in \the [src].") - if(obj_integrity == max_integrity) - update_icon() - return - ..() - update_icon() - -/obj/structure/window/bronze - name = "brass window" - desc = "" - icon = 'icons/obj/smooth_structures/clockwork_window.dmi' - icon_state = "clockwork_window_single" - glass_type = /obj/item/stack/tile/bronze - -/obj/structure/window/bronze/unanchored - anchored = FALSE - -/obj/structure/window/bronze/fulltile - icon_state = "clockwork_window" - smooth = SMOOTH_TRUE - canSmoothWith = null - fulltile = TRUE - flags_1 = PREVENT_CLICK_UNDER_1 - dir = FULLTILE_WINDOW_DIR - max_integrity = 50 - glass_amount = 2 - -/obj/structure/window/bronze/fulltile/unanchored - anchored = FALSE diff --git a/code/game/shuttle_engines.dm b/code/game/shuttle_engines.dm deleted file mode 100644 index 6368fa3c54..0000000000 --- a/code/game/shuttle_engines.dm +++ /dev/null @@ -1,158 +0,0 @@ -#define ENGINE_UNWRENCHED 0 -#define ENGINE_WRENCHED 1 -#define ENGINE_WELDED 2 -#define ENGINE_WELDTIME 200 - -/obj/structure/shuttle - name = "shuttle" - icon = 'icons/turf/shuttle.dmi' - resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF - max_integrity = 500 - armor = list("melee" = 100, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 70) //default + ignores melee - -/obj/structure/shuttle/engine - name = "engine" - desc = "" - density = TRUE - anchored = TRUE - var/engine_power = 1 - var/state = ENGINE_WELDED //welding shmelding - -//Ugh this is a lot of copypasta from emitters, welding need some boilerplate reduction -/obj/structure/shuttle/engine/can_be_unfasten_wrench(mob/user, silent) - if(state == ENGINE_WELDED) - if(!silent) - to_chat(user, "[src] is welded to the floor!") - return FAILED_UNFASTEN - return ..() - -/obj/structure/shuttle/engine/default_unfasten_wrench(mob/user, obj/item/I, time = 20) - . = ..() - if(. == SUCCESSFUL_UNFASTEN) - if(anchored) - state = ENGINE_WRENCHED - else - state = ENGINE_UNWRENCHED - -/obj/structure/shuttle/engine/wrench_act(mob/living/user, obj/item/I) - ..() - default_unfasten_wrench(user, I) - return TRUE - -/obj/structure/shuttle/engine/welder_act(mob/living/user, obj/item/I) - . = ..() - switch(state) - if(ENGINE_UNWRENCHED) - to_chat(user, "The [src.name] needs to be wrenched to the floor!") - if(ENGINE_WRENCHED) - if(!I.tool_start_check(user, amount=0)) - return TRUE - - user.visible_message("[user.name] starts to weld the [name] to the floor.", \ - "I start to weld \the [src] to the floor...", \ - "I hear welding.") - - if(I.use_tool(src, user, ENGINE_WELDTIME, volume=50)) - state = ENGINE_WELDED - to_chat(user, "I weld \the [src] to the floor.") - alter_engine_power(engine_power) - - if(ENGINE_WELDED) - if(!I.tool_start_check(user, amount=0)) - return TRUE - - user.visible_message("[user.name] starts to cut the [name] free from the floor.", \ - "I start to cut \the [src] free from the floor...", \ - "I hear welding.") - - if(I.use_tool(src, user, ENGINE_WELDTIME, volume=50)) - state = ENGINE_WRENCHED - to_chat(user, "I cut \the [src] free from the floor.") - alter_engine_power(-engine_power) - return TRUE - -/obj/structure/shuttle/engine/Destroy() - if(state == ENGINE_WELDED) - alter_engine_power(-engine_power) - . = ..() - -//Propagates the change to the shuttle. -/obj/structure/shuttle/engine/proc/alter_engine_power(mod) - if(mod == 0) - return - if(SSshuttle.is_in_shuttle_bounds(src)) - var/obj/docking_port/mobile/M = SSshuttle.get_containing_shuttle(src) - if(M) - M.alter_engines(mod) - -/obj/structure/shuttle/engine/heater - name = "engine heater" - icon_state = "heater" - desc = "" - engine_power = 0 // todo make these into 2x1 parts - -/obj/structure/shuttle/engine/platform - name = "engine platform" - icon_state = "platform" - desc = "" - engine_power = 0 - -/obj/structure/shuttle/engine/propulsion - name = "propulsion engine" - icon_state = "propulsion" - desc = "" - opacity = 1 - -/obj/structure/shuttle/engine/propulsion/left - name = "left propulsion engine" - icon_state = "propulsion_l" - -/obj/structure/shuttle/engine/propulsion/right - name = "right propulsion engine" - icon_state = "propulsion_r" - -/obj/structure/shuttle/engine/propulsion/burst - name = "burst engine" - desc = "" - -/obj/structure/shuttle/engine/propulsion/burst/cargo - state = ENGINE_UNWRENCHED - anchored = FALSE - -/obj/structure/shuttle/engine/propulsion/burst/left - name = "left burst engine" - icon_state = "burst_l" - -/obj/structure/shuttle/engine/propulsion/burst/right - name = "right burst engine" - icon_state = "burst_r" - -/obj/structure/shuttle/engine/router - name = "engine router" - icon_state = "router" - desc = "" - -/obj/structure/shuttle/engine/large - name = "engine" - opacity = 1 - icon = 'icons/obj/2x2.dmi' - icon_state = "large_engine" - desc = "" - bound_width = 64 - bound_height = 64 - appearance_flags = 0 - -/obj/structure/shuttle/engine/huge - name = "engine" - opacity = 1 - icon = 'icons/obj/3x3.dmi' - icon_state = "huge_engine" - desc = "" - bound_width = 96 - bound_height = 96 - appearance_flags = 0 - -#undef ENGINE_UNWRENCHED -#undef ENGINE_WRENCHED -#undef ENGINE_WELDED -#undef ENGINE_WELDTIME diff --git a/code/game/turfs/change_turf.dm b/code/game/turfs/change_turf.dm index 13773d0122..2c84dd1cda 100644 --- a/code/game/turfs/change_turf.dm +++ b/code/game/turfs/change_turf.dm @@ -1,6 +1,5 @@ // This is a list of turf types we dont want to assign to baseturfs unless through initialization or explicitly GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list( - /turf/open/space, /turf/baseturf_bottom, ))) @@ -67,10 +66,6 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list( if (!ispath(path)) warning("Z-level [z] has invalid baseturf '[SSmapping.level_trait(z, ZTRAIT_BASETURF)]'") path = /turf/open/floor/rogue/naturalstone - if(/turf/open/space/basic) - // basic doesn't initialize and this will cause issues - // no warning though because this can happen naturaly as a result of it being built on top of - path = /turf/open/space if(!GLOB.use_preloader && path == type && !(flags & CHANGETURF_FORCEOP)) // Don't no-op if the map loader requires it to be reconstructed return src @@ -161,9 +156,6 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list( else lighting_clear_overlay() - for(var/turf/open/space/S in RANGE_TURFS(1, src)) //RANGE_TURFS is in code\__HELPERS\game.dm - S.update_starlight() - return W /turf/open/ChangeTurf(path, list/new_baseturfs, flags) //Resist the temptation to make this default to keeping air. diff --git a/code/game/turfs/closed/_closed.dm b/code/game/turfs/closed/_closed.dm index a903b3a4df..7be5ebb5c1 100644 --- a/code/game/turfs/closed/_closed.dm +++ b/code/game/turfs/closed/_closed.dm @@ -228,158 +228,6 @@ to_be_destroyed = FALSE return src -/turf/closed/indestructible/singularity_act() - return - -/turf/closed/indestructible/oldshuttle - name = "strange shuttle wall" - icon = 'icons/turf/shuttleold.dmi' - icon_state = "block" - -/turf/closed/indestructible/sandstone - name = "sandstone wall" - desc = "" - icon = 'icons/turf/walls/sandstone_wall.dmi' - icon_state = "sandstone" - baseturfs = /turf/closed/indestructible/sandstone - smooth = SMOOTH_TRUE - -/turf/closed/indestructible/oldshuttle/corner - icon_state = "corner" - -/turf/closed/indestructible/splashscreen - name = "" - icon = 'icons/default_title.dmi' - icon_state = "" - layer = FLY_LAYER - bullet_bounce_sound = null - -/turf/closed/indestructible/splashscreen/New() - SStitle.splash_turf = src - if(SStitle.icon) - icon = SStitle.icon - ..() - -/turf/closed/indestructible/splashscreen/vv_edit_var(var_name, var_value) - . = ..() - if(.) - switch(var_name) - if("icon") - SStitle.icon = icon - -/turf/closed/indestructible/riveted - icon = 'icons/turf/walls/riveted.dmi' - icon_state = "riveted" - smooth = SMOOTH_TRUE - -/turf/closed/indestructible/syndicate - icon = 'icons/turf/walls/plastitanium_wall.dmi' - icon_state = "map-shuttle" - smooth = SMOOTH_MORE - -/turf/closed/indestructible/riveted/uranium - icon = 'icons/turf/walls/uranium_wall.dmi' - icon_state = "uranium" - -/turf/closed/indestructible/abductor - icon_state = "alien1" - -/turf/closed/indestructible/opshuttle - icon_state = "wall3" - -/turf/closed/indestructible/fakeglass - name = "window" - icon_state = "fake_window" - opacity = 0 - smooth = SMOOTH_TRUE - icon = 'icons/obj/smooth_structures/reinforced_window.dmi' - -/turf/closed/indestructible/fakeglass/Initialize() - . = ..() - icon_state = null //set the icon state to null, so our base state isn't visible - underlays += mutable_appearance('icons/obj/structures.dmi', "grille") //add a grille underlay - underlays += mutable_appearance('icons/turf/floors.dmi', "plating") //add the plating underlay, below the grille - -/turf/closed/indestructible/opsglass - name = "window" - icon_state = "plastitanium_window" - opacity = 0 - smooth = SMOOTH_TRUE - icon = 'icons/obj/smooth_structures/plastitanium_window.dmi' - -/turf/closed/indestructible/opsglass/Initialize() - . = ..() - icon_state = null - underlays += mutable_appearance('icons/obj/structures.dmi', "grille") - underlays += mutable_appearance('icons/turf/floors.dmi', "plating") - -/turf/closed/indestructible/fakedoor - name = "CentCom Access" - icon = 'icons/obj/doors/airlocks/centcom/centcom.dmi' - icon_state = "fake_door" - -/turf/closed/indestructible/rock - name = "granite" - desc = "" - icon = 'icons/turf/mining.dmi' - icon_state = "rock2" - -/turf/closed/indestructible/rock/snow - name = "mountainside" - desc = "" - icon = 'icons/turf/walls.dmi' - icon_state = "snowrock" - bullet_sizzle = TRUE - bullet_bounce_sound = null - -/turf/closed/indestructible/rock/snow/ice - name = "iced rock" - desc = "" - icon = 'icons/turf/walls.dmi' - icon_state = "icerock" - -/turf/closed/indestructible/paper - name = "thick paper wall" - desc = "" - icon = 'icons/turf/walls.dmi' - icon_state = "paperwall" - -/turf/closed/indestructible/necropolis - name = "necropolis wall" - desc = "" - icon = 'icons/turf/walls.dmi' - icon_state = "necro" - explosion_block = 50 - baseturfs = /turf/closed/indestructible/necropolis - -/turf/closed/indestructible/necropolis/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir) - underlay_appearance.icon = 'icons/turf/floors.dmi' - underlay_appearance.icon_state = "necro1" - return TRUE - -/turf/closed/indestructible/riveted/boss - name = "necropolis wall" - desc = "" - icon = 'icons/turf/walls/boss_wall.dmi' - icon_state = "wall" - canSmoothWith = list(/turf/closed/indestructible/riveted/boss, /turf/closed/indestructible/riveted/boss/see_through) - explosion_block = 50 - baseturfs = /turf/closed/indestructible/riveted/boss - -/turf/closed/indestructible/riveted/boss/see_through - opacity = FALSE - -/turf/closed/indestructible/riveted/boss/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir) - underlay_appearance.icon = 'icons/turf/floors.dmi' - underlay_appearance.icon_state = "basalt" - return TRUE - -/turf/closed/indestructible/riveted/hierophant - name = "wall" - desc = "" - icon = 'icons/turf/walls/hierophant_wall.dmi' - icon_state = "wall" - // Dakkatown Turfs /turf/closed/indestructible/wooddark name = "wall" diff --git a/code/game/turfs/closed/minerals.dm b/code/game/turfs/closed/minerals.dm index d31e36c183..4b8a993811 100644 --- a/code/game/turfs/closed/minerals.dm +++ b/code/game/turfs/closed/minerals.dm @@ -13,7 +13,7 @@ // layer = EDGED_TURF_LAYER temperature = TCMB var/environment_type = "asteroid" - var/turf/open/floor/plating/turf_type = /turf/open/floor/plating/asteroid/airless + var/turf/open/floor/turf_type = /turf/open/floor var/obj/item/mineralType = null var/obj/item/natural/rock/rockType = null var/mineralAmt = 3 @@ -87,43 +87,16 @@ if(prob(23)) new rockType(src) SSblackbox.record_feedback("tally", "ore_mined", mineralAmt, mineralType) -// if(ishuman(user)) -// var/mob/living/carbon/human/H = user -// if(give_exp) -// if (mineralType && (mineralAmt > 0)) -// H.mind.adjust_experience(/datum/skill/mining, initial(mineralType.mine_experience) * mineralAmt) -// else -// H.mind.adjust_experience(/datum/skill/mining, 4) - var/flags = NONE if(defer_change) // TODO: make the defer change var a var for any changeturf flag flags = CHANGETURF_DEFER_CHANGE ScrapeAway(null, flags) addtimer(CALLBACK(src, PROC_REF(AfterChange)), 1, TIMER_UNIQUE) -// playsound(src, 'sound/blank.ogg', 100, TRUE) //beautiful destruction /turf/closed/mineral/attack_animal(mob/living/simple_animal/user) if((user.environment_smash & ENVIRONMENT_SMASH_WALLS) || (user.environment_smash & ENVIRONMENT_SMASH_RWALLS)) gets_drilled(user) ..() - -/* -/turf/closed/mineral/Bumped(atom/movable/AM) - ..() - if(ishuman(AM)) - var/mob/living/carbon/human/H = AM - var/obj/item/I = H.get_active_held_item() - if(I && H.a_intent.blade_class == BCLASS_PICK) - attackby(I, H) - return - else if(iscyborg(AM)) - var/mob/living/silicon/robot/R = AM - if(R.module_active && R.module_active.tool_behaviour == TOOL_MINING) - attackby(R.module_active, R) - return - else - return -*/ /turf/closed/mineral/acid_melt() ScrapeAway() @@ -144,9 +117,7 @@ T.ChangeTurf(type) /turf/closed/mineral/random - var/list/mineralSpawnChanceList = list(/turf/closed/mineral/uranium = 5, /turf/closed/mineral/diamond = 1, /turf/closed/mineral/gold = 10, - /turf/closed/mineral/silver = 12, /turf/closed/mineral/plasma = 20, /turf/closed/mineral/iron = 40, /turf/closed/mineral/titanium = 11, - /turf/closed/mineral/bscrystal = 1) + var/list/mineralSpawnChanceList = list() //Currently, Adamantine won't spawn as it has no uses. -Durandan var/mineralChance = 13 var/display_icon_state = "rock" @@ -171,314 +142,6 @@ src = M M.levelupdate() -/turf/closed/mineral/random/no_caves - mineralSpawnChanceList = list(/turf/closed/mineral/uranium = 5, /turf/closed/mineral/diamond = 1, /turf/closed/mineral/gold = 10, - /turf/closed/mineral/silver = 12, /turf/closed/mineral/plasma = 20, /turf/closed/mineral/iron = 40, /turf/closed/mineral/titanium = 11, - /turf/closed/mineral/bscrystal = 1) - -/turf/closed/mineral/random/high_chance - icon_state = "rock_highchance" - mineralChance = 25 - mineralSpawnChanceList = list( - /turf/closed/mineral/uranium = 35, /turf/closed/mineral/diamond = 30, /turf/closed/mineral/gold = 45, /turf/closed/mineral/titanium = 45, - /turf/closed/mineral/silver = 50, /turf/closed/mineral/plasma = 50, /turf/closed/mineral/bscrystal = 20) - -/turf/closed/mineral/random/high_chance/volcanic - environment_type = "basalt" - turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - baseturfs = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - initial_gas_mix = LAVALAND_DEFAULT_ATMOS - defer_change = 1 - mineralSpawnChanceList = list( - /turf/closed/mineral/uranium/volcanic = 35, /turf/closed/mineral/diamond/volcanic = 30, /turf/closed/mineral/gold/volcanic = 45, /turf/closed/mineral/titanium/volcanic = 45, - /turf/closed/mineral/silver/volcanic = 50, /turf/closed/mineral/plasma/volcanic = 50, /turf/closed/mineral/bscrystal/volcanic = 20) - - - -/turf/closed/mineral/random/low_chance - icon_state = "rock_lowchance" - mineralChance = 6 - mineralSpawnChanceList = list( - /turf/closed/mineral/uranium = 2, /turf/closed/mineral/diamond = 1, /turf/closed/mineral/gold = 4, /turf/closed/mineral/titanium = 4, - /turf/closed/mineral/silver = 6, /turf/closed/mineral/plasma = 15, /turf/closed/mineral/iron = 40, - /turf/closed/mineral/bscrystal = 1) - - -/turf/closed/mineral/random/volcanic - environment_type = "basalt" - turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - baseturfs = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - initial_gas_mix = LAVALAND_DEFAULT_ATMOS - defer_change = 1 - - mineralChance = 10 - mineralSpawnChanceList = list( - /turf/closed/mineral/uranium/volcanic = 5, /turf/closed/mineral/diamond/volcanic = 1, /turf/closed/mineral/gold/volcanic = 10, /turf/closed/mineral/titanium/volcanic = 11, - /turf/closed/mineral/silver/volcanic = 12, /turf/closed/mineral/plasma/volcanic = 20, /turf/closed/mineral/iron/volcanic = 40, - /turf/closed/mineral/bscrystal/volcanic = 1) - - -/turf/closed/mineral/random/labormineral - mineralSpawnChanceList = list( - /turf/closed/mineral/uranium = 3, /turf/closed/mineral/diamond = 1, /turf/closed/mineral/gold = 8, /turf/closed/mineral/titanium = 8, - /turf/closed/mineral/silver = 20, /turf/closed/mineral/plasma = 30, /turf/closed/mineral/iron = 95) - icon_state = "rock_labor" - - -/turf/closed/mineral/random/labormineral/volcanic - environment_type = "basalt" - turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - baseturfs = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - initial_gas_mix = LAVALAND_DEFAULT_ATMOS - defer_change = 1 - mineralSpawnChanceList = list( - /turf/closed/mineral/uranium/volcanic = 3, /turf/closed/mineral/diamond/volcanic = 1, /turf/closed/mineral/gold/volcanic = 8, /turf/closed/mineral/titanium/volcanic = 8, - /turf/closed/mineral/silver/volcanic = 20, /turf/closed/mineral/plasma/volcanic = 30, /turf/closed/mineral/bscrystal/volcanic = 1, - /turf/closed/mineral/iron/volcanic = 95) - - - -/turf/closed/mineral/iron - mineralType = /obj/item/stack/ore/iron - spreadChance = 20 - spread = 1 - scan_state = "rock_Iron" - -/turf/closed/mineral/iron/volcanic - environment_type = "basalt" - turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - baseturfs = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - initial_gas_mix = LAVALAND_DEFAULT_ATMOS - defer_change = 1 - -/turf/closed/mineral/iron/ice - environment_type = "snow_cavern" - icon_state = "icerock_iron" - smooth_icon = 'icons/turf/walls/icerock_wall.dmi' - turf_type = /turf/open/floor/plating/asteroid/snow/ice - baseturfs = /turf/open/floor/plating/asteroid/snow/ice - initial_gas_mix = FROZEN_ATMOS - defer_change = TRUE - - -/turf/closed/mineral/uranium - mineralType = /obj/item/stack/ore/uranium - spreadChance = 5 - spread = 1 - scan_state = "rock_Uranium" - -/turf/closed/mineral/uranium/volcanic - environment_type = "basalt" - turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - baseturfs = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - initial_gas_mix = LAVALAND_DEFAULT_ATMOS - defer_change = 1 - - -/turf/closed/mineral/diamond - mineralType = /obj/item/stack/ore/diamond - spreadChance = 0 - spread = 1 - scan_state = "rock_Diamond" - -/turf/closed/mineral/diamond/volcanic - environment_type = "basalt" - turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - baseturfs = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - initial_gas_mix = LAVALAND_DEFAULT_ATMOS - defer_change = 1 - -/turf/closed/mineral/diamond/ice - environment_type = "snow_cavern" - icon_state = "icerock_diamond" - smooth_icon = 'icons/turf/walls/icerock_wall.dmi' - turf_type = /turf/open/floor/plating/asteroid/snow/ice - baseturfs = /turf/open/floor/plating/asteroid/snow/ice - initial_gas_mix = FROZEN_ATMOS - defer_change = TRUE - - -/turf/closed/mineral/gold - mineralType = /obj/item/stack/ore/gold - spreadChance = 5 - spread = 1 - scan_state = "rock_Gold" - -/turf/closed/mineral/gold/volcanic - environment_type = "basalt" - turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - baseturfs = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - initial_gas_mix = LAVALAND_DEFAULT_ATMOS - defer_change = 1 - - -/turf/closed/mineral/silver - mineralType = /obj/item/stack/ore/silver - spreadChance = 5 - spread = 1 - scan_state = "rock_Silver" - -/turf/closed/mineral/silver/volcanic - environment_type = "basalt" - turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - baseturfs = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - initial_gas_mix = LAVALAND_DEFAULT_ATMOS - defer_change = 1 - - -/turf/closed/mineral/titanium - mineralType = /obj/item/stack/ore/titanium - spreadChance = 5 - spread = 1 - scan_state = "rock_Titanium" - -/turf/closed/mineral/titanium/volcanic - environment_type = "basalt" - turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - baseturfs = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - initial_gas_mix = LAVALAND_DEFAULT_ATMOS - defer_change = 1 - - -/turf/closed/mineral/plasma - mineralType = /obj/item/stack/ore/plasma - spreadChance = 8 - spread = 1 - scan_state = "rock_Plasma" - -/turf/closed/mineral/plasma/volcanic - environment_type = "basalt" - turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - baseturfs = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - initial_gas_mix = LAVALAND_DEFAULT_ATMOS - defer_change = 1 - -/turf/closed/mineral/plasma/ice - environment_type = "snow_cavern" - icon_state = "icerock_plasma" - smooth_icon = 'icons/turf/walls/icerock_wall.dmi' - turf_type = /turf/open/floor/plating/asteroid/snow/ice - baseturfs = /turf/open/floor/plating/asteroid/snow/ice - initial_gas_mix = FROZEN_ATMOS - defer_change = TRUE - - - -/turf/closed/mineral/bananium - mineralType = /obj/item/stack/ore/bananium - mineralAmt = 3 - spreadChance = 0 - spread = 0 - scan_state = "rock_Bananium" - - -/turf/closed/mineral/bscrystal - mineralType = /obj/item/stack/ore/bluespace_crystal - mineralAmt = 1 - spreadChance = 0 - spread = 0 - scan_state = "rock_BScrystal" - -/turf/closed/mineral/bscrystal/volcanic - environment_type = "basalt" - turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - baseturfs = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - initial_gas_mix = LAVALAND_DEFAULT_ATMOS - defer_change = 1 - - -/turf/closed/mineral/volcanic - environment_type = "basalt" - turf_type = /turf/open/floor/plating/asteroid/basalt - baseturfs = /turf/open/floor/plating/asteroid/basalt - initial_gas_mix = LAVALAND_DEFAULT_ATMOS - -/turf/closed/mineral/volcanic/lava_land_surface - environment_type = "basalt" - turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - baseturfs = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - defer_change = 1 - -/turf/closed/mineral/ash_rock //wall piece - name = "rock" - icon = 'icons/turf/mining.dmi' - smooth_icon = 'icons/turf/walls/rock_wall.dmi' - icon_state = "rock2" - smooth = SMOOTH_MORE|SMOOTH_BORDER - canSmoothWith = list (/turf/closed) - baseturfs = /turf/open/floor/plating/ashplanet/wateryrock - initial_gas_mix = OPENTURF_LOW_PRESSURE - environment_type = "waste" - turf_type = /turf/open/floor/plating/ashplanet/rocky - defer_change = 1 - -/turf/closed/mineral/snowmountain - name = "snowy mountainside" - icon = 'icons/turf/mining.dmi' - smooth_icon = 'icons/turf/walls/mountain_wall.dmi' - icon_state = "mountainrock" - smooth = SMOOTH_MORE|SMOOTH_BORDER - canSmoothWith = list (/turf/closed) - baseturfs = /turf/open/floor/plating/asteroid/snow - initial_gas_mix = FROZEN_ATMOS - environment_type = "snow" - turf_type = /turf/open/floor/plating/asteroid/snow - defer_change = TRUE - -/turf/closed/mineral/snowmountain/cavern - name = "ice cavern rock" - icon = 'icons/turf/mining.dmi' - smooth_icon = 'icons/turf/walls/icerock_wall.dmi' - icon_state = "icerock" - smooth = SMOOTH_MORE|SMOOTH_BORDER - canSmoothWith = list (/turf/closed) - baseturfs = /turf/open/floor/plating/asteroid/snow/ice - environment_type = "snow_cavern" - turf_type = /turf/open/floor/plating/asteroid/snow/ice - - -/turf/closed/mineral/strong - name = "Very strong rock" - desc = "" - environment_type = "basalt" - turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - baseturfs = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - initial_gas_mix = LAVALAND_DEFAULT_ATMOS - defer_change = 1 - smooth_icon = 'icons/turf/walls/rock_wall.dmi' - -/turf/closed/mineral/strong/attackby(obj/item/I, mob/user, params) - if(!ishuman(user)) - to_chat(usr, "Only a more advanced species could break a rock such as this one!") - return FALSE - var/mob/living/carbon/human/H = user - if(H.mind.get_skill_level(/datum/skill/mining) >= SKILL_LEVEL_LEGENDARY) - . = ..() - else - to_chat(usr, "The rock seems to be too strong to destroy. Maybe I can break it once I become a master miner.") - - -/turf/closed/mineral/strong/gets_drilled(user, triggered_by_explosion = FALSE, give_exp = TRUE) - drop_ores() - var/flags = NONE - if(defer_change) // TODO: make the defer change var a var for any changeturf flag - flags = CHANGETURF_DEFER_CHANGE - ScrapeAway(flags=flags) - addtimer(CALLBACK(src, PROC_REF(AfterChange)), 1, TIMER_UNIQUE) - playsound(src, 'sound/blank.ogg', 50, TRUE) //beautiful destruction - -/turf/closed/mineral/strong/proc/drop_ores() - if(prob(10)) - new /obj/item/stack/sheet/mineral/mythril(src, 5) - - -/turf/closed/mineral/strong/acid_melt() - return - -/turf/closed/mineral/strong/ex_act(severity, target) - return - - /turf/closed/mineral/random/rogue // layer = ABOVE_MOB_LAYER diff --git a/code/game/turfs/closed/wall/mineral_walls.dm b/code/game/turfs/closed/wall/mineral_walls.dm index 2edd46e4c1..5c0a58282a 100644 --- a/code/game/turfs/closed/wall/mineral_walls.dm +++ b/code/game/turfs/closed/wall/mineral_walls.dm @@ -6,276 +6,3 @@ var/active = null canSmoothWith = null smooth = SMOOTH_TRUE - -/turf/closed/wall/mineral/gold - name = "gold wall" - desc = "" - icon = 'icons/turf/walls/gold_wall.dmi' - icon_state = "gold" - sheet_type = /obj/item/stack/sheet/mineral/gold - explosion_block = 0 //gold is a soft metal you dingus. - canSmoothWith = list(/turf/closed/wall/mineral/gold, /obj/structure/falsewall/gold) - -/turf/closed/wall/mineral/silver - name = "silver wall" - desc = "" - icon = 'icons/turf/walls/silver_wall.dmi' - icon_state = "silver" - sheet_type = /obj/item/stack/sheet/mineral/silver - canSmoothWith = list(/turf/closed/wall/mineral/silver, /obj/structure/falsewall/silver) - -/turf/closed/wall/mineral/diamond - name = "diamond wall" - desc = "" - icon = 'icons/turf/walls/diamond_wall.dmi' - icon_state = "diamond" - sheet_type = /obj/item/stack/sheet/mineral/diamond - slicing_duration = 200 //diamond wall takes twice as much time to slice - explosion_block = 3 - canSmoothWith = list(/turf/closed/wall/mineral/diamond, /obj/structure/falsewall/diamond) - -/turf/closed/wall/mineral/bananium - name = "bananium wall" - desc = "" - icon = 'icons/turf/walls/bananium_wall.dmi' - icon_state = "bananium" - sheet_type = /obj/item/stack/sheet/mineral/bananium - canSmoothWith = list(/turf/closed/wall/mineral/bananium, /obj/structure/falsewall/bananium) - -/turf/closed/wall/mineral/sandstone - name = "sandstone wall" - desc = "" - icon = 'icons/turf/walls/sandstone_wall.dmi' - icon_state = "sandstone" - sheet_type = /obj/item/stack/sheet/mineral/sandstone - explosion_block = 0 - canSmoothWith = list(/turf/closed/wall/mineral/sandstone, /obj/structure/falsewall/sandstone) - -/turf/closed/wall/mineral/uranium - article = "a" - name = "uranium wall" - desc = "" - icon = 'icons/turf/walls/uranium_wall.dmi' - icon_state = "uranium" - sheet_type = /obj/item/stack/sheet/mineral/uranium - canSmoothWith = list(/turf/closed/wall/mineral/uranium, /obj/structure/falsewall/uranium) - -/turf/closed/wall/mineral/uranium/proc/radiate() - if(!active) - if(world.time > last_event+15) - active = 1 - radiation_pulse(src, 40) - for(var/turf/closed/wall/mineral/uranium/T in orange(1,src)) - T.radiate() - last_event = world.time - active = null - return - return - -/turf/closed/wall/mineral/uranium/attack_hand(mob/user) - radiate() - . = ..() - -/turf/closed/wall/mineral/uranium/attackby(obj/item/W, mob/user, params) - radiate() - ..() - -/turf/closed/wall/mineral/uranium/Bumped(atom/movable/AM) - radiate() - ..() - -/turf/closed/wall/mineral/plasma - name = "plasma wall" - desc = "" - icon = 'icons/turf/walls/plasma_wall.dmi' - icon_state = "plasma" - sheet_type = /obj/item/stack/sheet/mineral/plasma - thermal_conductivity = 0.04 - canSmoothWith = list(/turf/closed/wall/mineral/plasma, /obj/structure/falsewall/plasma) - -/turf/closed/wall/mineral/plasma/attackby(obj/item/W, mob/user, params) - if(W.get_temperature() > 300)//If the temperature of the object is over 300, then ignite - message_admins("Plasma wall ignited by [ADMIN_LOOKUPFLW(user)] in [ADMIN_VERBOSEJMP(src)]") - log_game("Plasma wall ignited by [key_name(user)] in [AREACOORD(src)]") - ignite(W.get_temperature()) - return - ..() - -/turf/closed/wall/mineral/plasma/proc/PlasmaBurn(temperature) - new girder_type(src) - ScrapeAway() - var/turf/open/T = src - T.atmos_spawn_air("plasma=400;TEMP=[temperature]") - -/turf/closed/wall/mineral/plasma/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)//Doesn't fucking work because walls don't interact with air :( - if(exposed_temperature > 300) - PlasmaBurn(exposed_temperature) - -/turf/closed/wall/mineral/plasma/proc/ignite(exposed_temperature) - if(exposed_temperature > 300) - PlasmaBurn(exposed_temperature) - -/turf/closed/wall/mineral/plasma/bullet_act(obj/projectile/Proj) - if(istype(Proj, /obj/projectile/beam)) - PlasmaBurn(2500) - else if(istype(Proj, /obj/projectile/ion)) - PlasmaBurn(500) - . = ..() - -/turf/closed/wall/mineral/wood - name = "wooden wall" - desc = "" - icon = 'icons/turf/walls/wood_wall.dmi' - icon_state = "wood" - sheet_type = /obj/item/stack/sheet/mineral/wood - hardness = 70 - explosion_block = 0 - canSmoothWith = list(/turf/closed/wall/mineral/wood, /obj/structure/falsewall/wood, /turf/closed/wall/mineral/wood/nonmetal) - -/turf/closed/wall/mineral/wood/attackby(obj/item/W, mob/user) - if(W.get_sharpness() && W.force) - var/duration = (48/W.force) * 2 //In seconds, for now. - if(istype(W, /obj/item/hatchet) || istype(W, /obj/item/twohanded/fireaxe)) - duration /= 4 //Much better with hatchets and axes. - if(do_after(user, duration*10, target=src)) //Into deciseconds. - dismantle_wall(FALSE,FALSE) - return - return ..() - -/turf/closed/wall/mineral/wood/nonmetal - desc = "" - girder_type = /obj/structure/barricade/wooden - hardness = 50 - canSmoothWith = list(/turf/closed/wall/mineral/wood, /obj/structure/falsewall/wood, /turf/closed/wall/mineral/wood/nonmetal) - -/turf/closed/wall/mineral/iron - name = "rough metal wall" - desc = "" - icon = 'icons/turf/walls/shuttle_wall.dmi' - icon_state = "iron" - sheet_type = /obj/item/stack/rods - canSmoothWith = list(/turf/closed/wall/mineral/iron, /obj/structure/falsewall/iron) - -/turf/closed/wall/mineral/snow - name = "packed snow wall" - desc = "" - icon = 'icons/turf/walls/shuttle_wall.dmi' - icon_state = "snow" - hardness = 80 - explosion_block = 0 - slicing_duration = 30 - sheet_type = /obj/item/stack/sheet/mineral/snow - canSmoothWith = null - girder_type = null - bullet_sizzle = TRUE - bullet_bounce_sound = null - -/////////////////////Titanium walls///////////////////// - -/turf/closed/wall/mineral/titanium //has to use this path due to how building walls works - name = "wall" - desc = "" - icon = 'icons/turf/walls/shuttle_wall.dmi' - icon_state = "map-shuttle" - explosion_block = 3 - flags_1 = CAN_BE_DIRTY_1 | CHECK_RICOCHET_1 - sheet_type = /obj/item/stack/sheet/mineral/titanium - smooth = SMOOTH_MORE|SMOOTH_DIAGONAL - canSmoothWith = list(/turf/closed/wall/mineral/titanium, /obj/structure/window/shuttle, /obj/structure/shuttle/engine/heater, /obj/structure/falsewall/titanium) - -/turf/closed/wall/mineral/titanium/nodiagonal - smooth = SMOOTH_MORE - icon_state = "map-shuttle_nd" - -/turf/closed/wall/mineral/titanium/nosmooth - icon = 'icons/turf/shuttle.dmi' - icon_state = "wall" - smooth = SMOOTH_FALSE - -/turf/closed/wall/mineral/titanium/overspace - icon_state = "map-overspace" - fixed_underlay = list("space"=1) - -//sub-type to be used for interior shuttle walls -//won't get an underlay of the destination turf on shuttle move -/turf/closed/wall/mineral/titanium/interior/copyTurf(turf/T) - if(T.type != type) - T.ChangeTurf(type) - if(underlays.len) - T.underlays = underlays - if(T.icon_state != icon_state) - T.icon_state = icon_state - if(T.icon != icon) - T.icon = icon - if(color) - T.atom_colours = atom_colours.Copy() - T.update_atom_colour() - if(T.dir != dir) - T.setDir(dir) - T.transform = transform - return T - -/turf/closed/wall/mineral/titanium/copyTurf(turf/T) - . = ..() - T.transform = transform - -/turf/closed/wall/mineral/titanium/survival - name = "pod wall" - desc = "" - icon = 'icons/turf/walls/survival_pod_walls.dmi' - icon_state = "smooth" - smooth = SMOOTH_MORE|SMOOTH_DIAGONAL - canSmoothWith = list(/turf/closed/wall/mineral/titanium/survival, /obj/structure/window/fulltile, /obj/structure/window/reinforced/fulltile, /obj/structure/window/reinforced/tinted/fulltile, /obj/structure/window/shuttle, /obj/structure/shuttle/engine) - -/turf/closed/wall/mineral/titanium/survival/nodiagonal - smooth = SMOOTH_MORE - -/turf/closed/wall/mineral/titanium/survival/pod - canSmoothWith = list(/turf/closed/wall/mineral/titanium/survival) - -/////////////////////Plastitanium walls///////////////////// - -/turf/closed/wall/mineral/plastitanium - name = "wall" - desc = "" - icon = 'icons/turf/walls/plastitanium_wall.dmi' - icon_state = "map-shuttle" - explosion_block = 4 - sheet_type = /obj/item/stack/sheet/mineral/plastitanium - smooth = SMOOTH_MORE|SMOOTH_DIAGONAL - canSmoothWith = list(/turf/closed/wall/mineral/plastitanium, /obj/structure/window/plasma/reinforced/plastitanium, /obj/structure/shuttle/engine, /obj/structure/falsewall/plastitanium) - -/turf/closed/wall/mineral/plastitanium/nodiagonal - smooth = SMOOTH_MORE - icon_state = "map-shuttle_nd" - -/turf/closed/wall/mineral/plastitanium/nosmooth - icon = 'icons/turf/shuttle.dmi' - icon_state = "wall" - smooth = SMOOTH_FALSE - -/turf/closed/wall/mineral/plastitanium/overspace - icon_state = "map-overspace" - fixed_underlay = list("space"=1) - -//have to copypaste this code -/turf/closed/wall/mineral/plastitanium/interior/copyTurf(turf/T) - if(T.type != type) - T.ChangeTurf(type) - if(underlays.len) - T.underlays = underlays - if(T.icon_state != icon_state) - T.icon_state = icon_state - if(T.icon != icon) - T.icon = icon - if(color) - T.atom_colours = atom_colours.Copy() - T.update_atom_colour() - if(T.dir != dir) - T.setDir(dir) - T.transform = transform - return T - -/turf/closed/wall/mineral/plastitanium/copyTurf(turf/T) - . = ..() - T.transform = transform diff --git a/code/game/turfs/closed/wall/misc_walls.dm b/code/game/turfs/closed/wall/misc_walls.dm deleted file mode 100644 index 2bef41ea4d..0000000000 --- a/code/game/turfs/closed/wall/misc_walls.dm +++ /dev/null @@ -1,72 +0,0 @@ -/turf/closed/wall/mineral/cult - name = "runed metal wall" - desc = "" - icon = 'icons/turf/walls/cult_wall.dmi' - icon_state = "cult" - canSmoothWith = null - smooth = SMOOTH_MORE - sheet_type = /obj/item/stack/sheet/runed_metal - sheet_amount = 1 - girder_type = /obj/structure/girder/cult - -/turf/closed/wall/mineral/cult/Initialize() - new /obj/effect/temp_visual/cult/turf(src) - . = ..() - -/turf/closed/wall/mineral/cult/devastate_wall() - new sheet_type(get_turf(src), sheet_amount) - -/turf/closed/wall/mineral/cult/Exited(atom/movable/AM, atom/newloc) - . = ..() - if(istype(AM, /mob/living/simple_animal/hostile/construct/harvester)) //harvesters can go through cult walls, dragging something with - var/mob/living/simple_animal/hostile/construct/harvester/H = AM - var/atom/movable/stored_pulling = H.pulling - if(stored_pulling) - stored_pulling.setDir(get_dir(stored_pulling.loc, newloc)) - stored_pulling.forceMove(src) - H.start_pulling(stored_pulling, supress_message = TRUE) - -/turf/closed/wall/mineral/cult/artificer - name = "runed stone wall" - desc = "" - -/turf/closed/wall/mineral/cult/artificer/break_wall() - new /obj/effect/temp_visual/cult/turf(get_turf(src)) - return null //excuse me we want no runed metal here - -/turf/closed/wall/mineral/cult/artificer/devastate_wall() - new /obj/effect/temp_visual/cult/turf(get_turf(src)) - -/turf/closed/wall/vault - icon = 'icons/turf/walls.dmi' - icon_state = "rockvault" - -/turf/closed/wall/ice - icon = 'icons/turf/walls/icedmetal_wall.dmi' - icon_state = "iced" - desc = "" - canSmoothWith = null - hardness = 35 - slicing_duration = 150 //welding through the ice+metal - bullet_sizzle = TRUE - -/turf/closed/wall/rust - name = "rusted wall" - desc = "" - icon = 'icons/turf/walls/rusty_wall.dmi' - hardness = 45 - -/turf/closed/wall/r_wall/rust - name = "rusted reinforced wall" - desc = "" - icon = 'icons/turf/walls/rusty_reinforced_wall.dmi' - hardness = 15 - -/turf/closed/wall/mineral/bronze - name = "clockwork wall" - desc = "" - icon = 'icons/turf/walls/clockwork_wall.dmi' - icon_state = "clockwork_wall" - sheet_type = /obj/item/stack/tile/bronze - sheet_amount = 2 - girder_type = /obj/structure/girder/bronze diff --git a/code/game/turfs/closed/wall/reinf_walls.dm b/code/game/turfs/closed/wall/reinf_walls.dm deleted file mode 100644 index 9ff152679b..0000000000 --- a/code/game/turfs/closed/wall/reinf_walls.dm +++ /dev/null @@ -1,207 +0,0 @@ -/turf/closed/wall/r_wall - name = "reinforced wall" - desc = "" - icon = 'icons/turf/walls/reinforced_wall.dmi' - icon_state = "r_wall" - opacity = 1 - density = TRUE - - var/d_state = INTACT - hardness = 10 - sheet_type = /obj/item/stack/sheet/plasteel - sheet_amount = 1 - girder_type = /obj/structure/girder/reinforced - explosion_block = 2 - rad_insulation = RAD_HEAVY_INSULATION - -/turf/closed/wall/r_wall/deconstruction_hints(mob/user) - switch(d_state) - if(INTACT) - return "The outer grille is fully intact." - if(SUPPORT_LINES) - return "The outer grille has been cut, and the support lines are screwed securely to the outer cover." - if(COVER) - return "The support lines have been unscrewed, and the metal cover is welded firmly in place." - if(CUT_COVER) - return "The metal cover has been sliced through, and is connected loosely to the girder." - if(ANCHOR_BOLTS) - return "The outer cover has been pried away, and the bolts anchoring the support rods are wrenched in place." - if(SUPPORT_RODS) - return "The bolts anchoring the support rods have been loosened, but are still welded firmly to the girder." - if(SHEATH) - return "The support rods have been sliced through, and the outer sheath is connected loosely to the girder." - -/turf/closed/wall/r_wall/devastate_wall() - new sheet_type(src, sheet_amount) - new /obj/item/stack/sheet/metal(src, 2) - -/turf/closed/wall/r_wall/attack_animal(mob/living/simple_animal/M) - M.changeNext_move(CLICK_CD_MELEE) - M.do_attack_animation(src) - if(!M.environment_smash) - return - if(M.environment_smash & ENVIRONMENT_SMASH_RWALLS) - dismantle_wall(1) - playsound(src, 'sound/blank.ogg', 100, TRUE) - else - playsound(src, 'sound/blank.ogg', 50, TRUE) - to_chat(M, "This wall is far too strong for you to destroy.") - -/turf/closed/wall/r_wall/try_decon(obj/item/W, mob/user, turf/T) - //DECONSTRUCTION - switch(d_state) - if(INTACT) - if(W.tool_behaviour == TOOL_WIRECUTTER) - W.play_tool_sound(src, 100) - d_state = SUPPORT_LINES - update_icon() - to_chat(user, "I cut the outer grille.") - return 1 - - if(SUPPORT_LINES) - if(W.tool_behaviour == TOOL_SCREWDRIVER) - to_chat(user, "I begin unsecuring the support lines...") - if(W.use_tool(src, user, 40, volume=100)) - if(!istype(src, /turf/closed/wall/r_wall) || d_state != SUPPORT_LINES) - return 1 - d_state = COVER - update_icon() - to_chat(user, "I unsecure the support lines.") - return 1 - - else if(W.tool_behaviour == TOOL_WIRECUTTER) - W.play_tool_sound(src, 100) - d_state = INTACT - update_icon() - to_chat(user, "I repair the outer grille.") - return 1 - - if(COVER) - if(W.tool_behaviour == TOOL_WELDER) - if(!W.tool_start_check(user, amount=0)) - return - to_chat(user, "I begin slicing through the metal cover...") - if(W.use_tool(src, user, 60, volume=100)) - if(!istype(src, /turf/closed/wall/r_wall) || d_state != COVER) - return 1 - d_state = CUT_COVER - update_icon() - to_chat(user, "I press firmly on the cover, dislodging it.") - return 1 - - if(W.tool_behaviour == TOOL_SCREWDRIVER) - to_chat(user, "I begin securing the support lines...") - if(W.use_tool(src, user, 40, volume=100)) - if(!istype(src, /turf/closed/wall/r_wall) || d_state != COVER) - return 1 - d_state = SUPPORT_LINES - update_icon() - to_chat(user, "The support lines have been secured.") - return 1 - - if(CUT_COVER) - if(W.tool_behaviour == TOOL_CROWBAR) - to_chat(user, "I struggle to pry off the cover...") - if(W.use_tool(src, user, 100, volume=100)) - if(!istype(src, /turf/closed/wall/r_wall) || d_state != CUT_COVER) - return 1 - d_state = ANCHOR_BOLTS - update_icon() - to_chat(user, "I pry off the cover.") - return 1 - - if(W.tool_behaviour == TOOL_WELDER) - if(!W.tool_start_check(user, amount=0)) - return - to_chat(user, "I begin welding the metal cover back to the frame...") - if(W.use_tool(src, user, 60, volume=100)) - if(!istype(src, /turf/closed/wall/r_wall) || d_state != CUT_COVER) - return TRUE - d_state = COVER - update_icon() - to_chat(user, "The metal cover has been welded securely to the frame.") - return 1 - - if(ANCHOR_BOLTS) - if(W.tool_behaviour == TOOL_WRENCH) - to_chat(user, "I start loosening the anchoring bolts which secure the support rods to their frame...") - if(W.use_tool(src, user, 40, volume=100)) - if(!istype(src, /turf/closed/wall/r_wall) || d_state != ANCHOR_BOLTS) - return 1 - d_state = SUPPORT_RODS - update_icon() - to_chat(user, "I remove the bolts anchoring the support rods.") - return 1 - - if(W.tool_behaviour == TOOL_CROWBAR) - to_chat(user, "I start to pry the cover back into place...") - if(W.use_tool(src, user, 20, volume=100)) - if(!istype(src, /turf/closed/wall/r_wall) || d_state != ANCHOR_BOLTS) - return 1 - d_state = CUT_COVER - update_icon() - to_chat(user, "The metal cover has been pried back into place.") - return 1 - - if(SUPPORT_RODS) - if(W.tool_behaviour == TOOL_WELDER) - if(!W.tool_start_check(user, amount=0)) - return - to_chat(user, "I begin slicing through the support rods...") - if(W.use_tool(src, user, 100, volume=100)) - if(!istype(src, /turf/closed/wall/r_wall) || d_state != SUPPORT_RODS) - return 1 - d_state = SHEATH - update_icon() - to_chat(user, "I slice through the support rods.") - return 1 - - if(W.tool_behaviour == TOOL_WRENCH) - to_chat(user, "I start tightening the bolts which secure the support rods to their frame...") - W.play_tool_sound(src, 100) - if(W.use_tool(src, user, 40)) - if(!istype(src, /turf/closed/wall/r_wall) || d_state != SUPPORT_RODS) - return 1 - d_state = ANCHOR_BOLTS - update_icon() - to_chat(user, "I tighten the bolts anchoring the support rods.") - return 1 - - if(SHEATH) - if(W.tool_behaviour == TOOL_CROWBAR) - to_chat(user, "I struggle to pry off the outer sheath...") - if(W.use_tool(src, user, 100, volume=100)) - if(!istype(src, /turf/closed/wall/r_wall) || d_state != SHEATH) - return 1 - to_chat(user, "I pry off the outer sheath.") - dismantle_wall() - return 1 - - if(W.tool_behaviour == TOOL_WELDER) - if(!W.tool_start_check(user, amount=0)) - return - to_chat(user, "I begin welding the support rods back together...") - if(W.use_tool(src, user, 100, volume=100)) - if(!istype(src, /turf/closed/wall/r_wall) || d_state != SHEATH) - return TRUE - d_state = SUPPORT_RODS - update_icon() - to_chat(user, "I weld the support rods back together.") - return 1 - return 0 - -/turf/closed/wall/r_wall/update_icon() - . = ..() - if(d_state != INTACT) - smooth = SMOOTH_FALSE - clear_smooth_overlays() - else - smooth = SMOOTH_TRUE - queue_smooth_neighbors(src) - queue_smooth(src) - -/turf/closed/wall/r_wall/update_icon_state() - if(d_state != INTACT) - icon_state = "r_wall-[d_state]" - else - icon_state = "r_wall" diff --git a/code/game/turfs/closed/walls.dm b/code/game/turfs/closed/walls.dm index a51768055b..0981947183 100644 --- a/code/game/turfs/closed/walls.dm +++ b/code/game/turfs/closed/walls.dm @@ -16,26 +16,13 @@ var/slicing_duration = 100 //default time taken to slice the wall var/sheet_type = null var/sheet_amount = 2 - var/girder_type = /obj/structure/girder canSmoothWith = list( - /turf/closed/wall, - /turf/closed/wall/r_wall, - /obj/structure/falsewall, - /obj/structure/falsewall/reinforced, - /turf/closed/wall/rust, - /turf/closed/wall/r_wall/rust) + /turf/closed/wall) smooth = SMOOTH_TRUE var/list/dent_decals -/turf/closed/wall/examine(mob/user) - . += ..() -// . += deconstruction_hints(user) - -/turf/closed/wall/proc/deconstruction_hints(mob/user) - return "The outer plating is welded firmly in place." - /turf/closed/wall/attack_tk() return @@ -55,13 +42,7 @@ dismantle_wall(1,0) /turf/closed/wall/proc/dismantle_wall(devastated=0, explode=0) - if(devastated) - devastate_wall() - else - playsound(src, 'sound/blank.ogg', 100, TRUE) - var/newgirder = break_wall() - if(newgirder) //maybe we don't /want/ a girder! - transfer_fingerprints_to(newgirder) + playsound(src, 'sound/blank.ogg', 100, TRUE) for(var/obj/O in src.contents) //Eject contents! if(istype(O, /obj/structure/sign/poster)) @@ -70,15 +51,6 @@ ScrapeAway() -/turf/closed/wall/proc/break_wall() -// new sheet_type(src, sheet_amount) -// return new girder_type(src) - -/turf/closed/wall/proc/devastate_wall() -// new sheet_type(src, sheet_amount) -// if(girder_type) -// new /obj/item/stack/sheet/metal(src) - /turf/closed/wall/ex_act(severity, target) if(target == src) dismantle_wall(1,1) @@ -211,11 +183,6 @@ return FALSE -/turf/closed/wall/narsie_act(force, ignore_mobs, probability = 20) - . = ..() - if(.) - ChangeTurf(/turf/closed/wall/mineral/cult) - /turf/closed/wall/get_dumping_location(obj/item/storage/source, mob/user) return null @@ -250,3 +217,23 @@ add_overlay(dent_decals) #undef MAX_DENT_DECALS + +/turf/closed/splashscreen + name = "" + icon = 'icons/default_title.dmi' + icon_state = "" + layer = FLY_LAYER + bullet_bounce_sound = null + +/turf/closed/splashscreen/New() + SStitle.splash_turf = src + if(SStitle.icon) + icon = SStitle.icon + ..() + +/turf/closed/splashscreen/vv_edit_var(var_name, var_value) + . = ..() + if(.) + switch(var_name) + if("icon") + SStitle.icon = icon diff --git a/code/game/turfs/open/_open.dm b/code/game/turfs/open/_open.dm index 9c6eb90a6b..3fafacf8e8 100644 --- a/code/game/turfs/open/_open.dm +++ b/code/game/turfs/open/_open.dm @@ -53,107 +53,6 @@ /turf/open/zAirOut(direction, turf/source) return (direction == UP) -/turf/open/indestructible - name = "floor" - icon = 'icons/turf/floors.dmi' - icon_state = "floor" - footstep = FOOTSTEP_FLOOR - barefootstep = FOOTSTEP_HARD_BAREFOOT - clawfootstep = FOOTSTEP_HARD_CLAW - heavyfootstep = FOOTSTEP_GENERIC_HEAVY - tiled_dirt = TRUE - -/turf/open/indestructible/Melt() - to_be_destroyed = FALSE - return src - -/turf/open/indestructible/singularity_act() - return - -/turf/open/indestructible/TerraformTurf(path, new_baseturf, flags, defer_change = FALSE, ignore_air = FALSE) - return - -/turf/open/indestructible/sound - name = "squeaky floor" - footstep = null - barefootstep = null - clawfootstep = null - heavyfootstep = null - var/sound - -/turf/open/indestructible/sound/Entered(mob/AM) - ..() - if(istype(AM)) - playsound(src,sound,50,TRUE) - -/turf/open/indestructible/necropolis - name = "necropolis floor" - desc = "" - icon = 'icons/turf/floors.dmi' - icon_state = "necro1" - baseturfs = /turf/open/indestructible/necropolis - initial_gas_mix = LAVALAND_DEFAULT_ATMOS - footstep = FOOTSTEP_LAVA - barefootstep = FOOTSTEP_LAVA - clawfootstep = FOOTSTEP_LAVA - heavyfootstep = FOOTSTEP_LAVA - tiled_dirt = FALSE - -/turf/open/indestructible/necropolis/Initialize() - . = ..() - if(prob(12)) - icon_state = "necro[rand(2,3)]" - -/turf/open/indestructible/necropolis/air - initial_gas_mix = OPENTURF_DEFAULT_ATMOS - -/turf/open/indestructible/boss //you put stone tiles on this and use it as a base - name = "necropolis floor" - icon = 'icons/turf/boss_floors.dmi' - icon_state = "boss" - baseturfs = /turf/open/indestructible/boss - initial_gas_mix = LAVALAND_DEFAULT_ATMOS - -/turf/open/indestructible/boss/air - initial_gas_mix = OPENTURF_DEFAULT_ATMOS - -/turf/open/indestructible/hierophant - icon = 'icons/turf/floors/hierophant_floor.dmi' - initial_gas_mix = LAVALAND_DEFAULT_ATMOS - baseturfs = /turf/open/indestructible/hierophant - smooth = SMOOTH_TRUE - tiled_dirt = FALSE - -/turf/open/indestructible/hierophant/two - -/turf/open/indestructible/hierophant/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir) - return FALSE - -/turf/open/indestructible/paper - name = "notebook floor" - desc = "" - icon_state = "paperfloor" - footstep = null - barefootstep = null - clawfootstep = null - heavyfootstep = null - tiled_dirt = FALSE - -/turf/open/indestructible/binary - name = "tear in the fabric of reality" - CanAtmosPass = ATMOS_PASS_NO - baseturfs = /turf/open/indestructible/binary - icon_state = "binary" - footstep = null - barefootstep = null - clawfootstep = null - heavyfootstep = null - -/turf/open/indestructible/airblock - icon_state = "bluespace" - blocks_air = TRUE - baseturfs = /turf/open/indestructible/airblock - /turf/open/Initalize_Atmos(times_fired) excited = 0 update_visuals() diff --git a/code/game/turfs/open/floor.dm b/code/game/turfs/open/floor.dm index 40ac757533..80158328ad 100644 --- a/code/game/turfs/open/floor.dm +++ b/code/game/turfs/open/floor.dm @@ -104,12 +104,6 @@ /turf/open/floor/proc/gets_drilled() return -/turf/open/floor/proc/break_tile_to_plating() - var/turf/open/floor/plating/T = make_plating() - if(!istype(T)) - return - T.break_tile() - /turf/open/floor/proc/break_tile() if(broken) return @@ -146,29 +140,8 @@ return 1 if(..()) return 1 - if(intact && istype(C, /obj/item/stack/tile)) - try_replace_tile(C, user, params) return 0 -/turf/open/floor/crowbar_act(mob/living/user, obj/item/I) - if(intact && pry_tile(I, user)) - return TRUE - -/turf/open/floor/proc/try_replace_tile(obj/item/stack/tile/T, mob/user, params) - if(T.turf_type == type) - return - var/obj/item/crowbar/CB = user.is_holding_item_of_type(/obj/item/crowbar) - if(!CB) - return - var/turf/open/floor/plating/P = pry_tile(CB, user, TRUE) - if(!istype(P)) - return - P.attackby(T, user, params) - -/turf/open/floor/proc/pry_tile(obj/item/I, mob/user, silent = FALSE) - I.play_tool_sound(src, 80) - return remove_tile(user, silent) - /turf/open/floor/proc/remove_tile(mob/user, silent = FALSE, make_tile = TRUE) if(broken || burnt) broken = 0 diff --git a/code/game/turfs/open/floor/carpet.dm b/code/game/turfs/open/floor/carpet.dm new file mode 100644 index 0000000000..cf958ad8c8 --- /dev/null +++ b/code/game/turfs/open/floor/carpet.dm @@ -0,0 +1,65 @@ +/turf/open/floor/carpet + name = "carpet" + desc = "" + icon = 'icons/turf/floors/carpet.dmi' + icon_state = "carpet" + broken_states = list("damaged") + smooth = SMOOTH_TRUE + canSmoothWith = list(/turf/open/floor/carpet) + flags_1 = NONE + bullet_bounce_sound = null + footstep = FOOTSTEP_CARPET + barefootstep = FOOTSTEP_SOFT_BAREFOOT + clawfootstep = FOOTSTEP_SOFT_BAREFOOT + heavyfootstep = FOOTSTEP_GENERIC_HEAVY + tiled_dirt = FALSE + +/turf/open/floor/carpet/examine(mob/user) + . = ..() +// . += "There's a small crack on the edge of it." + +/turf/open/floor/carpet/Initialize() + . = ..() + update_icon() + +/turf/open/floor/carpet/update_icon() + if(!..()) + return 0 + if(!broken && !burnt) + if(smooth) + queue_smooth(src) + else + make_plating() + if(smooth) + queue_smooth_neighbors(src) + +/turf/open/floor/carpet/purple + icon = 'icons/turf/floors/carpet_purple.dmi' + canSmoothWith = list(/turf/open/floor/carpet/purple) + +/turf/open/floor/carpet/inn + icon = 'icons/turf/floors/inn.dmi' + +/turf/open/floor/carpet/stellar + icon = 'icons/turf/floors/carpet_stellar.dmi' + canSmoothWith = list(/turf/open/floor/carpet/stellar) + +/turf/open/floor/carpet/red + icon = 'icons/turf/floors/carpet_red.dmi' + canSmoothWith = list(/turf/open/floor/carpet/red) + +/turf/open/floor/carpet/royalblack + icon = 'icons/turf/floors/carpet_royalblack.dmi' + canSmoothWith = list(/turf/open/floor/carpet/royalblack) + + +/turf/open/floor/carpet/break_tile() + broken = TRUE + update_icon() + +/turf/open/floor/carpet/burn_tile() + burnt = TRUE + update_icon() + +/turf/open/floor/carpet/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir) + return FALSE diff --git a/code/game/turfs/open/floor/fancy_floor.dm b/code/game/turfs/open/floor/fancy_floor.dm deleted file mode 100644 index 27f65473f8..0000000000 --- a/code/game/turfs/open/floor/fancy_floor.dm +++ /dev/null @@ -1,343 +0,0 @@ -/* In this file: - * Wood floor - * Grass floor - * Fake Basalt - * Carpet floor - * Fake pits - * Fake space - */ - -/turf/open/floor/wood - desc = "" - icon_state = "wood" - floor_tile = /obj/item/stack/tile/wood - broken_states = list("wood-broken", "wood-broken2", "wood-broken3", "wood-broken4", "wood-broken5", "wood-broken6", "wood-broken7") - footstep = FOOTSTEP_WOOD - barefootstep = FOOTSTEP_WOOD_BAREFOOT - clawfootstep = FOOTSTEP_WOOD_CLAW - heavyfootstep = FOOTSTEP_GENERIC_HEAVY - tiled_dirt = FALSE - -/turf/open/floor/wood/examine(mob/user) - . = ..() - . += "There's a few screws and a small crack visible." - -/turf/open/floor/wood/screwdriver_act(mob/living/user, obj/item/I) - if(..()) - return TRUE - return pry_tile(I, user) ? TRUE : FALSE - -/turf/open/floor/wood/try_replace_tile(obj/item/stack/tile/T, mob/user, params) - if(T.turf_type == type) - return - var/obj/item/tool = user.is_holding_item_of_type(/obj/item/screwdriver) - if(!tool) - tool = user.is_holding_item_of_type(/obj/item/crowbar) - if(!tool) - return - var/turf/open/floor/plating/P = pry_tile(tool, user, TRUE) - if(!istype(P)) - return - P.attackby(T, user, params) - -/turf/open/floor/wood/pry_tile(obj/item/C, mob/user, silent = FALSE) - C.play_tool_sound(src, 80) - return remove_tile(user, silent, (C.tool_behaviour == TOOL_SCREWDRIVER)) - -/turf/open/floor/wood/remove_tile(mob/user, silent = FALSE, make_tile = TRUE) - if(broken || burnt) - broken = 0 - burnt = 0 - if(user && !silent) - to_chat(user, "I remove the broken planks.") - else - if(make_tile) - if(user && !silent) - to_chat(user, "I unscrew the planks.") - if(floor_tile) - new floor_tile(src) - else - if(user && !silent) - to_chat(user, "I forcefully pry off the planks, destroying them in the process.") - return make_plating() - -/turf/open/floor/wood/cold - temperature = 255.37 - -/turf/open/floor/wood/airless - initial_gas_mix = AIRLESS_ATMOS - -/turf/open/floor/grass - name = "grass patch" - desc = "" - icon = 'icons/turf/grass.dmi' - icon_state = "grass" - floor_tile = /obj/item/stack/tile/grass - broken_states = list("sand") - flags_1 = NONE - bullet_bounce_sound = null - footstep = FOOTSTEP_GRASS - barefootstep = FOOTSTEP_GRASS - clawfootstep = FOOTSTEP_GRASS - heavyfootstep = FOOTSTEP_GENERIC_HEAVY - var/ore_type = /obj/item/stack/ore/glass - var/turfverb = "uproot" - tiled_dirt = FALSE - -/turf/open/floor/grass/Initialize() - . = ..() - update_icon() - -/turf/open/floor/grass/attackby(obj/item/C, mob/user, params) - if((C.tool_behaviour == TOOL_SHOVEL) && params) - new ore_type(src, 2) - user.visible_message("[user] digs up [src].", "I [turfverb] [src].") - playsound(src, 'sound/blank.ogg', 50, TRUE) - make_plating() - if(..()) - return - -/turf/open/floor/grass/fairy //like grass but fae-er - name = "fairygrass patch" - desc = "" - icon_state = "fairygrass" - floor_tile = /obj/item/stack/tile/fairygrass - light_outer_range = 2 - light_power = 0.80 - light_color = "#33CCFF" - -/turf/open/floor/grass/snow - gender = PLURAL - name = "snow" - icon = 'icons/turf/snow.dmi' - desc = "" - icon_state = "snow" - ore_type = /obj/item/stack/sheet/mineral/snow - planetary_atmos = TRUE - floor_tile = null - initial_gas_mix = FROZEN_ATMOS - slowdown = 2 - bullet_sizzle = TRUE - footstep = FOOTSTEP_SAND - barefootstep = FOOTSTEP_SAND - clawfootstep = FOOTSTEP_SAND - heavyfootstep = FOOTSTEP_GENERIC_HEAVY - -/turf/open/floor/grass/snow/try_replace_tile(obj/item/stack/tile/T, mob/user, params) - return - -/turf/open/floor/grass/snow/crowbar_act(mob/living/user, obj/item/I) - return - -/turf/open/floor/grass/snow/basalt //By your powers combined, I am captain planet - gender = NEUTER - name = "volcanic floor" - icon = 'icons/turf/floors.dmi' - icon_state = "basalt" - ore_type = /obj/item/stack/ore/glass/basalt - initial_gas_mix = OPENTURF_LOW_PRESSURE - slowdown = 0 - -/turf/open/floor/grass/snow/basalt/Initialize() - . = ..() - if(prob(15)) - icon_state = "basalt[rand(0, 12)]" - set_basalt_light(src) - -/turf/open/floor/grass/snow/safe - slowdown = 1.5 - planetary_atmos = FALSE - - -/turf/open/floor/grass/fakebasalt //Heart is not a real planeteer power - name = "aesthetic volcanic flooring" - desc = "" - icon = 'icons/turf/floors.dmi' - icon_state = "basalt" - floor_tile = /obj/item/stack/tile/basalt - ore_type = /obj/item/stack/ore/glass/basalt - turfverb = "dig up" - slowdown = 0 - footstep = FOOTSTEP_SAND - barefootstep = FOOTSTEP_SAND - clawfootstep = FOOTSTEP_SAND - heavyfootstep = FOOTSTEP_GENERIC_HEAVY - -/turf/open/floor/grass/fakebasalt/Initialize() - . = ..() - if(prob(15)) - icon_state = "basalt[rand(0, 12)]" - set_basalt_light(src) - - -/turf/open/floor/carpet - name = "carpet" - desc = "" - icon = 'icons/turf/floors/carpet.dmi' - icon_state = "carpet" - floor_tile = /obj/item/stack/tile/carpet - broken_states = list("damaged") - smooth = SMOOTH_TRUE - canSmoothWith = list(/turf/open/floor/carpet, /turf/open/floor/carpet/airless) - flags_1 = NONE - bullet_bounce_sound = null - footstep = FOOTSTEP_CARPET - barefootstep = FOOTSTEP_SOFT_BAREFOOT - clawfootstep = FOOTSTEP_SOFT_BAREFOOT - heavyfootstep = FOOTSTEP_GENERIC_HEAVY - tiled_dirt = FALSE - -/turf/open/floor/carpet/examine(mob/user) - . = ..() -// . += "There's a small crack on the edge of it." - -/turf/open/floor/carpet/Initialize() - . = ..() - update_icon() - -/turf/open/floor/carpet/update_icon() - if(!..()) - return 0 - if(!broken && !burnt) - if(smooth) - queue_smooth(src) - else - make_plating() - if(smooth) - queue_smooth_neighbors(src) - -/turf/open/floor/carpet/black - icon = 'icons/turf/floors/carpet_black.dmi' - floor_tile = /obj/item/stack/tile/carpet/black - canSmoothWith = list(/turf/open/floor/carpet/black, /turf/open/floor/carpet/airless) - -/turf/open/floor/carpet/blue - icon = 'icons/turf/floors/carpet_blue.dmi' - floor_tile = /obj/item/stack/tile/carpet/blue - canSmoothWith = list(/turf/open/floor/carpet/blue, /turf/open/floor/carpet/blue/airless) - -/turf/open/floor/carpet/cyan - icon = 'icons/turf/floors/carpet_cyan.dmi' - floor_tile = /obj/item/stack/tile/carpet/cyan - canSmoothWith = list(/turf/open/floor/carpet/cyan, /turf/open/floor/carpet/cyan/airless) - -/turf/open/floor/carpet/green - icon = 'icons/turf/floors/carpet_green.dmi' - floor_tile = /obj/item/stack/tile/carpet/green - canSmoothWith = list(/turf/open/floor/carpet/green, /turf/open/floor/carpet/green/airless) - -/turf/open/floor/carpet/orange - icon = 'icons/turf/floors/carpet_orange.dmi' - floor_tile = /obj/item/stack/tile/carpet/orange - canSmoothWith = list(/turf/open/floor/carpet/orange, /turf/open/floor/carpet/orange/airless) - -/turf/open/floor/carpet/purple - icon = 'icons/turf/floors/carpet_purple.dmi' - floor_tile = /obj/item/stack/tile/carpet/purple - canSmoothWith = list(/turf/open/floor/carpet/purple, /turf/open/floor/carpet/purple/airless) - -/turf/open/floor/carpet/inn - icon = 'icons/turf/floors/inn.dmi' - -/turf/open/floor/carpet/stellar - icon = 'icons/turf/floors/carpet_stellar.dmi' - floor_tile = /obj/item/stack/tile/carpet/purple - canSmoothWith = list(/turf/open/floor/carpet/stellar, /turf/open/floor/carpet/purple/airless) - -/turf/open/floor/carpet/red - icon = 'icons/turf/floors/carpet_red.dmi' - floor_tile = /obj/item/stack/tile/carpet/red - canSmoothWith = list(/turf/open/floor/carpet/red, /turf/open/floor/carpet/red/airless) - -/turf/open/floor/carpet/royalblack - icon = 'icons/turf/floors/carpet_royalblack.dmi' - floor_tile = /obj/item/stack/tile/carpet/royalblack - canSmoothWith = list(/turf/open/floor/carpet/royalblack, /turf/open/floor/carpet/royalblack/airless) - -/turf/open/floor/carpet/royalblue - icon = 'icons/turf/floors/carpet_royalblue.dmi' - floor_tile = /obj/item/stack/tile/carpet/royalblue - canSmoothWith = list(/turf/open/floor/carpet/royalblue, /turf/open/floor/carpet/royalblue/airless) - -//*****Airless versions of all of the above.***** -/turf/open/floor/carpet/airless - initial_gas_mix = AIRLESS_ATMOS - -/turf/open/floor/carpet/black/airless - initial_gas_mix = AIRLESS_ATMOS - -/turf/open/floor/carpet/blue/airless - initial_gas_mix = AIRLESS_ATMOS - -/turf/open/floor/carpet/cyan/airless - initial_gas_mix = AIRLESS_ATMOS - -/turf/open/floor/carpet/green/airless - initial_gas_mix = AIRLESS_ATMOS - -/turf/open/floor/carpet/orange/airless - initial_gas_mix = AIRLESS_ATMOS - -/turf/open/floor/carpet/purple/airless - initial_gas_mix = AIRLESS_ATMOS - -/turf/open/floor/carpet/red/airless - initial_gas_mix = AIRLESS_ATMOS - -/turf/open/floor/carpet/royalblack/airless - initial_gas_mix = AIRLESS_ATMOS - -/turf/open/floor/carpet/royalblue/airless - initial_gas_mix = AIRLESS_ATMOS - -/turf/open/floor/carpet/narsie_act(force, ignore_mobs, probability = 20) - . = (prob(probability) || force) - for(var/I in src) - var/atom/A = I - if(ignore_mobs && ismob(A)) - continue - if(ismob(A) || .) - A.narsie_act() - -/turf/open/floor/carpet/break_tile() - broken = TRUE - update_icon() - -/turf/open/floor/carpet/burn_tile() - burnt = TRUE - update_icon() - -/turf/open/floor/carpet/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir) - return FALSE - - -/turf/open/floor/fakepit - desc = "" - smooth = SMOOTH_TRUE | SMOOTH_BORDER | SMOOTH_MORE - canSmoothWith = list(/turf/open/floor/fakepit) - icon = 'icons/turf/floors/Chasms.dmi' - icon_state = "smooth" - tiled_dirt = FALSE - -/turf/open/floor/fakepit/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir) - underlay_appearance.icon = 'icons/turf/floors.dmi' - underlay_appearance.icon_state = "basalt" - return TRUE - -/turf/open/floor/fakespace - icon = 'icons/turf/space.dmi' - icon_state = "0" - floor_tile = /obj/item/stack/tile/fakespace - broken_states = list("damaged") - plane = PLANE_SPACE - tiled_dirt = FALSE - -/turf/open/floor/fakespace/Initialize() - . = ..() - icon_state = SPACE_ICON_STATE - -/turf/open/floor/fakespace/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir) - underlay_appearance.icon = 'icons/turf/space.dmi' - underlay_appearance.icon_state = SPACE_ICON_STATE - underlay_appearance.plane = PLANE_SPACE - return TRUE diff --git a/code/game/turfs/open/floor/light_floor.dm b/code/game/turfs/open/floor/light_floor.dm deleted file mode 100644 index d755a8140b..0000000000 --- a/code/game/turfs/open/floor/light_floor.dm +++ /dev/null @@ -1,101 +0,0 @@ -/turf/open/floor/light - name = "light floor" - desc = "" - light_outer_range = 5 - icon_state = "light_on" - floor_tile = /obj/item/stack/tile/light - broken_states = list("light_broken") - var/on = TRUE - var/state = 0//0 = fine, 1 = flickering, 2 = breaking, 3 = broken - var/list/coloredlights = list("g", "r", "y", "b", "p", "w", "s","o","g") - var/currentcolor = 1 - var/can_modify_colour = TRUE - tiled_dirt = FALSE - - -/turf/open/floor/light/examine(mob/user) - . = ..() - . += "There's a small crack on the edge of it." - -/turf/open/floor/light/Initialize() - . = ..() - update_icon() - -/turf/open/floor/light/break_tile() - ..() - light_outer_range = 0 - update_light() - -/turf/open/floor/light/update_icon() - ..() - if(on) - switch(state) - if(0) - icon_state = "light_on-[coloredlights[currentcolor]]" - set_light(1) - if(1) - var/num = pick("1","2","3","4") - icon_state = "light_on_flicker[num]" - set_light(1) - if(2) - icon_state = "light_on_broken" - set_light(1) - if(3) - icon_state = "light_off" - set_light(0) - else - set_light(0) - icon_state = "light_off" - - -/turf/open/floor/light/ChangeTurf(path, new_baseturf, flags) - set_light(0) - return ..() - -/turf/open/floor/light/attack_hand(mob/user) - . = ..() - if(.) - return - if(!can_modify_colour) - return - if(!on) - on = TRUE - currentcolor = 1 - return - else - currentcolor++ - if(currentcolor > coloredlights.len) - on = FALSE - update_icon() - -/turf/open/floor/light/attackby(obj/item/C, mob/user, params) - if(..()) - return - if(istype(C, /obj/item/light/bulb)) //only for light tiles - if(state && user.temporarilyRemoveItemFromInventory(C)) - qdel(C) - state = 0 //fixing it by bashing it with a light bulb, fun eh? - update_icon() - to_chat(user, "I replace the light bulb.") - else - to_chat(user, "The light bulb seems fine, no need to replace it.") - - -//Cycles through all of the colours -/turf/open/floor/light/colour_cycle - coloredlights = list("cycle_all") - can_modify_colour = FALSE - - - -//Two different "dancefloor" types so that you can have a checkered pattern -// (also has a longer delay than colour_cycle between cycling colours) -/turf/open/floor/light/colour_cycle/dancefloor_a - name = "dancefloor" - desc = "" - coloredlights = list("dancefloor_A") - -/turf/open/floor/light/colour_cycle/dancefloor_b - name = "dancefloor" - desc = "" - coloredlights = list("dancefloor_B") diff --git a/code/game/turfs/open/floor/mineral_floor.dm b/code/game/turfs/open/floor/mineral_floor.dm deleted file mode 100644 index 37223c045f..0000000000 --- a/code/game/turfs/open/floor/mineral_floor.dm +++ /dev/null @@ -1,242 +0,0 @@ -/* In this file: - * - * Plasma floor - * Gold floor - * Silver floor - * Bananium floor - * Diamond floor - * Uranium floor - * Shuttle floor (Titanium) - */ - -/turf/open/floor/mineral - name = "mineral floor" - icon_state = "" - var/list/icons - tiled_dirt = FALSE - - -/turf/open/floor/mineral/Initialize() - if(!broken_states) - broken_states = list("[initial(icon_state)]_dam") - . = ..() - icons = typelist("icons", icons) - - -/turf/open/floor/mineral/update_icon() - if(!..()) - return 0 - if(!broken && !burnt) - if( !(icon_state in icons) ) - icon_state = initial(icon_state) - -//PLASMA - -/turf/open/floor/mineral/plasma - name = "plasma floor" - icon_state = "plasma" - floor_tile = /obj/item/stack/tile/mineral/plasma - icons = list("plasma","plasma_dam") - -/turf/open/floor/mineral/plasma/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if(exposed_temperature > 300) - PlasmaBurn(exposed_temperature) - -/turf/open/floor/mineral/plasma/attackby(obj/item/W, mob/user, params) - if(W.get_temperature() > 300)//If the temperature of the object is over 300, then ignite - message_admins("Plasma flooring was ignited by [ADMIN_LOOKUPFLW(user)] in [ADMIN_VERBOSEJMP(src)]") - log_game("Plasma flooring was ignited by [key_name(user)] in [AREACOORD(src)]") - ignite(W.get_temperature()) - return - ..() - -/turf/open/floor/mineral/plasma/proc/PlasmaBurn(temperature) - make_plating() - atmos_spawn_air("plasma=20;TEMP=[temperature]") - -/turf/open/floor/mineral/plasma/proc/ignite(exposed_temperature) - if(exposed_temperature > 300) - PlasmaBurn(exposed_temperature) - - -//GOLD - -/turf/open/floor/mineral/gold - name = "gold floor" - icon_state = "gold" - floor_tile = /obj/item/stack/tile/mineral/gold - icons = list("gold","gold_dam") - -//SILVER - -/turf/open/floor/mineral/silver - name = "silver floor" - icon_state = "silver" - floor_tile = /obj/item/stack/tile/mineral/silver - icons = list("silver","silver_dam") - -//TITANIUM (shuttle) - -/turf/open/floor/mineral/titanium - name = "shuttle floor" - icon_state = "titanium" - floor_tile = /obj/item/stack/tile/mineral/titanium - broken_states = list("titanium_dam1","titanium_dam2","titanium_dam3","titanium_dam4","titanium_dam5") - -/turf/open/floor/mineral/titanium/airless - initial_gas_mix = AIRLESS_ATMOS - -/turf/open/floor/mineral/titanium/yellow - icon_state = "titanium_yellow" - -/turf/open/floor/mineral/titanium/yellow/airless - initial_gas_mix = AIRLESS_ATMOS - -/turf/open/floor/mineral/titanium/blue - icon_state = "titanium_blue" - -/turf/open/floor/mineral/titanium/blue/airless - initial_gas_mix = AIRLESS_ATMOS - -/turf/open/floor/mineral/titanium/white - icon_state = "titanium_white" - -/turf/open/floor/mineral/titanium/white/airless - initial_gas_mix = AIRLESS_ATMOS - -/turf/open/floor/mineral/titanium/purple - icon_state = "titanium_purple" - -/turf/open/floor/mineral/titanium/purple/airless - initial_gas_mix = AIRLESS_ATMOS - -//PLASTITANIUM (syndieshuttle) -/turf/open/floor/mineral/plastitanium - name = "shuttle floor" - icon_state = "plastitanium" - floor_tile = /obj/item/stack/tile/mineral/plastitanium - broken_states = list("plastitanium_dam1","plastitanium_dam2","plastitanium_dam3","plastitanium_dam4","plastitanium_dam5") - -/turf/open/floor/mineral/plastitanium/airless - initial_gas_mix = AIRLESS_ATMOS - -/turf/open/floor/mineral/plastitanium/red - icon_state = "plastitanium_red" - -/turf/open/floor/mineral/plastitanium/red/airless - initial_gas_mix = AIRLESS_ATMOS - -/turf/open/floor/mineral/plastitanium/red/brig - name = "brig floor" - -//BANANIUM - -/turf/open/floor/mineral/bananium - name = "bananium floor" - icon_state = "bananium" - floor_tile = /obj/item/stack/tile/mineral/bananium - icons = list("bananium","bananium_dam") - var/spam_flag = 0 - -/turf/open/floor/mineral/bananium/Entered(mob/living/L) - .=..() - if(!.) - if(istype(L)) - squeak() - -/turf/open/floor/mineral/bananium/attackby(obj/item/W, mob/user, params) - .=..() - if(!.) - honk() - -/turf/open/floor/mineral/bananium/attack_hand(mob/user) - .=..() - if(!.) - honk() - -/turf/open/floor/mineral/bananium/attack_paw(mob/user) - .=..() - if(!.) - honk() - -/turf/open/floor/mineral/bananium/proc/honk() - if(spam_flag < world.time) - playsound(src, 'sound/blank.ogg', 50, TRUE) - spam_flag = world.time + 20 - -/turf/open/floor/mineral/bananium/proc/squeak() - if(spam_flag < world.time) - playsound(src, "clownstep", 50, TRUE) - spam_flag = world.time + 10 - -/turf/open/floor/mineral/bananium/airless - initial_gas_mix = AIRLESS_ATMOS - -//DIAMOND - -/turf/open/floor/mineral/diamond - name = "diamond floor" - icon_state = "diamond" - floor_tile = /obj/item/stack/tile/mineral/diamond - icons = list("diamond","diamond_dam") - -//URANIUM - -/turf/open/floor/mineral/uranium - article = "a" - name = "uranium floor" - icon_state = "uranium" - floor_tile = /obj/item/stack/tile/mineral/uranium - icons = list("uranium","uranium_dam") - var/last_event = 0 - var/active = null - -/turf/open/floor/mineral/uranium/Entered(mob/AM) - .=..() - if(!.) - if(istype(AM)) - radiate() - -/turf/open/floor/mineral/uranium/attackby(obj/item/W, mob/user, params) - .=..() - if(!.) - radiate() - -/turf/open/floor/mineral/uranium/attack_hand(mob/user) - .=..() - if(!.) - radiate() - -/turf/open/floor/mineral/uranium/attack_paw(mob/user) - .=..() - if(!.) - radiate() - -/turf/open/floor/mineral/uranium/proc/radiate() - if(!active) - if(world.time > last_event+15) - active = 1 - radiation_pulse(src, 10) - for(var/turf/open/floor/mineral/uranium/T in orange(1,src)) - T.radiate() - last_event = world.time - active = 0 - return - -// ALIEN ALLOY -/turf/open/floor/mineral/abductor - name = "alien floor" - icon_state = "alienpod1" - floor_tile = /obj/item/stack/tile/mineral/abductor - icons = list("alienpod1", "alienpod2", "alienpod3", "alienpod4", "alienpod5", "alienpod6", "alienpod7", "alienpod8", "alienpod9") - baseturfs = /turf/open/floor/plating/abductor2 - -/turf/open/floor/mineral/abductor/Initialize() - . = ..() - icon_state = "alienpod[rand(1,9)]" - -/turf/open/floor/mineral/abductor/break_tile() - return //unbreakable - -/turf/open/floor/mineral/abductor/burn_tile() - return //unburnable diff --git a/code/game/turfs/open/floor/misc_floor.dm b/code/game/turfs/open/floor/misc_floor.dm deleted file mode 100644 index deb10bf9e5..0000000000 --- a/code/game/turfs/open/floor/misc_floor.dm +++ /dev/null @@ -1,161 +0,0 @@ -/turf/open/floor/goonplaque - name = "commemorative plaque" - icon_state = "plaque" - desc = "" - floor_tile = /obj/item/stack/tile/plasteel - tiled_dirt = FALSE - -/turf/open/floor/vault - icon_state = "rockvault" - floor_tile = /obj/item/stack/tile/plasteel - -//Circuit flooring, glows a little -/turf/open/floor/circuit - icon = 'icons/turf/floors.dmi' - icon_state = "bcircuit" - var/icon_normal = "bcircuit" - light_color = LIGHT_COLOR_CYAN - floor_tile = /obj/item/stack/tile/circuit - var/on = TRUE - -/turf/open/floor/circuit/Initialize() - SSmapping.nuke_tiles += src - update_icon() - . = ..() - -/turf/open/floor/circuit/Destroy() - SSmapping.nuke_tiles -= src - return ..() - -/turf/open/floor/circuit/update_icon() - if(on) - if(LAZYLEN(SSmapping.nuke_threats)) - icon_state = "rcircuitanim" - light_color = LIGHT_COLOR_FLARE - else - icon_state = icon_normal - light_color = initial(light_color) - set_light(1.4, 0.5) - else - icon_state = "[icon_normal]off" - set_light(0) - -/turf/open/floor/circuit/off - icon_state = "bcircuitoff" - on = FALSE - -/turf/open/floor/circuit/airless - initial_gas_mix = AIRLESS_ATMOS - -/turf/open/floor/circuit/telecomms - initial_gas_mix = TCOMMS_ATMOS - -/turf/open/floor/circuit/telecomms/mainframe - name = "mainframe base" - -/turf/open/floor/circuit/telecomms/server - name = "server base" - -/turf/open/floor/circuit/green - icon_state = "gcircuit" - icon_normal = "gcircuit" - light_color = LIGHT_COLOR_GREEN - floor_tile = /obj/item/stack/tile/circuit/green - -/turf/open/floor/circuit/green/off - icon_state = "gcircuitoff" - on = FALSE - -/turf/open/floor/circuit/green/anim - icon_state = "gcircuitanim" - icon_normal = "gcircuitanim" - floor_tile = /obj/item/stack/tile/circuit/green/anim - -/turf/open/floor/circuit/green/airless - initial_gas_mix = AIRLESS_ATMOS - -/turf/open/floor/circuit/green/telecomms - initial_gas_mix = TCOMMS_ATMOS - -/turf/open/floor/circuit/green/telecomms/mainframe - name = "mainframe base" - -/turf/open/floor/circuit/red - icon_state = "rcircuit" - icon_normal = "rcircuit" - light_color = LIGHT_COLOR_FLARE - floor_tile = /obj/item/stack/tile/circuit/red - -/turf/open/floor/circuit/red/off - icon_state = "rcircuitoff" - on = FALSE - -/turf/open/floor/circuit/red/anim - icon_state = "rcircuitanim" - icon_normal = "rcircuitanim" - floor_tile = /obj/item/stack/tile/circuit/red/anim - -/turf/open/floor/circuit/red/airless - initial_gas_mix = AIRLESS_ATMOS - -/turf/open/floor/circuit/red/telecomms - initial_gas_mix = TCOMMS_ATMOS - -/turf/open/floor/pod - name = "pod floor" - icon_state = "podfloor" - icon_regular_floor = "podfloor" - floor_tile = /obj/item/stack/tile/pod - -/turf/open/floor/pod/light - icon_state = "podfloor_light" - icon_regular_floor = "podfloor_light" - floor_tile = /obj/item/stack/tile/pod/light - -/turf/open/floor/pod/dark - icon_state = "podfloor_dark" - icon_regular_floor = "podfloor_dark" - floor_tile = /obj/item/stack/tile/pod/dark - - -/turf/open/floor/noslip - name = "high-traction floor" - icon_state = "noslip" - floor_tile = /obj/item/stack/tile/noslip - broken_states = list("noslip-damaged1","noslip-damaged2","noslip-damaged3") - burnt_states = list("noslip-scorched1","noslip-scorched2") - slowdown = -0.3 - -/turf/open/floor/noslip/MakeSlippery(wet_setting, min_wet_time, wet_time_to_add, max_wet_time, permanent) - return - -/turf/open/floor/oldshuttle - icon = 'icons/turf/shuttleold.dmi' - icon_state = "floor" - floor_tile = /obj/item/stack/tile/plasteel - -/turf/open/floor/bronze - name = "bronze floor" - desc = "" - icon = 'icons/obj/clockwork_objects.dmi' - icon_state = "clockwork_floor" - floor_tile = /obj/item/stack/tile/bronze - -/turf/open/floor/white - name = "white floor" - desc = "" - icon_state = "pure_white" - -/turf/open/floor/black - name = "black floor" - icon_state = "black" - -/turf/open/floor/plastic - name = "plastic floor" - desc = "" - icon_state = "plastic" - thermal_conductivity = 0.1 - heat_capacity = 900 - custom_materials = list(/datum/material/plastic=500) - floor_tile = /obj/item/stack/tile/plastic - broken_states = list("plastic-damaged1","plastic-damaged2") diff --git a/code/game/turfs/open/floor/plasteel_floor.dm b/code/game/turfs/open/floor/plasteel_floor.dm deleted file mode 100644 index b0164a3edb..0000000000 --- a/code/game/turfs/open/floor/plasteel_floor.dm +++ /dev/null @@ -1,157 +0,0 @@ -/turf/open/floor/plasteel - icon_state = "floor" - floor_tile = /obj/item/stack/tile/plasteel - broken_states = list("damaged1", "damaged2", "damaged3", "damaged4", "damaged5") - burnt_states = list("floorscorched1", "floorscorched2") - -/turf/open/floor/plasteel/examine(mob/user) - . = ..() - . += "There's a small crack on the edge of it." - -/turf/open/floor/plasteel/update_icon() - if(!..()) - return 0 - if(!broken && !burnt) - icon_state = icon_regular_floor - - -/turf/open/floor/plasteel/airless - initial_gas_mix = AIRLESS_ATMOS -/turf/open/floor/plasteel/telecomms - initial_gas_mix = TCOMMS_ATMOS - - -/turf/open/floor/plasteel/dark - icon_state = "darkfull" -/turf/open/floor/plasteel/dark/airless - initial_gas_mix = AIRLESS_ATMOS -/turf/open/floor/plasteel/dark/telecomms - initial_gas_mix = TCOMMS_ATMOS -/turf/open/floor/plasteel/airless/dark - icon_state = "darkfull" -/turf/open/floor/plasteel/dark/side - icon_state = "dark" -/turf/open/floor/plasteel/dark/corner - icon_state = "darkcorner" -/turf/open/floor/plasteel/checker - icon_state = "checker" - - -/turf/open/floor/plasteel/white - icon_state = "white" -/turf/open/floor/plasteel/white/side - icon_state = "whitehall" -/turf/open/floor/plasteel/white/corner - icon_state = "whitecorner" -/turf/open/floor/plasteel/airless/white - icon_state = "white" -/turf/open/floor/plasteel/airless/white/side - icon_state = "whitehall" -/turf/open/floor/plasteel/airless/white/corner - icon_state = "whitecorner" -/turf/open/floor/plasteel/white/telecomms - initial_gas_mix = TCOMMS_ATMOS - -/turf/open/floor/plasteel/airless/showroomfloor - icon_state = "showroomfloor" - - -/turf/open/floor/plasteel/yellowsiding - icon_state = "yellowsiding" -/turf/open/floor/plasteel/yellowsiding/corner - icon_state = "yellowcornersiding" - - -/turf/open/floor/plasteel/recharge_floor - icon_state = "recharge_floor" -/turf/open/floor/plasteel/recharge_floor/asteroid - icon_state = "recharge_floor_asteroid" - - -/turf/open/floor/plasteel/chapel - icon_state = "chapel" - -/turf/open/floor/plasteel/showroomfloor - icon_state = "showroomfloor" - - -/turf/open/floor/plasteel/solarpanel - icon_state = "solarpanel" -/turf/open/floor/plasteel/airless/solarpanel - icon_state = "solarpanel" - - -/turf/open/floor/plasteel/freezer - icon_state = "freezerfloor" - -/turf/open/floor/plasteel/freezer/airless - initial_gas_mix = AIRLESS_ATMOS - - -/turf/open/floor/plasteel/kitchen_coldroom - name = "cold room floor" - initial_gas_mix = KITCHEN_COLDROOM_ATMOS - -/turf/open/floor/plasteel/kitchen_coldroom/freezerfloor - icon_state = "freezerfloor" - - -/turf/open/floor/plasteel/grimy - icon_state = "grimy" - tiled_dirt = FALSE - -/turf/open/floor/plasteel/cafeteria - icon_state = "cafeteria" - -/turf/open/floor/plasteel/airless/cafeteria - icon_state = "cafeteria" - - -/turf/open/floor/plasteel/cult - icon_state = "cult" - name = "engraved floor" - -/turf/open/floor/plasteel/vaporwave - icon_state = "pinkblack" - -/turf/open/floor/plasteel/goonplaque - icon_state = "plaque" - name = "commemorative plaque" - desc = "" - tiled_dirt = FALSE - -/turf/open/floor/plasteel/cult/narsie_act() - return -/turf/open/floor/plasteel/cult/airless - initial_gas_mix = AIRLESS_ATMOS - - -/turf/open/floor/plasteel/stairs - icon_state = "stairs" - tiled_dirt = FALSE -/turf/open/floor/plasteel/stairs/left - icon_state = "stairs-l" -/turf/open/floor/plasteel/stairs/medium - icon_state = "stairs-m" -/turf/open/floor/plasteel/stairs/right - icon_state = "stairs-r" -/turf/open/floor/plasteel/stairs/old - icon_state = "stairs-old" - - -/turf/open/floor/plasteel/rockvault - icon_state = "rockvault" -/turf/open/floor/plasteel/rockvault/alien - icon_state = "alienvault" -/turf/open/floor/plasteel/rockvault/sandstone - icon_state = "sandstonevault" - - -/turf/open/floor/plasteel/elevatorshaft - icon_state = "elevatorshaft" - -/turf/open/floor/plasteel/bluespace - icon_state = "bluespace" - -/turf/open/floor/plasteel/sepia - icon_state = "sepia" diff --git a/code/game/turfs/open/floor/plating.dm b/code/game/turfs/open/floor/plating.dm deleted file mode 100644 index edd0a97059..0000000000 --- a/code/game/turfs/open/floor/plating.dm +++ /dev/null @@ -1,138 +0,0 @@ -/* In this file: - * - * Plating - * Airless - * Airless plating - * Engine floor - * Foam plating - */ - -/turf/open/floor/plating - name = "plating" - icon_state = "plating" - intact = FALSE - baseturfs = /turf/open/transparent/openspace - footstep = FOOTSTEP_PLATING - barefootstep = FOOTSTEP_HARD_BAREFOOT - clawfootstep = FOOTSTEP_HARD_CLAW - heavyfootstep = FOOTSTEP_GENERIC_HEAVY - - var/attachment_holes = TRUE - -/turf/open/floor/plating/examine(mob/user) - . = ..() - if(broken || burnt) - . += "It looks like the dents could be welded smooth." - return - if(attachment_holes) - . += "There are a few attachment holes for a new tile or reinforcement rods." - else - . += "I might be able to build ontop of it with some tiles..." - -/turf/open/floor/plating/Initialize() - if (!broken_states) - broken_states = list("platingdmg1", "platingdmg2", "platingdmg3") - if (!burnt_states) - burnt_states = list("panelscorched") - . = ..() - if(!attachment_holes || (!broken && !burnt)) - icon_plating = icon_state - else - icon_plating = initial(icon_state) - -/turf/open/floor/plating/update_icon() - if(!..()) - return - if(!broken && !burnt) - icon_state = icon_plating //Because asteroids are 'platings' too. - -/turf/open/floor/plating/attackby(obj/item/C, mob/user, params) - if(..()) - return - if(istype(C, /obj/item/stack/rods) && attachment_holes) - if(broken || burnt) - to_chat(user, "Repair the plating first!") - return - var/obj/item/stack/rods/R = C - if (R.get_amount() < 2) - to_chat(user, "I need two rods to make a reinforced floor!") - return - else - to_chat(user, "I begin reinforcing the floor...") - if(do_after(user, 30, target = src)) - if (R.get_amount() >= 2 && !istype(src, /turf/open/floor/engine)) - PlaceOnTop(/turf/open/floor/engine, flags = CHANGETURF_INHERIT_AIR) - playsound(src, 'sound/blank.ogg', 80, TRUE) - R.use(2) - to_chat(user, "I reinforce the floor.") - return - else if(istype(C, /obj/item/stack/tile)) - if(!broken && !burnt) - for(var/obj/O in src) - if(O.level == 1) //ex. pipes laid underneath a tile - for(var/M in O.buckled_mobs) - to_chat(user, "Someone is buckled to \the [O]! Unbuckle [M] to move \him out of the way.") - return - var/obj/item/stack/tile/W = C - if(!W.use(1)) - return - var/turf/open/floor/T = PlaceOnTop(W.turf_type, flags = CHANGETURF_INHERIT_AIR) - if(istype(W, /obj/item/stack/tile/light)) //TODO: get rid of this ugly check somehow - var/obj/item/stack/tile/light/L = W - var/turf/open/floor/light/F = T - F.state = L.state - playsound(src, 'sound/blank.ogg', 50, TRUE) - else - to_chat(user, "This section is too damaged to support a tile! Use a welder to fix the damage.") - -/turf/open/floor/plating/welder_act(mob/living/user, obj/item/I) - ..() - if((broken || burnt) && I.use_tool(src, user, 0, volume=80)) - to_chat(user, "I fix some dents on the broken plating.") - icon_state = icon_plating - burnt = FALSE - broken = FALSE - - return TRUE - -/turf/open/floor/plating/make_plating() - return - -/turf/open/floor/plating/foam - name = "metal foam plating" - desc = "" - icon_state = "foam_plating" - -/turf/open/floor/plating/foam/burn_tile() - return //jetfuel can't melt steel foam - -/turf/open/floor/plating/foam/break_tile() - return //jetfuel can't break steel foam... - -/turf/open/floor/plating/foam/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/stack/tile/plasteel)) - var/obj/item/stack/tile/plasteel/P = I - if(P.use(1)) - var/obj/L = locate(/obj/structure/lattice) in src - if(L) - qdel(L) - to_chat(user, "I reinforce the foamed plating with tiling.") - playsound(src, 'sound/blank.ogg', 50, TRUE) - ChangeTurf(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) - else - playsound(src, 'sound/blank.ogg', 100, TRUE) //The attack sound is muffled by the foam itself - user.changeNext_move(CLICK_CD_MELEE) - user.do_attack_animation(src) - if(prob(I.force * 20 - 25)) - user.visible_message("[user] smashes through [src]!", \ - "I smash through [src] with [I]!") - ScrapeAway(flags = CHANGETURF_INHERIT_AIR) - else - to_chat(user, "I hit [src], to no effect!") - -/turf/open/floor/plating/foam/ex_act() - ..() - ScrapeAway(flags = CHANGETURF_INHERIT_AIR) - -/turf/open/floor/plating/foam/tool_act(mob/living/user, obj/item/I, tool_type) - return diff --git a/code/game/turfs/open/floor/plating/asteroid.dm b/code/game/turfs/open/floor/plating/asteroid.dm deleted file mode 100644 index cf3ca6c5d4..0000000000 --- a/code/game/turfs/open/floor/plating/asteroid.dm +++ /dev/null @@ -1,184 +0,0 @@ - -/**********************Asteroid**************************/ - -/turf/open/floor/plating/asteroid //floor piece - gender = PLURAL - name = "asteroid sand" - baseturfs = /turf/open/floor/plating/asteroid - icon = 'icons/turf/floors.dmi' - icon_state = "asteroid" - icon_plating = "asteroid" - postdig_icon_change = TRUE - footstep = FOOTSTEP_SAND - barefootstep = FOOTSTEP_SAND - clawfootstep = FOOTSTEP_SAND - heavyfootstep = FOOTSTEP_GENERIC_HEAVY - var/environment_type = "asteroid" - var/turf_type = /turf/open/floor/plating/asteroid //Because caves do whacky shit to revert to normal - var/floor_variance = 20 //probability floor has a different icon state - attachment_holes = FALSE - var/obj/item/stack/digResult = /obj/item/stack/ore/glass/basalt - var/dug - -/turf/open/floor/plating/asteroid/Initialize() - var/proper_name = name - . = ..() - name = proper_name - if(prob(floor_variance)) - icon_state = "[environment_type][rand(0,12)]" - -/turf/open/floor/plating/asteroid/proc/getDug() - new digResult(src, 5) - if(postdig_icon_change) - if(!postdig_icon) - icon_plating = "[environment_type]_dug" - icon_state = "[environment_type]_dug" - dug = TRUE - -/turf/open/floor/plating/asteroid/proc/can_dig(mob/user) - if(!dug) - return TRUE - if(user) - to_chat(user, "Looks like someone has dug here already!") - -/turf/open/floor/plating/asteroid/try_replace_tile(obj/item/stack/tile/T, mob/user, params) - return - -/turf/open/floor/plating/asteroid/burn_tile() - return - -/turf/open/floor/plating/asteroid/MakeSlippery(wet_setting, min_wet_time, wet_time_to_add, max_wet_time, permanent) - return - -/turf/open/floor/plating/asteroid/MakeDry() - return - -/turf/open/floor/plating/asteroid/attackby(obj/item/W, mob/user, params) - . = ..() - if(!.) - if(W.tool_behaviour == TOOL_SHOVEL || W.tool_behaviour == TOOL_MINING) - if(!can_dig(user)) - return TRUE - - if(!isturf(user.loc)) - return - - to_chat(user, "I start digging...") - - if(W.use_tool(src, user, 40, volume=50)) - if(!can_dig(user)) - return TRUE - to_chat(user, "I dig a hole.") - getDug() - SSblackbox.record_feedback("tally", "pick_used_mining", 1, W.type) - return TRUE - else if(istype(W, /obj/item/storage/bag/ore)) - for(var/obj/item/stack/ore/O in src) - SEND_SIGNAL(W, COMSIG_PARENT_ATTACKBY, O) - -/turf/open/floor/plating/asteroid/ex_act(severity, target) - . = SEND_SIGNAL(src, COMSIG_ATOM_EX_ACT, severity, target) - contents_explosion(severity, target) - -/turf/open/floor/plating/lavaland_baseturf - baseturfs = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - -/turf/open/floor/plating/asteroid/basalt - name = "volcanic floor" - baseturfs = /turf/open/floor/plating/asteroid/basalt - icon = 'icons/turf/floors.dmi' - icon_state = "basalt" - icon_plating = "basalt" - environment_type = "basalt" - floor_variance = 15 - digResult = /obj/item/stack/ore/glass/basalt - -/turf/open/floor/plating/asteroid/basalt/lava //lava underneath - baseturfs = /turf/open/lava/smooth - -/turf/open/floor/plating/asteroid/basalt/airless - initial_gas_mix = AIRLESS_ATMOS - -/turf/open/floor/plating/asteroid/basalt/Initialize() - . = ..() - set_basalt_light(src) - -/turf/open/floor/plating/asteroid/getDug() - set_light(0) - return ..() - -/proc/set_basalt_light(turf/open/floor/B) - switch(B.icon_state) - if("basalt1", "basalt2", "basalt3") - B.set_light(2, 0.6, LIGHT_COLOR_LAVA) //more light - if("basalt5", "basalt9") - B.set_light(1.4, 0.6, LIGHT_COLOR_LAVA) //barely anything! - -///////Surface. The surface is warm, but survivable without a suit. Internals are required. The floors break to chasms, which drop you into the underground. - -/turf/open/floor/plating/asteroid/basalt/lava_land_surface - initial_gas_mix = LAVALAND_DEFAULT_ATMOS - planetary_atmos = TRUE - baseturfs = /turf/open/lava/smooth/lava_land_surface - - - - -/turf/open/floor/plating/asteroid/airless - initial_gas_mix = AIRLESS_ATMOS - baseturfs = /turf/open/floor/plating/asteroid/airless - turf_type = /turf/open/floor/plating/asteroid/airless - -/turf/open/floor/plating/asteroid/snow - gender = PLURAL - name = "snow" - desc = "" - icon = 'icons/turf/snow.dmi' - baseturfs = /turf/open/floor/plating/asteroid/snow - icon_state = "snow" - icon_plating = "snow" - initial_gas_mix = FROZEN_ATMOS - slowdown = 2 - environment_type = "snow" - flags_1 = NONE - planetary_atmos = TRUE - burnt_states = list("snow_dug") - bullet_sizzle = TRUE - bullet_bounce_sound = null - digResult = /obj/item/stack/sheet/mineral/snow - -/turf/open/floor/plating/asteroid/snow/burn_tile() - if(!burnt) - visible_message("[src] melts away!.") - slowdown = 0 - burnt = TRUE - icon_state = "snow_dug" - return TRUE - return FALSE - -/turf/open/floor/plating/asteroid/snow/ice - name = "icy snow" - desc = "" - baseturfs = /turf/open/floor/plating/asteroid/snow/ice - initial_gas_mix = "o2=0;n2=82;plasma=24;TEMP=120" - floor_variance = 0 - icon_state = "snow-ice" - icon_plating = "snow-ice" - environment_type = "snow_cavern" - footstep = FOOTSTEP_FLOOR - barefootstep = FOOTSTEP_HARD_BAREFOOT - clawfootstep = FOOTSTEP_HARD_CLAW - heavyfootstep = FOOTSTEP_GENERIC_HEAVY - -/turf/open/floor/plating/asteroid/snow/ice/burn_tile() - return FALSE - -/turf/open/floor/plating/asteroid/snow/airless - initial_gas_mix = AIRLESS_ATMOS - -/turf/open/floor/plating/asteroid/snow/temperatre - initial_gas_mix = "o2=22;n2=82;TEMP=255.37" - -/turf/open/floor/plating/asteroid/snow/atmosphere - initial_gas_mix = FROZEN_ATMOS - planetary_atmos = FALSE diff --git a/code/game/turfs/open/floor/plating/dirt.dm b/code/game/turfs/open/floor/plating/dirt.dm deleted file mode 100644 index 8b145dfc33..0000000000 --- a/code/game/turfs/open/floor/plating/dirt.dm +++ /dev/null @@ -1,32 +0,0 @@ -/turf/open/floor/plating/dirt - gender = PLURAL - name = "dirt" - desc = "The dirt is pocked with the scars of countless battles." - icon = 'icons/turf/floors.dmi' - icon_state = "dirt" - initial_gas_mix = OPENTURF_LOW_PRESSURE - planetary_atmos = TRUE - attachment_holes = FALSE - footstep = FOOTSTEP_SAND - barefootstep = FOOTSTEP_SAND - clawfootstep = FOOTSTEP_SAND - heavyfootstep = FOOTSTEP_GENERIC_HEAVY - tiled_dirt = FALSE - -/turf/open/floor/plating/dirt/dark - icon_state = "greenerdirt" - -/turf/open/floor/plating/dirt/try_replace_tile(obj/item/stack/tile/T, mob/user, params) - return -//underworld -/turf/open/floor/plating/dirt/underworld - gender = PLURAL - name = "ash" - desc = "The floor is strange.." - icon = 'icons/turf/floors.dmi' - icon_state = "underworld" - footstep = FOOTSTEP_SAND - barefootstep = FOOTSTEP_SAND - clawfootstep = FOOTSTEP_SAND - heavyfootstep = FOOTSTEP_GENERIC_HEAVY - tiled_dirt = FALSE diff --git a/code/game/turfs/open/floor/plating/misc_plating.dm b/code/game/turfs/open/floor/plating/misc_plating.dm deleted file mode 100644 index 8190537255..0000000000 --- a/code/game/turfs/open/floor/plating/misc_plating.dm +++ /dev/null @@ -1,263 +0,0 @@ - -/turf/open/floor/plating/airless - icon_state = "plating" - initial_gas_mix = AIRLESS_ATMOS - -/turf/open/floor/plating/abductor - name = "alien floor" - icon_state = "alienpod1" - tiled_dirt = FALSE - -/turf/open/floor/plating/abductor/Initialize() - . = ..() - icon_state = "alienpod[rand(1,9)]" - - -/turf/open/floor/plating/abductor2 - name = "alien plating" - icon_state = "alienplating" - tiled_dirt = FALSE - -/turf/open/floor/plating/abductor2/break_tile() - return //unbreakable - -/turf/open/floor/plating/abductor2/burn_tile() - return //unburnable - -/turf/open/floor/plating/abductor2/try_replace_tile(obj/item/stack/tile/T, mob/user, params) - return - -/turf/open/floor/plating/astplate - icon_state = "asteroidplating" - -/turf/open/floor/plating/airless/astplate - icon_state = "asteroidplating" - - -/turf/open/floor/plating/ashplanet - icon = 'icons/turf/mining.dmi' - gender = PLURAL - name = "ash" - icon_state = "ash" - smooth = SMOOTH_MORE|SMOOTH_BORDER - var/smooth_icon = 'icons/turf/floors/ash.dmi' - desc = "" - baseturfs = /turf/open/floor/plating/ashplanet/wateryrock //I assume this will be a chasm eventually, once this becomes an actual surface - initial_gas_mix = LAVALAND_DEFAULT_ATMOS - planetary_atmos = TRUE - attachment_holes = FALSE - footstep = FOOTSTEP_SAND - barefootstep = FOOTSTEP_SAND - clawfootstep = FOOTSTEP_SAND - heavyfootstep = FOOTSTEP_GENERIC_HEAVY - tiled_dirt = FALSE - -/turf/open/floor/plating/ashplanet/Initialize() - if(smooth) - var/matrix/M = new - M.Translate(-4, -4) - transform = M - icon = smooth_icon - . = ..() - -/turf/open/floor/plating/ashplanet/try_replace_tile(obj/item/stack/tile/T, mob/user, params) - return - -/turf/open/floor/plating/ashplanet/break_tile() - return - -/turf/open/floor/plating/ashplanet/burn_tile() - return - -/turf/open/floor/plating/ashplanet/ash - canSmoothWith = list(/turf/open/floor/plating/ashplanet/ash, /turf/closed) - layer = HIGH_TURF_LAYER - slowdown = 1 - -/turf/open/floor/plating/ashplanet/rocky - gender = PLURAL - name = "rocky ground" - icon_state = "rockyash" - smooth_icon = 'icons/turf/floors/rocky_ash.dmi' - layer = MID_TURF_LAYER - canSmoothWith = list(/turf/open/floor/plating/ashplanet/rocky, /turf/closed) - footstep = FOOTSTEP_FLOOR - barefootstep = FOOTSTEP_HARD_BAREFOOT - clawfootstep = FOOTSTEP_HARD_CLAW - heavyfootstep = FOOTSTEP_GENERIC_HEAVY - -/turf/open/floor/plating/ashplanet/wateryrock - gender = PLURAL - name = "wet rocky ground" - smooth = null - icon_state = "wateryrock" - slowdown = 2 - footstep = FOOTSTEP_FLOOR - barefootstep = FOOTSTEP_HARD_BAREFOOT - clawfootstep = FOOTSTEP_HARD_CLAW - heavyfootstep = FOOTSTEP_GENERIC_HEAVY - -/turf/open/floor/plating/ashplanet/wateryrock/Initialize() - icon_state = "[icon_state][rand(1, 9)]" - . = ..() - - -/turf/open/floor/plating/beach - name = "beach" - icon = 'icons/misc/beach.dmi' - flags_1 = NONE - attachment_holes = FALSE - bullet_bounce_sound = null - footstep = FOOTSTEP_SAND - barefootstep = FOOTSTEP_SAND - clawfootstep = FOOTSTEP_SAND - heavyfootstep = FOOTSTEP_GENERIC_HEAVY - -/turf/open/floor/plating/beach/try_replace_tile(obj/item/stack/tile/T, mob/user, params) - return - -/turf/open/floor/plating/beach/ex_act(severity, target) - contents_explosion(severity, target) - -/turf/open/floor/plating/beach/sand - gender = PLURAL - name = "sand" - desc = "" - icon_state = "sand" - baseturfs = /turf/open/floor/plating/beach/sand - -/turf/open/floor/plating/beach/coastline_t - name = "coastline" - desc = "" - icon_state = "sandwater_t" - baseturfs = /turf/open/floor/plating/beach/coastline_t - -/turf/open/floor/plating/beach/coastline_b //need to make this water subtype. - name = "coastline" - icon_state = "sandwater_b" - baseturfs = /turf/open/floor/plating/beach/coastline_b - footstep = FOOTSTEP_LAVA - barefootstep = FOOTSTEP_LAVA - clawfootstep = FOOTSTEP_LAVA - heavyfootstep = FOOTSTEP_LAVA - -/turf/open/floor/plating/beach/water - gender = PLURAL - name = "water" - desc = "" - icon_state = "water" - baseturfs = /turf/open/floor/plating/beach/water - footstep = FOOTSTEP_LAVA //placeholder, kinda. - barefootstep = FOOTSTEP_LAVA - clawfootstep = FOOTSTEP_LAVA - heavyfootstep = FOOTSTEP_LAVA - -/turf/open/floor/plating/beach/coastline_t/sandwater_inner - icon_state = "sandwater_inner" - baseturfs = /turf/open/floor/plating/beach/coastline_t/sandwater_inner - -/turf/open/floor/plating/ironsand - gender = PLURAL - name = "iron sand" - desc = "" - footstep = FOOTSTEP_SAND - barefootstep = FOOTSTEP_SAND - clawfootstep = FOOTSTEP_SAND - heavyfootstep = FOOTSTEP_GENERIC_HEAVY - -/turf/open/floor/plating/ironsand/Initialize() - . = ..() - icon_state = "ironsand[rand(1,15)]" - -/turf/open/floor/plating/ironsand/burn_tile() - return - -/turf/open/floor/plating/ironsand/try_replace_tile(obj/item/stack/tile/T, mob/user, params) - return - -/turf/open/floor/plating/ice - name = "ice sheet" - desc = "" - icon = 'icons/turf/floors/ice_turf.dmi' - icon_state = "unsmooth" - initial_gas_mix = FROZEN_ATMOS - temperature = 180 - planetary_atmos = TRUE - baseturfs = /turf/open/floor/plating/ice - slowdown = 1 - attachment_holes = FALSE - bullet_sizzle = TRUE - footstep = FOOTSTEP_FLOOR - barefootstep = FOOTSTEP_HARD_BAREFOOT - clawfootstep = FOOTSTEP_HARD_CLAW - heavyfootstep = FOOTSTEP_GENERIC_HEAVY - -/turf/open/floor/plating/ice/Initialize() - . = ..() - MakeSlippery(TURF_WET_PERMAFROST, INFINITY, 0, INFINITY, TRUE) - -/turf/open/floor/plating/ice/try_replace_tile(obj/item/stack/tile/T, mob/user, params) - return - -/turf/open/floor/plating/ice/smooth - icon_state = "smooth" - smooth = SMOOTH_MORE | SMOOTH_BORDER - canSmoothWith = list(/turf/open/floor/plating/ice/smooth, /turf/open/floor/plating/ice) - - -/turf/open/floor/plating/ice/colder - temperature = 140 - -/turf/open/floor/plating/ice/temperate - temperature = 255.37 - -/turf/open/floor/plating/ice/break_tile() - return - -/turf/open/floor/plating/ice/burn_tile() - return - - -/turf/open/floor/plating/snowed - name = "snowed-over plating" - desc = "" - icon = 'icons/turf/snow.dmi' - icon_state = "snowplating" - initial_gas_mix = FROZEN_ATMOS - temperature = 180 - attachment_holes = FALSE - planetary_atmos = TRUE - footstep = FOOTSTEP_SAND - barefootstep = FOOTSTEP_SAND - clawfootstep = FOOTSTEP_SAND - heavyfootstep = FOOTSTEP_GENERIC_HEAVY - -/turf/open/floor/plating/snowed/cavern - initial_gas_mix = "o2=0;n2=82;plasma=24;TEMP=120" - -/turf/open/floor/plating/snowed/smoothed - smooth = SMOOTH_MORE | SMOOTH_BORDER - canSmoothWith = list(/turf/open/floor/plating/snowed/smoothed, /turf/open/floor/plating/snowed) - planetary_atmos = TRUE - icon = 'icons/turf/floors/snow_turf.dmi' - icon_state = "smooth" - -/turf/open/floor/plating/snowed/colder - temperature = 140 - -/turf/open/floor/plating/snowed/temperatre - temperature = 255.37 - -/turf/open/floor/plating/grass - name = "grass" - desc = "" - icon_state = "grass" - broken_states = list("sand") - bullet_bounce_sound = null - footstep = FOOTSTEP_GRASS - barefootstep = FOOTSTEP_GRASS - clawfootstep = FOOTSTEP_GRASS - heavyfootstep = FOOTSTEP_GENERIC_HEAVY - -/turf/open/floor/plating/grass/lavaland - initial_gas_mix = LAVALAND_DEFAULT_ATMOS diff --git a/code/game/turfs/open/floor/reinf_floor.dm b/code/game/turfs/open/floor/reinf_floor.dm deleted file mode 100644 index 3023ca3674..0000000000 --- a/code/game/turfs/open/floor/reinf_floor.dm +++ /dev/null @@ -1,120 +0,0 @@ - -/turf/open/floor/engine - name = "reinforced floor" - desc = "" - icon_state = "engine" - thermal_conductivity = 0.025 - heat_capacity = INFINITY - floor_tile = /obj/item/stack/rods - footstep = FOOTSTEP_PLATING - barefootstep = FOOTSTEP_HARD_BAREFOOT - clawfootstep = FOOTSTEP_HARD_CLAW - heavyfootstep = FOOTSTEP_GENERIC_HEAVY - tiled_dirt = FALSE - -/turf/open/floor/engine/examine(mob/user) - . += ..() - . += "The reinforcement rods are wrenched firmly in place." - -/turf/open/floor/engine/airless - initial_gas_mix = AIRLESS_ATMOS - -/turf/open/floor/engine/break_tile() - return //unbreakable - -/turf/open/floor/engine/burn_tile() - return //unburnable - -/turf/open/floor/engine/make_plating(force = 0) - if(force) - ..() - return //unplateable - -/turf/open/floor/engine/try_replace_tile(obj/item/stack/tile/T, mob/user, params) - return - -/turf/open/floor/engine/crowbar_act(mob/living/user, obj/item/I) - return - -/turf/open/floor/engine/wrench_act(mob/living/user, obj/item/I) - ..() - to_chat(user, "I begin removing rods...") - if(I.use_tool(src, user, 30, volume=80)) - if(!istype(src, /turf/open/floor/engine)) - return TRUE - if(floor_tile) - new floor_tile(src, 2) - ScrapeAway(flags = CHANGETURF_INHERIT_AIR) - return TRUE - -/turf/open/floor/engine/acid_act(acidpwr, acid_volume) - acidpwr = min(acidpwr, 50) //we reduce the power so reinf floor never get melted. - . = ..() - -/turf/open/floor/engine/ex_act(severity,target) - var/shielded = is_shielded() - contents_explosion(severity, target) - if(severity != 1 && shielded && target != src) - return - if(target == src) - ScrapeAway(flags = CHANGETURF_INHERIT_AIR) - return - switch(severity) - if(1) - if(prob(80)) - if(!length(baseturfs) || !ispath(baseturfs[baseturfs.len-1], /turf/open/floor)) - ScrapeAway(flags = CHANGETURF_INHERIT_AIR) - ReplaceWithLattice() - else - ScrapeAway(2, flags = CHANGETURF_INHERIT_AIR) - else if(prob(50)) - ScrapeAway(2, flags = CHANGETURF_INHERIT_AIR) - else - ScrapeAway(flags = CHANGETURF_INHERIT_AIR) - if(2) - if(prob(50)) - ScrapeAway(flags = CHANGETURF_INHERIT_AIR) - -/turf/open/floor/engine/singularity_pull() - -/turf/open/floor/engine/attack_paw(mob/user) - return attack_hand(user) - -/turf/open/floor/engine/attack_hand(mob/user) - . = ..() - if(.) - return - user.Move_Pulled(src) - -//air filled floors; used in atmos pressure chambers - -/turf/open/floor/engine/n2o - article = "an" - name = "\improper N2O floor" - initial_gas_mix = ATMOS_TANK_N2O - -/turf/open/floor/engine/co2 - name = "\improper CO2 floor" - initial_gas_mix = ATMOS_TANK_CO2 - -/turf/open/floor/engine/plasma - name = "plasma floor" - initial_gas_mix = ATMOS_TANK_PLASMA - -/turf/open/floor/engine/o2 - name = "\improper O2 floor" - initial_gas_mix = ATMOS_TANK_O2 - -/turf/open/floor/engine/n2 - article = "an" - name = "\improper N2 floor" - initial_gas_mix = ATMOS_TANK_N2 - -/turf/open/floor/engine/air - name = "air floor" - initial_gas_mix = ATMOS_TANK_AIRMIX - - -/turf/open/floor/engine/vacuum - name = "vacuum floor" - initial_gas_mix = AIRLESS_ATMOS diff --git a/code/game/turfs/open/floor/roguefloor.dm b/code/game/turfs/open/floor/roguefloor.dm index 74e789d642..ff74d3d96c 100644 --- a/code/game/turfs/open/floor/roguefloor.dm +++ b/code/game/turfs/open/floor/roguefloor.dm @@ -19,6 +19,10 @@ icon = smooth_icon . = ..() +/turf/open/floor/rogue/dirt + icon = 'icons/turf/floors.dmi' + icon_state = "greenerdirt" + /* .................. Wooden Floors ................... */ /turf/open/floor/rogue/ruinedwood icon_state = "wooden_floor" diff --git a/code/game/turfs/open/lava.dm b/code/game/turfs/open/lava.dm index 3b7949b4e1..89499b930d 100644 --- a/code/game/turfs/open/lava.dm +++ b/code/game/turfs/open/lava.dm @@ -95,7 +95,7 @@ /turf/open/lava/proc/is_safe() //if anything matching this typecache is found in the lava, we don't burn things - var/static/list/lava_safeties_typecache = typecacheof(list(/obj/structure/lattice/catwalk, /obj/structure/stone_tile)) + var/static/list/lava_safeties_typecache = typecacheof(list(/obj/structure/stone_tile)) var/list/found_safeties = typecache_filter_list(contents, lava_safeties_typecache) for(var/obj/structure/stone_tile/S in found_safeties) if(S.fallen) diff --git a/code/game/turfs/open/openspace.dm b/code/game/turfs/open/openspace.dm index 709fb87d3f..6432729c0f 100644 --- a/code/game/turfs/open/openspace.dm +++ b/code/game/turfs/open/openspace.dm @@ -59,11 +59,6 @@ GLOBAL_DATUM_INIT(openspace_backdrop_one_for_all, /atom/movable/openspace_backdr dynamic_lighting = 1 vis_contents += GLOB.openspace_backdrop_one_for_all //Special grey square for projecting backdrop darkness filter on it. -/turf/open/transparent/openspace/can_have_cabling() - if(locate(/obj/structure/lattice/catwalk, src)) - return TRUE - return FALSE - /turf/open/transparent/openspace/zAirIn() return TRUE @@ -149,43 +144,6 @@ GLOBAL_DATUM_INIT(openspace_backdrop_one_for_all, /atom/movable/openspace_backdr ..() if(!CanBuildHere()) return - if(istype(C, /obj/item/stack/rods)) - var/obj/item/stack/rods/R = C - var/obj/structure/lattice/L = locate(/obj/structure/lattice, src) - var/obj/structure/lattice/catwalk/W = locate(/obj/structure/lattice/catwalk, src) - if(W) - to_chat(user, "There is already a catwalk here!") - return - if(L) - if(R.use(1)) - to_chat(user, "I construct a catwalk.") - playsound(src, 'sound/blank.ogg', 50, TRUE) - new/obj/structure/lattice/catwalk(src) - else - to_chat(user, "I need two rods to build a catwalk!") - return - if(R.use(1)) - to_chat(user, "I construct a lattice.") - playsound(src, 'sound/blank.ogg', 50, TRUE) - ReplaceWithLattice() - else - to_chat(user, "I need one rod to build a lattice.") - return - if(istype(C, /obj/item/stack/tile/plasteel)) - if(!CanCoverUp()) - return - var/obj/structure/lattice/L = locate(/obj/structure/lattice, src) - if(L) - var/obj/item/stack/tile/plasteel/S = C - if(S.use(1)) - qdel(L) - playsound(src, 'sound/blank.ogg', 50, TRUE) - to_chat(user, "I build a floor.") - PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) - else - to_chat(user, "I need one floor tile to build a floor!") - else - to_chat(user, "The plating is going to need some support! Place metal rods first.") /turf/open/transparent/openspace/bullet_act(obj/projectile/P) if(!P.arcshot) diff --git a/code/game/turfs/open/river.dm b/code/game/turfs/open/river.dm index 2b1db7c683..5187b07ec0 100644 --- a/code/game/turfs/open/river.dm +++ b/code/game/turfs/open/river.dm @@ -75,7 +75,7 @@ for(var/F in RANGE_TURFS(1, src) - src) var/turf/T = F var/area/new_area = get_area(T) - if(!T || (T.density && !ismineralturf(T)) || istype(T, /turf/open/indestructible) || (whitelisted_area && !istype(new_area, whitelisted_area)) || (T.flags_1 & NO_LAVA_GEN_1) ) + if(!T || (T.density && !ismineralturf(T)) || (whitelisted_area && !istype(new_area, whitelisted_area)) || (T.flags_1 & NO_LAVA_GEN_1) ) continue if(!logged_turf_type && ismineralturf(T)) diff --git a/code/game/turfs/open/space/space.dm b/code/game/turfs/open/space/space.dm deleted file mode 100644 index d38ed5faf2..0000000000 --- a/code/game/turfs/open/space/space.dm +++ /dev/null @@ -1,203 +0,0 @@ -/turf/open/space - icon = 'icons/turf/space.dmi' - icon_state = "0" - name = "\proper phlogiston" - intact = 0 - - temperature = TCMB - thermal_conductivity = OPEN_HEAT_TRANSFER_COEFFICIENT - heat_capacity = 700000 - - var/destination_z - var/destination_x - var/destination_y - - var/static/datum/gas_mixture/immutable/space/space_gas = new - plane = PLANE_SPACE - layer = SPACE_LAYER - light_power = 0.25 - dynamic_lighting = DYNAMIC_LIGHTING_DISABLED - bullet_bounce_sound = null - -/turf/open/space/basic/New() //Do not convert to Initialize - //This is used to optimize the map loader - return - -/turf/open/space/Initialize() - ..() - icon_state = SPACE_ICON_STATE -// air = space_gas - vis_contents.Cut() //removes inherited overlays - -// if(flags_1 & INITIALIZED_1) -// stack_trace("Warning: [src]([type]) initialized multiple times!") -// flags_1 |= INITIALIZED_1 - - var/area/A = loc - if(!IS_DYNAMIC_LIGHTING(src) && IS_DYNAMIC_LIGHTING(A)) - add_overlay(/obj/effect/fullbright) - -// if(requires_activation) -// SSair.add_to_active(src) - - if (light_system == STATIC_LIGHT && light_power && (light_outer_range || light_inner_range)) - update_light() - - if (opacity) - has_opaque_atom = TRUE - - ComponentInitialize() - - return INITIALIZE_HINT_NORMAL - -//ATTACK GHOST IGNORING PARENT RETURN VALUE -/turf/open/space/attack_ghost(mob/dead/observer/user) - if(destination_z) - var/turf/T = locate(destination_x, destination_y, destination_z) - user.forceMove(T) - -/turf/open/space/Initalize_Atmos(times_fired) - return - -/turf/open/space/TakeTemperature(temp) - -/turf/open/space/RemoveLattice() - return - -/turf/open/space/AfterChange() - ..() - atmos_overlay_types = null - -/turf/open/space/Assimilate_Air() - return - -/turf/open/space/proc/update_starlight() - if(CONFIG_GET(flag/starlight)) - for(var/t in RANGE_TURFS(1,src)) //RANGE_TURFS is in code\__HELPERS\game.dm - if(isspaceturf(t)) - //let's NOT update this that much pls - continue - set_light(2) - return - set_light(0) - -/turf/open/space/attack_paw(mob/user) - return attack_hand(user) - -/turf/open/space/proc/CanBuildHere() - return TRUE - -/turf/open/space/handle_slip() - return - -/turf/open/space/attackby(obj/item/C, mob/user, params) - ..() - if(!CanBuildHere()) - return - if(istype(C, /obj/item/stack/rods)) - var/obj/item/stack/rods/R = C - var/obj/structure/lattice/L = locate(/obj/structure/lattice, src) - var/obj/structure/lattice/catwalk/W = locate(/obj/structure/lattice/catwalk, src) - if(W) - to_chat(user, "There is already a catwalk here!") - return - if(L) - if(R.use(1)) - to_chat(user, "I construct a catwalk.") - playsound(src, 'sound/blank.ogg', 50, TRUE) - new/obj/structure/lattice/catwalk(src) - else - to_chat(user, "I need two rods to build a catwalk!") - return - if(R.use(1)) - to_chat(user, "I construct a lattice.") - playsound(src, 'sound/blank.ogg', 50, TRUE) - ReplaceWithLattice() - else - to_chat(user, "I need one rod to build a lattice.") - return - if(istype(C, /obj/item/stack/tile/plasteel)) - var/obj/structure/lattice/L = locate(/obj/structure/lattice, src) - if(L) - var/obj/item/stack/tile/plasteel/S = C - if(S.use(1)) - qdel(L) - playsound(src, 'sound/blank.ogg', 50, TRUE) - to_chat(user, "I build a floor.") - PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) - else - to_chat(user, "I need one floor tile to build a floor!") - else - to_chat(user, "The plating is going to need some support! Place metal rods first.") - -/turf/open/space/Entered(atom/movable/A) - ..() - if ((!(A) || src != A.loc)) - return - - if(destination_z && destination_x && destination_y && !(A.pulledby || !A.can_be_z_moved)) - var/tx = destination_x - var/ty = destination_y - var/turf/DT = locate(tx, ty, destination_z) - var/itercount = 0 - while(DT.density || istype(DT.loc,/area/shuttle)) // Extend towards the center of the map, trying to look for a better place to arrive - if (itercount++ >= 100) - log_game("SPACE Z-TRANSIT ERROR: Could not find a safe place to land [A] within 100 iterations.") - break - if (tx < 128) - tx++ - else - tx-- - if (ty < 128) - ty++ - else - ty-- - DT = locate(tx, ty, destination_z) - - var/atom/movable/AM = A.pulling - A.forceMove(DT) - if(AM) - var/turf/T = get_step(A.loc,turn(A.dir, 180)) - AM.can_be_z_moved = FALSE - AM.forceMove(T) - A.start_pulling(AM) - AM.can_be_z_moved = TRUE - - //now we're on the new z_level, proceed the space drifting - stoplag()//Let a diagonal move finish, if necessary - A.newtonian_move(A.inertia_dir) - - -/turf/open/space/MakeSlippery(wet_setting, min_wet_time, wet_time_to_add, max_wet_time, permanent) - return - -/turf/open/space/singularity_act() - return - -/turf/open/space/can_have_cabling() - if(locate(/obj/structure/lattice/catwalk, src)) - return 1 - return 0 - -/turf/open/space/is_transition_turf() - if(destination_x || destination_y || destination_z) - return 1 - - -/turf/open/space/acid_act(acidpwr, acid_volume) - return 0 - -/turf/open/space/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir) - underlay_appearance.icon = 'icons/turf/space.dmi' - underlay_appearance.icon_state = SPACE_ICON_STATE - underlay_appearance.plane = PLANE_SPACE - return TRUE - -/turf/open/space/ReplaceWithLattice() - var/dest_x = destination_x - var/dest_y = destination_y - var/dest_z = destination_z - ..() - destination_x = dest_x - destination_y = dest_y - destination_z = dest_z diff --git a/code/game/turfs/open/space/transit.dm b/code/game/turfs/open/space/transit.dm deleted file mode 100644 index 7db5ab0845..0000000000 --- a/code/game/turfs/open/space/transit.dm +++ /dev/null @@ -1,118 +0,0 @@ -/turf/open/space/transit - name = "\proper phlogiston" - icon_state = "black" - dir = SOUTH - baseturfs = /turf/open/space/transit - flags_1 = NOJAUNT_1 //This line goes out to every wizard that ever managed to escape the den. I'm sorry. - explosion_block = INFINITY - -/turf/open/space/transit/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir) - . = ..() -// underlay_appearance.icon_state = "speedspace_ns_[get_transit_state(asking_turf)]" -// underlay_appearance.transform = turn(matrix(), get_transit_angle(asking_turf)) - -/turf/open/space/transit/south - dir = SOUTH - -/turf/open/space/transit/north - dir = NORTH - -/turf/open/space/transit/horizontal - dir = WEST - -/turf/open/space/transit/west - dir = WEST - -/turf/open/space/transit/east - dir = EAST - -/turf/open/space/transit/Entered(atom/movable/AM, atom/OldLoc) - ..() - if(isliving(AM)) - var/mob/living/L = AM - L.gib() -// if(!locate(/obj/structure/lattice) in src) -// throw_atom(AM) - -/turf/open/space/transit/proc/throw_atom(atom/movable/AM) - set waitfor = FALSE - if(!AM || istype(AM, /obj/docking_port)) - return - if(AM.loc != src) // Multi-tile objects are "in" multiple locs but its loc is it's true placement. - return // Don't move multi tile objects if their origin isnt in transit - var/max = world.maxx-TRANSITIONEDGE - var/min = 1+TRANSITIONEDGE - - var/list/possible_transtitons = list() - for(var/A in SSmapping.z_list) - var/datum/space_level/D = A - if (D.linkage == CROSSLINKED) - possible_transtitons += D.z_value - var/_z - if(possible_transtitons.len) - _z = pick(possible_transtitons) - - //now select coordinates for a border turf - var/_x - var/_y - switch(dir) - if(SOUTH) - _x = rand(min,max) - _y = max - if(WEST) - _x = max - _y = rand(min,max) - if(EAST) - _x = min - _y = rand(min,max) - else - _x = rand(min,max) - _y = min - - var/turf/T = locate(_x, _y, _z) - AM.forceMove(T) - - -/turf/open/space/transit/CanBuildHere() - return SSshuttle.is_in_shuttle_bounds(src) - - -/turf/open/space/transit/Initialize() - . = ..() -// update_icon() -// for(var/atom/movable/AM in src) -// throw_atom(AM) - -/turf/open/space/transit/update_icon() - . = ..() -// transform = turn(matrix(), get_transit_angle(src)) - -//turf/open/space/transit/update_icon_state() -// icon_state = "speedspace_ns_[get_transit_state(src)]" - -/proc/get_transit_state(turf/T) - var/p = 9 - . = 1 - switch(T.dir) - if(NORTH) - . = ((-p*T.x+T.y) % 15) + 1 - if(. < 1) - . += 15 - if(EAST) - . = ((T.x+p*T.y) % 15) + 1 - if(WEST) - . = ((T.x-p*T.y) % 15) + 1 - if(. < 1) - . += 15 - else - . = ((p*T.x+T.y) % 15) + 1 - -/proc/get_transit_angle(turf/T) - . = 0 - switch(T.dir) - if(NORTH) - . = 180 - if(EAST) - . = 90 - if(WEST) - . = -90 diff --git a/code/game/turfs/open/transparent.dm b/code/game/turfs/open/transparent.dm index d0a219ac2b..0524ce890f 100644 --- a/code/game/turfs/open/transparent.dm +++ b/code/game/turfs/open/transparent.dm @@ -50,25 +50,3 @@ var/mutable_appearance/underlay_appearance = mutable_appearance(initial(path.icon), initial(path.icon_state), layer = TURF_LAYER, plane = PLANE_SPACE) underlays += underlay_appearance return TRUE - - -/turf/open/transparent/glass - name = "Glass floor" - desc = "" - icon = 'icons/turf/floors/glass.dmi' - icon_state = "floor_glass" - smooth = SMOOTH_MORE - canSmoothWith = list(/turf/open/transparent/glass, /turf/open/transparent/glass/reinforced) - footstep = FOOTSTEP_PLATING - barefootstep = FOOTSTEP_HARD_BAREFOOT - clawfootstep = FOOTSTEP_HARD_CLAW - heavyfootstep = FOOTSTEP_GENERIC_HEAVY - -/turf/open/transparent/glass/Initialize() - icon_state = "" //Prevent the normal icon from appearing behind the smooth overlays - return ..() - -/turf/open/transparent/glass/reinforced - name = "Reinforced glass floor" - desc = "" - icon = 'icons/turf/floors/reinf_glass.dmi' diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 13bfec62b0..4957a61a06 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -462,12 +462,6 @@ if(O.level == 1 && (O.flags_1 & INITIALIZED_1)) O.hide(src.intact) -// override for space turfs, since they should never hide anything -/turf/open/space/levelupdate() - for(var/obj/O in src) - if(O.level == 1 && (O.flags_1 & INITIALIZED_1)) - O.hide(0) - // Removes all signs of lattice on the pos of the turf -Donkieyo /turf/proc/RemoveLattice() var/obj/structure/lattice/L = locate(/obj/structure/lattice, src) @@ -529,12 +523,6 @@ ScrapeAway(flags = CHANGETURF_INHERIT_AIR) return(2) -/turf/proc/can_have_cabling() - return TRUE - -/turf/proc/can_lay_cable() - return can_have_cabling() & !intact - /turf/proc/burn_tile() /turf/proc/is_shielded() diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 582c6d784d..9af01c311e 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -128,7 +128,6 @@ GLOBAL_LIST_INIT(admin_verbs_fun, list( /client/proc/run_particle_weather, /client/proc/mass_zombie_infection, /client/proc/mass_zombie_cure, - /client/proc/polymorph_all, /client/proc/show_tip, /client/proc/smite, )) @@ -172,7 +171,6 @@ GLOBAL_PROTECT(admin_verbs_debug) /client/proc/SDQL2_query, /client/proc/test_movable_UI, /client/proc/test_snap_UI, - /client/proc/debugNatureMapGenerator, /client/proc/check_bomb_impacts, /client/proc/get_dynex_power, //*debug verbs for dynex explosions. /client/proc/get_dynex_range, //*debug verbs for dynex explosions. diff --git a/code/modules/admin/fun_balloon.dm b/code/modules/admin/fun_balloon.dm index f7593c7d60..16bfdeb675 100644 --- a/code/modules/admin/fun_balloon.dm +++ b/code/modules/admin/fun_balloon.dm @@ -92,65 +92,3 @@ SM.forceMove(get_ranged_target_turf(SM, new_dir, rand(3,15))) break return INITIALIZE_HINT_QDEL - - -//Arena - -/obj/effect/forcefield/arena_shuttle - name = "portal" - timeleft = 0 - var/list/warp_points - -/obj/effect/forcefield/arena_shuttle/Initialize() - . = ..() - for(var/obj/effect/landmark/shuttle_arena_safe/exit in GLOB.landmarks_list) - warp_points += exit - -/obj/effect/forcefield/arena_shuttle/Bumped(atom/movable/AM) - if(!isliving(AM)) - return - - var/mob/living/L = AM - if(L.pulling && istype(L.pulling, /obj/item/bodypart/head)) - to_chat(L, "My offering is accepted. You may pass.") - qdel(L.pulling) - var/turf/LA = get_turf(pick(warp_points)) - L.forceMove(LA) - L.hallucination = 0 - to_chat(L, "The battle is won. Your bloodlust subsides.") - for(var/obj/item/twohanded/required/chainsaw/doomslayer/chainsaw in L) - qdel(chainsaw) - else - to_chat(L, "I are not yet worthy of passing. Drag a severed head to the barrier to be allowed entry to the hall of champions.") - -/obj/effect/landmark/shuttle_arena_safe - name = "hall of champions" - desc = "" - -/obj/effect/landmark/shuttle_arena_entrance - name = "the arena" - desc = "" - - -/obj/effect/forcefield/arena_shuttle_entrance - name = "portal" - timeleft = 0 - var/list/warp_points = list() - -/obj/effect/forcefield/arena_shuttle_entrance/Bumped(atom/movable/AM) - if(!isliving(AM)) - return - - if(!warp_points.len) - for(var/obj/effect/landmark/shuttle_arena_entrance/S in GLOB.landmarks_list) - warp_points |= S - - var/obj/effect/landmark/LA = pick(warp_points) - var/mob/living/M = AM - M.forceMove(get_turf(LA)) - to_chat(M, "You're trapped in a deadly arena! To escape, you'll need to drag a severed head to the escape portals.") - INVOKE_ASYNC(src, PROC_REF(do_bloodbath), M) - -/obj/effect/forcefield/arena_shuttle_entrance/proc/do_bloodbath(mob/living/L) - var/obj/effect/mine/pickup/bloodbath/B = new (L) - B.mineEffect(L) diff --git a/code/modules/admin/secrets.dm b/code/modules/admin/secrets.dm index 90b5543a4b..2e8dde1fce 100644 --- a/code/modules/admin/secrets.dm +++ b/code/modules/admin/secrets.dm @@ -315,14 +315,6 @@ if("anime") if(!check_rights(R_FUN)) return - var/animetype = alert("Would you like to have the clothes be changed?",,"Yes","No","Cancel") - - var/droptype - if(animetype =="Yes") - droptype = alert("Make the uniforms Nodrop?",,"Yes","No","Cancel") - - if(animetype == "Cancel" || droptype == "Cancel") - return SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Chinese Cartoons")) message_admins("[key_name_admin(usr)] made everything kawaii.") for(var/i in GLOB.human_list) @@ -341,15 +333,6 @@ var/newname = "[forename]-[pick(honorifics["[H.gender]"])]" H.fully_replace_character_name(H.real_name,newname) H.update_mutant_bodyparts() - if(animetype == "Yes") - var/seifuku = pick(typesof(/obj/item/clothing/under/costume/schoolgirl)) - var/obj/item/clothing/under/costume/schoolgirl/I = new seifuku - var/olduniform = H.wear_pants - H.temporarilyRemoveItemFromInventory(H.wear_pants, TRUE, FALSE) - H.equip_to_slot_or_del(I, SLOT_PANTS) - qdel(olduniform) - if(droptype == "Yes") - ADD_TRAIT(I, TRAIT_NODROP, ADMIN_TRAIT) else to_chat(H, "You're not kawaii enough for this!") diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index f27fd1f865..5037e37470 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -283,22 +283,10 @@ M.change_mob_type( /mob/living/simple_animal/pet/dog/corgi/Ian , null, null, delmob ) if("pug") M.change_mob_type( /mob/living/simple_animal/pet/dog/pug , null, null, delmob ) - if("crab") - M.change_mob_type( /mob/living/simple_animal/crab , null, null, delmob ) - if("coffee") - M.change_mob_type( /mob/living/simple_animal/crab/Coffee , null, null, delmob ) if("parrot") M.change_mob_type( /mob/living/simple_animal/parrot , null, null, delmob ) if("polyparrot") M.change_mob_type( /mob/living/simple_animal/parrot/Poly , null, null, delmob ) - if("constructarmored") - M.change_mob_type( /mob/living/simple_animal/hostile/construct/armored , null, null, delmob ) - if("constructbuilder") - M.change_mob_type( /mob/living/simple_animal/hostile/construct/builder , null, null, delmob ) - if("constructwraith") - M.change_mob_type( /mob/living/simple_animal/hostile/construct/wraith , null, null, delmob ) - if("shade") - M.change_mob_type( /mob/living/simple_animal/shade , null, null, delmob ) else if(href_list["boot2"]) if(!check_rights(R_ADMIN)) @@ -986,10 +974,6 @@ for(var/obj/item/I in L) L.dropItemToGround(I, TRUE) - if(ishuman(L)) - var/mob/living/carbon/human/observer = L - observer.equip_to_slot_or_del(new /obj/item/clothing/under/suit/black(observer), SLOT_PANTS) - observer.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(observer), SLOT_SHOES) L.Unconscious(100) sleep(5) L.forceMove(pick(GLOB.tdomeobserve)) @@ -1206,8 +1190,6 @@ var/cookiealt = /obj/item/reagent_containers/food/snacks/cookie if(isskeleton(H)) cookiealt = /obj/item/reagent_containers/food/condiment/milk - else if(isplasmaman(H)) - cookiealt = /obj/item/reagent_containers/food/condiment/milk else if(isethereal(H)) cookiealt = /obj/item/reagent_containers/food/snacks/energybar else if(islizard(H)) @@ -1259,12 +1241,6 @@ var/mob/M = locate(href_list["HeadsetMessage"]) usr.client.admin_headset_message(M) - else if(href_list["reject_custom_name"]) - if(!check_rights(R_ADMIN)) - return - var/obj/item/station_charter/charter = locate(href_list["reject_custom_name"]) - if(istype(charter)) - charter.reject_proposed(usr) else if(href_list["jumpto"]) if(!isobserver(usr) && !check_rights(R_ADMIN)) return diff --git a/code/modules/admin/verbs/bluespacearty.dm b/code/modules/admin/verbs/bluespacearty.dm index 5b4b7db663..56de449bc4 100644 --- a/code/modules/admin/verbs/bluespacearty.dm +++ b/code/modules/admin/verbs/bluespacearty.dm @@ -12,10 +12,7 @@ var/turf/open/floor/T = get_turf(target) if(istype(T)) - if(prob(80)) - T.break_tile_to_plating() - else - T.break_tile() + T.break_tile() if(target.health <= 1) target.gib(1, 1) diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index c5c477d4d7..b31719d55b 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -247,9 +247,9 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that /client/proc/robust_dress_shop() - var/list/baseoutfits = list("Naked","Custom","As Job...", "As Plasmaman...", "As Roguetown Job...") + var/list/baseoutfits = list("Naked","Custom", "As Roguetown Job...") var/list/outfits = list() - var/list/paths = subtypesof(/datum/outfit) - typesof(/datum/outfit/job) - typesof(/datum/outfit/plasmaman) - typesof(/datum/outfit/job/roguetown) + var/list/paths = subtypesof(/datum/outfit) - typesof(/datum/outfit/job) - typesof(/datum/outfit/job/roguetown) for(var/path in paths) var/datum/outfit/O = path //not much to initalize here but whatever @@ -263,32 +263,6 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that if (outfits[dresscode]) dresscode = outfits[dresscode] - if (dresscode == "As Job...") - var/list/job_paths = subtypesof(/datum/outfit/job) - var/list/job_outfits = list() - for(var/path in job_paths) - var/datum/outfit/O = path - if(initial(O.can_be_admin_equipped)) - job_outfits[initial(O.name)] = path - - dresscode = input("Select job equipment", "Robust quick dress shop") as null|anything in sortList(job_outfits) - dresscode = job_outfits[dresscode] - if(isnull(dresscode)) - return - - if (dresscode == "As Plasmaman...") - var/list/plasmaman_paths = subtypesof(/datum/outfit/plasmaman) - var/list/plasmaman_outfits = list() - for(var/path in plasmaman_paths) - var/datum/outfit/O = path - if(initial(O.can_be_admin_equipped)) - plasmaman_outfits[initial(O.name)] = path - - dresscode = input("Select plasmeme equipment", "Robust quick dress shop") as null|anything in sortList(plasmaman_outfits) - dresscode = plasmaman_outfits[dresscode] - if(isnull(dresscode)) - return - if (dresscode == "Custom") var/list/custom_names = list() for(var/datum/outfit/D in GLOB.custom_outfits) diff --git a/code/modules/admin/verbs/manipulate_organs.dm b/code/modules/admin/verbs/manipulate_organs.dm index a3b7e4247c..baf7074ce0 100644 --- a/code/modules/admin/verbs/manipulate_organs.dm +++ b/code/modules/admin/verbs/manipulate_organs.dm @@ -1,7 +1,7 @@ /client/proc/manipulate_organs(mob/living/carbon/C in world) set name = "Manipulate Organs" set category = "Debug" - var/operation = input("Select organ operation.", "Organ Manipulation", "cancel") as null|anything in list("add organ", "add implant", "drop organ/implant", "remove organ/implant", "cancel") + var/operation = input("Select organ operation.", "Organ Manipulation", "cancel") as null|anything in list("add organ", "drop organ", "remove organ", "cancel") if (!operation) return @@ -21,29 +21,11 @@ log_admin("[key_name(usr)] has added organ [organ.type] to [key_name(C)]") message_admins("[key_name_admin(usr)] has added organ [organ.type] to [ADMIN_LOOKUPFLW(C)]") - if("add implant") - for(var/path in subtypesof(/obj/item/implant)) - var/dat = replacetext("[path]", "/obj/item/implant/", ":") - organs[dat] = path - - var/obj/item/implant/organ = input("Select implant type:", "Organ Manipulation", null) as null|anything in organs - if(!organ) - return - organ = organs[organ] - organ = new organ - organ.implant(C) - log_admin("[key_name(usr)] has added implant [organ.type] to [key_name(C)]") - message_admins("[key_name_admin(usr)] has added implant [organ.type] to [ADMIN_LOOKUPFLW(C)]") - - if("drop organ/implant", "remove organ/implant") + if("drop organ", "remove organ") for(var/X in C.internal_organs) var/obj/item/organ/I = X organs["[I.name] ([I.type])"] = I - for(var/X in C.implants) - var/obj/item/implant/I = X - organs["[I.name] ([I.type])"] = I - var/obj/item/organ = input("Select organ/implant:", "Organ Manipulation", null) as null|anything in organs if(!organ) return @@ -51,7 +33,6 @@ if(!organ) return var/obj/item/organ/O - var/obj/item/implant/I log_admin("[key_name(usr)] has removed [organ.type] from [key_name(C)]") message_admins("[key_name_admin(usr)] has removed [organ.type] from [ADMIN_LOOKUPFLW(C)]") @@ -59,16 +40,8 @@ if(isorgan(organ)) O = organ O.Remove(C) - else - I = organ - I.removed(C) organ.forceMove(get_turf(C)) if(operation == "remove organ/implant") qdel(organ) - else if(I) // Put the implant in case. - var/obj/item/implantcase/case = new(get_turf(C)) - case.imp = I - I.forceMove(case) - case.update_icon() diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index 4c453c7d0b..102795d34b 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -797,41 +797,6 @@ Traitors and the like can also be revived with the previous role mostly intact. message_admins("[key_name_admin(usr)] cured all zombies.") log_admin("[key_name(usr)] cured all zombies.") - SSblackbox.record_feedback("tally", "admin_verb", 1, "Mass Zombie Cure") - -/client/proc/polymorph_all() - set category = "Fun" - set name = "Polymorph All" - set desc = "" - set hidden = 1 - - if(!check_rights(R_ADMIN)) - return - - var/confirm = alert(src, "Please confirm you want polymorph all mobs?", "Confirm Polymorph", "Yes", "No") - if(confirm != "Yes") - return - - var/list/mobs = shuffle(GLOB.alive_mob_list.Copy()) // might change while iterating - var/who_did_it = key_name_admin(usr) - - message_admins("[key_name_admin(usr)] started polymorphed all living mobs.") - log_admin("[key_name(usr)] polymorphed all living mobs.") - SSblackbox.record_feedback("tally", "admin_verb", 1, "Polymorph All") - - for(var/mob/living/M in mobs) - CHECK_TICK - - if(!M) - continue - - M.audible_message("...wabbajack...wabbajack...") - playsound(M.loc, 'sound/blank.ogg', 50, TRUE, -1) - - wabbajack(M) - - message_admins("Mass polymorph started by [who_did_it] is complete.") - /client/proc/show_tip() set category = "Admin" diff --git a/code/modules/antagonists/roguetown/villain/zizocult.dm b/code/modules/antagonists/roguetown/villain/zizocult.dm index 834a334caf..5feeda06c9 100644 --- a/code/modules/antagonists/roguetown/villain/zizocult.dm +++ b/code/modules/antagonists/roguetown/villain/zizocult.dm @@ -722,6 +722,12 @@ GLOBAL_LIST_EMPTY(ritualslist) function = /proc/criminalstool +/obj/item/soap/cult + name = "accursed soap" + desc = "It is pulsating." + uses = 9 + cleanspeed = 1 + /proc/criminalstool(mob/user, turf/C) new /obj/item/soap/cult(C) to_chat(user.mind, "The Criminal's Tool. Could be useful for hiding tracks or getting rid of sigils.") diff --git a/code/modules/antagonists/traitor/datum_traitor.dm b/code/modules/antagonists/traitor/datum_traitor.dm index 8481464673..e230ab353c 100644 --- a/code/modules/antagonists/traitor/datum_traitor.dm +++ b/code/modules/antagonists/traitor/datum_traitor.dm @@ -61,14 +61,6 @@ is_hijacker = prob(10) var/martyr_chance = prob(20) var/objective_count = is_hijacker //Hijacking counts towards number of objectives - if(!SSticker.mode.exchange_blue && SSticker.mode.traitors.len >= 8) //Set up an exchange if there are enough traitors - if(!SSticker.mode.exchange_red) - SSticker.mode.exchange_red = owner - else - SSticker.mode.exchange_blue = owner - assign_exchange_role(SSticker.mode.exchange_red) - assign_exchange_role(SSticker.mode.exchange_blue) - objective_count += 1 //Exchange counts towards number of objectives var/toa = CONFIG_GET(number/traitor_objectives_amount) for(var/i = objective_count, i < toa, i++) forge_single_objective() @@ -196,45 +188,6 @@ if(traitor_kind == TRAITOR_HUMAN) owner.equip_traitor(employer, silent, src) -/datum/antagonist/traitor/proc/assign_exchange_role() - //set faction - var/faction = "red" - if(owner == SSticker.mode.exchange_blue) - faction = "blue" - - //Assign objectives - var/datum/objective/steal/exchange/exchange_objective = new - exchange_objective.set_faction(faction,((faction == "red") ? SSticker.mode.exchange_blue : SSticker.mode.exchange_red)) - exchange_objective.owner = owner - add_objective(exchange_objective) - - if(prob(20)) - var/datum/objective/steal/exchange/backstab/backstab_objective = new - backstab_objective.set_faction(faction) - backstab_objective.owner = owner - add_objective(backstab_objective) - - //Spawn and equip documents - var/mob/living/carbon/human/mob = owner.current - - var/obj/item/folder/syndicate/folder - if(owner == SSticker.mode.exchange_red) - folder = new/obj/item/folder/syndicate/red(mob.loc) - else - folder = new/obj/item/folder/syndicate/blue(mob.loc) - - var/list/slots = list ( - "backpack" = SLOT_IN_BACKPACK, - "left pocket" = SLOT_L_STORE, - "right pocket" = SLOT_R_STORE - ) - - var/where = "At your feet" - var/equipped_slot = mob.equip_in_one_of_slots(folder, slots) - if (equipped_slot) - where = "In your [equipped_slot]" - to_chat(mob, "

[where] is a folder containing secret documents that another Syndicate group wants. We have set up a meeting with one of their agents on station to make an exchange. Exercise extreme caution as they cannot be trusted and may be hostile.
") - //TODO Collate /datum/antagonist/traitor/roundend_report() var/list/result = list() diff --git a/code/modules/antagonists/wizard/equipment/artefact.dm b/code/modules/antagonists/wizard/equipment/artefact.dm deleted file mode 100644 index dab49ddca6..0000000000 --- a/code/modules/antagonists/wizard/equipment/artefact.dm +++ /dev/null @@ -1,280 +0,0 @@ - -//Apprenticeship contract - moved to antag_spawner.dm -/////////////////////////////////////////Necromantic Stone/////////////////// - -/obj/item/necromantic_stone - name = "necromantic stone" - desc = "" - icon = 'icons/obj/wizard.dmi' - icon_state = "necrostone" - item_state = "electronic" - lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - w_class = WEIGHT_CLASS_TINY - var/list/spooky_scaries = list() - var/unlimited = 0 - -/obj/item/necromantic_stone/unlimited - unlimited = 1 - -/obj/item/necromantic_stone/attack(mob/living/carbon/human/M, mob/living/carbon/human/user) - if(!istype(M)) - return ..() - - if(!istype(user) || !user.canUseTopic(M, BE_CLOSE)) - return - - if(M.stat != DEAD) - to_chat(user, "This artifact can only affect the dead!") - return - - for(var/mob/dead/observer/ghost in GLOB.dead_mob_list) //excludes new players - if(ghost.mind && ghost.mind.current == M && ghost.client) //the dead mobs list can contain clientless mobs - ghost.reenter_corpse() - break - - if(!M.mind || !M.client) - to_chat(user, "There is no soul connected to this body...") - return - - check_spooky()//clean out/refresh the list - if(spooky_scaries.len >= 3 && !unlimited) - to_chat(user, "This artifact can only affect three undead at a time!") - return - - M.set_species(/datum/species/skeleton, icon_update=0) - M.revive(full_heal = TRUE, admin_revive = TRUE) - spooky_scaries |= M - to_chat(M, "I have been revived by [user.real_name]!") - to_chat(M, "[user.p_theyre(TRUE)] my master now, assist [user.p_them()] even if it costs you my new life!") - - equip_roman_skeleton(M) - - desc = "" - -/obj/item/necromantic_stone/proc/check_spooky() - if(unlimited) //no point, the list isn't used. - return - - for(var/X in spooky_scaries) - if(!ishuman(X)) - spooky_scaries.Remove(X) - continue - var/mob/living/carbon/human/H = X - if(H.stat == DEAD) - H.dust(TRUE) - spooky_scaries.Remove(X) - continue - listclearnulls(spooky_scaries) - -//Funny gimmick, skeletons always seem to wear roman/ancient armour -/obj/item/necromantic_stone/proc/equip_roman_skeleton(mob/living/carbon/human/H) - for(var/obj/item/I in H) - H.dropItemToGround(I) - - var/hat = pick(/obj/item/clothing/head/helmet/roman, /obj/item/clothing/head/helmet/roman/legionnaire) - H.equip_to_slot_or_del(new hat(H), SLOT_HEAD) - H.equip_to_slot_or_del(new /obj/item/clothing/under/costume/roman(H), SLOT_PANTS) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/roman(H), SLOT_SHOES) - H.put_in_hands(new /obj/item/claymore(H), TRUE) - H.equip_to_slot_or_del(new /obj/item/twohanded/spear(H), SLOT_BACK) - - -/obj/item/voodoo - name = "wicker doll" - desc = "" - icon = 'icons/obj/wizard.dmi' - icon_state = "voodoo" - item_state = "electronic" - lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - var/mob/living/carbon/human/target = null - var/list/mob/living/carbon/human/possible = list() - var/obj/item/voodoo_link = null - var/cooldown_time = 30 //3s - var/cooldown = 0 - max_integrity = 10 - resistance_flags = FLAMMABLE - -/obj/item/voodoo/attackby(obj/item/I, mob/user, params) - if(target && cooldown < world.time) - if(I.get_temperature()) - to_chat(target, "I suddenly feel very hot!") - target.adjust_bodytemperature(50) - GiveHint(target) - else if(is_pointed(I)) - to_chat(target, "I feel a stabbing pain in [parse_zone(user.zone_selected)]!") - target.Paralyze(40) - GiveHint(target) - else if(istype(I, /obj/item/bikehorn)) - to_chat(target, "HONK") - SEND_SOUND(target, 'sound/blank.ogg') - target.adjustEarDamage(0,3) - GiveHint(target) - cooldown = world.time +cooldown_time - return - - if(!voodoo_link) - if(I.loc == user && istype(I) && I.w_class <= WEIGHT_CLASS_SMALL) - if (user.transferItemToLoc(I,src)) - voodoo_link = I - to_chat(user, "You attach [I] to the doll.") - update_targets() - -/obj/item/voodoo/check_eye(mob/user) - if(loc != user) - user.reset_perspective(null) - user.unset_machine() - -/obj/item/voodoo/attack_self(mob/user) - if(!target && possible.len) - target = input(user, "Select my victim!", "Voodoo") as null|anything in sortNames(possible) - return - - if(user.zone_selected == BODY_ZONE_CHEST) - if(voodoo_link) - target = null - voodoo_link.forceMove(drop_location()) - to_chat(user, "I remove the [voodoo_link] from the doll.") - voodoo_link = null - update_targets() - return - - if(target && cooldown < world.time) - switch(user.zone_selected) - if(BODY_ZONE_PRECISE_MOUTH) - var/wgw = sanitize(input(user, "What would you like the victim to say", "Voodoo", null) as text) - target.say(wgw, forced = "voodoo doll") - log_game("[key_name(user)] made [key_name(target)] say [wgw] with a voodoo doll.") - if(BODY_ZONE_PRECISE_R_EYE) - user.set_machine(src) - user.reset_perspective(target) - spawn(100) - user.reset_perspective(null) - user.unset_machine() - if(BODY_ZONE_R_LEG,BODY_ZONE_L_LEG) - to_chat(user, "I move the doll's legs around.") - var/turf/T = get_step(target,pick(GLOB.cardinals)) - target.Move(T) - if(BODY_ZONE_R_ARM,BODY_ZONE_L_ARM) - target.click_random_mob() - GiveHint(target) - if(BODY_ZONE_HEAD) - to_chat(user, "I smack the doll's head with my hand.") - target.Dizzy(10) - to_chat(target, "I suddenly feel as if my head was hit with a hammer!") - GiveHint(target,user) - cooldown = world.time + cooldown_time - -/obj/item/voodoo/proc/update_targets() - possible = list() - if(!voodoo_link) - return - var/list/prints = voodoo_link.return_fingerprints() - if(!length(prints)) - return FALSE - for(var/mob/living/carbon/human/H in GLOB.alive_mob_list) - if(prints[md5(H.dna.uni_identity)]) - possible |= H - -/obj/item/voodoo/proc/GiveHint(mob/victim,force=0) - if(prob(50) || force) - var/way = dir2text(get_dir(victim,get_turf(src))) - to_chat(victim, "I feel a dark presence from [way].") - if(prob(20) || force) - var/area/A = get_area(src) - to_chat(victim, "I feel a dark presence from [A.name].") - -/obj/item/voodoo/suicide_act(mob/living/carbon/user) - user.visible_message("[user] links the voodoo doll to [user.p_them()]self and sits on it, infinitely crushing [user.p_them()]self! It looks like [user.p_theyre()] trying to commit suicide!") - user.gib() - return(BRUTELOSS) - -/obj/item/voodoo/fire_act(added, maxstacks) - if(target) - target.adjust_fire_stacks(20) - target.IgniteMob() - GiveHint(target,1) - return ..() - -//Provides a decent heal, need to pump every 6 seconds -/obj/item/organ/heart/cursed/wizard - pump_delay = 60 - heal_brute = 25 - heal_burn = 25 - heal_oxy = 25 - -//Warp Whistle: Provides uncontrolled long distance teleportation. - -/obj/item/warpwhistle - name = "warp whistle" - desc = "" - icon = 'icons/obj/wizard.dmi' - icon_state = "whistle" - var/on_cooldown = 0 //0: usable, 1: in use, 2: on cooldown - var/mob/living/carbon/last_user - -/obj/item/warpwhistle/proc/interrupted(mob/living/carbon/user) - if(!user || QDELETED(src) || user.notransform) - on_cooldown = FALSE - return TRUE - return FALSE - -/obj/item/warpwhistle/proc/end_effect(mob/living/carbon/user) - user.invisibility = initial(user.invisibility) - user.status_flags &= ~GODMODE - user.update_mobility() - -/obj/item/warpwhistle/attack_self(mob/living/carbon/user) - if(!istype(user) || on_cooldown) - return - on_cooldown = TRUE - last_user = user - var/turf/T = get_turf(user) - playsound(T,'sound/blank.ogg', 200, TRUE) - user.mobility_flags &= ~MOBILITY_MOVE - new /obj/effect/temp_visual/tornado(T) - sleep(20) - if(interrupted(user)) - return - user.invisibility = INVISIBILITY_MAXIMUM - user.status_flags |= GODMODE - sleep(20) - if(interrupted(user)) - end_effect(user) - return - var/breakout = 0 - while(breakout < 50) - var/turf/potential_T = find_safe_turf() - if(T.z != potential_T.z || abs(get_dist_euclidian(potential_T,T)) > 50 - breakout) - do_teleport(user, potential_T, channel = TELEPORT_CHANNEL_MAGIC) - user.mobility_flags &= ~MOBILITY_MOVE - T = potential_T - break - breakout += 1 - new /obj/effect/temp_visual/tornado(T) - sleep(20) - end_effect(user) - if(interrupted(user)) - return - on_cooldown = 2 - addtimer(VARSET_CALLBACK(src, on_cooldown, 0), 4 SECONDS) - -/obj/item/warpwhistle/Destroy() - if(on_cooldown == 1 && last_user) //Flute got dunked somewhere in the teleport - end_effect(last_user) - return ..() - -/obj/effect/temp_visual/tornado - icon = 'icons/obj/wizard.dmi' - icon_state = "tornado" - name = "tornado" - desc = "" - layer = FLY_LAYER - randomdir = 0 - duration = 40 - pixel_x = 500 - -/obj/effect/temp_visual/tornado/Initialize() - . = ..() - animate(src, pixel_x = -500, time = 40) diff --git a/code/modules/antagonists/wizard/equipment/soulstone.dm b/code/modules/antagonists/wizard/equipment/soulstone.dm deleted file mode 100644 index ac48d9bb17..0000000000 --- a/code/modules/antagonists/wizard/equipment/soulstone.dm +++ /dev/null @@ -1,288 +0,0 @@ -/obj/item/soulstone - name = "soulstone shard" - icon = 'icons/obj/wizard.dmi' - icon_state = "soulstone" - item_state = "electronic" - lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - layer = HIGH_OBJ_LAYER - desc = "" - w_class = WEIGHT_CLASS_TINY - slot_flags = ITEM_SLOT_BELT - var/usability = FALSE - - var/old_shard = FALSE - var/spent = FALSE - var/purified = FALSE - -/obj/item/soulstone/proc/was_used() - if(old_shard) - spent = TRUE - name = "dull [name]" - desc = "A fragment of the legendary treasure known simply as \ - the 'Soul Stone'. The shard lies still, dull and lifeless; \ - whatever spark it once held long extinguished." - -/obj/item/soulstone/anybody - usability = TRUE - -/obj/item/soulstone/anybody/revolver - old_shard = TRUE - -/obj/item/soulstone/anybody/purified - icon = 'icons/obj/wizard.dmi' - icon_state = "purified_soulstone" - purified = TRUE - -/obj/item/soulstone/anybody/chaplain - name = "mysterious old shard" - old_shard = TRUE - -/obj/item/soulstone/pickup(mob/living/user) - ..() - if(!usability) - to_chat(user, "An overwhelming feeling of dread comes over you as you pick up the soulstone. It would be wise to be rid of this quickly.") - -/obj/item/soulstone/examine(mob/user) - . = ..() - if(usability || isobserver(user)) - if (old_shard) - . += "A soulstone, used to capture a soul, either from dead humans or from freed shades." - else - . += "A soulstone, used to capture souls, either from unconscious or sleeping humans or from freed shades." - . += "The captured soul can be placed into a construct shell to produce a construct, or released from the stone as a shade." - if(spent) - . += "This shard is spent; it is now just a creepy rock." - -/obj/item/soulstone/Destroy() //Stops the shade from being qdel'd immediately and their ghost being sent back to the arrival shuttle. - for(var/mob/living/simple_animal/shade/A in src) - A.death() - return ..() - -/obj/item/soulstone/proc/hot_potato(mob/living/user) - to_chat(user, "Holy magics residing in \the [src] burn my hand!") - var/obj/item/bodypart/affecting = user.get_bodypart("[(user.active_hand_index % 2 == 0) ? "r" : "l" ]_arm") - affecting.receive_damage( 0, 10 ) // 10 burn damage - user.emote("scream") - user.update_damage_overlays() - user.dropItemToGround(src) - -//////////////////////////////Capturing//////////////////////////////////////////////////////// - -/obj/item/soulstone/attack(mob/living/carbon/human/M, mob/living/user) - if(!usability) - user.Unconscious(100) - to_chat(user, "My body is wracked with debilitating pain!") - return - if(spent) - to_chat(user, "There is no power left in the shard.") - return - if(!ishuman(M))//If target is not a human. - return ..() - if(!M.mind.hasSoul) - to_chat(user, "This... thing has no soul! It's filled with evil!") - return - log_combat(user, M, "captured [M.name]'s soul", src) - transfer_soul("VICTIM", M, user) - -///////////////////Options for using captured souls/////////////////////////////////////// - -/obj/item/soulstone/attack_self(mob/living/user) - if(!in_range(src, user)) - return - if(!usability) - user.Unconscious(100) - to_chat(user, "My body is wracked with debilitating pain!") - return - release_shades(user) - -/obj/item/soulstone/proc/release_shades(mob/user) - for(var/mob/living/simple_animal/shade/A in src) - A.forceMove(get_turf(user)) - A.cancel_camera() - if(purified) - icon_state = "purified_soulstone" - A.icon_state = "ghost1" - A.name = "Purified [initial(A.name)]" - else - icon_state = "soulstone" - name = initial(name) - if(usability) - to_chat(A, "I have been released from my prison, but you are still bound to [user.real_name]'s will. Help [user.p_them()] succeed in [user.p_their()] goals at all costs.") - was_used() - -///////////////////////////Transferring to constructs///////////////////////////////////////////////////// -/obj/structure/constructshell - name = "empty shell" - icon = 'icons/obj/wizard.dmi' - icon_state = "construct-cult" - desc = "" - -/obj/structure/constructshell/examine(mob/user) - . = ..() - if(user.stat == DEAD) - . += {"A construct shell, used to house bound souls from a soulstone.\n - Placing a soulstone with a soul into this shell allows you to produce my choice of the following:\n - An Artificer, which can produce more shells and soulstones, as well as fortifications.\n - A Wraith, which does high damage and can jaunt through walls, though it is quite fragile.\n - A Juggernaut, which is very hard to kill and can produce temporary walls, but is slow."} - -/obj/structure/constructshell/attackby(obj/item/O, mob/user, params) - if(istype(O, /obj/item/soulstone)) - var/obj/item/soulstone/SS = O - if(!SS.purified) - to_chat(user, "An overwhelming feeling of dread comes over you as you attempt to place the soulstone into the shell. It would be wise to be rid of this quickly.") - user.Dizzy(30) - return - SS.transfer_soul("CONSTRUCT",src,user) - SS.was_used() - else - return ..() - -////////////////////////////Proc for moving soul in and out off stone////////////////////////////////////// - - -/obj/item/soulstone/proc/transfer_soul(choice as text, target, mob/user) - switch(choice) - if("FORCE") - if(!iscarbon(target)) //TODO: Add sacrifice stoning for non-organics, just because you have no body doesnt mean you dont have a soul - return FALSE - if(contents.len) - return FALSE - var/mob/living/carbon/T = target - if(T.client != null) - for(var/obj/item/W in T) - T.dropItemToGround(W) - init_shade(T, user) - return TRUE - else - to_chat(user, "Capture failed!: The soul has already fled its mortal frame. You attempt to bring it back...") - return getCultGhost(T,user) - - if("VICTIM") - var/mob/living/carbon/human/T = target - if(contents.len) - to_chat(user, "Capture failed!: The soulstone is full! Free an existing soul to make room.") - else - if((!old_shard && T.stat != CONSCIOUS) || (old_shard && T.stat == DEAD)) - if(T.client == null) - to_chat(user, "Capture failed!: The soul has already fled its mortal frame. You attempt to bring it back...") - getCultGhost(T,user) - else - for(var/obj/item/W in T) - T.dropItemToGround(W) - init_shade(T, user, message_user = 1) - qdel(T) - else - to_chat(user, "Capture failed!: Kill or maim the victim first!") - - if("SHADE") - var/mob/living/simple_animal/shade/T = target - if(contents.len) - to_chat(user, "Capture failed!: The soulstone is full! Free an existing soul to make room.") - else - T.AddComponent(/datum/component/soulstoned, src) - if(purified) - icon_state = "purified_soulstone2" - else - icon_state = "soulstone2" - name = "soulstone: Shade of [T.real_name]" - to_chat(T, "My soul has been captured by the soulstone. Its arcane energies are reknitting my ethereal form.") - if(user != T) - to_chat(user, "Capture successful!: [T.real_name]'s soul has been captured and stored within the soulstone.") - - if("CONSTRUCT") - var/obj/structure/constructshell/T = target - var/mob/living/simple_animal/shade/A = locate() in src - if(A) - var/construct_class = alert(user, "Please choose which type of construct you wish to create.",,"Juggernaut","Wraith","Artificer") - if(!T || !T.loc) - return - switch(construct_class) - if("Juggernaut") - - if(purified) - makeNewConstruct(/mob/living/simple_animal/hostile/construct/armored/angelic, A, user, 0, T.loc) - else - makeNewConstruct(/mob/living/simple_animal/hostile/construct/armored/noncult, A, user, 0, T.loc) - if("Wraith") - if(purified) - makeNewConstruct(/mob/living/simple_animal/hostile/construct/wraith/angelic, A, user, 0, T.loc) - else - makeNewConstruct(/mob/living/simple_animal/hostile/construct/wraith/noncult, A, user, 0, T.loc) - if("Artificer") - if(purified) - makeNewConstruct(/mob/living/simple_animal/hostile/construct/builder/angelic, A, user, 0, T.loc) - else - makeNewConstruct(/mob/living/simple_animal/hostile/construct/builder/noncult, A, user, 0, T.loc) - qdel(T) - qdel(src) - else - to_chat(user, "Creation failed!: The soul stone is empty! Go kill someone!") - - -/proc/makeNewConstruct(mob/living/simple_animal/hostile/construct/ctype, mob/target, mob/stoner = null, cultoverride = 0, loc_override = null) - if(QDELETED(target)) - return - var/mob/living/simple_animal/hostile/construct/newstruct = new ctype((loc_override) ? (loc_override) : (get_turf(target))) - if(stoner) - newstruct.faction |= "[REF(stoner)]" - newstruct.master = stoner - var/datum/action/innate/seek_master/SM = new() - SM.Grant(newstruct) - newstruct.key = target.key - if(stoner) - to_chat(newstruct, "I are still bound to serve my creator, [stoner], follow [stoner.p_their()] orders and help [stoner.p_them()] complete [stoner.p_their()] goals at all costs.") - newstruct.cancel_camera() - - -/obj/item/soulstone/proc/init_shade(mob/living/carbon/human/T, mob/user, message_user = 0 , mob/shade_controller) - if(!shade_controller) - shade_controller = T - new /obj/effect/decal/remains/human(T.loc) //Spawns a skeleton - T.stop_sound_channel(CHANNEL_HEARTBEAT) - T.invisibility = INVISIBILITY_ABSTRACT - T.dust_animation() - var/mob/living/simple_animal/shade/S = new /mob/living/simple_animal/shade(src) - S.AddComponent(/datum/component/soulstoned, src) - S.name = "Shade of [T.real_name]" - S.real_name = "Shade of [T.real_name]" - S.key = shade_controller.key - S.language_holder = user.language_holder.copy(S) - if(user) - S.faction |= "[REF(user)]" //Add the master as a faction, allowing inter-mob cooperation - S.cancel_camera() - name = "soulstone: Shade of [T.real_name]" - if(purified) - icon_state = "purified_soulstone2" - else - icon_state = "soulstone2" - if(user && usability) - to_chat(S, "Your soul has been captured! You are now bound to [user.real_name]'s will. Help [user.p_them()] succeed in [user.p_their()] goals at all costs.") - else if(user) - to_chat(S, "Your soul has been captured! You are now bound to the cult's will. Help them succeed in their goals at all costs.") - if(message_user && user) - to_chat(user, "Capture successful!: [T.real_name]'s soul has been ripped from [T.p_their()] body and stored within the soul stone.") - - -/obj/item/soulstone/proc/getCultGhost(mob/living/carbon/human/T, mob/user) - var/mob/dead/observer/chosen_ghost - - chosen_ghost = T.get_ghost(TRUE,TRUE) //Try to grab original owner's ghost first - - if(!chosen_ghost || !chosen_ghost.client) //Failing that, we grab a ghosts - var/list/consenting_candidates = pollGhostCandidates("Would you like to play as a Shade?", "Cultist", null, ROLE_CULTIST, 50, POLL_IGNORE_SHADE) - if(consenting_candidates.len) - chosen_ghost = pick(consenting_candidates) - if(!T) - return FALSE - if(!chosen_ghost || !chosen_ghost.client) - to_chat(user, "There were no spirits willing to become a shade.") - return FALSE - if(contents.len) //If they used the soulstone on someone else in the meantime - return FALSE - for(var/obj/item/W in T) - T.dropItemToGround(W) - init_shade(T, user , shade_controller = chosen_ghost) - qdel(T) - return TRUE diff --git a/code/modules/atmospherics/gasmixtures/reactions.dm b/code/modules/atmospherics/gasmixtures/reactions.dm index 93c203f1bd..dcc42eeaaf 100644 --- a/code/modules/atmospherics/gasmixtures/reactions.dm +++ b/code/modules/atmospherics/gasmixtures/reactions.dm @@ -319,9 +319,6 @@ if(reaction_energy) if(location) - var/particle_chance = ((PARTICLE_CHANCE_CONSTANT)/(reaction_energy-PARTICLE_CHANCE_CONSTANT)) + 1//Asymptopically approaches 100% as the energy of the reaction goes up. - if(prob(PERCENT(particle_chance))) - location.fire_nuclear_particle() var/rad_power = max((FUSION_RAD_COEFFICIENT/instability) + FUSION_RAD_MAX,0) radiation_pulse(location,rad_power) @@ -486,38 +483,3 @@ //Possibly burning a bit of organic matter through maillard reaction, so a *tiny* bit more heat would be understandable air.temperature += cleaned_air * 0.002 - -/datum/gas_reaction/stim_ball - priority = 7 - name ="Stimulum Energy Ball" - id = "stimball" - -/datum/gas_reaction/stim_ball/init_reqs() - min_requirements = list( - /datum/gas/pluoxium = STIM_BALL_GAS_AMOUNT, - /datum/gas/stimulum = STIM_BALL_GAS_AMOUNT, - /datum/gas/nitryl = MINIMUM_MOLE_COUNT, - /datum/gas/plasma = MINIMUM_MOLE_COUNT, - "TEMP" = FIRE_MINIMUM_TEMPERATURE_TO_EXIST - ) -/datum/gas_reaction/stim_ball/react(datum/gas_mixture/air, datum/holder) - var/list/cached_gases = air.gases - var/turf/open/location - var/old_heat_capacity = air.heat_capacity() - location = get_turf(holder) - air.assert_gases(/datum/gas/water_vapor,/datum/gas/nitryl,/datum/gas/carbon_dioxide,/datum/gas/nitrogen) - var/ball_shot_angle = 180*cos(cached_gases[/datum/gas/water_vapor][MOLES]/cached_gases[/datum/gas/nitryl][MOLES])+180 - var/stim_used = min(STIM_BALL_GAS_AMOUNT/cached_gases[/datum/gas/plasma][MOLES],cached_gases[/datum/gas/stimulum][MOLES]) - var/pluox_used = min(STIM_BALL_GAS_AMOUNT/cached_gases[/datum/gas/plasma][MOLES],cached_gases[/datum/gas/pluoxium][MOLES]) - var/energy_released = stim_used*STIMULUM_HEAT_SCALE//Stimulum has a lot of stored energy, and breaking it up releases some of it - location.fire_nuclear_particle(ball_shot_angle) - cached_gases[/datum/gas/carbon_dioxide][MOLES] += 4*pluox_used - cached_gases[/datum/gas/nitrogen][MOLES] += 8*stim_used - cached_gases[/datum/gas/pluoxium][MOLES] -= pluox_used - cached_gases[/datum/gas/stimulum][MOLES] -= stim_used - cached_gases[/datum/gas/plasma][MOLES] *= 0.5 //Consumes half the plasma each time. - if(energy_released) - var/new_heat_capacity = air.heat_capacity() - if(new_heat_capacity > MINIMUM_HEAT_CAPACITY) - air.temperature = CLAMP((air.temperature*old_heat_capacity + energy_released)/new_heat_capacity,TCMB,INFINITY) - return REACTING diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm index 84aaeaebc0..bd75559162 100644 --- a/code/modules/awaymissions/corpse.dm +++ b/code/modules/awaymissions/corpse.dm @@ -215,203 +215,3 @@ /obj/effect/mob_spawn/human/corpse/delayed ghost_usable = FALSE //These are just not-yet-set corpses. instant = FALSE - -//Non-human spawners - -/obj/effect/mob_spawn/mouse - name = "sleeper" - mob_type = /mob/living/simple_animal/mouse - death = FALSE - roundstart = FALSE - icon = 'icons/obj/machines/sleeper.dmi' - icon_state = "sleeper" - -/obj/effect/mob_spawn/cow - name = "sleeper" - mob_type = /mob/living/simple_animal/cow - death = FALSE - roundstart = FALSE - mob_gender = FEMALE - icon = 'icons/obj/machines/sleeper.dmi' - icon_state = "sleeper" - -// I'll work on making a list of corpses people request for maps, or that I think will be commonly used. Syndicate operatives for example. - -/datum/outfit/spacebartender - name = "Space Bartender" - uniform = /obj/item/clothing/under/rank/civilian/bartender - back = /obj/item/storage/backpack - shoes = /obj/item/clothing/shoes/sneakers/black - suit = /obj/item/clothing/suit/armor/vest - glasses = /obj/item/clothing/glasses/sunglasses/reagent -/obj/effect/mob_spawn/human/beach - outfit = /datum/outfit/beachbum - -/obj/effect/mob_spawn/human/beach/alive - death = FALSE - roundstart = FALSE - random = TRUE - mob_name = "Beach Bum" - name = "beach bum sleeper" - icon = 'icons/obj/machines/sleeper.dmi' - icon_state = "sleeper" - flavour_text = "You're, like, totally a dudebro, bruh. Ch'yea. You came here, like, on spring break, hopin' to pick up some bangin' hot chicks, y'knaw?" - assignedrole = "Beach Bum" - -/obj/effect/mob_spawn/human/beach/alive/lifeguard - flavour_text = "You're a spunky lifeguard! It's up to you to make sure nobody drowns or gets eaten by sharks and stuff." - mob_gender = "female" - name = "lifeguard sleeper" - id_job = "Lifeguard" - uniform = /obj/item/clothing/under/shorts/red - -/datum/outfit/beachbum - name = "Beach Bum" - glasses = /obj/item/clothing/glasses/sunglasses - l_pocket = /obj/item/reagent_containers/food/snacks/pizzaslice/dank; - uniform = /obj/item/clothing/under/pants/youngfolksjeans - -/datum/outfit/beachbum/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - ..() - if(visualsOnly) - return - H.dna.add_mutation(STONER) - -/////////////////Officers+Nanotrasen Security////////////////////// - -/obj/effect/mob_spawn/human/bridgeofficer - name = "Bridge Officer" - id_job = "Bridge Officer" - id_access_list = list(ACCESS_CENT_CAPTAIN) - outfit = /datum/outfit/nanotrasenbridgeofficercorpse - -/datum/outfit/nanotrasenbridgeofficercorpse - name = "Bridge Officer Corpse" - uniform = /obj/item/clothing/under/rank/centcom/officer - suit = /obj/item/clothing/suit/armor/bulletproof - shoes = /obj/item/clothing/shoes/sneakers/black - glasses = /obj/item/clothing/glasses/sunglasses - - -/obj/effect/mob_spawn/human/commander - name = "Commander" - id_job = "Commander" - id_access_list = list(ACCESS_CENT_CAPTAIN, ACCESS_CENT_GENERAL, ACCESS_CENT_SPECOPS, ACCESS_CENT_MEDICAL, ACCESS_CENT_STORAGE) - outfit = /datum/outfit/nanotrasencommandercorpse - -/datum/outfit/nanotrasencommandercorpse - name = "Nanotrasen Private Security Commander" - uniform = /obj/item/clothing/under/rank/centcom/commander - suit = /obj/item/clothing/suit/armor/bulletproof - glasses = /obj/item/clothing/glasses/eyepatch - mask = /obj/item/clothing/mask/cigarette/cigar/cohiba - head = /obj/item/clothing/head/centhat - gloves = /obj/item/clothing/gloves/combat - shoes = /obj/item/clothing/shoes/combat/swat - r_pocket = /obj/item/lighter - - -/obj/effect/mob_spawn/human/nanotrasensoldier - name = "Nanotrasen Private Security Officer" - id_job = "Private Security Force" - id_access_list = list(ACCESS_CENT_CAPTAIN, ACCESS_CENT_GENERAL, ACCESS_CENT_SPECOPS, ACCESS_CENT_MEDICAL, ACCESS_CENT_STORAGE, ACCESS_SECURITY, ACCESS_MECH_SECURITY) - outfit = /datum/outfit/nanotrasensoldiercorpse - -/datum/outfit/nanotrasensoldiercorpse - name = "NT Private Security Officer Corpse" - uniform = /obj/item/clothing/under/rank/security/officer - suit = /obj/item/clothing/suit/armor/vest - shoes = /obj/item/clothing/shoes/combat - gloves = /obj/item/clothing/gloves/combat - mask = /obj/item/clothing/mask/gas/sechailer/swat - head = /obj/item/clothing/head/helmet/swat/nanotrasen - back = /obj/item/storage/backpack/security - - -/obj/effect/mob_spawn/human/commander/alive - death = FALSE - roundstart = FALSE - mob_name = "Nanotrasen Commander" - name = "sleeper" - icon = 'icons/obj/machines/sleeper.dmi' - icon_state = "sleeper" - flavour_text = "I are a Nanotrasen Commander!" - -/obj/effect/mob_spawn/human/nanotrasensoldier/alive - death = FALSE - roundstart = FALSE - mob_name = "Private Security Officer" - name = "sleeper" - icon = 'icons/obj/machines/sleeper.dmi' - icon_state = "sleeper" - faction = "nanotrasenprivate" - flavour_text = "I are a Nanotrasen Private Security Officer!" - - -/////////////////Spooky Undead////////////////////// - -/obj/effect/mob_spawn/human/skeleton - name = "skeletal remains" - mob_name = "skeleton" - mob_species = /datum/species/skeleton - mob_gender = NEUTER - -/obj/effect/mob_spawn/human/skeleton/alive - death = FALSE - roundstart = FALSE - icon = 'icons/effects/blood.dmi' - icon_state = "remains" - flavour_text = "By unknown powers, your skeletal remains have been reanimated! Walk this mortal plain and terrorize all living adventurers who dare cross your path." - assignedrole = "Skeleton" - -/obj/effect/mob_spawn/human/zombie - name = "rotting corpse" - mob_name = "zombie" - mob_species = /datum/species/zombie - assignedrole = "Zombie" - -/obj/effect/mob_spawn/human/zombie/alive - death = FALSE - roundstart = FALSE - icon = 'icons/effects/blood.dmi' - icon_state = "remains" - flavour_text = "By unknown powers, your rotting remains have been resurrected! Walk this mortal plain and terrorize all living adventurers who dare cross your path." - - -/obj/effect/mob_spawn/human/abductor - name = "abductor" - mob_name = "alien" - mob_species = /datum/species/abductor - outfit = /datum/outfit/abductorcorpse - -/datum/outfit/abductorcorpse - name = "Abductor Corpse" - uniform = /obj/item/clothing/under/color/grey - shoes = /obj/item/clothing/shoes/combat - - -//For ghost bar. -/obj/effect/mob_spawn/human/alive/space_bar_patron - name = "Bar cryogenics" - mob_name = "Bar patron" - random = TRUE - permanent = TRUE - uses = -1 - outfit = /datum/outfit/spacebartender - assignedrole = "Space Bar Patron" - -//ATTACK HAND IGNORING PARENT RETURN VALUE -/obj/effect/mob_spawn/human/alive/space_bar_patron/attack_hand(mob/user) - var/despawn = alert("Return to cryosleep? (Warning, Your mob will be deleted!)",,"Yes","No") - if(despawn == "No" || !loc || !Adjacent(user)) - return - user.visible_message("[user.name] climbs back into cryosleep...") - qdel(user) - -/datum/outfit/cryobartender - name = "Cryogenic Bartender" - uniform = /obj/item/clothing/under/rank/civilian/bartender - back = /obj/item/storage/backpack - shoes = /obj/item/clothing/shoes/sneakers/black - suit = /obj/item/clothing/suit/armor/vest - glasses = /obj/item/clothing/glasses/sunglasses/reagent diff --git a/code/modules/awaymissions/exile.dm b/code/modules/awaymissions/exile.dm deleted file mode 100644 index 976ab18443..0000000000 --- a/code/modules/awaymissions/exile.dm +++ /dev/null @@ -1,9 +0,0 @@ - -/obj/structure/closet/secure_closet/exile - name = "exile implants" - req_access = list(ACCESS_HOS) - -/obj/structure/closet/secure_closet/exile/PopulateContents() - new /obj/item/implanter/exile(src) - for(var/i in 1 to 5) - new /obj/item/implantcase/exile(src) diff --git a/code/modules/awaymissions/pamphlet.dm b/code/modules/awaymissions/pamphlet.dm deleted file mode 100644 index 7cbbde096d..0000000000 --- a/code/modules/awaymissions/pamphlet.dm +++ /dev/null @@ -1,39 +0,0 @@ -/obj/item/paper/pamphlet - name = "pamphlet" - icon_state = "pamphlet" - -/obj/item/paper/pamphlet/gateway - info = "Welcome to the Nanotrasen Gateway project...
\ - Congratulations! If you're reading this, you and your superiors have decided that you're \ - ready to commit to a life spent colonising the rolling hills of far away worlds. You \ - must be ready for a lifetime of adventure, a little bit of hard work, and an award \ - winning dental plan- but that's not all the Nanotrasen Gateway project has to offer.
\ -
Because we care about you, we feel it is only fair to make sure you know the risks \ - before you commit to joining the Nanotrasen Gateway project. All away destinations have \ - been fully scanned by a Nanotrasen expeditionary team, and are certified to be 100% safe. \ - We've even left a case of space beer along with the basic materials you'll need to expand \ - Nanotrasen's operational area and start your new life.

\ - Gateway Operation Basics
\ - All Nanotrasen approved Gateways operate on the same basic principals. They operate off \ - area equipment power as you would expect, and without this supply, it cannot safely function, \ - causinng it to reject all attempts at operation.

\ - Once it is correctly setup, and once it has enough power to operate, the Gateway will begin \ - searching for an output location. The amount of time this takes is variable, but the Gateway \ - interface will give you an estimate accurate to the minute. Power loss will not interrupt the \ - searching process. Influenza will not interrupt the searching process. Temporal anomalies \ - may cause the estimate to be inaccurate, but will not interrupt the searching process.

\ - Life On The Other Side
\ - Once you have traversed the Gateway, you may experience some disorientation. Do not panic. \ - This is a normal side effect of travelling vast distances in a short period of time. You should \ - survey the immediate area, and attempt to locate your complimentary case of space beer. Our \ - expeditionary teams have ensured the complete safety of all away locations, but in a small \ - number of cases, the Gateway they have established may not be immediately obvious. \ - Do not panic if you cannot locate the return Gateway. Begin colonisation of the destination. \ -

A New World
\ - As a participant in the Nanotrasen Gateway Project, you will be on the frontiers of space. \ - Though complete safety is assured, participants are advised to prepare for inhospitable \ - environs." - -//we don't want the silly text overlay! -/obj/item/paper/pamphlet/update_icon() - return diff --git a/code/modules/awaymissions/signpost.dm b/code/modules/awaymissions/signpost.dm deleted file mode 100644 index 460dfc9ba5..0000000000 --- a/code/modules/awaymissions/signpost.dm +++ /dev/null @@ -1,63 +0,0 @@ -/*An alternative to exit gateways, signposts send you back to somewhere safe onstation with their semiotic magic.*/ -/obj/structure/signpost - icon = 'icons/obj/stationobjs.dmi' - icon_state = "signpost" - anchored = TRUE - density = TRUE - var/question = "Travel back?" - var/list/zlevels - -/obj/structure/signpost/Initialize() - . = ..() - set_light(2) - zlevels = SSmapping.levels_by_trait(ZTRAIT_STATION) - -/obj/structure/signpost/interact(mob/user) - . = ..() - if(.) - return - if(alert(question,name,"Yes","No") == "Yes" && Adjacent(user)) - var/turf/T = find_safe_turf(zlevels=zlevels) - - if(T) - var/atom/movable/AM = user.pulling - if(AM) - AM.forceMove(T) - user.forceMove(T) - if(AM) - user.start_pulling(AM) - to_chat(user, "I blink and find myself in [get_area_name(T)].") - else - to_chat(user, "Nothing happens. You feel that this is a bad sign.") - -/obj/structure/signpost/attackby(obj/item/W, mob/user, params) - return interact(user) - -/obj/structure/signpost/attack_paw(mob/user) - return interact(user) - -/obj/structure/signpost/attack_hulk(mob/user) - return - -/obj/structure/signpost/attack_animal(mob/user) - return interact(user) - -/obj/structure/signpost/salvation - name = "\proper salvation" - desc = "" - resistance_flags = INDESTRUCTIBLE - -/obj/structure/signpost/exit - name = "exit" - desc = "Make sure to bring all your belongings with you when you \ - exit the area." - question = "Leave? You might never come back." - -/obj/structure/signpost/exit/Initialize() - . = ..() - zlevels = list() - for(var/i in 1 to world.maxz) - zlevels += i - zlevels -= SSmapping.levels_by_trait(ZTRAIT_CENTCOM) // no easy victory, even with meme signposts - // also, could you think of the horror if they ended up in a holodeck - // template or something diff --git a/code/modules/awaymissions/super_secret_room.dm b/code/modules/awaymissions/super_secret_room.dm deleted file mode 100644 index e008978202..0000000000 --- a/code/modules/awaymissions/super_secret_room.dm +++ /dev/null @@ -1,138 +0,0 @@ -/obj/structure/speaking_tile - name = "strange tile" - desc = "" - verb_say = "intones" - icon = 'icons/obj/structures.dmi' - icon_state = "speaking_tile" - layer = 5 - resistance_flags = INDESTRUCTIBLE - var/speaking = FALSE - var/times_spoken_to = 0 - var/list/shenanigans = list() - -/obj/structure/speaking_tile/Initialize() - . = ..() - var/json_file = file("data/npc_saves/Poly.json") - if(!fexists(json_file)) - return - var/list/json = json_decode(file2text(json_file)) - shenanigans = json["phrases"] - -/obj/structure/speaking_tile/interact(mob/user) - if(!isliving(user) || speaking) - return - speaking = TRUE - - switch(times_spoken_to) - if(0) - SpeakPeace(list("Welcome to the error handling room.","Something's goofed up bad to send you here.","You should probably tell an admin what you were doing, or make a bug report.")) - for(var/obj/structure/signpost/salvation/S in orange(7)) - S.invisibility = 0 - var/datum/effect_system/smoke_spread/smoke = new - smoke.set_up(1, S.loc) - smoke.start() - break - if(1) - SpeakPeace(list("Take that ladder up.","It'll send you back to the station.","Hopefully you'll never need to see this place again.")) - if(2) - SpeakPeace(list("Curious about what happened?","Somehow your corporeal form was sent to nullspace with you still in it.","Lucky for you this room exists to save you from that horrible fate.")) - if(3) - SpeakPeace(list("So yeah, you're welcome.","Anyway don't you have things to do?","There's no real point to sticking around here forever.")) - if(4) - SpeakPeace(list("I'm flattered you care this much about this room.","However it's not proper to just stand in here all shift and see what I'll say.","I'm going to work hard to be more boring so you'll leave.")) - if(5 to 8) - SpeakPeace(list("...")) - if(9) - SpeakPeace(list("Alright maybe that's too boring.", "I can't keep manually typing these lines out though.", "It's hard to explain but the code structure I'm using is kind of terrible.")) - if(10) - SpeakPeace(list("Oh I have an idea!", "Lets outsource this endless banter to Poly!", "Then you'll be able to keep listening to this without getting bored!")) - if(isnull(shenanigans) || !shenanigans.len) - shenanigans = list("Except the poly file is missing...") - if(11 to 14, 16 to 50, 52 to 99, 103 to 107, 109 to 203, 205 to 249, 252 to 665, 667 to 999, 1001 to 5642) - SpeakPeace(list(pick(shenanigans),pick(shenanigans),pick(shenanigans))) - if(times_spoken_to % 10 == 0) - SpeakPeace(list("That's [times_spoken_to] times you've spoken to me by the way.")) - if(15) - SpeakPeace(list("See? Isn't this fun?","Now you can mash this for hours without getting bored.","Anyway I'll leave you it.")) - if(51) - SpeakPeace(list("The fun never ends around here.", "The Poly text files stores up to 500 statements.", "But you've probably heard a few repeats by now.")) - if(100) - SpeakPeace(list("And that's a solid hundred.", "Good hustle I guess.", "You've probably heard a lot of repeats by now.")) - if(101) - SpeakPeace(list("I hope you're getting the reference this room is presenting.", "As well as the more obscure meta reference this conversation is presenting.", "This stuff has layers.")) - if(102) - SpeakPeace(list("I am very tempted to just stretch this out forever.","It's technically easier than doing this.","Just an option.")) - if(108) - SpeakPeace(list("But you have my respect for being this dedicated to the joke.", "So tell you what we're going to do, we're going to set a goal.", "250 is your final mission.")) - if(204) - SpeakPeace(list("Notice how there was no special message at 200?", "The slow automation of what used to be meaningful milestones?","It's all part of the joke.")) - if(250) - SpeakPeace(list("Congratulations.", "By my very loose calculations you've now wasted a decent chunk of the round doing this.", "But you've seen this meme to its conclusion, and that's an experience in itself, right?")) - if(251) - SpeakPeace(list("Anyway, here.", "I can't give you anything that would impact the progression of the round.","But you've earned this at least.")) - var/obj/item/reagent_containers/food/drinks/trophy/silver_cup/the_ride = new(get_turf(user)) - the_ride.name = "Overextending The Joke: Second Place" - the_ride.desc = "" - if(252) - SpeakPeace(list("You know what this means right?", "Of course it's not over!", "The question becomes now is it more impressive to solider on to an unknown finish, or to have to common sense to stop here?")) - if(666) - SpeakPeace(list("The darkness in your heart won't be filled by simple platitudes.","You won't stop now, you're in this to the end.", "Will you reach the finish line before the round ends?")) - if(1000) - SpeakPeace(list("The ends exists somewhere beyond meaningful milestones.", "There will be no more messages until then.", "You disgust me.")) - if(5643) - user.client.give_award(/datum/award/achievement/misc/time_waste, user) - var/obj/item/reagent_containers/food/drinks/trophy/gold_cup/never_ends = new(get_turf(user)) - never_ends.name = "Overextending The Joke: First Place" - never_ends.desc = "" - else - y += 2 - speaking = FALSE - times_spoken_to++ - -/obj/structure/speaking_tile/attackby(obj/item/W, mob/user, params) - return interact(user) - -/obj/structure/speaking_tile/attack_paw(mob/user) - return interact(user) - -/obj/structure/speaking_tile/attack_hulk(mob/user) - return - -/obj/structure/speaking_tile/attack_animal(mob/user) - return interact(user) - -/obj/structure/speaking_tile/proc/SpeakPeace(list/statements) - for(var/i in 1 to statements.len) - say("[statements[i]]") - if(i != statements.len) - sleep(30) - -/obj/item/rupee - name = "weird crystal" - desc = "" - icon = 'icons/obj/economy.dmi' - icon_state = "rupee" - w_class = WEIGHT_CLASS_SMALL - custom_materials = list(/datum/material/glass = 500) - -/obj/item/rupee/Initialize() - . = ..() - var/newcolor = color2hex(pick(10;"green", 5;"blue", 3;"red", 1;"purple")) - add_atom_colour(newcolor, FIXED_COLOUR_PRIORITY) - -/obj/item/rupee/Crossed(mob/M) - if(!istype(M)) - return - if(M.put_in_hands(src)) - if(src != M.get_active_held_item()) - M.swap_hand() - equip_to_best_slot(M) - ..() - -/obj/item/rupee/equipped(mob/user, slot) - playsound(get_turf(loc), 'sound/blank.ogg', 50, TRUE, -1) - ..() - -/obj/effect/landmark/error - name = "error" - icon_state = "error_room" diff --git a/code/modules/buildmode/submodes/basic.dm b/code/modules/buildmode/submodes/basic.dm index b6fddc18b4..65abda4f1d 100644 --- a/code/modules/buildmode/submodes/basic.dm +++ b/code/modules/buildmode/submodes/basic.dm @@ -21,14 +21,8 @@ if(istype(object,/turf) && left_click && !alt_click && !ctrl_click) var/turf/T = object - if(isspaceturf(object)) - T.PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) - else if(isplatingturf(object)) - T.PlaceOnTop(/turf/open/floor/plasteel, flags = CHANGETURF_INHERIT_AIR) - else if(isfloorturf(object)) - T.PlaceOnTop(/turf/closed/wall) - else if(iswallturf(object)) - T.PlaceOnTop(/turf/closed/wall/r_wall) + if(isfloorturf(object)) + T.PlaceOnTop(/turf/closed/wall/mineral/rogue/decowood) log_admin("Build Mode: [key_name(c)] built [T] at [AREACOORD(T)]") return else if(right_click) @@ -39,11 +33,3 @@ else if(isobj(object)) qdel(object) return - else if(istype(object,/turf) && ctrl_click && left_click) - var/obj/structure/window/reinforced/window - if(BM.build_dir == NORTHWEST) - window = new /obj/structure/window/reinforced/fulltile(get_turf(object)) - else - window = new /obj/structure/window/reinforced(get_turf(object)) - window.setDir(BM.build_dir) - log_admin("Build Mode: [key_name(c)] built a window at [AREACOORD(object)]") diff --git a/code/modules/buildmode/submodes/mapgen.dm b/code/modules/buildmode/submodes/mapgen.dm index 6420668a9f..12f83a36fa 100644 --- a/code/modules/buildmode/submodes/mapgen.dm +++ b/code/modules/buildmode/submodes/mapgen.dm @@ -35,11 +35,6 @@ var/left_click = pa.Find("left") if(left_click) var/datum/mapGenerator/G = new generator_path - if(istype(G, /datum/mapGenerator/repair/reload_station_map)) - if(GLOB.reloading_map) - to_chat(c, "I are already reloading an area! Please wait for it to fully finish loading before trying to load another!") - deselect_region() - return G.defineRegion(cornerA, cornerB, 1) highlight_region(G.map) var/confirm = alert("Are you sure you want to run the map generator?", "Run generator", "Yes", "No") diff --git a/code/modules/cargo/centcom_podlauncher.dm b/code/modules/cargo/centcom_podlauncher.dm index 6fb1e45708..9390936559 100644 --- a/code/modules/cargo/centcom_podlauncher.dm +++ b/code/modules/cargo/centcom_podlauncher.dm @@ -416,9 +416,6 @@ force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.adm if("styleInvisible") temp_pod.setStyle(STYLE_INVISIBLE) . = TRUE - if("styleGondola") - temp_pod.setStyle(STYLE_GONDOLA) - . = TRUE if("styleSeeThrough") temp_pod.setStyle(STYLE_SEETHROUGH) . = TRUE diff --git a/code/modules/cargo/exports.dm b/code/modules/cargo/exports.dm index 23dbc877e7..832893438e 100644 --- a/code/modules/cargo/exports.dm +++ b/code/modules/cargo/exports.dm @@ -160,10 +160,7 @@ report.total_value[src] += the_cost - if(istype(O, /datum/export/material)) - report.total_amount[src] += amount*MINERAL_MATERIAL_AMOUNT - else - report.total_amount[src] += amount + report.total_amount[src] += amount if(!dry_run) if(apply_elastic) diff --git a/code/modules/cargo/exports/gear.dm b/code/modules/cargo/exports/gear.dm deleted file mode 100644 index a6339fdf09..0000000000 --- a/code/modules/cargo/exports/gear.dm +++ /dev/null @@ -1,70 +0,0 @@ -/datum/export/gear - -/datum/export/gear/sec_armor - cost = 100 - unit_name = "armor vest" - export_types = list(/obj/item/clothing/suit/armor/vest) - -/datum/export/gear/mask/breath - cost = 2 - unit_name = "breath mask" - export_types = list(/obj/item/clothing/mask/breath) - -/datum/export/gear/mask/gas - cost = 10 - unit_name = "gas mask" - export_types = list(/obj/item/clothing/mask/gas) - include_subtypes = FALSE - - -/datum/export/gear/radhelmet - cost = 50 - unit_name = "radsuit hood" - export_types = list(/obj/item/clothing/head/radiation) - -/datum/export/gear/radsuit - cost = 100 - unit_name = "radsuit" - export_types = list(/obj/item/clothing/suit/radiation) - -/datum/export/gear/biohood - cost = 50 - unit_name = "biosuit hood" - export_types = list(/obj/item/clothing/head/bio_hood) - -/datum/export/gear/biosuit - cost = 100 - unit_name = "biosuit" - export_types = list(/obj/item/clothing/suit/bio_suit) - -/datum/export/gear/bombhelmet - cost = 50 - unit_name = "bomb suit hood" - export_types = list(/obj/item/clothing/head/bomb_hood) - -/datum/export/gear/bombsuit - cost = 100 - unit_name = "bomb suit" - export_types = list(/obj/item/clothing/suit/bomb_suit) - -/datum/export/gear/lizardboots - cost = 350 - unit_name = "lizard skin boots" - export_types = list(/obj/item/clothing/shoes/cowboy/lizard) - include_subtypes = FALSE - -/datum/export/gear/lizardmasterwork - cost = 1000 - unit_name = "Hugs-the-Feet lizard boots" - export_types = list(/obj/item/clothing/shoes/cowboy/lizard/masterwork) - -/datum/export/gear/bilton - cost = 2500 - unit_name = "bilton wrangler boots" - export_types = list(/obj/item/clothing/shoes/cowboy/fancy) - -/datum/export/gear/ebonydie - cost = 500 - unit_name = "ebony die" - export_types = list(/obj/item/dice/d6/ebony) - diff --git a/code/modules/cargo/exports/manifest.dm b/code/modules/cargo/exports/manifest.dm deleted file mode 100644 index d59ef1093f..0000000000 --- a/code/modules/cargo/exports/manifest.dm +++ /dev/null @@ -1,78 +0,0 @@ -// Approved manifest. -// +200 credits flat. -/datum/export/manifest_correct - cost = 200 - k_elasticity = 0 - unit_name = "approved manifest" - export_types = list(/obj/item/paper/fluff/jobs/cargo/manifest) - -/datum/export/manifest_correct/applies_to(obj/O) - if(!..()) - return FALSE - - var/obj/item/paper/fluff/jobs/cargo/manifest/M = O - if(M.is_approved() && !M.errors) - return TRUE - return FALSE - -// Correctly denied manifest. -// Refunds the package cost minus the cost of crate. -/datum/export/manifest_error_denied - cost = -500 - k_elasticity = 0 - unit_name = "correctly denied manifest" - export_types = list(/obj/item/paper/fluff/jobs/cargo/manifest) - -/datum/export/manifest_error_denied/applies_to(obj/O) - if(!..()) - return FALSE - - var/obj/item/paper/fluff/jobs/cargo/manifest/M = O - if(M.is_denied() && M.errors) - return TRUE - return FALSE - -/datum/export/manifest_error_denied/get_cost(obj/O) - var/obj/item/paper/fluff/jobs/cargo/manifest/M = O - return ..() + M.order_cost - - -// Erroneously approved manifest. -// Substracts the package cost. -/datum/export/manifest_error - unit_name = "erroneously approved manifest" - export_types = list(/obj/item/paper/fluff/jobs/cargo/manifest) - -/datum/export/manifest_error/applies_to(obj/O) - if(!..()) - return FALSE - - var/obj/item/paper/fluff/jobs/cargo/manifest/M = O - if(M.is_approved() && M.errors) - return TRUE - return FALSE - -/datum/export/manifest_error/get_cost(obj/O) - var/obj/item/paper/fluff/jobs/cargo/manifest/M = O - return -M.order_cost - - -// Erroneously denied manifest. -// Substracts the package cost minus the cost of crate. -/datum/export/manifest_correct_denied - cost = 500 - unit_name = "erroneously denied manifest" - export_types = list(/obj/item/paper/fluff/jobs/cargo/manifest) - -/datum/export/manifest_correct_denied/applies_to(obj/O) - if(!..()) - return FALSE - - var/obj/item/paper/fluff/jobs/cargo/manifest/M = O - if(M.is_denied() && !M.errors) - return TRUE - return FALSE - -/datum/export/manifest_correct_denied/get_cost(obj/O) - var/obj/item/paper/fluff/jobs/cargo/manifest/M = O - return ..() - M.order_cost diff --git a/code/modules/cargo/exports/materials.dm b/code/modules/cargo/exports/materials.dm deleted file mode 100644 index 5cf674d83b..0000000000 --- a/code/modules/cargo/exports/materials.dm +++ /dev/null @@ -1,99 +0,0 @@ -/datum/export/material - cost = 5 // Cost per MINERAL_MATERIAL_AMOUNT, which is 2000cm3 as of April 2016. - message = "cm3 of developer's tears. Please, report this on github" - var/material_id = null - export_types = list( - /obj/item/stack/sheet/mineral, /obj/item/stack/tile/mineral, - /obj/item/stack/ore, /obj/item/coin) -// Yes, it's a base type containing export_types. -// But it has no material_id, so any applies_to check will return false, and these types reduce amount of copypasta a lot - -/datum/export/material/get_amount(obj/O) - if(!material_id) - return 0 - if(!isitem(O)) - return 0 - var/obj/item/I = O - if(!(getmaterialref(material_id) in I.custom_materials)) - return 0 - - var/amount = I.custom_materials[getmaterialref(material_id)] - - if(istype(I, /obj/item/stack/ore)) - amount *= 0.8 // Station's ore redemption equipment is really goddamn good. - - return round(amount/MINERAL_MATERIAL_AMOUNT) - -// Materials. Nothing but plasma is really worth selling. Better leave it all to RnD and sell some plasma instead. - -/datum/export/material/bananium - cost = 1000 - material_id = /datum/material/bananium - message = "cm3 of bananium" - -/datum/export/material/diamond - cost = 500 - material_id = /datum/material/diamond - message = "cm3 of diamonds" - -/datum/export/material/plasma - cost = 200 - k_elasticity = 0 - material_id = /datum/material/plasma - message = "cm3 of plasma" - -/datum/export/material/uranium - cost = 100 - material_id = /datum/material/uranium - message = "cm3 of uranium" - -/datum/export/material/gold - cost = 125 - material_id = /datum/material/gold - message = "cm3 of gold" - -/datum/export/material/silver - cost = 50 - material_id = /datum/material/silver - message = "cm3 of silver" - -/datum/export/material/titanium - cost = 125 - material_id = /datum/material/titanium - message = "cm3 of titanium" - - -/datum/export/material/mythril - cost = 1500 - material_id = /datum/material/mythril - message = "cm3 of mythril" - -/datum/export/material/bscrystal - cost = 300 - message = "of bluespace crystals" - material_id = /datum/material/bluespace - -/datum/export/material/plastic - cost = 25 - message = "cm3 of plastic" - material_id = /datum/material/plastic - -/datum/export/material/runite - cost = 600 - message = "cm3 of runite" - material_id = /datum/material/runite - -/datum/export/material/metal - cost = 5 - message = "cm3 of metal" - material_id = /datum/material/iron - export_types = list( - /obj/item/stack/sheet/metal, /obj/item/stack/tile/plasteel, - /obj/item/stack/rods, /obj/item/stack/ore, /obj/item/coin) - -/datum/export/material/glass - cost = 5 - message = "cm3 of glass" - material_id = /datum/material/glass - export_types = list(/obj/item/stack/sheet/glass, /obj/item/stack/ore, - /obj/item/shard) diff --git a/code/modules/cargo/exports/sheets.dm b/code/modules/cargo/exports/sheets.dm deleted file mode 100644 index 10f04fdc21..0000000000 --- a/code/modules/cargo/exports/sheets.dm +++ /dev/null @@ -1,84 +0,0 @@ -/datum/export/stack - unit_name = "sheet" - -/datum/export/stack/get_amount(obj/O) - var/obj/item/stack/S = O - if(istype(S)) - return S.amount - return 0 - -// Hides - -/datum/export/stack/skin/monkey - cost = 50 - unit_name = "monkey hide" - export_types = list(/obj/item/stack/sheet/animalhide/monkey) - -/datum/export/stack/skin/human - cost = 100 - export_category = EXPORT_CONTRABAND - unit_name = "piece" - message = "of human skin" - export_types = list(/obj/item/stack/sheet/animalhide/human) - -/datum/export/stack/skin/goliath_hide - cost = 200 - unit_name = "goliath hide" - export_types = list(/obj/item/stack/sheet/animalhide/goliath_hide) - -/datum/export/stack/skin/cat - cost = 150 - export_category = EXPORT_CONTRABAND - unit_name = "cat hide" - export_types = list(/obj/item/stack/sheet/animalhide/cat) - -/datum/export/stack/skin/corgi - cost = 200 - export_category = EXPORT_CONTRABAND - unit_name = "corgi hide" - export_types = list(/obj/item/stack/sheet/animalhide/corgi) - -/datum/export/stack/skin/lizard - cost = 150 - unit_name = "lizard hide" - export_types = list(/obj/item/stack/sheet/animalhide/lizard) - -/datum/export/stack/skin/gondola - cost = 5000 - unit_name = "gondola hide" - export_types = list(/obj/item/stack/sheet/animalhide/gondola) - -// Common materials. -// For base materials, see materials.dm - -/datum/export/stack/plasteel - cost = 155 // 2000u of plasma + 2000u of metal. - message = "of plasteel" - export_types = list(/obj/item/stack/sheet/plasteel) - -// 1 glass + 0.5 metal, cost is rounded up. -/datum/export/stack/rglass - cost = 8 - message = "of reinforced glass" - export_types = list(/obj/item/stack/sheet/rglass) - -/datum/export/stack/plastitanium - cost = 325 // plasma + titanium costs - message = "of plastitanium" - export_types = list(/obj/item/stack/sheet/mineral/plastitanium) - -/datum/export/stack/wood - cost = 30 - unit_name = "wood plank" - export_types = list(/obj/item/stack/sheet/mineral/wood) - -/datum/export/stack/cardboard - cost = 2 - message = "of cardboard" - export_types = list(/obj/item/stack/sheet/cardboard) - -/datum/export/stack/sandstone - cost = 1 - unit_name = "block" - message = "of sandstone" - export_types = list(/obj/item/stack/sheet/mineral/sandstone) diff --git a/code/modules/cargo/gondolapod.dm b/code/modules/cargo/gondolapod.dm deleted file mode 100644 index 3553b2da8f..0000000000 --- a/code/modules/cargo/gondolapod.dm +++ /dev/null @@ -1,76 +0,0 @@ -/mob/living/simple_animal/pet/gondola/gondolapod - name = "gondola" - real_name = "gondola" - desc = "" - response_help_continuous = "pets" - response_help_simple = "pet" - response_disarm_continuous = "bops" - response_disarm_simple = "bop" - response_harm_continuous = "kicks" - response_harm_simple = "kick" - faction = list("gondola") - turns_per_move = 10 - icon = 'icons/mob/gondolapod.dmi' - icon_state = "gondolapod" - icon_living = "gondolapod" - pixel_x = -16//2x2 sprite - pixel_y = -5 - layer = TABLE_LAYER//so that deliveries dont appear underneath it - loot = list(/obj/effect/decal/cleanable/blood/gibs, /obj/item/stack/sheet/animalhide/gondola = 2, /obj/item/reagent_containers/food/snacks/meat/slab/gondola = 2) - //Gondolas aren't affected by cold. - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 - maxbodytemp = 1500 - maxHealth = 200 - health = 200 - del_on_death = TRUE - var/opened = FALSE - var/obj/structure/closet/supplypod/centcompod/linked_pod - -/mob/living/simple_animal/pet/gondola/gondolapod/Initialize(mapload, pod) - linked_pod = pod - name = linked_pod.name - . = ..() - -/mob/living/simple_animal/pet/gondola/gondolapod/update_icon_state() - if(opened) - icon_state = "gondolapod_open" - else - icon_state = "gondolapod" - -/mob/living/simple_animal/pet/gondola/gondolapod/verb/deliver() - set name = "Release Contents" - set category = "Gondola" - set desc = "" - linked_pod.open(src, forced = TRUE) - -/mob/living/simple_animal/pet/gondola/gondolapod/examine(mob/user) - . = ..() - if (contents.len) - . += "It looks like it hasn't made its delivery yet." - else - . += "It looks like it has already made its delivery." - -/mob/living/simple_animal/pet/gondola/gondolapod/verb/check() - set name = "Count Contents" - set category = "Gondola" - set desc = "" - var/total = contents.len - if (total) - to_chat(src, "I detect [total] object\s within your incredibly vast belly.") - else - to_chat(src, "A closer look inside myself reveals... nothing.") - -/mob/living/simple_animal/pet/gondola/gondolapod/proc/setOpened() - opened = TRUE - update_icon() - addtimer(CALLBACK(src, PROC_REF(setClosed)), 50) - -/mob/living/simple_animal/pet/gondola/gondolapod/proc/setClosed() - opened = FALSE - update_icon() - -/mob/living/simple_animal/pet/gondola/gondolapod/death() - qdel(linked_pod) //Will cause the open() proc for the linked supplypod to be called with the "broken" parameter set to true, meaning that it will dump its contents on death - qdel(src) - ..() diff --git a/code/modules/cargo/order.dm b/code/modules/cargo/order.dm index 6ed9c00b52..d3391839ef 100644 --- a/code/modules/cargo/order.dm +++ b/code/modules/cargo/order.dm @@ -89,12 +89,9 @@ P.info += "

Stamp below to confirm receipt of goods:

" if(P.errors & MANIFEST_ERROR_ITEM) - if( istype(C, /obj/structure/closet/crate/large)) - P.errors &= ~MANIFEST_ERROR_ITEM - else - var/lost = max(round(C.contents.len / 10), 1) - while(--lost >= 0) - qdel(pick(C.contents)) + var/lost = max(round(C.contents.len / 10), 1) + while(--lost >= 0) + qdel(pick(C.contents)) P.update_icon() P.forceMove(C) diff --git a/code/modules/cargo/supplypod.dm b/code/modules/cargo/supplypod.dm index a4de0a5f20..689cf93890 100644 --- a/code/modules/cargo/supplypod.dm +++ b/code/modules/cargo/supplypod.dm @@ -182,12 +182,7 @@ if (effectMissile) //If we are acting like a missile, then right after we land and finish fucking shit up w explosions, we should delete opened = TRUE //We set opened to TRUE to avoid spending time trying to open (due to being deleted) during the Destroy() proc qdel(src) - if (style == STYLE_GONDOLA) //Checks if we are supposed to be a gondola pod. If so, create a gondolapod mob, and move this pod to nullspace. I'd like to give a shout out, to my man oranges - var/mob/living/simple_animal/pet/gondola/gondolapod/benis = new(get_turf(src), src) - benis.contents |= contents //Move the contents of this supplypod into the gondolapod mob. - moveToNullspace() - addtimer(CALLBACK(src, PROC_REF(open), benis), openingDelay) //After the openingDelay passes, we use the open proc from this supplyprod while referencing the contents of the "holder", in this case the gondolapod mob - else if (style == STYLE_SEETHROUGH) + if (style == STYLE_SEETHROUGH) open(src) else addtimer(CALLBACK(src, PROC_REF(open), src), openingDelay) //After the openingDelay passes, we use the open proc from this supplypod, while referencing this supplypod's contents diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index f7d2b058fb..0b02403356 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -220,7 +220,7 @@ foodtype = CLOTH /obj/item/clothing/attack(mob/M, mob/user, def_zone) - if(user.used_intent.type != INTENT_HARM && ismoth(M)) + if(user.used_intent.type != INTENT_HARM) var/obj/item/reagent_containers/food/snacks/clothing/clothing_as_food = new clothing_as_food.name = name if(clothing_as_food.attack(M, user, def_zone)) diff --git a/code/modules/clothing/ears/_ears.dm b/code/modules/clothing/ears/_ears.dm deleted file mode 100644 index caff2a36dd..0000000000 --- a/code/modules/clothing/ears/_ears.dm +++ /dev/null @@ -1,52 +0,0 @@ - -//Ears: currently only used for headsets and earmuffs -/obj/item/clothing/ears - name = "ears" - w_class = WEIGHT_CLASS_TINY - throwforce = 0 - slot_flags = ITEM_SLOT_HEAD - resistance_flags = NONE - -/obj/item/clothing/ears/earmuffs - name = "earmuffs" - desc = "" - icon_state = "earmuffs" - item_state = "earmuffs" - strip_delay = 15 - equip_delay_other = 25 - resistance_flags = FLAMMABLE - custom_price = 40 - -/obj/item/clothing/ears/earmuffs/ComponentInitialize() - . = ..() - AddElement(/datum/element/earhealing) - AddComponent(/datum/component/wearertargeting/earprotection, list(SLOT_HEAD)) - -/obj/item/clothing/ears/headphones - name = "headphones" - desc = "" - icon = 'icons/obj/clothing/accessories.dmi' - icon_state = "headphones" - item_state = "headphones" - slot_flags = ITEM_SLOT_HEAD | ITEM_SLOT_HEAD | ITEM_SLOT_NECK //Fluff item, put it whereever you want! - actions_types = list(/datum/action/item_action/toggle_headphones) - var/headphones_on = FALSE - custom_price = 20 - -/obj/item/clothing/ears/headphones/Initialize() - . = ..() - update_icon() - -/obj/item/clothing/ears/headphones/update_icon() - icon_state = "[initial(icon_state)]_[headphones_on? "on" : "off"]" - item_state = "[initial(item_state)]_[headphones_on? "on" : "off"]" - -/obj/item/clothing/ears/headphones/proc/toggle(owner) - headphones_on = !headphones_on - update_icon() - var/mob/living/carbon/human/H = owner - if(istype(H)) - H.update_inv_ears() - H.update_inv_neck() - H.update_inv_head() - to_chat(owner, "I turn the music [headphones_on? "on. Untz Untz Untz!" : "off."]") diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm index 61747da8fc..5a6f44f4d9 100644 --- a/code/modules/clothing/glasses/_glasses.dm +++ b/code/modules/clothing/glasses/_glasses.dm @@ -8,7 +8,6 @@ strip_delay = 20 equip_delay_other = 25 resistance_flags = NONE - custom_materials = list(/datum/material/glass = 250) var/vision_flags = 0 var/darkness_view = 2//Base human is 2 var/invis_view = SEE_INVISIBLE_LIVING //admin only for now @@ -41,235 +40,6 @@ if(. && user) user.update_sight() -//called when thermal glasses are emped. -/obj/item/clothing/glasses/proc/thermal_overload() - if(ishuman(src.loc)) - var/mob/living/carbon/human/H = src.loc - var/obj/item/organ/eyes/eyes = H.getorganslot(ORGAN_SLOT_EYES) - if(!(HAS_TRAIT(H, TRAIT_BLIND))) - if(H.glasses == src) - to_chat(H, "[src] overloads and blinds you!") - H.flash_act(visual = 1) - H.blind_eyes(3) - H.blur_eyes(5) - eyes.applyOrganDamage(5) - -/obj/item/clothing/glasses/meson - name = "optical meson scanner" - desc = "" - icon_state = "meson" - item_state = "meson" - darkness_view = 2 - vision_flags = SEE_TURFS - lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE - glass_colour_type = /datum/client_colour/glass_colour/lightgreen - -/obj/item/clothing/glasses/meson/suicide_act(mob/living/carbon/user) - user.visible_message("[user] is putting \the [src] to [user.p_their()] eyes and overloading the brightness! It looks like [user.p_theyre()] trying to commit suicide!") - return BRUTELOSS - -/obj/item/clothing/glasses/meson/night - name = "night vision meson scanner" - desc = "" - icon_state = "nvgmeson" - item_state = "nvgmeson" - darkness_view = 8 - flash_protect = FLASH_PROTECTION_SENSITIVE - lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE - glass_colour_type = /datum/client_colour/glass_colour/green - -/obj/item/clothing/glasses/meson/gar - name = "gar mesons" - icon_state = "garm" - item_state = "garm" - desc = "" - force = 10 - throwforce = 10 - throw_speed = 4 - attack_verb = list("sliced") - hitsound = 'sound/blank.ogg' - sharpness = IS_SHARP - -/obj/item/clothing/glasses/science - name = "science goggles" - desc = "" - icon_state = "purple" - item_state = "glasses" - clothing_flags = SCAN_REAGENTS //You can see reagents while wearing science goggles - actions_types = list(/datum/action/item_action/toggle_research_scanner) - glass_colour_type = /datum/client_colour/glass_colour/purple - resistance_flags = ACID_PROOF - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 100) - -/obj/item/clothing/glasses/science/item_action_slot_check(slot) - if(slot == SLOT_GLASSES) - return 1 - -/obj/item/clothing/glasses/night - name = "night vision goggles" - desc = "" - icon_state = "night" - item_state = "glasses" - darkness_view = 8 - flash_protect = FLASH_PROTECTION_SENSITIVE - lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE - glass_colour_type = /datum/client_colour/glass_colour/green - -/obj/item/clothing/glasses/science/suicide_act(mob/living/carbon/user) - user.visible_message("[user] is tightening \the [src]'s straps around [user.p_their()] neck! It looks like [user.p_theyre()] trying to commit suicide!") - return OXYLOSS - -/obj/item/clothing/glasses/eyepatch - name = "eyepatch" - desc = "" - icon_state = "eyepatch" - item_state = "eyepatch" - -/obj/item/clothing/glasses/monocle - name = "monocle" - desc = "" - icon_state = "monocle" - item_state = "headset" // lol - -/obj/item/clothing/glasses/material - name = "optical material scanner" - desc = "" - icon_state = "material" - item_state = "glasses" - vision_flags = SEE_OBJS - glass_colour_type = /datum/client_colour/glass_colour/lightblue - -/obj/item/clothing/glasses/material/mining - name = "optical material scanner" - desc = "" - icon_state = "material" - item_state = "glasses" - darkness_view = 0 - -/obj/item/clothing/glasses/material/mining/gar - name = "gar material scanner" - icon_state = "garm" - item_state = "garm" - desc = "" - force = 10 - throwforce = 20 - throw_speed = 4 - attack_verb = list("sliced") - hitsound = 'sound/blank.ogg' - sharpness = IS_SHARP - glass_colour_type = /datum/client_colour/glass_colour/lightgreen - -/obj/item/clothing/glasses/regular - name = "prescription glasses" - desc = "" - icon_state = "glasses" - item_state = "glasses" - vision_correction = 1 //corrects nearsightedness - -/obj/item/clothing/glasses/regular/jamjar - name = "jamjar glasses" - desc = "" - icon_state = "jamjar_glasses" - item_state = "jamjar_glasses" - -/obj/item/clothing/glasses/regular/hipster - name = "prescription glasses" - desc = "" - icon_state = "hipster_glasses" - item_state = "hipster_glasses" - -/obj/item/clothing/glasses/regular/circle - name = "circle glasses" - desc = "" - icon_state = "circle_glasses" - item_state = "circle_glasses" - -//Here lies green glasses, so ugly they died. RIP - -/obj/item/clothing/glasses/sunglasses - name = "sunglasses" - desc = "" - icon_state = "sun" - item_state = "sunglasses" - darkness_view = 1 - flash_protect = FLASH_PROTECTION_FLASH - tint = 1 - glass_colour_type = /datum/client_colour/glass_colour/gray - dog_fashion = /datum/dog_fashion/head - -/obj/item/clothing/glasses/sunglasses/reagent - name = "beer goggles" - desc = "" - clothing_flags = SCAN_REAGENTS - -/obj/item/clothing/glasses/sunglasses/reagent/equipped(mob/user, slot) - . = ..() - if(ishuman(user) && slot == SLOT_GLASSES) - ADD_TRAIT(user, TRAIT_BOOZE_SLIDER, CLOTHING_TRAIT) - -/obj/item/clothing/glasses/sunglasses/reagent/dropped(mob/user) - . = ..() - REMOVE_TRAIT(user, TRAIT_BOOZE_SLIDER, CLOTHING_TRAIT) - -/obj/item/clothing/glasses/sunglasses/garb - name = "black gar glasses" - desc = "" - icon_state = "garb" - item_state = "garb" - force = 10 - throwforce = 10 - throw_speed = 4 - attack_verb = list("sliced") - hitsound = 'sound/blank.ogg' - sharpness = IS_SHARP - -/obj/item/clothing/glasses/sunglasses/garb/supergarb - name = "black giga gar glasses" - desc = "" - icon_state = "supergarb" - item_state = "garb" - force = 12 - throwforce = 12 - -/obj/item/clothing/glasses/sunglasses/gar - name = "gar glasses" - desc = "" - icon_state = "gar" - item_state = "gar" - force = 10 - throwforce = 10 - throw_speed = 4 - attack_verb = list("sliced") - hitsound = 'sound/blank.ogg' - sharpness = IS_SHARP - glass_colour_type = /datum/client_colour/glass_colour/orange - -/obj/item/clothing/glasses/sunglasses/gar/supergar - name = "giga gar glasses" - desc = "" - icon_state = "supergar" - item_state = "gar" - force = 12 - throwforce = 12 - glass_colour_type = /datum/client_colour/glass_colour/red - -/obj/item/clothing/glasses/welding - name = "welding goggles" - desc = "" - icon_state = "welding-g" - item_state = "welding-g" - actions_types = list(/datum/action/item_action/toggle) - flash_protect = FLASH_PROTECTION_WELDER - custom_materials = list(/datum/material/iron = 250) - tint = 2 - visor_vars_to_toggle = VISOR_FLASHPROTECT | VISOR_TINT - flags_cover = GLASSESCOVERSEYES - glass_colour_type = /datum/client_colour/glass_colour/gray - -/obj/item/clothing/glasses/welding/attack_self(mob/user) - weldingvisortoggle(user) - - /obj/item/clothing/glasses/blindfold name = "blindfold" desc = "" @@ -316,122 +86,6 @@ M.color = "#[H.eye_color]" . += M -/obj/item/clothing/glasses/sunglasses/big - desc = "" - icon_state = "bigsunglasses" - item_state = "bigsunglasses" - -/obj/item/clothing/glasses/thermal - name = "optical thermal scanner" - desc = "" - icon_state = "thermal" - item_state = "glasses" - vision_flags = SEE_MOBS - lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE - flash_protect = FLASH_PROTECTION_SENSITIVE - glass_colour_type = /datum/client_colour/glass_colour/red - -/obj/item/clothing/glasses/thermal/emp_act(severity) - . = ..() - if(. & EMP_PROTECT_SELF) - return - thermal_overload() - -/obj/item/clothing/glasses/thermal/xray - name = "syndicate xray goggles" - desc = "" - vision_flags = SEE_TURFS|SEE_MOBS|SEE_OBJS - -/obj/item/clothing/glasses/thermal/monocle - name = "thermoncle" - desc = "" - icon_state = "thermoncle" - flags_1 = null //doesn't protect eyes because it's a monocle, duh - -/obj/item/clothing/glasses/thermal/monocle/examine(mob/user) //Different examiners see a different description! - if(user.gender == MALE) - desc = replacetext(desc, "person", "man") - else if(user.gender == FEMALE) - desc = replacetext(desc, "person", "woman") - . = ..() - desc = initial(desc) - -/obj/item/clothing/glasses/thermal/eyepatch - name = "optical thermal eyepatch" - desc = "" - icon_state = "eyepatch" - item_state = "eyepatch" - -/obj/item/clothing/glasses/cold - name = "cold goggles" - desc = "" - icon_state = "cold" - item_state = "cold" - -/obj/item/clothing/glasses/heat - name = "heat goggles" - desc = "" - icon_state = "heat" - item_state = "heat" - -/obj/item/clothing/glasses/orange - name = "orange glasses" - desc = "" - icon_state = "orangeglasses" - item_state = "orangeglasses" - glass_colour_type = /datum/client_colour/glass_colour/lightorange - -/obj/item/clothing/glasses/red - name = "red glasses" - desc = "" - icon_state = "redglasses" - item_state = "redglasses" - glass_colour_type = /datum/client_colour/glass_colour/red - -/obj/item/clothing/glasses/godeye - name = "eye of god" - desc = "" - icon_state = "godeye" - item_state = "godeye" - vision_flags = SEE_TURFS|SEE_MOBS|SEE_OBJS - darkness_view = 8 - lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE - resistance_flags = LAVA_PROOF | FIRE_PROOF - clothing_flags = SCAN_REAGENTS - -/obj/item/clothing/glasses/godeye/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, EYE_OF_GOD_TRAIT) - -/obj/item/clothing/glasses/godeye/attackby(obj/item/W as obj, mob/user as mob, params) - if(istype(W, src) && W != src && W.loc == user) - if(W.icon_state == "godeye") - W.icon_state = "doublegodeye" - W.item_state = "doublegodeye" - W.desc = "" - if(iscarbon(user)) - var/mob/living/carbon/C = user - C.update_inv_wear_mask() - else - to_chat(user, "The eye winks at you and vanishes into the abyss, you feel really unlucky.") - qdel(src) - ..() - -/obj/item/clothing/glasses/AltClick(mob/user) - if(glass_colour_type && ishuman(user)) - var/mob/living/carbon/human/H = user - if(H.client) - if(H.client.prefs) - if(src == H.glasses) - H.client.prefs.uses_glasses_colour = !H.client.prefs.uses_glasses_colour - if(H.client.prefs.uses_glasses_colour) - to_chat(H, "I will now see glasses colors.") - else - to_chat(H, "I will no longer see glasses colors.") - H.update_glasses_color(src, 1) - else - return ..() - /obj/item/clothing/glasses/proc/change_glass_color(mob/living/carbon/human/H, datum/client_colour/glass_colour/new_color_type) var/old_colour_type = glass_colour_type if(!new_color_type || ispath(new_color_type)) //the new glass colour type must be null or a path. diff --git a/code/modules/clothing/glasses/engine_goggles.dm b/code/modules/clothing/glasses/engine_goggles.dm deleted file mode 100644 index c2a90e27fa..0000000000 --- a/code/modules/clothing/glasses/engine_goggles.dm +++ /dev/null @@ -1,150 +0,0 @@ -//Engineering Mesons - -#define MODE_NONE "" -#define MODE_MESON "meson" -#define MODE_TRAY "t-ray" -#define MODE_RAD "radiation" -#define MODE_SHUTTLE "shuttle" - -/obj/item/clothing/glasses/meson/engine - name = "engineering scanner goggles" - desc = "" - icon_state = "trayson-meson" - item_state = "trayson-meson" - actions_types = list(/datum/action/item_action/toggle_mode) - - vision_flags = NONE - darkness_view = 2 - invis_view = SEE_INVISIBLE_LIVING - - var/list/modes = list(MODE_NONE = MODE_MESON, MODE_MESON = MODE_TRAY, MODE_TRAY = MODE_RAD, MODE_RAD = MODE_NONE) - var/mode = MODE_NONE - var/range = 1 - -/obj/item/clothing/glasses/meson/engine/Initialize() - . = ..() - START_PROCESSING(SSobj, src) - update_icon() - -/obj/item/clothing/glasses/meson/engine/Destroy() - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/item/clothing/glasses/meson/engine/proc/toggle_mode(mob/user, voluntary) - mode = modes[mode] - to_chat(user, "[voluntary ? "You turn the goggles":"The goggles turn"] [mode ? "to [mode] mode":"off"][voluntary ? ".":"!"]") - - switch(mode) - if(MODE_MESON) - vision_flags = SEE_TURFS - darkness_view = 1 - lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE - - if(MODE_TRAY) //undoes the last mode, meson - vision_flags = NONE - darkness_view = 2 - lighting_alpha = null - - if(ishuman(user)) - var/mob/living/carbon/human/H = user - if(H.glasses == src) - H.update_sight() - - update_icon() - for(var/X in actions) - var/datum/action/A = X - A.UpdateButtonIcon() - -/obj/item/clothing/glasses/meson/engine/attack_self(mob/user) - toggle_mode(user, TRUE) - -/obj/item/clothing/glasses/meson/engine/process() - if(!ishuman(loc)) - return - var/mob/living/carbon/human/user = loc - if(user.glasses != src || !user.client) - return - switch(mode) - if(MODE_RAD) - show_rads() - if(MODE_SHUTTLE) - show_shuttle() - -/obj/item/clothing/glasses/meson/engine/proc/show_rads() - var/mob/living/carbon/human/user = loc - var/list/rad_places = list() - for(var/datum/component/radioactive/thing in SSradiation.processing) - var/atom/owner = thing.parent - var/turf/place = get_turf(owner) - if(rad_places[place]) - rad_places[place] += thing.strength - else - rad_places[place] = thing.strength - - for(var/i in rad_places) - var/turf/place = i - if(get_dist(user, place) >= range*2) //Rads are easier to see than wires under the floor - continue - var/strength = round(rad_places[i] / 1000, 0.1) - var/image/pic = new(loc = place) - var/mutable_appearance/MA = new() - MA.alpha = 180 - MA.maptext = "[strength]k" - MA.color = "#64C864" - MA.layer = FLY_LAYER - pic.appearance = MA - flick_overlay(pic, list(user.client), 8) - -/obj/item/clothing/glasses/meson/engine/proc/show_shuttle() - var/mob/living/carbon/human/user = loc - var/obj/docking_port/mobile/port = SSshuttle.get_containing_shuttle(user) - if(!port) - return - var/list/shuttle_areas = port.shuttle_areas - for(var/r in shuttle_areas) - var/area/region = r - for(var/turf/place in region.contents) - if(get_dist(user, place) > 7) - continue - var/image/pic - if(isshuttleturf(place)) - pic = new('icons/turf/overlays.dmi', place, "greenOverlay", AREA_LAYER) - else - pic = new('icons/turf/overlays.dmi', place, "redOverlay", AREA_LAYER) - flick_overlay(pic, list(user.client), 8) - -/obj/item/clothing/glasses/meson/engine/update_icon() - icon_state = "trayson-[mode]" - update_mob() - -/obj/item/clothing/glasses/meson/engine/proc/update_mob() - item_state = icon_state - if(isliving(loc)) - var/mob/living/user = loc - if(user.get_item_by_slot(SLOT_GLASSES) == src) - user.update_inv_glasses() - else - user.update_inv_hands() - -/obj/item/clothing/glasses/meson/engine/tray //atmos techs have lived far too long without tray goggles while those damned engineers get their dual-purpose gogles all to themselves - name = "optical t-ray scanner" - icon_state = "trayson-t-ray" - item_state = "trayson-t-ray" - desc = "" - range = 2 - - modes = list(MODE_NONE = MODE_TRAY, MODE_TRAY = MODE_NONE) - -/obj/item/clothing/glasses/meson/engine/shuttle - name = "shuttle region scanner" - icon_state = "trayson-shuttle" - item_state = "trayson-shuttle" - desc = "" - - modes = list(MODE_NONE = MODE_SHUTTLE, MODE_SHUTTLE = MODE_NONE) - -#undef MODE_NONE -#undef MODE_MESON -#undef MODE_TRAY -#undef MODE_RAD -#undef MODE_SHUTTLE diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm deleted file mode 100644 index 26c549f9c3..0000000000 --- a/code/modules/clothing/glasses/hud.dm +++ /dev/null @@ -1,201 +0,0 @@ -/obj/item/clothing/glasses/hud - name = "HUD" - desc = "" - flags_1 = null //doesn't protect eyes because it's a monocle, duh - var/hud_type = null - ///Used for topic calls. Just because you have a HUD display doesn't mean you should be able to interact with stuff. - var/hud_trait = null - - -/obj/item/clothing/glasses/hud/equipped(mob/living/carbon/human/user, slot) - ..() - if(slot != SLOT_GLASSES) - return - if(hud_type) - var/datum/atom_hud/H = GLOB.huds[hud_type] - H.add_hud_to(user) - if(hud_trait) - ADD_TRAIT(user, hud_trait, GLASSES_TRAIT) - -/obj/item/clothing/glasses/hud/dropped(mob/living/carbon/human/user) - ..() - if(!istype(user) || user.glasses != src) - return - if(hud_type) - var/datum/atom_hud/H = GLOB.huds[hud_type] - H.remove_hud_from(user) - if(hud_trait) - REMOVE_TRAIT(user, hud_trait, GLASSES_TRAIT) - -/obj/item/clothing/glasses/hud/emp_act(severity) - . = ..() - if(obj_flags & EMAGGED || . & EMP_PROTECT_SELF) - return - obj_flags |= EMAGGED - desc = "" - -/obj/item/clothing/glasses/hud/emag_act(mob/user) - if(obj_flags & EMAGGED) - return - obj_flags |= EMAGGED - to_chat(user, "PZZTTPFFFT") - desc = "" - -/obj/item/clothing/glasses/hud/health - name = "health scanner HUD" - desc = "" - icon_state = "healthhud" - hud_type = DATA_HUD_MEDICAL_ADVANCED - hud_trait = TRAIT_MEDICAL_HUD - glass_colour_type = /datum/client_colour/glass_colour/lightblue - -/obj/item/clothing/glasses/hud/health/night - name = "night vision health scanner HUD" - desc = "" - icon_state = "healthhudnight" - item_state = "glasses" - darkness_view = 8 - flash_protect = FLASH_PROTECTION_SENSITIVE - lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE - glass_colour_type = /datum/client_colour/glass_colour/green - -/obj/item/clothing/glasses/hud/health/sunglasses - name = "medical HUDSunglasses" - desc = "" - icon_state = "sunhudmed" - darkness_view = 1 - flash_protect = FLASH_PROTECTION_FLASH - tint = 1 - glass_colour_type = /datum/client_colour/glass_colour/blue - -/obj/item/clothing/glasses/hud/diagnostic - name = "diagnostic HUD" - desc = "" - icon_state = "diagnostichud" - hud_type = DATA_HUD_DIAGNOSTIC_BASIC - glass_colour_type = /datum/client_colour/glass_colour/lightorange - -/obj/item/clothing/glasses/hud/diagnostic/night - name = "night vision diagnostic HUD" - desc = "" - icon_state = "diagnostichudnight" - item_state = "glasses" - darkness_view = 8 - flash_protect = FLASH_PROTECTION_SENSITIVE - lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE - glass_colour_type = /datum/client_colour/glass_colour/green - -/obj/item/clothing/glasses/hud/diagnostic/sunglasses - name = "diagnostic sunglasses" - desc = "" - icon_state = "sunhuddiag" - item_state = "glasses" - flash_protect = FLASH_PROTECTION_FLASH - tint = 1 - -/obj/item/clothing/glasses/hud/security - name = "security HUD" - desc = "" - icon_state = "securityhud" - hud_type = DATA_HUD_SECURITY_ADVANCED - hud_trait = TRAIT_SECURITY_HUD - glass_colour_type = /datum/client_colour/glass_colour/red - -/obj/item/clothing/glasses/hud/security/sunglasses/eyepatch - name = "eyepatch HUD" - desc = "" - icon_state = "hudpatch" - -/obj/item/clothing/glasses/hud/security/sunglasses - name = "security HUDSunglasses" - desc = "" - icon_state = "sunhudsec" - darkness_view = 1 - flash_protect = FLASH_PROTECTION_FLASH - tint = 1 - glass_colour_type = /datum/client_colour/glass_colour/darkred - -/obj/item/clothing/glasses/hud/security/night - name = "night vision security HUD" - desc = "" - icon_state = "securityhudnight" - darkness_view = 8 - flash_protect = FLASH_PROTECTION_SENSITIVE - lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE - glass_colour_type = /datum/client_colour/glass_colour/green - -/obj/item/clothing/glasses/hud/security/sunglasses/gars - name = "\improper HUD gar glasses" - desc = "" - icon_state = "gars" - item_state = "garb" - force = 10 - throwforce = 10 - throw_speed = 4 - attack_verb = list("sliced") - hitsound = 'sound/blank.ogg' - sharpness = IS_SHARP - -/obj/item/clothing/glasses/hud/security/sunglasses/gars/supergars - name = "giga HUD gar glasses" - desc = "" - icon_state = "supergars" - item_state = "garb" - force = 12 - throwforce = 12 - -/obj/item/clothing/glasses/hud/toggle - name = "Toggle HUD" - desc = "" - actions_types = list(/datum/action/item_action/switch_hud) - -/obj/item/clothing/glasses/hud/toggle/attack_self(mob/user) - if(!ishuman(user)) - return - var/mob/living/carbon/human/wearer = user - if (wearer.glasses != src) - return - - if (hud_type) - var/datum/atom_hud/H = GLOB.huds[hud_type] - H.remove_hud_from(user) - - if (hud_type == DATA_HUD_MEDICAL_ADVANCED) - hud_type = null - else if (hud_type == DATA_HUD_SECURITY_ADVANCED) - hud_type = DATA_HUD_MEDICAL_ADVANCED - else - hud_type = DATA_HUD_SECURITY_ADVANCED - - if (hud_type) - var/datum/atom_hud/H = GLOB.huds[hud_type] - H.add_hud_to(user) - -/obj/item/clothing/glasses/hud/toggle/thermal - name = "thermal HUD scanner" - desc = "" - icon_state = "thermal" - hud_type = DATA_HUD_SECURITY_ADVANCED - vision_flags = SEE_MOBS - lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE - glass_colour_type = /datum/client_colour/glass_colour/red - -/obj/item/clothing/glasses/hud/toggle/thermal/attack_self(mob/user) - ..() - switch (hud_type) - if (DATA_HUD_MEDICAL_ADVANCED) - icon_state = "meson" - change_glass_color(user, /datum/client_colour/glass_colour/green) - if (DATA_HUD_SECURITY_ADVANCED) - icon_state = "thermal" - change_glass_color(user, /datum/client_colour/glass_colour/red) - else - icon_state = "purple" - change_glass_color(user, /datum/client_colour/glass_colour/purple) - user.update_inv_glasses() - -/obj/item/clothing/glasses/hud/toggle/thermal/emp_act(severity) - . = ..() - if(. & EMP_PROTECT_SELF) - return - thermal_overload() diff --git a/code/modules/clothing/gloves/boxing.dm b/code/modules/clothing/gloves/boxing.dm deleted file mode 100644 index 48b2050f9c..0000000000 --- a/code/modules/clothing/gloves/boxing.dm +++ /dev/null @@ -1,19 +0,0 @@ -/obj/item/clothing/gloves/boxing - name = "boxing gloves" - desc = "" - icon_state = "boxing" - item_state = "boxing" - equip_delay_other = 60 - species_exception = list(/datum/species/golem) // now you too can be a golem boxing champion - -/obj/item/clothing/gloves/boxing/green - icon_state = "boxinggreen" - item_state = "boxinggreen" - -/obj/item/clothing/gloves/boxing/blue - icon_state = "boxingblue" - item_state = "boxingblue" - -/obj/item/clothing/gloves/boxing/yellow - icon_state = "boxingyellow" - item_state = "boxingyellow" diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm deleted file mode 100644 index fd074395d9..0000000000 --- a/code/modules/clothing/gloves/color.dm +++ /dev/null @@ -1,180 +0,0 @@ -/obj/item/clothing/gloves/color - dying_key = DYE_REGISTRY_GLOVES - -/obj/item/clothing/gloves/color/yellow - desc = "" - name = "insulated gloves" - icon_state = "yellow" - item_state = "ygloves" - siemens_coefficient = 0 - permeability_coefficient = 0.05 - resistance_flags = NONE - -/obj/item/clothing/gloves/color/fyellow //Cheap Chinese Crap - desc = "" - name = "budget insulated gloves" - icon_state = "yellow" - item_state = "ygloves" - siemens_coefficient = 1 //Set to a default of 1, gets overridden in Initialize() - permeability_coefficient = 0.05 - resistance_flags = NONE - -/obj/item/clothing/gloves/color/fyellow/Initialize() - . = ..() - siemens_coefficient = pick(0,0.5,0.5,0.5,0.5,0.75,1.5) - -/obj/item/clothing/gloves/color/fyellow/old - desc = "" - name = "worn out insulated gloves" - -/obj/item/clothing/gloves/color/fyellow/old/Initialize() - . = ..() - siemens_coefficient = pick(0,0,0,0.5,0.5,0.5,0.75) - -/obj/item/clothing/gloves/color/black - desc = "" - name = "black gloves" - icon_state = "black" - item_state = "blackgloves" - cold_protection = HANDS - min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT - heat_protection = HANDS - max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT - resistance_flags = NONE - var/can_be_cut = TRUE - -/obj/item/clothing/gloves/color/black/attackby(obj/item/I, mob/user, params) - if(I.tool_behaviour == TOOL_WIRECUTTER) - if(can_be_cut && icon_state == initial(icon_state))//only if not dyed - to_chat(user, "I snip the fingertips off of [src].") - I.play_tool_sound(src) - new /obj/item/clothing/gloves/fingerless(drop_location()) - qdel(src) - ..() - -/obj/item/clothing/gloves/color/orange - name = "orange gloves" - desc = "" - icon_state = "orange" - item_state = "orangegloves" - -/obj/item/clothing/gloves/color/red - name = "red gloves" - desc = "" - icon_state = "red" - item_state = "redgloves" - - -/obj/item/clothing/gloves/color/red/insulated - name = "insulated gloves" - desc = "" - siemens_coefficient = 0 - permeability_coefficient = 0.05 - resistance_flags = NONE - -/obj/item/clothing/gloves/color/rainbow - name = "rainbow gloves" - desc = "" - icon_state = "rainbow" - item_state = "rainbowgloves" - -/obj/item/clothing/gloves/color/blue - name = "blue gloves" - desc = "" - icon_state = "blue" - item_state = "bluegloves" - -/obj/item/clothing/gloves/color/purple - name = "purple gloves" - desc = "" - icon_state = "purple" - item_state = "purplegloves" - -/obj/item/clothing/gloves/color/green - name = "green gloves" - desc = "" - icon_state = "green" - item_state = "greengloves" - -/obj/item/clothing/gloves/color/grey - name = "grey gloves" - desc = "" - icon_state = "gray" - item_state = "graygloves" - -/obj/item/clothing/gloves/color/light_brown - name = "light brown gloves" - desc = "" - icon_state = "lightbrown" - item_state = "lightbrowngloves" - -/obj/item/clothing/gloves/color/brown - name = "brown gloves" - desc = "" - icon_state = "brown" - item_state = "browngloves" - -/obj/item/clothing/gloves/color/captain - desc = "" - name = "captain's gloves" - icon_state = "captain" - item_state = "egloves" - siemens_coefficient = 0 - permeability_coefficient = 0.05 - cold_protection = HANDS - min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT - heat_protection = HANDS - max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT - strip_delay = 60 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 50) - -/obj/item/clothing/gloves/color/latex - name = "latex gloves" - desc = "" - icon_state = "latex" - item_state = "latex" - siemens_coefficient = 0.3 - permeability_coefficient = 0.01 - transfer_prints = TRUE - resistance_flags = NONE - var/carrytrait = TRAIT_QUICK_CARRY - -/obj/item/clothing/gloves/color/latex/equipped(mob/user, slot) - ..() - if(slot == SLOT_GLOVES) - ADD_TRAIT(user, carrytrait, CLOTHING_TRAIT) - -/obj/item/clothing/gloves/color/latex/dropped(mob/user) - ..() - REMOVE_TRAIT(user, carrytrait, CLOTHING_TRAIT) - -/obj/item/clothing/gloves/color/latex/nitrile - name = "nitrile gloves" - desc = "" - icon_state = "nitrile" - item_state = "nitrilegloves" - transfer_prints = FALSE - carrytrait = TRAIT_QUICKER_CARRY - -/obj/item/clothing/gloves/color/white - name = "white gloves" - desc = "" - icon_state = "white" - item_state = "wgloves" - -/obj/effect/spawner/lootdrop/gloves - name = "random gloves" - desc = "" - icon = 'icons/obj/clothing/gloves.dmi' - icon_state = "random_gloves" - loot = list( - /obj/item/clothing/gloves/color/orange = 1, - /obj/item/clothing/gloves/color/red = 1, - /obj/item/clothing/gloves/color/blue = 1, - /obj/item/clothing/gloves/color/purple = 1, - /obj/item/clothing/gloves/color/green = 1, - /obj/item/clothing/gloves/color/grey = 1, - /obj/item/clothing/gloves/color/light_brown = 1, - /obj/item/clothing/gloves/color/brown = 1, - /obj/item/clothing/gloves/color/white = 1, - /obj/item/clothing/gloves/color/rainbow = 1) diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm deleted file mode 100644 index bc66871d80..0000000000 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ /dev/null @@ -1,67 +0,0 @@ - -/obj/item/clothing/gloves/fingerless - name = "fingerless gloves" - desc = "" - icon_state = "fingerless" - item_state = "fingerless" - transfer_prints = TRUE - strip_delay = 40 - equip_delay_other = 20 - cold_protection = HANDS - min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT - custom_price = 10 - undyeable = TRUE - -/obj/item/clothing/gloves/botanic_leather - name = "botanist's leather gloves" - desc = "" - icon_state = "leather" - item_state = "ggloves" - permeability_coefficient = 0.9 - cold_protection = HANDS - min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT - heat_protection = HANDS - max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT - resistance_flags = NONE - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 30) - -/obj/item/clothing/gloves/combat - name = "combat gloves" - desc = "" - icon_state = "black" - item_state = "blackgloves" - siemens_coefficient = 0 - permeability_coefficient = 0.05 - strip_delay = 80 - cold_protection = HANDS - min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT - heat_protection = HANDS - max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT - resistance_flags = NONE - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 50) - -/obj/item/clothing/gloves/bracer - name = "bone bracers" - desc = "" - icon_state = "bracers" - item_state = "bracers" - transfer_prints = TRUE - strip_delay = 40 - equip_delay_other = 20 - body_parts_covered = ARMS - cold_protection = ARMS - min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT - max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT - resistance_flags = NONE - armor = list("melee" = 15, "bullet" = 25, "laser" = 15, "energy" = 15, "bomb" = 20, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0) - -/obj/item/clothing/gloves/rapid - name = "Gloves of the North Star" - desc = "" - icon_state = "rapid" - item_state = "rapid" - transfer_prints = TRUE - -/obj/item/clothing/gloves/rapid/ComponentInitialize() - . = ..() - AddComponent(/datum/component/wearertargeting/punchcooldown) diff --git a/code/modules/clothing/head/_head.dm b/code/modules/clothing/head/_head.dm index c40f837c27..f60e9e23da 100644 --- a/code/modules/clothing/head/_head.dm +++ b/code/modules/clothing/head/_head.dm @@ -19,57 +19,11 @@ ///Special throw_impact for hats to frisbee hats at people to place them on their heads/attempt to de-hat them. /obj/item/clothing/head/throw_impact(atom/hit_atom, datum/thrownthing/thrownthing) . = ..() - ///if the thrown object's target zone isn't the head -/* if(thrownthing) - if(thrownthing.target_zone != BODY_ZONE_HEAD) - return - ///ignore any hats with the tinfoil counter-measure enabled - if(clothing_flags & ANTI_TINFOIL_MANEUVER) - return - ///if the hat happens to be capable of holding contents and has something in it. mostly to prevent super cheesy stuff like stuffing a mini-bomb in a hat and throwing it - if(LAZYLEN(contents)) - return - if(iscarbon(hit_atom)) - var/mob/living/carbon/H = hit_atom - if(istype(H.head, /obj/item)) - var/obj/item/WH = H.head - ///check if the item has NODROP - if(HAS_TRAIT(WH, TRAIT_NODROP)) - H.visible_message("[src] bounces off [H]'s [WH.name]!", "[src] bounces off your [WH.name], falling to the floor.") - return - ///check if the item is an actual clothing head item, since some non-clothing items can be worn - if(istype(WH, /obj/item/clothing/head)) - var/obj/item/clothing/head/WHH = WH - ///SNUG_FIT hats are immune to being knocked off - if(WHH.clothing_flags & SNUG_FIT) - H.visible_message("[src] bounces off [H]'s [WHH.name]!", "[src] bounces off your [WHH.name], falling to the floor.") - return - ///if the hat manages to knock something off - if(H.dropItemToGround(WH)) - H.visible_message("[src] knocks [WH] off [H]'s head!", "[WH] is suddenly knocked off your head by [src]!") - if(H.equip_to_slot_if_possible(src, SLOT_HEAD, 0, 1, 1)) - H.visible_message("[src] lands neatly on [H]'s head!", "[src] lands perfectly onto your head!") - return - if(iscyborg(hit_atom)) - var/mob/living/silicon/robot/R = hit_atom - ///hats in the borg's blacklist bounce off - if(is_type_in_typecache(src, GLOB.blacklisted_borg_hats)) - R.visible_message("[src] bounces off [R]!", "[src] bounces off you, falling to the floor.") - return - else - R.visible_message("[src] lands neatly on top of [R]!", "[src] lands perfectly on top of you.") - R.place_on_head(src) //hats aren't designed to snugly fit borg heads or w/e so they'll always manage to knock eachother off -*/ /obj/item/clothing/head/worn_overlays(isinhands = FALSE) . = list() -// if(!isinhands) -// if(damaged_clothes) -// . += mutable_appearance('icons/effects/item_damage.dmi', "damagedhelmet") -// if(HAS_BLOOD_DNA(src)) -// . += mutable_appearance('icons/effects/blood.dmi', "helmetblood") /obj/item/clothing/head/update_clothes_damaged_state(damaging = TRUE) ..() diff --git a/code/modules/clothing/head/beanie.dm b/code/modules/clothing/head/beanie.dm deleted file mode 100644 index 488ff7fce5..0000000000 --- a/code/modules/clothing/head/beanie.dm +++ /dev/null @@ -1,90 +0,0 @@ - -//BeanieStation13 Redux - -//Plus a bobble hat, lets be inclusive!! - -/obj/item/clothing/head/beanie //Default is white, this is meant to be seen - name = "white beanie" - desc = "" - icon_state = "beanie" //Default white - custom_price = 10 - -/obj/item/clothing/head/beanie/black - name = "black beanie" - icon_state = "beanie" - color = "#4A4A4B" //Grey but it looks black - -/obj/item/clothing/head/beanie/red - name = "red beanie" - icon_state = "beanie" - color = "#D91414" //Red - -/obj/item/clothing/head/beanie/green - name = "green beanie" - icon_state = "beanie" - color = "#5C9E54" //Green - -/obj/item/clothing/head/beanie/darkblue - name = "dark blue beanie" - icon_state = "beanie" - color = "#1E85BC" //Blue - -/obj/item/clothing/head/beanie/purple - name = "purple beanie" - icon_state = "beanie" - color = "#9557C5" //purple - -/obj/item/clothing/head/beanie/yellow - name = "yellow beanie" - icon_state = "beanie" - color = "#E0C14F" //Yellow - -/obj/item/clothing/head/beanie/orange - name = "orange beanie" - icon_state = "beanie" - color = "#C67A4B" //orange - -/obj/item/clothing/head/beanie/cyan - name = "cyan beanie" - icon_state = "beanie" - color = "#54A3CE" //Cyan (Or close to it) - -//Striped Beanies have unique sprites - -/obj/item/clothing/head/beanie/christmas - name = "christmas beanie" - icon_state = "beaniechristmas" - -/obj/item/clothing/head/beanie/striped - name = "striped beanie" - icon_state = "beaniestriped" - -/obj/item/clothing/head/beanie/stripedred - name = "red striped beanie" - icon_state = "beaniestripedred" - -/obj/item/clothing/head/beanie/stripedblue - name = "blue striped beanie" - icon_state = "beaniestripedblue" - -/obj/item/clothing/head/beanie/stripedgreen - name = "green striped beanie" - icon_state = "beaniestripedgreen" - -/obj/item/clothing/head/beanie/durathread - name = "durathread beanie" - desc = "" - icon_state = "beaniedurathread" - armor = list("melee" = 15, "bullet" = 5, "laser" = 15, "energy" = 5, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 5) - -/obj/item/clothing/head/beanie/waldo - name = "red striped bobble hat" - desc = "" - icon_state = "waldo_hat" - -/obj/item/clothing/head/beanie/rasta - name = "rastacap" - desc = "" - icon_state = "beanierasta" - -//No dog fashion sprites yet :( poor Ian can't be dope like the rest of us yet diff --git a/code/modules/clothing/head/collectable.dm b/code/modules/clothing/head/collectable.dm deleted file mode 100644 index 13770d54a1..0000000000 --- a/code/modules/clothing/head/collectable.dm +++ /dev/null @@ -1,153 +0,0 @@ - -//Hat Station 13 - -/obj/item/clothing/head/collectable - name = "collectable hat" - desc = "" - -/obj/item/clothing/head/collectable/petehat - name = "ultra rare Pete's hat!" - desc = "" - icon_state = "petehat" - -/obj/item/clothing/head/collectable/xenom - name = "collectable xenomorph helmet!" - desc = "" - clothing_flags = SNUG_FIT - icon_state = "xenom" - -/obj/item/clothing/head/collectable/chef - name = "collectable chef's hat" - desc = "" - icon_state = "chef" - item_state = "chef" - dynamic_hair_suffix = "" - - dog_fashion = /datum/dog_fashion/head/chef - -/obj/item/clothing/head/collectable/paper - name = "collectable paper hat" - desc = "" - icon_state = "paper" - - dog_fashion = /datum/dog_fashion/head - -/obj/item/clothing/head/collectable/tophat - name = "collectable top hat" - desc = "" - icon_state = "tophat" - item_state = "that" - -/obj/item/clothing/head/collectable/captain - name = "collectable captain's hat" - desc = "" - icon_state = "captain" - item_state = "caphat" - - dog_fashion = /datum/dog_fashion/head/captain - -/obj/item/clothing/head/collectable/police - name = "collectable police officer's hat" - desc = "" - icon_state = "policehelm" - dynamic_hair_suffix = "" - - dog_fashion = /datum/dog_fashion/head/warden - -/obj/item/clothing/head/collectable/beret - name = "collectable beret" - desc = "" - icon_state = "beret" - - dog_fashion = /datum/dog_fashion/head/beret - -/obj/item/clothing/head/collectable/welding - name = "collectable welding helmet" - desc = "" - icon_state = "welding" - item_state = "welding" - clothing_flags = SNUG_FIT - -/obj/item/clothing/head/collectable/slime - name = "collectable slime hat" - desc = "" - icon_state = "headslime" - item_state = "headslime" - clothing_flags = SNUG_FIT - dynamic_hair_suffix = "" - -/obj/item/clothing/head/collectable/flatcap - name = "collectable flat cap" - desc = "" - icon_state = "flat_cap" - item_state = "detective" - -/obj/item/clothing/head/collectable/pirate - name = "collectable pirate hat" - desc = "" - icon_state = "pirate" - item_state = "pirate" - - dog_fashion = /datum/dog_fashion/head/pirate - -/obj/item/clothing/head/collectable/kitty - name = "collectable kitty ears" - desc = "" - icon_state = "kitty" - item_state = "kitty" - dynamic_hair_suffix = "" - - dog_fashion = /datum/dog_fashion/head/kitty - -/obj/item/clothing/head/collectable/rabbitears - name = "collectable rabbit ears" - desc = "" - icon_state = "bunny" - item_state = "bunny" - dynamic_hair_suffix = "" - - dog_fashion = /datum/dog_fashion/head/rabbit - -/obj/item/clothing/head/collectable/wizard - name = "collectable wizard's hat" - desc = "" - icon_state = "wizard" - - dog_fashion = /datum/dog_fashion/head/blue_wizard - -/obj/item/clothing/head/collectable/hardhat - name = "collectable hard hat" - desc = "" - clothing_flags = SNUG_FIT - icon_state = "hardhat0_yellow" - item_state = "hardhat0_yellow" - - dog_fashion = /datum/dog_fashion/head - -/obj/item/clothing/head/collectable/HoS - name = "collectable HoS hat" - desc = "" - icon_state = "hoscap" - dynamic_hair_suffix = "" - -/obj/item/clothing/head/collectable/HoP - name = "collectable HoP hat" - desc = "" - icon_state = "hopcap" - dog_fashion = /datum/dog_fashion/head/hop - -/obj/item/clothing/head/collectable/thunderdome - name = "collectable Thunderdome helmet" - desc = "" - icon_state = "thunderdome" - item_state = "thunderdome" - clothing_flags = SNUG_FIT - flags_inv = HIDEHAIR - -/obj/item/clothing/head/collectable/swat - name = "collectable SWAT helmet" - desc = "" //Reference to the actual description - icon_state = "swat" - item_state = "swat" - clothing_flags = SNUG_FIT - flags_inv = HIDEHAIR diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm deleted file mode 100644 index f4f2c007c6..0000000000 --- a/code/modules/clothing/head/hardhat.dm +++ /dev/null @@ -1,158 +0,0 @@ -/obj/item/clothing/head/hardhat - name = "hard hat" - desc = "" - icon_state = "hardhat0_yellow" - item_state = "hardhat0_yellow" - var/brightness_on = 4 //luminosity when on - var/on = FALSE - var/hat_type = "yellow" //Determines used sprites: hardhat[on]_[hat_type] and hardhat[on]_[hat_type]2 (lying down sprite) - armor = list("melee" = 15, "bullet" = 5, "laser" = 20, "energy" = 10, "bomb" = 20, "bio" = 10, "rad" = 20, "fire" = 100, "acid" = 50) - flags_inv = 0 - actions_types = list(/datum/action/item_action/toggle_helmet_light) - clothing_flags = SNUG_FIT - resistance_flags = FIRE_PROOF - dynamic_hair_suffix = "+generic" - - dog_fashion = /datum/dog_fashion/head - -/obj/item/clothing/head/hardhat/attack_self(mob/living/user) - toggle_helmet_light(user) - -/obj/item/clothing/head/hardhat/proc/toggle_helmet_light(mob/living/user) - on = !on - if(on) - turn_on(user) - else - turn_off(user) - update_icon() - -/obj/item/clothing/head/hardhat/update_icon() - icon_state = "hardhat[on]_[hat_type]" - item_state = "hardhat[on]_[hat_type]" - if(ishuman(loc)) - var/mob/living/carbon/human/H = loc - H.update_inv_head() - for(var/X in actions) - var/datum/action/A = X - A.UpdateButtonIcon(force = TRUE) - ..() - -/obj/item/clothing/head/hardhat/proc/turn_on(mob/user) - set_light(brightness_on) - -/obj/item/clothing/head/hardhat/proc/turn_off(mob/user) - set_light(0) - -/obj/item/clothing/head/hardhat/orange - icon_state = "hardhat0_orange" - item_state = "hardhat0_orange" - hat_type = "orange" - dog_fashion = null - -/obj/item/clothing/head/hardhat/red - icon_state = "hardhat0_red" - item_state = "hardhat0_red" - hat_type = "red" - dog_fashion = null - name = "firefighter helmet" - clothing_flags = STOPSPRESSUREDAMAGE - heat_protection = HEAD - max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT - cold_protection = HEAD - min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT - -/obj/item/clothing/head/hardhat/white - icon_state = "hardhat0_white" - item_state = "hardhat0_white" - hat_type = "white" - clothing_flags = STOPSPRESSUREDAMAGE - heat_protection = HEAD - max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT - cold_protection = HEAD - min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT - dog_fashion = /datum/dog_fashion/head - -/obj/item/clothing/head/hardhat/dblue - icon_state = "hardhat0_dblue" - item_state = "hardhat0_dblue" - hat_type = "dblue" - dog_fashion = null - -/obj/item/clothing/head/hardhat/atmos - icon_state = "hardhat0_atmos" - item_state = "hardhat0_atmos" - hat_type = "atmos" - dog_fashion = null - name = "atmospheric technician's firefighting helmet" - desc = "" - clothing_flags = STOPSPRESSUREDAMAGE | THICKMATERIAL | BLOCK_GAS_SMOKE_EFFECT - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR - heat_protection = HEAD - max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT - cold_protection = HEAD - min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT - -/obj/item/clothing/head/hardhat/weldhat - name = "welding hard hat" - desc = "" - brightness_on = 3 //Needs a little bit of tradeoff - dog_fashion = null - actions_types = list(/datum/action/item_action/toggle_helmet_light, /datum/action/item_action/toggle_welding_screen) - flash_protect = FLASH_PROTECTION_WELDER - tint = 2 - flags_inv = HIDEEYES | HIDEFACE - flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH - visor_vars_to_toggle = VISOR_FLASHPROTECT | VISOR_TINT - visor_flags_inv = HIDEEYES | HIDEFACE - visor_flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF - -/obj/item/clothing/head/hardhat/weldhat/Initialize() - . = ..() - update_icon() - -/obj/item/clothing/head/hardhat/weldhat/attack_self(mob/living/user) - toggle_helmet_light(user) - -/obj/item/clothing/head/hardhat/weldhat/AltClick(mob/user) - if(user.canUseTopic(src, BE_CLOSE)) - toggle_welding_screen(user) - -/obj/item/clothing/head/hardhat/weldhat/proc/toggle_welding_screen(mob/living/user) - if(weldingvisortoggle(user)) - playsound(src, 'sound/blank.ogg', 50, TRUE) //Visors don't just come from nothing - update_icon() - -/obj/item/clothing/head/hardhat/weldhat/worn_overlays(isinhands) - . = ..() - if(!isinhands) - . += mutable_appearance('icons/mob/clothing/head.dmi', "weldhelmet") - if(!up) - . += mutable_appearance('icons/mob/clothing/head.dmi', "weldvisor") - -/obj/item/clothing/head/hardhat/weldhat/update_icon() - cut_overlays() - if(!up) - add_overlay("weldvisor") - ..() - -/obj/item/clothing/head/hardhat/weldhat/orange - icon_state = "hardhat0_orange" - item_state = "hardhat0_orange" - hat_type = "orange" - -/obj/item/clothing/head/hardhat/weldhat/white - desc = "" //This bulb is not smaller - icon_state = "hardhat0_white" - item_state = "hardhat0_white" - brightness_on = 4 //Boss always takes the best stuff - hat_type = "white" - clothing_flags = STOPSPRESSUREDAMAGE - heat_protection = HEAD - max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT - cold_protection = HEAD - min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT - -/obj/item/clothing/head/hardhat/weldhat/dblue - icon_state = "hardhat0_dblue" - item_state = "hardhat0_dblue" - hat_type = "dblue" diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm deleted file mode 100644 index a27fd3e787..0000000000 --- a/code/modules/clothing/head/helmet.dm +++ /dev/null @@ -1,387 +0,0 @@ -/obj/item/clothing/head/helmet - name = "helmet" - desc = "" - icon_state = "helmet" - item_state = "helmet" - armor = list("melee" = 35, "bullet" = 30, "laser" = 30,"energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) - cold_protection = HEAD - min_cold_protection_temperature = HELMET_MIN_TEMP_PROTECT - heat_protection = HEAD - max_heat_protection_temperature = HELMET_MAX_TEMP_PROTECT - strip_delay = 60 - clothing_flags = SNUG_FIT - flags_cover = HEADCOVERSEYES - flags_inv = HIDEHAIR - - dog_fashion = /datum/dog_fashion/head/helmet - - var/can_flashlight = FALSE //if a flashlight can be mounted. if it has a flashlight and this is false, it is permanently attached. - var/obj/item/flashlight/seclite/attached_light - var/datum/action/item_action/toggle_helmet_flashlight/alight - -/obj/item/clothing/head/helmet/Initialize() - . = ..() - if(attached_light) - alight = new(src) - -/obj/item/clothing/head/helmet/examine(mob/user) - . = ..() - if(attached_light) - . += "It has \a [attached_light] [can_flashlight ? "" : "permanently "]mounted on it." - if(can_flashlight) - . += "[attached_light] looks like it can be unscrewed from [src]." - else if(can_flashlight) - . += "It has a mounting point for a seclite." - -/obj/item/clothing/head/helmet/Destroy() - QDEL_NULL(attached_light) - return ..() - -/obj/item/clothing/head/helmet/handle_atom_del(atom/A) - if(A == attached_light) - attached_light = null - update_helmlight() - update_icon() - QDEL_NULL(alight) - return ..() - -/obj/item/clothing/head/helmet/alt - name = "bulletproof helmet" - desc = "" - icon_state = "helmetalt" - item_state = "helmetalt" - armor = list("melee" = 15, "bullet" = 60, "laser" = 10, "energy" = 10, "bomb" = 40, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) - can_flashlight = TRUE - dog_fashion = null - -/obj/item/clothing/head/helmet/old - name = "degrading helmet" - desc = "" - tint = 2 - -/obj/item/clothing/head/helmet/blueshirt - name = "blue helmet" - desc = "" - icon_state = "blueshift" - item_state = "blueshift" - custom_premium_price = 450 - -/obj/item/clothing/head/helmet/riot - name = "riot helmet" - desc = "" - icon_state = "riot" - item_state = "helmet" - toggle_message = "You pull the visor down on" - alt_toggle_message = "You push the visor up on" - can_toggle = 1 - armor = list("melee" = 50, "bullet" = 10, "laser" = 10, "energy" = 10, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 80) - flags_inv = HIDEEARS|HIDEFACE - strip_delay = 80 - actions_types = list(/datum/action/item_action/toggle) - visor_flags_inv = HIDEFACE - toggle_cooldown = 0 - flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF - visor_flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF - dog_fashion = null - -/obj/item/clothing/head/helmet/attack_self(mob/user) - if(can_toggle && !user.incapacitated()) - if(world.time > cooldown + toggle_cooldown) - cooldown = world.time - up = !up - flags_1 ^= visor_flags - flags_inv ^= visor_flags_inv - flags_cover ^= visor_flags_cover - icon_state = "[initial(icon_state)][up ? "up" : ""]" - to_chat(user, "[up ? alt_toggle_message : toggle_message] \the [src].") - - user.update_inv_head() - if(iscarbon(user)) - var/mob/living/carbon/C = user - C.head_update(src, forced = 1) - - if(active_sound) - INVOKE_ASYNC(src, PROC_REF(visor_loop)) - -/obj/item/clothing/head/helmet/proc/visor_loop() - while(up) - playsound(src, "[active_sound]", 100, FALSE, 4) - sleep(15) - -/obj/item/clothing/head/helmet/justice - name = "helmet of justice" - desc = "" - icon_state = "justice" - toggle_message = "You turn off the lights on" - alt_toggle_message = "You turn on the lights on" - actions_types = list(/datum/action/item_action/toggle_helmet_light) - can_toggle = 1 - toggle_cooldown = 20 - active_sound = 'sound/blank.ogg' - dog_fashion = null - -/obj/item/clothing/head/helmet/justice/escape - name = "alarm helmet" - desc = "" - icon_state = "justice2" - toggle_message = "You turn off the light on" - alt_toggle_message = "You turn on the light on" - -/obj/item/clothing/head/helmet/swat - name = "\improper SWAT helmet" - desc = "" - icon_state = "swatsyndie" - item_state = "swatsyndie" - armor = list("melee" = 40, "bullet" = 30, "laser" = 30,"energy" = 40, "bomb" = 50, "bio" = 90, "rad" = 20, "fire" = 50, "acid" = 50) - cold_protection = HEAD - min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT - heat_protection = HEAD - max_heat_protection_temperature = SPACE_HELM_MAX_TEMP_PROTECT - clothing_flags = STOPSPRESSUREDAMAGE - strip_delay = 80 - dog_fashion = null - -/obj/item/clothing/head/helmet/police - name = "police officer's hat" - desc = "" - icon_state = "policehelm" - dynamic_hair_suffix = "" - -/obj/item/clothing/head/helmet/swat/nanotrasen - name = "\improper SWAT helmet" - desc = "" - icon_state = "swat" - item_state = "swat" - -/obj/item/clothing/head/helmet/thunderdome - name = "\improper Thunderdome helmet" - desc = "" - flags_inv = HIDEEARS|HIDEHAIR - icon_state = "thunderdome" - item_state = "thunderdome" - armor = list("melee" = 80, "bullet" = 80, "laser" = 50, "energy" = 50, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 90) - cold_protection = HEAD - min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT - heat_protection = HEAD - max_heat_protection_temperature = SPACE_HELM_MAX_TEMP_PROTECT - strip_delay = 80 - dog_fashion = null - -/obj/item/clothing/head/helmet/roman - name = "\improper Roman helmet" - desc = "" - flags_inv = HIDEEARS|HIDEHAIR - flags_cover = HEADCOVERSEYES - armor = list("melee" = 25, "bullet" = 0, "laser" = 25, "energy" = 10, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) - resistance_flags = FIRE_PROOF - icon_state = "roman" - item_state = "roman" - strip_delay = 100 - dog_fashion = null - -/obj/item/clothing/head/helmet/roman/fake - desc = "" - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - -/obj/item/clothing/head/helmet/roman/legionnaire - name = "\improper Roman legionnaire helmet" - desc = "" - icon_state = "roman_c" - item_state = "roman_c" - -/obj/item/clothing/head/helmet/roman/legionnaire/fake - desc = "" - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - -/obj/item/clothing/head/helmet/gladiator - name = "gladiator helmet" - desc = "" - icon_state = "gladiator" - item_state = "gladiator" - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEHAIR - flags_cover = HEADCOVERSEYES - dog_fashion = null - -/obj/item/clothing/head/helmet/redtaghelm - name = "red laser tag helmet" - desc = "" - icon_state = "redtaghelm" - flags_cover = HEADCOVERSEYES - item_state = "redtaghelm" - armor = list("melee" = 15, "bullet" = 10, "laser" = 20,"energy" = 10, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 50) - // Offer about the same protection as a hardhat. - dog_fashion = null - -/obj/item/clothing/head/helmet/bluetaghelm - name = "blue laser tag helmet" - desc = "" - icon_state = "bluetaghelm" - flags_cover = HEADCOVERSEYES - item_state = "bluetaghelm" - armor = list("melee" = 15, "bullet" = 10, "laser" = 20,"energy" = 10, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 50) - // Offer about the same protection as a hardhat. - dog_fashion = null - -/obj/item/clothing/head/helmet/knight - name = "medieval helmet" - desc = "" - icon_state = "knight_green" - item_state = "knight_green" - armor = list("melee" = 50, "bullet" = 10, "laser" = 10, "energy" = 10, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 80) - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR - flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH - strip_delay = 80 - dog_fashion = null - - -/obj/item/clothing/head/helmet/knight/Initialize(mapload) - . = ..() - var/datum/component = GetComponent(/datum/component/wearertargeting/earprotection) - qdel(component) - -/obj/item/clothing/head/helmet/knight/blue - icon_state = "knight_blue" - item_state = "knight_blue" - -/obj/item/clothing/head/helmet/knight/yellow - icon_state = "knight_yellow" - item_state = "knight_yellow" - -/obj/item/clothing/head/helmet/knight/red - icon_state = "knight_red" - item_state = "knight_red" - -/obj/item/clothing/head/helmet/knight/greyscale - name = "knight helmet" - desc = "" - icon_state = "knight_greyscale" - item_state = "knight_greyscale" - armor = list("melee" = 35, "bullet" = 10, "laser" = 10, "energy" = 10, "bomb" = 10, "bio" = 10, "rad" = 10, "fire" = 40, "acid" = 40) - material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR//Can change color and add prefix - -/obj/item/clothing/head/helmet/skull - name = "skull helmet" - desc = "" - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE - flags_cover = HEADCOVERSEYES - armor = list("melee" = 35, "bullet" = 25, "laser" = 25, "energy" = 35, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) - icon_state = "skull" - item_state = "skull" - strip_delay = 100 - -/obj/item/clothing/head/helmet/durathread - name = "durathread helmet" - desc = "" - icon_state = "durathread" - item_state = "durathread" - resistance_flags = FLAMMABLE - armor = list("melee" = 20, "bullet" = 10, "laser" = 30, "energy" = 40, "bomb" = 15, "bio" = 0, "rad" = 0, "fire" = 40, "acid" = 50) - strip_delay = 60 - -/obj/item/clothing/head/helmet/rus_helmet - name = "russian helmet" - desc = "" - icon_state = "rus_helmet" - item_state = "rus_helmet" - armor = list("melee" = 25, "bullet" = 30, "laser" = 0, "energy" = 10, "bomb" = 10, "bio" = 0, "rad" = 20, "fire" = 20, "acid" = 50) - pocket_storage_component_path = /datum/component/storage/concrete/pockets/helmet - -/obj/item/clothing/head/helmet/rus_ushanka - name = "battle ushanka" - desc = "" - icon_state = "rus_ushanka" - item_state = "rus_ushanka" - body_parts_covered = HEAD - cold_protection = HEAD - min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT - armor = list("melee" = 25, "bullet" = 20, "laser" = 20, "energy" = 30, "bomb" = 20, "bio" = 50, "rad" = 20, "fire" = -10, "acid" = 50) - -//LightToggle - -/obj/item/clothing/head/helmet/update_icon() - var/state = "[initial(icon_state)]" - if(attached_light) - if(attached_light.on) - state += "-flight-on" //"helmet-flight-on" // "helmet-cam-flight-on" - else - state += "-flight" //etc. - - icon_state = state - - if(ishuman(loc)) - var/mob/living/carbon/human/H = loc - H.update_inv_head() - -/obj/item/clothing/head/helmet/ui_action_click(mob/user, action) - if(istype(action, alight)) - toggle_helmlight() - else - ..() - -/obj/item/clothing/head/helmet/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/flashlight/seclite)) - var/obj/item/flashlight/seclite/S = I - if(can_flashlight && !attached_light) - if(!user.transferItemToLoc(S, src)) - return - to_chat(user, "I click [S] into place on [src].") - if(S.on) - set_light(0) - attached_light = S - update_icon() - update_helmlight() - alight = new(src) - if(loc == user) - alight.Grant(user) - return - return ..() - -/obj/item/clothing/head/helmet/screwdriver_act(mob/living/user, obj/item/I) - . = ..() - if(can_flashlight && attached_light) //if it has a light but can_flashlight is false, the light is permanently attached. - I.play_tool_sound(src) - to_chat(user, "I unscrew [attached_light] from [src].") - attached_light.forceMove(drop_location()) - if(Adjacent(user)) - user.put_in_hands(attached_light) - - var/obj/item/flashlight/removed_light = attached_light - attached_light = null - update_helmlight() - removed_light.update_brightness(user) - update_icon() - user.update_inv_head() - QDEL_NULL(alight) - return TRUE - -/obj/item/clothing/head/helmet/proc/toggle_helmlight() - set name = "Toggle Helmetlight" - set hidden = 1 - set desc = "" - if(!usr.client.holder) - return - if(!attached_light) - return - - var/mob/user = usr - if(user.incapacitated()) - return - attached_light.on = !attached_light.on - to_chat(user, "I toggle the helmet-light [attached_light.on ? "on":"off"].") - - playsound(user, 'sound/blank.ogg', 100, TRUE) - update_helmlight() - -/obj/item/clothing/head/helmet/proc/update_helmlight() - if(attached_light) - if(attached_light.on) - set_light(attached_light.light_outer_range) - else - set_light(0) - update_icon() - - else - set_light(0) - for(var/X in actions) - var/datum/action/A = X - A.UpdateButtonIcon() diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm deleted file mode 100644 index 9c31a21a0a..0000000000 --- a/code/modules/clothing/head/jobs.dm +++ /dev/null @@ -1,270 +0,0 @@ -//defines the drill hat's yelling setting -#define DRILL_DEFAULT "default" -#define DRILL_SHOUTING "shouting" -#define DRILL_YELLING "yelling" -#define DRILL_CANADIAN "canadian" - -//Chef -/obj/item/clothing/head/chefhat - name = "chef's hat" - item_state = "chef" - icon_state = "chef" - desc = "" - strip_delay = 10 - equip_delay_other = 10 - dynamic_hair_suffix = "" - dog_fashion = /datum/dog_fashion/head/chef - -/obj/item/clothing/head/chefhat/suicide_act(mob/user) - user.visible_message("[user] is donning [src]! It looks like [user.p_theyre()] trying to become a chef.") - user.say("Bork Bork Bork!", forced = "chef hat suicide") - sleep(20) - user.visible_message("[user] climbs into an imaginary oven!") - user.say("BOOORK!", forced = "chef hat suicide") - playsound(user, 'sound/blank.ogg', 50, TRUE) - return(FIRELOSS) - -//Captain -/obj/item/clothing/head/caphat - name = "captain's hat" - desc = "" - icon_state = "captain" - item_state = "that" - flags_inv = 0 - armor = list("melee" = 25, "bullet" = 15, "laser" = 25, "energy" = 35, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) - strip_delay = 60 - dog_fashion = /datum/dog_fashion/head/captain - -//Captain: This is no longer space-worthy -/obj/item/clothing/head/caphat/parade - name = "captain's parade cap" - desc = "" - icon_state = "capcap" - - dog_fashion = null - - -//Head of Personnel -/obj/item/clothing/head/hopcap - name = "head of personnel's cap" - icon_state = "hopcap" - desc = "" - armor = list("melee" = 25, "bullet" = 15, "laser" = 25, "energy" = 35, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) - dog_fashion = /datum/dog_fashion/head/hop - -//Chaplain -/obj/item/clothing/head/nun_hood - name = "nun hood" - desc = "" - icon_state = "nun_hood" - flags_inv = HIDEHAIR - flags_cover = HEADCOVERSEYES - -/obj/item/clothing/head/bishopmitre - name = "bishop mitre" - desc = "" - icon_state = "bishopmitre" - -//Detective -/obj/item/clothing/head/fedora/det_hat - name = "detective's fedora" - desc = "" - armor = list("melee" = 25, "bullet" = 5, "laser" = 25, "energy" = 35, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 50) - icon_state = "detective" - var/candy_cooldown = 0 - pocket_storage_component_path = /datum/component/storage/concrete/pockets/small/fedora/detective - dog_fashion = /datum/dog_fashion/head/detective - -/obj/item/clothing/head/fedora/det_hat/Initialize() - . = ..() - new /obj/item/reagent_containers/food/drinks/flask/det(src) - -/obj/item/clothing/head/fedora/det_hat/examine(mob/user) - . = ..() - . += "Alt-click to take a candy corn." - -/obj/item/clothing/head/fedora/det_hat/AltClick(mob/user) - if(user.canUseTopic(src, BE_CLOSE, ismonkey(user))) - ..() - if(loc == user) - if(candy_cooldown < world.time) - var/obj/item/reagent_containers/food/snacks/candy_corn/CC = new /obj/item/reagent_containers/food/snacks/candy_corn(src) - user.put_in_hands(CC) - to_chat(user, "I slip a candy corn from your hat.") - candy_cooldown = world.time+1200 - else - to_chat(user, "I just took a candy corn! You should wait a couple minutes, lest you burn through your stash.") - - -//Mime -/obj/item/clothing/head/beret - name = "beret" - desc = "" - icon_state = "beret" - dog_fashion = /datum/dog_fashion/head/beret - dynamic_hair_suffix = "" - -/obj/item/clothing/head/beret/vintage - name = "vintage beret" - desc = "" - icon_state = "vintageberet" - dog_fashion = null - -/obj/item/clothing/head/beret/archaic - name = "archaic beret" - desc = "" - icon_state = "archaicberet" - dog_fashion = null - -/obj/item/clothing/head/beret/black - name = "black beret" - desc = "" - icon_state = "beretblack" - -/obj/item/clothing/head/beret/highlander - desc = "" - dog_fashion = null //THIS IS FOR SLAUGHTER, NOT PUPPIES - -/obj/item/clothing/head/beret/highlander/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, HIGHLANDER) - -/obj/item/clothing/head/beret/durathread - name = "durathread beret" - desc = "A beret made from durathread, its resilient fibres provide some protection to the wearer." - icon_state = "beretdurathread" - armor = list("melee" = 15, "bullet" = 5, "laser" = 15, "energy" = 25, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 5) - -//Security - -/obj/item/clothing/head/HoS - name = "head of security cap" - desc = "" - icon_state = "hoscap" - armor = list("melee" = 40, "bullet" = 30, "laser" = 25, "energy" = 35, "bomb" = 25, "bio" = 10, "rad" = 0, "fire" = 50, "acid" = 60) - strip_delay = 80 - dynamic_hair_suffix = "" - -/obj/item/clothing/head/HoS/syndicate - name = "syndicate cap" - desc = "" - -/obj/item/clothing/head/HoS/beret - name = "head of security beret" - desc = "" - icon_state = "hosberetblack" - -/obj/item/clothing/head/HoS/beret/syndicate - name = "syndicate beret" - desc = "" - -/obj/item/clothing/head/warden - name = "warden's police hat" - desc = "" - icon_state = "policehelm" - armor = list("melee" = 40, "bullet" = 30, "laser" = 30, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 60) - strip_delay = 60 - dog_fashion = /datum/dog_fashion/head/warden - -/obj/item/clothing/head/warden/drill - name = "warden's campaign hat" - desc = "" - icon_state = "wardendrill" - item_state = "wardendrill" - dog_fashion = null - var/mode = DRILL_DEFAULT - -/obj/item/clothing/head/warden/drill/screwdriver_act(mob/living/carbon/human/user, obj/item/I) - if(..()) - return TRUE - switch(mode) - if(DRILL_DEFAULT) - to_chat(user, "I set the voice circuit to the middle position.") - mode = DRILL_SHOUTING - if(DRILL_SHOUTING) - to_chat(user, "I set the voice circuit to the last position.") - mode = DRILL_YELLING - if(DRILL_YELLING) - to_chat(user, "I set the voice circuit to the first position.") - mode = DRILL_DEFAULT - if(DRILL_CANADIAN) - to_chat(user, "I adjust voice circuit but nothing happens, probably because it's broken.") - return TRUE - -/obj/item/clothing/head/warden/drill/wirecutter_act(mob/living/user, obj/item/I) - ..() - if(mode != DRILL_CANADIAN) - to_chat(user, "I broke the voice circuit!") - mode = DRILL_CANADIAN - return TRUE - -/obj/item/clothing/head/warden/drill/equipped(mob/M, slot) - . = ..() - if (slot == SLOT_HEAD) - RegisterSignal(M, COMSIG_MOB_SAY, PROC_REF(handle_speech)) - else - UnregisterSignal(M, COMSIG_MOB_SAY) - -/obj/item/clothing/head/warden/drill/dropped(mob/M) - . = ..() - UnregisterSignal(M, COMSIG_MOB_SAY) - -/obj/item/clothing/head/warden/drill/proc/handle_speech(datum/source, list/speech_args) - var/message = speech_args[SPEECH_MESSAGE] - if(message[1] != "*") - switch (mode) - if(DRILL_SHOUTING) - message += "!" - if(DRILL_YELLING) - message += "!!" - if(DRILL_CANADIAN) - message = " [message]" - var/list/canadian_words = strings("canadian_replacement.json", "canadian") - - for(var/key in canadian_words) - var/value = canadian_words[key] - if(islist(value)) - value = pick(value) - - message = replacetextEx(message, " [uppertext(key)]", " [uppertext(value)]") - message = replacetextEx(message, " [capitalize(key)]", " [capitalize(value)]") - message = replacetextEx(message, " [key]", " [value]") - - if(prob(30)) - message += pick(", eh?", ", EH?") - speech_args[SPEECH_MESSAGE] = message - -/obj/item/clothing/head/beret/sec - name = "security beret" - desc = "" - icon_state = "beret_badge" - armor = list("melee" = 40, "bullet" = 30, "laser" = 30, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 50) - strip_delay = 60 - dog_fashion = null - -/obj/item/clothing/head/beret/sec/navyhos - name = "head of security's beret" - desc = "" - icon_state = "hosberet" - -/obj/item/clothing/head/beret/sec/navywarden - name = "warden's beret" - desc = "" - icon_state = "wardenberet" - armor = list("melee" = 40, "bullet" = 30, "laser" = 30, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 50) - strip_delay = 60 - -/obj/item/clothing/head/beret/sec/navyofficer - desc = "" - icon_state = "officerberet" - -//Curator -/obj/item/clothing/head/fedora/curator - name = "treasure hunter's fedora" - desc = "" - icon_state = "curator" - -#undef DRILL_DEFAULT -#undef DRILL_SHOUTING -#undef DRILL_YELLING -#undef DRILL_CANADIAN diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm deleted file mode 100644 index 88982a697c..0000000000 --- a/code/modules/clothing/head/misc.dm +++ /dev/null @@ -1,442 +0,0 @@ - - -/obj/item/clothing/head/centhat - name = "\improper CentCom hat" - icon_state = "centcom" - desc = "" - item_state = "that" - flags_inv = 0 - armor = list("melee" = 30, "bullet" = 15, "laser" = 30, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) - strip_delay = 80 - -/obj/item/clothing/head/powdered_wig - name = "powdered wig" - desc = "" - icon_state = "pwig" - item_state = "pwig" - -/obj/item/clothing/head/that - name = "top-hat" - desc = "" - icon_state = "tophat" - item_state = "that" - dog_fashion = /datum/dog_fashion/head - throwforce = 1 - -/obj/item/clothing/head/canada - name = "striped red tophat" - desc = "" - icon_state = "canada" - item_state = "canada" - -/obj/item/clothing/head/redcoat - name = "redcoat's hat" - icon_state = "redcoat" - desc = "" - -/obj/item/clothing/head/mailman - name = "mailman's hat" - icon_state = "mailman" - desc = "" - -/obj/item/clothing/head/plaguedoctorhat - name = "plague doctor's hat" - desc = "" - icon_state = "plaguedoctor" - permeability_coefficient = 0.01 - -/obj/item/clothing/head/hasturhood - name = "hastur's hood" - desc = "" - icon_state = "hasturhood" - flags_inv = HIDEHAIR - flags_cover = HEADCOVERSEYES - -/obj/item/clothing/head/nursehat - name = "nurse's hat" - desc = "" - icon_state = "nursehat" - dynamic_hair_suffix = "" - - dog_fashion = /datum/dog_fashion/head/nurse - -/obj/item/clothing/head/syndicatefake - name = "black space-helmet replica" - icon_state = "syndicate-helm-black-red" - item_state = "syndicate-helm-black-red" - desc = "" - clothing_flags = SNUG_FIT - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR - -/obj/item/clothing/head/cueball - name = "cueball helmet" - desc = "" - icon_state = "cueball" - item_state="cueball" - clothing_flags = SNUG_FIT - flags_cover = HEADCOVERSEYES|HEADCOVERSMOUTH - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR - -/obj/item/clothing/head/snowman - name = "Snowman Head" - desc = "" - icon_state = "snowman_h" - item_state = "snowman_h" - clothing_flags = SNUG_FIT - flags_cover = HEADCOVERSEYES - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR - -/obj/item/clothing/head/justice - name = "justice hat" - desc = "" - icon_state = "justicered" - item_state = "justicered" - clothing_flags = SNUG_FIT - flags_inv = HIDEHAIR|HIDEEARS|HIDEEYES|HIDEFACE|HIDEFACIALHAIR - flags_cover = HEADCOVERSEYES - -/obj/item/clothing/head/justice/blue - icon_state = "justiceblue" - item_state = "justiceblue" - -/obj/item/clothing/head/justice/yellow - icon_state = "justiceyellow" - item_state = "justiceyellow" - -/obj/item/clothing/head/justice/green - icon_state = "justicegreen" - item_state = "justicegreen" - -/obj/item/clothing/head/justice/pink - icon_state = "justicepink" - item_state = "justicepink" - -/obj/item/clothing/head/rabbitears - name = "rabbit ears" - desc = "" - icon_state = "bunny" - dynamic_hair_suffix = "" - - dog_fashion = /datum/dog_fashion/head/rabbit - -/obj/item/clothing/head/pirate - name = "pirate hat" - desc = "" - icon_state = "pirate" - item_state = "pirate" - dog_fashion = /datum/dog_fashion/head/pirate - -/obj/item/clothing/head/pirate - var/datum/language/piratespeak/L = new - -/obj/item/clothing/head/pirate/equipped(mob/user, slot) - . = ..() - if(!ishuman(user)) - return - if(slot == SLOT_HEAD) - user.grant_language(/datum/language/piratespeak/) - to_chat(user, "I suddenly know how to speak like a pirate!") - -/obj/item/clothing/head/pirate/dropped(mob/user) - . = ..() - if(!ishuman(user)) - return - var/mob/living/carbon/human/H = user - if(H.get_item_by_slot(SLOT_HEAD) == src) - user.remove_language(/datum/language/piratespeak/) - to_chat(user, "I can no longer speak like a pirate.") - -/obj/item/clothing/head/pirate/captain - icon_state = "hgpiratecap" - item_state = "hgpiratecap" - -/obj/item/clothing/head/bandana - name = "pirate bandana" - desc = "" - icon_state = "bandana" - item_state = "bandana" - dynamic_hair_suffix = "" - -/obj/item/clothing/head/bowler - name = "bowler-hat" - desc = "" - icon_state = "bowler" - item_state = "bowler" - dynamic_hair_suffix = "" - -/obj/item/clothing/head/witchwig - name = "witch costume wig" - desc = "" - icon_state = "witch" - item_state = "witch" - flags_inv = HIDEHAIR - -/obj/item/clothing/head/chicken - name = "chicken suit head" - desc = "" - icon_state = "chickenhead" - item_state = "chickensuit" - clothing_flags = SNUG_FIT - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR - -/obj/item/clothing/head/griffin - name = "griffon head" - desc = "" - icon_state = "griffinhat" - item_state = "griffinhat" - clothing_flags = SNUG_FIT - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR - -/obj/item/clothing/head/bearpelt - name = "bear pelt hat" - desc = "" - icon_state = "bearpelt" - item_state = "bearpelt" - -/obj/item/clothing/head/xenos - name = "xenos helmet" - icon_state = "xenos" - item_state = "xenos_helm" - desc = "" - clothing_flags = SNUG_FIT - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR - flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH - -/obj/item/clothing/head/fedora - name = "fedora" - icon_state = "fedora" - item_state = "fedora" - desc = "" - pocket_storage_component_path = /datum/component/storage/concrete/pockets/small/fedora - -/obj/item/clothing/head/fedora/suicide_act(mob/user) - if(user.gender == FEMALE) - return 0 - var/mob/living/carbon/human/H = user - user.visible_message("[user] is donning [src]! It looks like [user.p_theyre()] trying to be nice to girls.") - user.say("M'lady.", forced = "fedora suicide") - sleep(10) - H.facial_hairstyle = "Neckbeard" - return(BRUTELOSS) - -/obj/item/clothing/head/sombrero - name = "sombrero" - icon_state = "sombrero" - item_state = "sombrero" - desc = "" - flags_inv = HIDEHAIR - - dog_fashion = /datum/dog_fashion/head/sombrero - -/obj/item/clothing/head/sombrero/green - name = "green sombrero" - icon_state = "greensombrero" - item_state = "greensombrero" - desc = "" - flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS - dog_fashion = null - -/obj/item/clothing/head/sombrero/shamebrero - name = "shamebrero" - icon_state = "shamebrero" - item_state = "shamebrero" - desc = "" - dog_fashion = null - -/obj/item/clothing/head/sombrero/shamebrero/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, SHAMEBRERO_TRAIT) - -/obj/item/clothing/head/flatcap - name = "flat cap" - desc = "" - icon_state = "flat_cap" - item_state = "detective" - -/obj/item/clothing/head/hunter - name = "bounty hunting hat" - desc = "" - icon_state = "hunter" - item_state = "hunter" - armor = list("melee" = 5, "bullet" = 5, "laser" = 5, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - resistance_flags = FIRE_PROOF | ACID_PROOF - -/obj/item/clothing/head/cone - desc = "" - name = "warning cone" - icon = 'icons/obj/janitor.dmi' - icon_state = "cone" - item_state = "cone" - force = 1 - throwforce = 3 - throw_speed = 2 - throw_range = 5 - w_class = WEIGHT_CLASS_SMALL - attack_verb = list("warned", "cautioned", "smashed") - resistance_flags = NONE - dynamic_hair_suffix = "" - -/obj/item/clothing/head/santa - name = "santa hat" - desc = "" - icon_state = "santahatnorm" - item_state = "that" - cold_protection = HEAD - min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT - dog_fashion = /datum/dog_fashion/head/santa - -/obj/item/clothing/head/jester - name = "jester hat" - desc = "" - icon_state = "jester_hat" - dynamic_hair_suffix = "" - -/obj/item/clothing/head/rice_hat - name = "rice hat" - desc = "" - icon_state = "rice_hat" - -/obj/item/clothing/head/lizard - name = "lizardskin cloche hat" - desc = "" - icon_state = "lizard" - -/obj/item/clothing/head/papersack - name = "paper sack hat" - desc = "" - icon_state = "papersack" - flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS - -/obj/item/clothing/head/papersack/smiley - name = "paper sack hat" - desc = "" - icon_state = "papersack_smile" - flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS - -/obj/item/clothing/head/crown - name = "crown" - desc = "" - icon_state = "crown" - armor = list("melee" = 15, "bullet" = 0, "laser" = 0,"energy" = 15, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) - resistance_flags = FIRE_PROOF - dynamic_hair_suffix = "" - -/obj/item/clothing/head/crown/fancy - name = "magnificent crown" - desc = "" - icon_state = "fancycrown" - -/obj/item/clothing/head/scarecrow_hat - name = "scarecrow hat" - desc = "" - icon_state = "scarecrow_hat" - -/obj/item/clothing/head/lobsterhat - name = "foam lobster head" - desc = "" - icon_state = "lobster_hat" - clothing_flags = SNUG_FIT - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR - -/obj/item/clothing/head/drfreezehat - name = "doctor freeze's wig" - desc = "" - icon_state = "drfreeze_hat" - flags_inv = HIDEHAIR - -/obj/item/clothing/head/pharaoh - name = "pharaoh hat" - desc = "" - icon_state = "pharoah_hat" - item_state = "pharoah_hat" - -/obj/item/clothing/head/jester/alt - name = "jester hat" - desc = "" - icon_state = "jester_hat" - dynamic_hair_suffix = "" - -/obj/item/clothing/head/nemes - name = "headdress of Nemes" - desc = "" - icon_state = "nemes_headdress" - -/obj/item/clothing/head/delinquent - name = "delinquent hat" - desc = "" - icon_state = "delinquent" - -/obj/item/clothing/head/frenchberet - name = "french beret" - desc = "" - icon_state = "beret" - dynamic_hair_suffix = "" - -/obj/item/clothing/head/frenchberet/equipped(mob/M, slot) - . = ..() - if (slot == SLOT_HEAD) - RegisterSignal(M, COMSIG_MOB_SAY, PROC_REF(handle_speech)) - else - UnregisterSignal(M, COMSIG_MOB_SAY) - -/obj/item/clothing/head/frenchberet/dropped(mob/M) - . = ..() - UnregisterSignal(M, COMSIG_MOB_SAY) - -/obj/item/clothing/head/frenchberet/proc/handle_speech(datum/source, list/speech_args) - var/message = speech_args[SPEECH_MESSAGE] - if(message[1] != "*") - message = " [message]" - var/list/french_words = strings("french_replacement.json", "french") - - for(var/key in french_words) - var/value = french_words[key] - if(islist(value)) - value = pick(value) - - message = replacetextEx(message, " [uppertext(key)]", " [uppertext(value)]") - message = replacetextEx(message, " [capitalize(key)]", " [capitalize(value)]") - message = replacetextEx(message, " [key]", " [value]") - - if(prob(3)) - message += pick(" Honh honh honh!"," Honh!"," Zut Alors!") - speech_args[SPEECH_MESSAGE] = trim(message) - -/obj/item/clothing/head/clownmitre - name = "Hat of the Honkmother" - desc = "" - icon_state = "clownmitre" - -/obj/item/clothing/head/kippah - name = "kippah" - desc = "" - icon_state = "kippah" - -/obj/item/clothing/head/taqiyahwhite - name = "white taqiyah" - desc = "" - icon_state = "taqiyahwhite" - pocket_storage_component_path = /datum/component/storage/concrete/pockets/small - -/obj/item/clothing/head/taqiyahred - name = "red taqiyah" - desc = "" - icon_state = "taqiyahred" - pocket_storage_component_path = /datum/component/storage/concrete/pockets/small - -/obj/item/clothing/head/shrine_wig - name = "shrine maiden's wig" - desc = "" - flags_inv = HIDEHAIR //bald - mob_overlay_icon = 'icons/mob/large-worn-icons/64x64/head.dmi' - icon_state = "shrine_wig" - item_state = "shrine_wig" - worn_x_dimension = 64 - worn_y_dimension = 64 - dynamic_hair_suffix = "" - -/obj/item/clothing/head/intern - name = "\improper CentCom Head Intern beancap" - desc = "" - icon_state = "intern_hat" - item_state = "intern_hat" diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm deleted file mode 100644 index fb603573e4..0000000000 --- a/code/modules/clothing/head/misc_special.dm +++ /dev/null @@ -1,357 +0,0 @@ -/* - * Contents: - * Welding mask - * Cakehat - * Ushanka - * Pumpkin head - * Kitty ears - * Cardborg disguise - * Wig - * Bronze hat - */ - -/* - * Welding mask - */ -/obj/item/clothing/head/welding - name = "welding helmet" - desc = "" - icon_state = "welding" - flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH - item_state = "welding" - custom_materials = list(/datum/material/iron=1750, /datum/material/glass=400) - flash_protect = FLASH_PROTECTION_WELDER - tint = 2 - armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 60) - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE - actions_types = list(/datum/action/item_action/toggle) - visor_flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE - visor_flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF - resistance_flags = FIRE_PROOF - clothing_flags = SNUG_FIT - -/obj/item/clothing/head/welding/attack_self(mob/user) - weldingvisortoggle(user) - - -/* - * Cakehat - */ -/obj/item/clothing/head/hardhat/cakehat - name = "cakehat" - desc = "" - icon_state = "hardhat0_cakehat" - item_state = "hardhat0_cakehat" - hat_type = "cakehat" - lefthand_file = 'icons/mob/inhands/clothing_lefthand.dmi' - righthand_file = 'icons/mob/inhands/clothing_righthand.dmi' - hitsound = 'sound/blank.ogg' - var/hitsound_on = 'sound/blank.ogg' //so we can differentiate between cakehat and energyhat - var/hitsound_off = 'sound/blank.ogg' - var/force_on = 15 - var/throwforce_on = 15 - var/damtype_on = BURN - flags_inv = HIDEEARS|HIDEHAIR - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - brightness_on = 2 //luminosity when on - flags_cover = HEADCOVERSEYES - heat = 999 - - dog_fashion = /datum/dog_fashion/head - -/obj/item/clothing/head/hardhat/cakehat/process() - var/turf/location = src.loc - if(ishuman(location)) - var/mob/living/carbon/human/M = location - if(M.is_holding(src) || M.head == src) - location = M.loc - - if(isturf(location)) - location.hotspot_expose(700, 1) - -/obj/item/clothing/head/hardhat/cakehat/turn_on(mob/living/user) - ..() - force = force_on - throwforce = throwforce_on - damtype = damtype_on - hitsound = hitsound_on - START_PROCESSING(SSobj, src) - -/obj/item/clothing/head/hardhat/cakehat/turn_off(mob/living/user) - ..() - force = 0 - throwforce = 0 - damtype = BRUTE - hitsound = hitsound_off - STOP_PROCESSING(SSobj, src) - -/obj/item/clothing/head/hardhat/cakehat/get_temperature() - return on * heat - -/obj/item/clothing/head/hardhat/cakehat/energycake - name = "energy cake" - desc = "" - icon_state = "hardhat0_energycake" - item_state = "hardhat0_energycake" - hat_type = "energycake" - hitsound = 'sound/blank.ogg' - hitsound_on = 'sound/blank.ogg' - hitsound_off = 'sound/blank.ogg' - damtype_on = BRUTE - force_on = 18 //same as epen (but much more obvious) - brightness_on = 3 //ditto - heat = 0 - -/obj/item/clothing/head/hardhat/cakehat/energycake/turn_on(mob/living/user) - playsound(user, 'sound/blank.ogg', 5, TRUE) - to_chat(user, "I turn on \the [src].") - ..() - -/obj/item/clothing/head/hardhat/cakehat/energycake/turn_off(mob/living/user) - playsound(user, 'sound/blank.ogg', 5, TRUE) - to_chat(user, "I turn off \the [src].") - ..() - -/* - * Ushanka - */ -/obj/item/clothing/head/ushanka - name = "ushanka" - desc = "" - icon_state = "ushankadown" - item_state = "ushankadown" - flags_inv = HIDEEARS|HIDEHAIR - var/earflaps = 1 - cold_protection = HEAD - min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT - - dog_fashion = /datum/dog_fashion/head/ushanka - -/obj/item/clothing/head/ushanka/attack_self(mob/user) - if(earflaps) - src.icon_state = "ushankaup" - src.item_state = "ushankaup" - earflaps = 0 - to_chat(user, "I raise the ear flaps on the ushanka.") - else - src.icon_state = "ushankadown" - src.item_state = "ushankadown" - earflaps = 1 - to_chat(user, "I lower the ear flaps on the ushanka.") - -/* - * Pumpkin head - */ -/obj/item/clothing/head/hardhat/pumpkinhead - name = "carved pumpkin" - desc = "" - icon_state = "hardhat0_pumpkin" - item_state = "hardhat0_pumpkin" - hat_type = "pumpkin" - clothing_flags = SNUG_FIT - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - brightness_on = 2 //luminosity when on - flags_cover = HEADCOVERSEYES - -/* - * Kitty ears - */ -/obj/item/clothing/head/kitty - name = "kitty ears" - desc = "" - icon_state = "kitty" - color = "#999999" - dynamic_hair_suffix = "" - - dog_fashion = /datum/dog_fashion/head/kitty - -/obj/item/clothing/head/kitty/equipped(mob/living/carbon/human/user, slot) - if(ishuman(user) && slot == SLOT_HEAD) - update_icon(user) - user.update_inv_head() //Color might have been changed by update_icon. - ..() - -/obj/item/clothing/head/kitty/update_icon(mob/living/carbon/human/user) - if(ishuman(user)) - add_atom_colour("#[user.hair_color]", FIXED_COLOUR_PRIORITY) - -/obj/item/clothing/head/kitty/genuine - desc = "" - - -/obj/item/clothing/head/hardhat/reindeer - name = "novelty reindeer hat" - desc = "" - icon_state = "hardhat0_reindeer" - item_state = "hardhat0_reindeer" - hat_type = "reindeer" - flags_inv = 0 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - brightness_on = 1 //luminosity when on - dynamic_hair_suffix = "" - - dog_fashion = /datum/dog_fashion/head/reindeer - -/obj/item/clothing/head/cardborg - name = "cardborg helmet" - desc = "" - icon_state = "cardborg_h" - item_state = "cardborg_h" - clothing_flags = SNUG_FIT - flags_cover = HEADCOVERSEYES - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR - - dog_fashion = /datum/dog_fashion/head/cardborg - - - -/obj/item/clothing/head/wig - name = "wig" - desc = "" - icon = 'icons/mob/human_face.dmi' // default icon for all hairs - icon_state = "hair_vlong" - item_state = "pwig" - flags_inv = HIDEHAIR - color = "#000" - var/hairstyle = "Very Long Hair" - var/adjustablecolor = TRUE //can color be changed manually? - -/obj/item/clothing/head/wig/Initialize(mapload) - . = ..() - update_icon() - -/obj/item/clothing/head/wig/update_icon() - var/datum/sprite_accessory/S = GLOB.hairstyles_list[hairstyle] - if(!S) - icon = 'icons/obj/clothing/hats.dmi' - icon_state = "pwig" - else - icon = S.icon - icon_state = S.icon_state - -/obj/item/clothing/head/wig/worn_overlays(isinhands = FALSE, file2use) - . = list() - if(!isinhands) - var/datum/sprite_accessory/S = GLOB.hairstyles_list[hairstyle] - if(!S) - return - var/mutable_appearance/M = mutable_appearance(S.icon, S.icon_state,layer = -HAIR_LAYER) - M.appearance_flags |= RESET_COLOR - M.color = color - . += M - -/obj/item/clothing/head/wig/attack_self(mob/user) - var/new_style = input(user, "Select a hairstyle", "Wig Styling") as null|anything in (GLOB.hairstyles_list - "Bald") - if(!user.canUseTopic(src, BE_CLOSE)) - return - if(new_style && new_style != hairstyle) - hairstyle = new_style - user.visible_message("[user] changes \the [src]'s hairstyle to [new_style].", "I change \the [src]'s hairstyle to [new_style].") - if(adjustablecolor) - color = input(usr,"","Choose Color",color) as color|null - update_icon() - -/obj/item/clothing/head/wig/random/Initialize(mapload) - hairstyle = pick(GLOB.hairstyles_list - "Bald") //Don't want invisible wig - color = "#[random_short_color()]" - . = ..() - -/obj/item/clothing/head/wig/natural - name = "natural wig" - desc = "" - color = "#FFF" - adjustablecolor = FALSE - custom_price = 25 - -/obj/item/clothing/head/wig/natural/Initialize(mapload) - hairstyle = pick(GLOB.hairstyles_list - "Bald") - . = ..() - -/obj/item/clothing/head/wig/natural/equipped(mob/living/carbon/human/user, slot) - . = ..() - if(ishuman(user) && slot == SLOT_HEAD) - color = "#[user.hair_color]" - update_icon() - user.update_inv_head() - -/obj/item/clothing/head/bronze - name = "bronze hat" - desc = "" - icon = 'icons/obj/clothing/clockwork_garb.dmi' - icon_state = "clockwork_helmet_old" - clothing_flags = SNUG_FIT - flags_inv = HIDEEARS|HIDEHAIR - armor = list("melee" = 5, "bullet" = 0, "laser" = -5, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 20) - -/obj/item/clothing/head/foilhat - name = "tinfoil hat" - desc = "" - icon_state = "foilhat" - item_state = "foilhat" - armor = list("melee" = 0, "bullet" = 0, "laser" = -5,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = -5, "fire" = 0, "acid" = 0) - equip_delay_other = 140 - clothing_flags = ANTI_TINFOIL_MANEUVER - var/datum/brain_trauma/mild/phobia/conspiracies/paranoia - var/warped = FALSE - -/obj/item/clothing/head/foilhat/Initialize(mapload) - . = ..() - if(!warped) - AddComponent(/datum/component/anti_magic, FALSE, FALSE, TRUE, ITEM_SLOT_HEAD, 6, TRUE, null, CALLBACK(src, PROC_REF(warp_up))) - else - warp_up() - -/obj/item/clothing/head/foilhat/equipped(mob/living/carbon/human/user, slot) - . = ..() - if(slot != SLOT_HEAD || warped) - return - if(paranoia) - QDEL_NULL(paranoia) - paranoia = new() - paranoia.clonable = FALSE - - user.gain_trauma(paranoia, TRAUMA_RESILIENCE_MAGIC) - to_chat(user, "As you don the foiled hat, an entire world of conspiracy theories and seemingly insane ideas suddenly rush into my mind. What you once thought unbelievable suddenly seems.. undeniable. Everything is connected and nothing happens just by accident. You know too much and now they're out to get you. ") - - -/obj/item/clothing/head/foilhat/MouseDrop(atom/over_object) - //God Im sorry - if(!warped && iscarbon(usr)) - var/mob/living/carbon/C = usr - if(src == C.head) - to_chat(C, "Why would you want to take this off? Do you want them to get into my mind?!") - return - return ..() - -/obj/item/clothing/head/foilhat/dropped(mob/user) - . = ..() - if(paranoia) - QDEL_NULL(paranoia) - -/obj/item/clothing/head/foilhat/proc/warp_up() - name = "scorched tinfoil hat" - desc = "" - warped = TRUE - clothing_flags &= ~ANTI_TINFOIL_MANEUVER - if(!isliving(loc) || !paranoia) - return - var/mob/living/target = loc - if(target.get_item_by_slot(SLOT_HEAD) != src) - return - QDEL_NULL(paranoia) - if(!target.IsUnconscious()) - to_chat(target, "My zealous conspirationism rapidly dissipates as the donned hat warps up into a ruined mess. All those theories starting to sound like nothing but a ridicolous fanfare.") - -/obj/item/clothing/head/foilhat/attack_hand(mob/user) - if(!warped && iscarbon(user)) - var/mob/living/carbon/C = user - if(src == C.head) - to_chat(user, "Why would you want to take this off? Do you want them to get into my mind?!") - return - return ..() - -/obj/item/clothing/head/foilhat/heating_act() - . = ..() - if(!warped) - warp_up() diff --git a/code/modules/clothing/head/soft_caps.dm b/code/modules/clothing/head/soft_caps.dm deleted file mode 100644 index fab56667fb..0000000000 --- a/code/modules/clothing/head/soft_caps.dm +++ /dev/null @@ -1,132 +0,0 @@ -/obj/item/clothing/head/soft - name = "cargo cap" - desc = "" - icon_state = "cargosoft" - item_state = "helmet" - var/soft_type = "cargo" - - dog_fashion = /datum/dog_fashion/head/cargo_tech - - var/flipped = 0 - -/obj/item/clothing/head/soft/dropped() - icon_state = "[soft_type]soft" - flipped=0 - ..() - -/obj/item/clothing/head/soft/verb/flipcap() - set hidden = 1 - set name = "Flip cap" - if(!usr.client.holder) - return - flip(usr) - - -/obj/item/clothing/head/soft/AltClick(mob/user) - ..() - if(!user.canUseTopic(src, BE_CLOSE, ismonkey(user))) - return - else - flip(user) - - -/obj/item/clothing/head/soft/proc/flip(mob/user) - if(!user.incapacitated()) - flipped = !flipped - if(src.flipped) - icon_state = "[soft_type]soft_flipped" - to_chat(user, "I flip the hat backwards.") - else - icon_state = "[soft_type]soft" - to_chat(user, "I flip the hat back in normal position.") - usr.update_inv_head() //so our mob-overlays update - -/obj/item/clothing/head/soft/examine(mob/user) - . = ..() - . += "Alt-click the cap to flip it [flipped ? "forwards" : "backwards"]." - -/obj/item/clothing/head/soft/red - name = "red cap" - desc = "" - icon_state = "redsoft" - soft_type = "red" - dog_fashion = null - -/obj/item/clothing/head/soft/blue - name = "blue cap" - desc = "" - icon_state = "bluesoft" - soft_type = "blue" - dog_fashion = null - -/obj/item/clothing/head/soft/green - name = "green cap" - desc = "" - icon_state = "greensoft" - soft_type = "green" - dog_fashion = null - -/obj/item/clothing/head/soft/yellow - name = "yellow cap" - desc = "" - icon_state = "yellowsoft" - soft_type = "yellow" - dog_fashion = null - -/obj/item/clothing/head/soft/grey - name = "grey cap" - desc = "" - icon_state = "greysoft" - soft_type = "grey" - dog_fashion = null - -/obj/item/clothing/head/soft/orange - name = "orange cap" - desc = "" - icon_state = "orangesoft" - soft_type = "orange" - dog_fashion = null - -/obj/item/clothing/head/soft/mime - name = "white cap" - desc = "" - icon_state = "mimesoft" - soft_type = "mime" - dog_fashion = null - -/obj/item/clothing/head/soft/purple - name = "purple cap" - desc = "" - icon_state = "purplesoft" - soft_type = "purple" - dog_fashion = null - -/obj/item/clothing/head/soft/black - name = "black cap" - desc = "" - icon_state = "blacksoft" - soft_type = "black" - dog_fashion = null - -/obj/item/clothing/head/soft/rainbow - name = "rainbow cap" - desc = "" - icon_state = "rainbowsoft" - soft_type = "rainbow" - dog_fashion = null - -/obj/item/clothing/head/soft/sec - name = "security cap" - desc = "" - icon_state = "secsoft" - soft_type = "sec" - armor = list("melee" = 30, "bullet" = 25, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 50) - strip_delay = 60 - dog_fashion = null - -/obj/item/clothing/head/soft/emt - name = "EMT cap" - desc = "" - icon_state = "emtsoft" - soft_type = "emt" - dog_fashion = null diff --git a/code/modules/clothing/masks/boxing.dm b/code/modules/clothing/masks/boxing.dm deleted file mode 100644 index a628b7f05b..0000000000 --- a/code/modules/clothing/masks/boxing.dm +++ /dev/null @@ -1,66 +0,0 @@ -/obj/item/clothing/mask/balaclava - name = "balaclava" - desc = "" - icon_state = "balaclava" - item_state = "balaclava" - flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR - visor_flags_inv = HIDEFACE|HIDEFACIALHAIR - w_class = WEIGHT_CLASS_SMALL - actions_types = list(/datum/action/item_action/adjust) - -/obj/item/clothing/mask/balaclava/attack_self(mob/user) - adjustmask(user) - -/obj/item/clothing/mask/luchador - name = "Luchador Mask" - desc = "" - icon_state = "luchag" - item_state = "luchag" - flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR - w_class = WEIGHT_CLASS_SMALL - modifies_speech = TRUE - -/obj/item/clothing/mask/luchador/handle_speech(datum/source, list/speech_args) - var/message = speech_args[SPEECH_MESSAGE] - if(message[1] != "*") - message = replacetext(message, "captain", "CAPITÁN") - message = replacetext(message, "station", "ESTACIÓN") - message = replacetext(message, "sir", "SEÑOR") - message = replacetext(message, "the ", "el ") - message = replacetext(message, "my ", "mi ") - message = replacetext(message, "is ", "es ") - message = replacetext(message, "it's", "es") - message = replacetext(message, "friend", "amigo") - message = replacetext(message, "buddy", "amigo") - message = replacetext(message, "hello", "hola") - message = replacetext(message, " hot", " caliente") - message = replacetext(message, " very ", " muy ") - message = replacetext(message, "sword", "espada") - message = replacetext(message, "library", "biblioteca") - message = replacetext(message, "traitor", "traidor") - message = replacetext(message, "wizard", "mago") - message = uppertext(message) //Things end up looking better this way (no mixed cases), and it fits the macho wrestler image. - if(prob(25)) - message += " OLE!" - speech_args[SPEECH_MESSAGE] = message - -/obj/item/clothing/mask/luchador/tecnicos - name = "Tecnicos Mask" - desc = "" - icon_state = "luchador" - item_state = "luchador" - -/obj/item/clothing/mask/luchador/rudos - name = "Rudos Mask" - desc = "" - icon_state = "luchar" - item_state = "luchar" - -/obj/item/clothing/mask/russian_balaclava - name = "russian balaclava" - desc = "" - icon_state = "rus_balaclava" - item_state = "rus_balaclava" - flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR - visor_flags_inv = HIDEFACE|HIDEFACIALHAIR - w_class = WEIGHT_CLASS_SMALL diff --git a/code/modules/clothing/masks/breath.dm b/code/modules/clothing/masks/breath.dm deleted file mode 100644 index b32df51dec..0000000000 --- a/code/modules/clothing/masks/breath.dm +++ /dev/null @@ -1,41 +0,0 @@ -/obj/item/clothing/mask/breath - desc = "" - name = "breath mask" - icon_state = "breath" - item_state = "m_mask" - body_parts_covered = 0 - clothing_flags = MASKINTERNALS - visor_flags = MASKINTERNALS - w_class = WEIGHT_CLASS_SMALL - gas_transfer_coefficient = 0.1 - permeability_coefficient = 0.5 - actions_types = list(/datum/action/item_action/adjust) - flags_cover = MASKCOVERSMOUTH - visor_flags_cover = MASKCOVERSMOUTH - resistance_flags = NONE - -/obj/item/clothing/mask/breath/suicide_act(mob/living/carbon/user) - user.visible_message("[user] is wrapping \the [src]'s tube around [user.p_their()] neck! It looks like [user.p_theyre()] trying to commit suicide!") - return OXYLOSS - -/obj/item/clothing/mask/breath/attack_self(mob/user) - adjustmask(user) - -/obj/item/clothing/mask/breath/AltClick(mob/user) - ..() - if(!user.canUseTopic(src, BE_CLOSE, ismonkey(user))) - return - else - adjustmask(user) - -/obj/item/clothing/mask/breath/examine(mob/user) - . = ..() - . += "Alt-click [src] to adjust it." - -/obj/item/clothing/mask/breath/medical - desc = "" - name = "medical mask" - icon_state = "medical" - item_state = "m_mask" - permeability_coefficient = 0.01 - equip_delay_other = 10 diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm deleted file mode 100644 index e3a4088934..0000000000 --- a/code/modules/clothing/masks/gasmask.dm +++ /dev/null @@ -1,232 +0,0 @@ -/obj/item/clothing/mask/gas - name = "gas mask" - desc = "" //More accurate - icon_state = "gas_alt" - clothing_flags = BLOCK_GAS_SMOKE_EFFECT | MASKINTERNALS - flags_inv = HIDEEARS|HIDEEYES|HIDEFACE|HIDEFACIALHAIR - w_class = WEIGHT_CLASS_NORMAL - item_state = "gas_alt" - gas_transfer_coefficient = 0.01 - permeability_coefficient = 0.01 - flags_cover = MASKCOVERSEYES | MASKCOVERSMOUTH | PEPPERPROOF - resistance_flags = NONE - -/obj/item/clothing/mask/gas/atmos - name = "atmospheric gas mask" - desc = "" - icon_state = "gas_atmos" - item_state = "gas_atmos" - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 10, "fire" = 20, "acid" = 10) - w_class = WEIGHT_CLASS_SMALL - gas_transfer_coefficient = 0.001 //cargo cult time, this var does nothing but just in case someone actually makes it do something - permeability_coefficient = 0.001 - resistance_flags = FIRE_PROOF - -/obj/item/clothing/mask/gas/atmos/captain - name = "captain's gas mask" - desc = "" - icon_state = "gas_cap" - item_state = "gas_cap" - resistance_flags = FIRE_PROOF | ACID_PROOF - -// **** Welding gas mask **** - -/obj/item/clothing/mask/gas/welding - name = "welding mask" - desc = "" - icon_state = "weldingmask" - flash_protect = FLASH_PROTECTION_WELDER - custom_materials = list(/datum/material/iron=4000, /datum/material/glass=2000) - tint = 2 - armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 55) - actions_types = list(/datum/action/item_action/toggle) - flags_inv = HIDEEARS|HIDEEYES|HIDEFACE - flags_cover = MASKCOVERSEYES - visor_flags_inv = HIDEEYES - visor_flags_cover = MASKCOVERSEYES - resistance_flags = FIRE_PROOF - -/obj/item/clothing/mask/gas/welding/attack_self(mob/user) - weldingvisortoggle(user) - -/obj/item/clothing/mask/gas/welding/up - -/obj/item/clothing/mask/gas/welding/up/Initialize() - . = ..() - visor_toggling() - -// ******************************************************************** - -//Plague Dr suit can be found in clothing/suits/bio.dm -/obj/item/clothing/mask/gas/plaguedoctor - name = "plague doctor mask" - desc = "" - icon_state = "plaguedoctor" - item_state = "gas_mask" - armor = list("melee" = 0, "bullet" = 0, "laser" = 2,"energy" = 2, "bomb" = 0, "bio" = 75, "rad" = 0, "fire" = 0, "acid" = 0) - -/obj/item/clothing/mask/gas/syndicate - name = "syndicate mask" - desc = "" - icon_state = "syndicate" - strip_delay = 60 - -/obj/item/clothing/mask/gas/clown_hat - name = "clown wig and mask" - desc = "" - clothing_flags = MASKINTERNALS - icon_state = "clown" - item_state = "clown_hat" - dye_color = "clown" - w_class = WEIGHT_CLASS_SMALL - flags_cover = MASKCOVERSEYES - resistance_flags = FLAMMABLE - actions_types = list(/datum/action/item_action/adjust) - dog_fashion = /datum/dog_fashion/head/clown - -/obj/item/clothing/mask/gas/clown_hat/ui_action_click(mob/user) - if(!istype(user) || user.incapacitated()) - return - - var/list/options = list() - options["True Form"] = "clown" - options["The Feminist"] = "sexyclown" - options["The Madman"] = "joker" - options["The Rainbow Color"] ="rainbow" - options["The Jester"] ="chaos" //Nepeta33Leijon is holding me captive and forced me to help with this please send help - - var/choice = input(user,"To what form do you wish to Morph this mask?","Morph Mask") in sortList(options) - - if(src && choice && !user.incapacitated() && in_range(user,src)) - icon_state = options[choice] - user.update_inv_wear_mask() - for(var/X in actions) - var/datum/action/A = X - A.UpdateButtonIcon() - to_chat(user, "My Clown Mask has now morphed into [choice], all praise the Honkmother!") - return 1 - -/obj/item/clothing/mask/gas/sexyclown - name = "sexy-clown wig and mask" - desc = "" - clothing_flags = MASKINTERNALS - icon_state = "sexyclown" - item_state = "sexyclown" - flags_cover = MASKCOVERSEYES - resistance_flags = FLAMMABLE - -/obj/item/clothing/mask/gas/mime - name = "mime mask" - desc = "" - clothing_flags = MASKINTERNALS - icon_state = "mime" - item_state = "mime" - w_class = WEIGHT_CLASS_SMALL - flags_cover = MASKCOVERSEYES - resistance_flags = FLAMMABLE - actions_types = list(/datum/action/item_action/adjust) - - -/obj/item/clothing/mask/gas/mime/ui_action_click(mob/user) - if(!istype(user) || user.incapacitated()) - return - - var/list/options = list() - options["Blanc"] = "mime" - options["Triste"] = "sadmime" - options["Effrayé"] = "scaredmime" - options["Excité"] ="sexymime" - - var/choice = input(user,"To what form do you wish to Morph this mask?","Morph Mask") in sortList(options) - - if(src && choice && !user.incapacitated() && in_range(user,src)) - icon_state = options[choice] - user.update_inv_wear_mask() - for(var/X in actions) - var/datum/action/A = X - A.UpdateButtonIcon() - to_chat(user, "My Mime Mask has now morphed into [choice]!") - return 1 - -/obj/item/clothing/mask/gas/monkeymask - name = "monkey mask" - desc = "" - clothing_flags = MASKINTERNALS - icon_state = "monkeymask" - item_state = "monkeymask" - flags_cover = MASKCOVERSEYES - resistance_flags = FLAMMABLE - -/obj/item/clothing/mask/gas/sexymime - name = "sexy mime mask" - desc = "" - clothing_flags = MASKINTERNALS - icon_state = "sexymime" - item_state = "sexymime" - flags_cover = MASKCOVERSEYES - resistance_flags = FLAMMABLE - -/obj/item/clothing/mask/gas/death_commando - name = "Death Commando Mask" - icon_state = "swat" - item_state = "swat" - -/obj/item/clothing/mask/gas/cyborg - name = "cyborg visor" - desc = "" - icon_state = "death" - resistance_flags = FLAMMABLE - -/obj/item/clothing/mask/gas/owl_mask - name = "owl mask" - desc = "" - icon_state = "owl" - clothing_flags = MASKINTERNALS - flags_cover = MASKCOVERSEYES - resistance_flags = FLAMMABLE - -/obj/item/clothing/mask/gas/carp - name = "carp mask" - desc = "" - icon_state = "carp_mask" - -/obj/item/clothing/mask/gas/tiki_mask - name = "tiki mask" - desc = "" - icon_state = "tiki_eyebrow" - item_state = "tiki_eyebrow" - resistance_flags = FLAMMABLE - actions_types = list(/datum/action/item_action/adjust) - dog_fashion = null - - -/obj/item/clothing/mask/gas/tiki_mask/ui_action_click(mob/user) - var/mob/M = usr - var/list/options = list() - options["Original Tiki"] = "tiki_eyebrow" - options["Happy Tiki"] = "tiki_happy" - options["Confused Tiki"] = "tiki_confused" - options["Angry Tiki"] ="tiki_angry" - - var/choice = input(M,"To what form do you wish to change this mask?","Morph Mask") in sortList(options) - - if(src && choice && !M.stat && in_range(M,src)) - icon_state = options[choice] - user.update_inv_wear_mask() - for(var/X in actions) - var/datum/action/A = X - A.UpdateButtonIcon() - to_chat(M, "The Tiki Mask has now changed into the [choice] Mask!") - return 1 - -/obj/item/clothing/mask/gas/tiki_mask/yalp_elor - icon_state = "tiki_yalp" - actions_types = list() - -/obj/item/clothing/mask/gas/hunter - name = "bounty hunting mask" - desc = "" - icon_state = "hunter" - item_state = "hunter" - resistance_flags = FIRE_PROOF | ACID_PROOF - flags_inv = HIDEFACIALHAIR|HIDEFACE|HIDEEYES|HIDEEARS|HIDEHAIR diff --git a/code/modules/clothing/masks/hailer.dm b/code/modules/clothing/masks/hailer.dm deleted file mode 100644 index 6a0fafef76..0000000000 --- a/code/modules/clothing/masks/hailer.dm +++ /dev/null @@ -1,194 +0,0 @@ - -// **** Security gas mask **** - -/obj/item/clothing/mask/gas/sechailer - name = "security gas mask" - desc = "" - actions_types = list(/datum/action/item_action/halt, /datum/action/item_action/adjust) - icon_state = "sechailer" - item_state = "sechailer" - clothing_flags = BLOCK_GAS_SMOKE_EFFECT | MASKINTERNALS - flags_inv = HIDEFACIALHAIR|HIDEFACE - w_class = WEIGHT_CLASS_SMALL - visor_flags = BLOCK_GAS_SMOKE_EFFECT | MASKINTERNALS - visor_flags_inv = HIDEFACE - flags_cover = MASKCOVERSMOUTH | MASKCOVERSEYES | PEPPERPROOF - visor_flags_cover = MASKCOVERSMOUTH | MASKCOVERSEYES | PEPPERPROOF - var/aggressiveness = 2 - var/cooldown_special - var/recent_uses = 0 - var/broken_hailer = 0 - var/safety = TRUE - -/obj/item/clothing/mask/gas/sechailer/swat - name = "\improper SWAT mask" - desc = "" - actions_types = list(/datum/action/item_action/halt) - icon_state = "swat" - item_state = "swat" - aggressiveness = 3 - flags_inv = HIDEFACIALHAIR|HIDEFACE|HIDEEYES|HIDEEARS|HIDEHAIR - visor_flags_inv = 0 - -/obj/item/clothing/mask/gas/sechailer/swat/spacepol - name = "spacepol mask" - desc = "" - icon_state = "spacepol" - item_state = "spacepol" - -/obj/item/clothing/mask/gas/sechailer/cyborg - name = "security hailer" - desc = "" - icon = 'icons/obj/device.dmi' - icon_state = "taperecorder_idle" - aggressiveness = 1 //Borgs are nicecurity! - actions_types = list(/datum/action/item_action/halt) - -/obj/item/clothing/mask/gas/sechailer/screwdriver_act(mob/living/user, obj/item/I) - if(..()) - return TRUE - switch(aggressiveness) - if(1) - to_chat(user, "I set the restrictor to the middle position.") - aggressiveness = 2 - if(2) - to_chat(user, "I set the restrictor to the last position.") - aggressiveness = 3 - if(3) - to_chat(user, "I set the restrictor to the first position.") - aggressiveness = 1 - if(4) - to_chat(user, "I adjust the restrictor but nothing happens, probably because it's broken.") - return TRUE - -/obj/item/clothing/mask/gas/sechailer/wirecutter_act(mob/living/user, obj/item/I) - ..() - if(aggressiveness != 4) - to_chat(user, "I broke the restrictor!") - aggressiveness = 4 - return TRUE - -/obj/item/clothing/mask/gas/sechailer/ui_action_click(mob/user, action) - if(istype(action, /datum/action/item_action/halt)) - halt() - else - adjustmask(user) - -/obj/item/clothing/mask/gas/sechailer/attack_self() - halt() -/obj/item/clothing/mask/gas/sechailer/emag_act(mob/user as mob) - if(safety) - safety = FALSE - to_chat(user, "I silently fry [src]'s vocal circuit with the cryptographic sequencer.") - else - return - -/obj/item/clothing/mask/gas/sechailer/verb/halt() - set hidden = 1 - set name = "HALT" - set src in usr - if(!usr.client.holder) - return - if(!isliving(usr)) - return - if(!can_use(usr)) - return - if(broken_hailer) - to_chat(usr, "\The [src]'s hailing system is broken.") - return - - var/phrase = 0 //selects which phrase to use - var/phrase_text = null - var/phrase_sound = null - - - if(cooldown < world.time - 30) // A cooldown, to stop people being jerks - recent_uses++ - if(cooldown_special < world.time - 180) //A better cooldown that burns jerks - recent_uses = initial(recent_uses) - - switch(recent_uses) - if(3) - to_chat(usr, "\The [src] is starting to heat up.") - if(4) - to_chat(usr, "\The [src] is heating up dangerously from overuse!") - if(5) //overload - broken_hailer = 1 - to_chat(usr, "\The [src]'s power modulator overloads and breaks.") - return - - switch(aggressiveness) // checks if the user has unlocked the restricted phrases - if(1) - phrase = rand(1,5) // set the upper limit as the phrase above the first 'bad cop' phrase, the mask will only play 'nice' phrases - if(2) - phrase = rand(1,11) // default setting, set upper limit to last 'bad cop' phrase. Mask will play good cop and bad cop phrases - if(3) - phrase = rand(1,18) // user has unlocked all phrases, set upper limit to last phrase. The mask will play all phrases - if(4) - phrase = rand(12,18) // user has broke the restrictor, it will now only play shitcurity phrases - - if(!safety) - phrase_text = "FUCK YOUR CUNT YOU SHIT EATING COCKSTORM AND EAT A DONG FUCKING ASS RAMMING SHIT FUCK EAT PENISES IN YOUR FUCK FACE AND SHIT OUT ABORTIONS OF FUCK AND POO AND SHIT IN YOUR ASS YOU COCK FUCK SHIT MONKEY FUCK ASS WANKER FROM THE DEPTHS OF SHIT." - phrase_sound = "emag" - else - - switch(phrase) //sets the properties of the chosen phrase - if(1) // good cop - phrase_text = "HALT! HALT! HALT!" - phrase_sound = "halt" - if(2) - phrase_text = "Stop in the name of the Law." - phrase_sound = "bobby" - if(3) - phrase_text = "Compliance is in your best interest." - phrase_sound = "compliance" - if(4) - phrase_text = "Prepare for justice!" - phrase_sound = "justice" - if(5) - phrase_text = "Running will only increase your sentence." - phrase_sound = "running" - if(6) // bad cop - phrase_text = "Don't move, Creep!" - phrase_sound = "dontmove" - if(7) - phrase_text = "Down on the floor, Creep!" - phrase_sound = "floor" - if(8) - phrase_text = "Dead or alive you're coming with me." - phrase_sound = "robocop" - if(9) - phrase_text = "God made today for the crooks we could not catch yesterday." - phrase_sound = "god" - if(10) - phrase_text = "Freeze, Scum Bag!" - phrase_sound = "freeze" - if(11) - phrase_text = "Stop right there, criminal scum!" - phrase_sound = "imperial" - if(12) // LA-PD - phrase_text = "Stop or I'll bash you." - phrase_sound = "bash" - if(13) - phrase_text = "Go ahead, make my day." - phrase_sound = "harry" - if(14) - phrase_text = "Stop breaking the law, ass hole." - phrase_sound = "asshole" - if(15) - phrase_text = "You have the right to shut the fuck up." - phrase_sound = "stfu" - if(16) - phrase_text = "Shut up crime!" - phrase_sound = "shutup" - if(17) - phrase_text = "Face the wrath of the golden bolt." - phrase_sound = "super" - if(18) - phrase_text = "I am, the LAW!" - phrase_sound = "dredd" - - usr.audible_message("[usr]'s Compli-o-Nator: [phrase_text]") - playsound(src.loc, "sound/voice/complionator/[phrase_sound].ogg", 100, FALSE, 4) - cooldown = world.time - cooldown_special = world.time diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm index 3914fc0043..f36b4b7158 100644 --- a/code/modules/clothing/masks/miscellaneous.dm +++ b/code/modules/clothing/masks/miscellaneous.dm @@ -16,59 +16,6 @@ return ..() -/obj/item/clothing/mask/surgical - name = "sterile mask" - desc = "" - icon_state = "sterile" - item_state = "sterile" - w_class = WEIGHT_CLASS_TINY - flags_inv = HIDEFACE - flags_cover = MASKCOVERSMOUTH - visor_flags_inv = HIDEFACE - visor_flags_cover = MASKCOVERSMOUTH - gas_transfer_coefficient = 0.9 - permeability_coefficient = 0.01 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 25, "rad" = 0, "fire" = 0, "acid" = 0) - actions_types = list(/datum/action/item_action/adjust) - -/obj/item/clothing/mask/surgical/attack_self(mob/user) - adjustmask(user) - -/obj/item/clothing/mask/fakemoustache - name = "fake moustache" - desc = "" - icon_state = "fake-moustache" - flags_inv = HIDEFACE - -/obj/item/clothing/mask/fakemoustache/italian - name = "italian moustache" - desc = "" - modifies_speech = TRUE - -/obj/item/clothing/mask/fakemoustache/italian/handle_speech(datum/source, list/speech_args) - var/message = speech_args[SPEECH_MESSAGE] - if(message[1] != "*") - message = " [message]" - var/list/italian_words = strings("italian_replacement.json", "italian") - - for(var/key in italian_words) - var/value = italian_words[key] - if(islist(value)) - value = pick(value) - - message = replacetextEx(message, " [uppertext(key)]", " [uppertext(value)]") - message = replacetextEx(message, " [capitalize(key)]", " [capitalize(value)]") - message = replacetextEx(message, " [key]", " [value]") - - if(prob(3)) - message += pick(" Ravioli, ravioli, give me the formuoli!"," Mamma-mia!"," Mamma-mia! That's a spicy meat-ball!", " La la la la la funiculi funicula!") - speech_args[SPEECH_MESSAGE] = trim(message) - -/obj/item/clothing/mask/joy - name = "joy mask" - desc = "" - icon_state = "joy" - /obj/item/clothing/mask/pig name = "pig mask" desc = "" @@ -89,90 +36,6 @@ flags_inv = HIDEFACIALHAIR clothing_flags = NONE -/obj/item/clothing/mask/pig/cursed/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, CURSED_MASK_TRAIT) - playsound(get_turf(src), 'sound/blank.ogg', 50, TRUE) - -///frog mask - reeee!! -/obj/item/clothing/mask/frog - name = "frog mask" - desc = "" - icon_state = "frog" - item_state = "frog" - flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR - w_class = WEIGHT_CLASS_SMALL - clothing_flags = VOICEBOX_TOGGLABLE - modifies_speech = TRUE - -/obj/item/clothing/mask/frog/handle_speech(datum/source, list/speech_args) //whenever you speak - if(!CHECK_BITFIELD(clothing_flags, VOICEBOX_DISABLED)) - if(prob(5)) //sometimes, the angry spirit finds others words to speak. - speech_args[SPEECH_MESSAGE] = pick("HUUUUU!!","SMOOOOOKIN'!!","Hello my baby, hello my honey, hello my rag-time gal.", "Feels bad, man.", "GIT DIS GUY OFF ME!!" ,"SOMEBODY STOP ME!!", "NORMIES, GET OUT!!") - else - speech_args[SPEECH_MESSAGE] = pick("Ree!!", "Reee!!","REEE!!","REEEEE!!") //but its usually just angry gibberish, - -/obj/item/clothing/mask/frog/cursed - clothing_flags = NONE - -/obj/item/clothing/mask/frog/cursed/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, CURSED_MASK_TRAIT) - -/obj/item/clothing/mask/frog/cursed/equipped(mob/user, slot) - var/mob/living/carbon/C = user - if(C.wear_mask == src && HAS_TRAIT_FROM(src, TRAIT_NODROP, CURSED_MASK_TRAIT)) - to_chat(user, "[src] was cursed! Ree!!") - return ..() - -/obj/item/clothing/mask/cowmask - name = "cow mask" - icon_state = "cowmask" - item_state = "cowmask" - clothing_flags = VOICEBOX_TOGGLABLE - flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR - w_class = WEIGHT_CLASS_SMALL - modifies_speech = TRUE - -/obj/item/clothing/mask/cowmask/handle_speech(datum/source, list/speech_args) - if(!CHECK_BITFIELD(clothing_flags, VOICEBOX_DISABLED)) - speech_args[SPEECH_MESSAGE] = pick("Moooooooo!","Moo!","Moooo!") - -/obj/item/clothing/mask/cowmask/cursed - name = "cow face" - desc = "" - flags_inv = HIDEFACIALHAIR - clothing_flags = NONE - -/obj/item/clothing/mask/cowmask/cursed/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, CURSED_MASK_TRAIT) - playsound(get_turf(src), 'sound/blank.ogg', 50, TRUE) - -/obj/item/clothing/mask/horsehead - name = "horse head mask" - desc = "" - icon_state = "horsehead" - item_state = "horsehead" - flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDEEYES|HIDEEARS - w_class = WEIGHT_CLASS_SMALL - clothing_flags = VOICEBOX_TOGGLABLE - -/obj/item/clothing/mask/horsehead/handle_speech(datum/source, list/speech_args) - if(!CHECK_BITFIELD(clothing_flags, VOICEBOX_DISABLED)) - speech_args[SPEECH_MESSAGE] = pick("NEEIIGGGHHHH!", "NEEEIIIIGHH!", "NEIIIGGHH!", "HAAWWWWW!", "HAAAWWW!") - -/obj/item/clothing/mask/horsehead/cursed - name = "horse face" - desc = "" - clothing_flags = NONE - flags_inv = HIDEFACIALHAIR - -/obj/item/clothing/mask/horsehead/cursed/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, CURSED_MASK_TRAIT) - playsound(get_turf(src), 'sound/blank.ogg', 50, TRUE) - /obj/item/clothing/mask/rat name = "rat mask" desc = "" @@ -262,74 +125,8 @@ else to_chat(user, "I must be holding [src] in order to tie it!") -/obj/item/clothing/mask/bandana/red - name = "red bandana" - desc = "" - icon_state = "bandred" - -/obj/item/clothing/mask/bandana/blue - name = "blue bandana" - desc = "" - icon_state = "bandblue" - -/obj/item/clothing/mask/bandana/green - name = "green bandana" - desc = "" - icon_state = "bandgreen" - -/obj/item/clothing/mask/bandana/gold - name = "gold bandana" - desc = "" - icon_state = "bandgold" /obj/item/clothing/mask/bandana/black name = "black bandana" desc = "" icon_state = "bandblack" - -/obj/item/clothing/mask/bandana/skull - name = "skull bandana" - desc = "" - icon_state = "bandskull" - -/obj/item/clothing/mask/bandana/durathread - name = "durathread bandana" - desc = "A bandana made from durathread, you wish it would provide some protection to its wearer, but it's far too thin..." - icon_state = "banddurathread" - -/obj/item/clothing/mask/mummy - name = "mummy mask" - desc = "" - icon_state = "mummy_mask" - item_state = "mummy_mask" - flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR - -/obj/item/clothing/mask/scarecrow - name = "sack mask" - desc = "" - icon_state = "scarecrow_sack" - item_state = "scarecrow_sack" - flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR - -/obj/item/clothing/mask/gondola - name = "gondola mask" - desc = "" - icon_state = "gondola" - item_state = "gondola" - flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR - w_class = WEIGHT_CLASS_SMALL - modifies_speech = TRUE - -/obj/item/clothing/mask/gondola/handle_speech(datum/source, list/speech_args) - var/message = speech_args[SPEECH_MESSAGE] - if(message[1] != "*") - message = " [message]" - var/list/spurdo_words = strings("spurdo_replacement.json", "spurdo") - for(var/key in spurdo_words) - var/value = spurdo_words[key] - if(islist(value)) - value = pick(value) - message = replacetextEx(message,regex(uppertext(key),"g"), "[uppertext(value)]") - message = replacetextEx(message,regex(capitalize(key),"g"), "[capitalize(value)]") - message = replacetextEx(message,regex(key,"g"), "[value]") - speech_args[SPEECH_MESSAGE] = trim(message) diff --git a/code/modules/clothing/outfits/event.dm b/code/modules/clothing/outfits/event.dm deleted file mode 100644 index 35788e479d..0000000000 --- a/code/modules/clothing/outfits/event.dm +++ /dev/null @@ -1,23 +0,0 @@ -/datum/outfit/santa //ho ho ho! - name = "Santa Claus" - - uniform = /obj/item/clothing/under/color/red - shoes = /obj/item/clothing/shoes/sneakers/red - head = /obj/item/clothing/head/santa - back = /obj/item/storage/backpack/santabag - r_pocket = /obj/item/flashlight - gloves = /obj/item/clothing/gloves/color/red - backpack_contents = list(/obj/item/a_gift/anything = 5) - -/datum/outfit/santa/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - if(visualsOnly) - return - H.fully_replace_character_name(H.real_name, "Santa Claus") - H.mind.assigned_role = "Santa" - H.mind.special_role = "Santa" - - H.hairstyle = "Long Hair 3" - H.facial_hairstyle = "Beard (Full)" - H.hair_color = "FFF" - H.facial_hair_color = "FFF" - H.update_hair() diff --git a/code/modules/clothing/outfits/standard.dm b/code/modules/clothing/outfits/standard.dm deleted file mode 100644 index 796cdbd0ea..0000000000 --- a/code/modules/clothing/outfits/standard.dm +++ /dev/null @@ -1,245 +0,0 @@ -/datum/outfit/spec_ops - name = "Special Ops Officer" - - uniform = /obj/item/clothing/under/syndicate - shoes = /obj/item/clothing/shoes/combat/swat - gloves = /obj/item/clothing/gloves/combat - glasses = /obj/item/clothing/glasses/thermal/eyepatch - mask = /obj/item/clothing/mask/cigarette/cigar/havana - r_pocket = /obj/item/lighter - back = /obj/item/storage/backpack/satchel/leather - -/datum/outfit/spec_ops/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - if(visualsOnly) - return - -/datum/outfit/space - name = "Standard Space Gear" - - uniform = /obj/item/clothing/under/color/grey - shoes = /obj/item/clothing/shoes/sneakers/black - head = /obj/item/clothing/head/helmet/space - mask = /obj/item/clothing/mask/breath - -/datum/outfit/tournament - name = "tournament standard red" - - uniform = /obj/item/clothing/under/color/red - shoes = /obj/item/clothing/shoes/sneakers/black - suit = /obj/item/clothing/suit/armor/vest - head = /obj/item/clothing/head/helmet/thunderdome - l_hand = /obj/item/kitchen/knife - r_pocket = /obj/item/grenade/smokebomb - -/datum/outfit/tournament/green - name = "tournament standard green" - - uniform = /obj/item/clothing/under/color/green - -/datum/outfit/tournament/gangster - name = "tournament gangster" - - uniform = /obj/item/clothing/under/rank/security/detective - glasses = /obj/item/clothing/glasses/thermal/monocle - head = /obj/item/clothing/head/fedora/det_hat - r_hand = /obj/item/gun/ballistic - l_hand = null - r_pocket = /obj/item/ammo_box/c10mm - -/datum/outfit/tournament/janitor - name = "tournament janitor" - - uniform = /obj/item/clothing/under/rank/civilian/janitor - back = /obj/item/storage/backpack - suit = null - head = null - r_hand = /obj/item/mop - l_hand = /obj/item/reagent_containers/glass/bucket - backpack_contents = list(/obj/item/stack/tile/plasteel=6) - -/datum/outfit/tournament/janitor/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - if(visualsOnly) - return - - var/obj/item/reagent_containers/glass/bucket/bucket = H.get_item_for_held_index(1) - bucket.reagents.add_reagent(/datum/reagent/water,70) - -/datum/outfit/pirate - name = "Space Pirate" - - uniform = /obj/item/clothing/under/costume/pirate - shoes = /obj/item/clothing/shoes/sneakers/brown - suit = /obj/item/clothing/suit/pirate - head = /obj/item/clothing/head/bandana - glasses = /obj/item/clothing/glasses/eyepatch - - -/datum/outfit/pirate/post_equip(mob/living/carbon/human/H) - H.faction |= "pirate" - -/datum/outfit/tunnel_clown - name = "Tunnel Clown" - - uniform = /obj/item/clothing/under/rank/civilian/clown - shoes = /obj/item/clothing/shoes/clown_shoes - gloves = /obj/item/clothing/gloves/color/black - mask = /obj/item/clothing/mask/gas/clown_hat - glasses = /obj/item/clothing/glasses/thermal/monocle - suit = /obj/item/clothing/suit/hooded/chaplain_hoodie - l_pocket = /obj/item/reagent_containers/food/snacks/grown/banana - r_pocket = /obj/item/bikehorn - r_hand = /obj/item/twohanded/fireaxe - -/datum/outfit/tunnel_clown/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - if(visualsOnly) - return - -/datum/outfit/psycho - name = "Masked Killer" - - uniform = /obj/item/clothing/under/misc/overalls - shoes = /obj/item/clothing/shoes/sneakers/white - gloves = /obj/item/clothing/gloves/color/latex - mask = /obj/item/clothing/mask/surgical - head = /obj/item/clothing/head/welding - glasses = /obj/item/clothing/glasses/thermal/monocle - suit = /obj/item/clothing/suit/apron - l_pocket = /obj/item/kitchen/knife - r_pocket = /obj/item/scalpel - r_hand = /obj/item/twohanded/fireaxe - -/datum/outfit/psycho/post_equip(mob/living/carbon/human/H) - for(var/obj/item/carried_item in H.get_equipped_items(TRUE)) - carried_item.add_mob_blood(H)//Oh yes, there will be blood... - for(var/obj/item/I in H.held_items) - I.add_mob_blood(H) - H.regenerate_icons() - -/datum/outfit/assassin - name = "Assassin" - - uniform = /obj/item/clothing/under/suit/black - shoes = /obj/item/clothing/shoes/sneakers/black - gloves = /obj/item/clothing/gloves/color/black - glasses = /obj/item/clothing/glasses/sunglasses - l_hand = /obj/item/storage/secure/briefcase - -/datum/outfit/assassin/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - var/obj/item/clothing/under/U = H.wear_pants - U.attach_accessory(new /obj/item/clothing/accessory/waistcoat(H)) - - if(visualsOnly) - return - - //Could use a type - var/obj/item/storage/secure/briefcase/sec_briefcase = H.get_item_for_held_index(1) - for(var/obj/item/briefcase_item in sec_briefcase) - qdel(briefcase_item) - for(var/i = 3 to 0 step -1) - SEND_SIGNAL(sec_briefcase, COMSIG_TRY_STORAGE_INSERT, new /obj/item/stack/spacecash/c1000, null, TRUE, TRUE) - SEND_SIGNAL(sec_briefcase, COMSIG_TRY_STORAGE_INSERT, new /obj/item/gun/ballistic/revolver/mateba, null, TRUE, TRUE) - SEND_SIGNAL(sec_briefcase, COMSIG_TRY_STORAGE_INSERT, new /obj/item/ammo_box/a357, null, TRUE, TRUE) - -/datum/outfit/centcom/commander - name = "CentCom Commander" - - uniform = /obj/item/clothing/under/rank/centcom/commander - suit = /obj/item/clothing/suit/armor/bulletproof - shoes = /obj/item/clothing/shoes/combat/swat - gloves = /obj/item/clothing/gloves/combat - glasses = /obj/item/clothing/glasses/eyepatch - mask = /obj/item/clothing/mask/cigarette/cigar/cohiba - head = /obj/item/clothing/head/centhat - belt = /obj/item/gun/ballistic/revolver/mateba - r_pocket = /obj/item/lighter - l_pocket = /obj/item/ammo_box/a357 - back = /obj/item/storage/backpack/satchel/leather - -/datum/outfit/centcom/commander/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - if(visualsOnly) - return - -/datum/outfit/soviet - name = "Soviet Admiral" - - uniform = /obj/item/clothing/under/costume/soviet - head = /obj/item/clothing/head/pirate/captain - shoes = /obj/item/clothing/shoes/combat - gloves = /obj/item/clothing/gloves/combat - glasses = /obj/item/clothing/glasses/thermal/eyepatch - suit = /obj/item/clothing/suit/pirate/captain - back = /obj/item/storage/backpack/satchel/leather - belt = /obj/item/gun/ballistic/revolver/mateba - - -/datum/outfit/soviet/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - if(visualsOnly) - return - -/datum/outfit/mobster - name = "Mobster" - - uniform = /obj/item/clothing/under/suit/black_really - head = /obj/item/clothing/head/fedora - shoes = /obj/item/clothing/shoes/laceup - gloves = /obj/item/clothing/gloves/color/black - glasses = /obj/item/clothing/glasses/sunglasses - r_hand = /obj/item/gun/ballistic/automatic/tommygun - -/datum/outfit/mobster/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - if(visualsOnly) - return - -/datum/outfit/plasmaman - name = "Plasmaman" - - head = /obj/item/clothing/head/helmet/space/plasmaman - uniform = /obj/item/clothing/under/plasmaman - r_hand= /obj/item/tank/internals/plasmaman/belt/full - mask = /obj/item/clothing/mask/breath - -/datum/outfit/death_commando - name = "Death Commando" - - uniform = /obj/item/clothing/under/rank/centcom/commander - shoes = /obj/item/clothing/shoes/combat/swat - gloves = /obj/item/clothing/gloves/combat - mask = /obj/item/clothing/mask/gas/sechailer/swat - glasses = /obj/item/clothing/glasses/hud/toggle/thermal - back = /obj/item/storage/backpack/security - suit_store = /obj/item/tank/internals/emergency_oxygen/double - belt = /obj/item/gun/ballistic/revolver/mateba - - backpack_contents = list(/obj/item/storage/box=1,\ - /obj/item/ammo_box/a357=1,\ - /obj/item/storage/firstaid/regular=1,\ - /obj/item/storage/box/flashbangs=1,\ - /obj/item/flashlight=1) - -/datum/outfit/death_commando/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - if(visualsOnly) - return - -/datum/outfit/chrono_agent - name = "Timeline Eradication Agent" - uniform = /obj/item/clothing/under/color/white - mask = /obj/item/clothing/mask/breath - suit_store = /obj/item/tank/internals/oxygen - -/datum/outfit/debug //Debug objs plus hardsuit - name = "Debug outfit" - uniform = /obj/item/clothing/under/misc/patriotsuit - glasses = /obj/item/clothing/glasses/meson/night - mask = /obj/item/clothing/mask/gas/welding/up - gloves = /obj/item/clothing/gloves/combat - belt = /obj/item/storage/belt/utility/chief/full - shoes = /obj/item/clothing/shoes/magboots/advance - suit_store = /obj/item/tank/internals/oxygen - back = /obj/item/storage/backpack/holding - box = /obj/item/storage/box/debugtools - internals_slot = SLOT_S_STORE - backpack_contents = list( - /obj/item/gun/magic/wand/resurrection/debug=1,\ - /obj/item/gun/magic/wand/death/debug=1,\ - /obj/item/debug/human_spawner=1 - ) diff --git a/code/modules/clothing/outfits/vr.dm b/code/modules/clothing/outfits/vr.dm deleted file mode 100644 index f97e643e47..0000000000 --- a/code/modules/clothing/outfits/vr.dm +++ /dev/null @@ -1,22 +0,0 @@ -/datum/outfit/vr - name = "Basic VR" - uniform = /obj/item/clothing/under/color/random - shoes = /obj/item/clothing/shoes/sneakers/black - - -/datum/outfit/vr/pre_equip(mob/living/carbon/human/H) - H.dna.species.before_equip_job(null, H) - -/datum/outfit/vr/syndicate - name = "Syndicate VR Operative - Basic" - uniform = /obj/item/clothing/under/syndicate - shoes = /obj/item/clothing/shoes/combat - gloves = /obj/item/clothing/gloves/combat - back = /obj/item/storage/backpack - belt = /obj/item/gun/ballistic/automatic/pistol - l_pocket = /obj/item/paper/fluff/vr/fluke_ops - backpack_contents = list(/obj/item/kitchen/knife/combat/survival) - -/obj/item/paper/fluff/vr/fluke_ops - name = "Where is my uplink?" - info = "Use the radio in your backpack." diff --git a/code/modules/clothing/outfits/vv_outfit.dm b/code/modules/clothing/outfits/vv_outfit.dm index 50a430f3c4..f623ebf658 100644 --- a/code/modules/clothing/outfits/vv_outfit.dm +++ b/code/modules/clothing/outfits/vv_outfit.dm @@ -106,10 +106,6 @@ typecounts[I.type] = 1 O.backpack_contents = typecounts //TODO : Copy varedits from backpack stuff too. - //Copy implants - O.implants = list() - for(var/obj/item/implant/I in implants) - O.implants |= I.type //Copy to outfit cache var/outfit_name = stripped_input(usr,"Enter the outfit name") O.name = outfit_name diff --git a/code/modules/clothing/shoes/bananashoes.dm b/code/modules/clothing/shoes/bananashoes.dm deleted file mode 100644 index ae119cfa52..0000000000 --- a/code/modules/clothing/shoes/bananashoes.dm +++ /dev/null @@ -1,66 +0,0 @@ -//banana flavored chaos and horror ahead - -/obj/item/clothing/shoes/clown_shoes/banana_shoes - name = "mk-honk prototype shoes" - desc = "" - icon_state = "clown_prototype_off" - actions_types = list(/datum/action/item_action/toggle) - var/on = FALSE - var/always_noslip = FALSE - -/obj/item/clothing/shoes/clown_shoes/banana_shoes/Initialize() - . = ..() - AddComponent(/datum/component/material_container, list(/datum/material/bananium), 200000, TRUE, /obj/item/stack) - AddComponent(/datum/component/squeak, list('sound/blank.ogg'=1), 75) - if(always_noslip) - clothing_flags |= NOSLIP - -/obj/item/clothing/shoes/clown_shoes/banana_shoes/step_action() - . = ..() - var/datum/component/material_container/bananium = GetComponent(/datum/component/material_container) - if(on) - if(bananium.get_material_amount(/datum/material/bananium) < 100) - on = !on - if(!always_noslip) - clothing_flags &= ~NOSLIP - update_icon() - to_chat(loc, "I ran out of bananium!") - else - new /obj/item/grown/bananapeel/specialpeel(get_step(src,turn(usr.dir, 180))) //honk - bananium.use_amount_mat(100, /datum/material/bananium) - -/obj/item/clothing/shoes/clown_shoes/banana_shoes/attack_self(mob/user) - var/datum/component/material_container/bananium = GetComponent(/datum/component/material_container) - var/sheet_amount = bananium.retrieve_all() - if(sheet_amount) - to_chat(user, "I retrieve [sheet_amount] sheets of bananium from the prototype shoes.") - else - to_chat(user, "I cannot retrieve any bananium from the prototype shoes!") - -/obj/item/clothing/shoes/clown_shoes/banana_shoes/examine(mob/user) - . = ..() - . += "The shoes are [on ? "enabled" : "disabled"]." - -/obj/item/clothing/shoes/clown_shoes/banana_shoes/ui_action_click(mob/user) - var/datum/component/material_container/bananium = GetComponent(/datum/component/material_container) - if(bananium.get_material_amount(/datum/material/bananium)) - on = !on - update_icon() - to_chat(user, "I [on ? "activate" : "deactivate"] the prototype shoes.") - if(!always_noslip) - if(on) - clothing_flags |= NOSLIP - else - clothing_flags &= ~NOSLIP - else - to_chat(user, "I need bananium to turn the prototype shoes on!") - -/obj/item/clothing/shoes/clown_shoes/banana_shoes/update_icon() - if(on) - icon_state = "clown_prototype_on" - else - icon_state = "clown_prototype_off" - usr.update_inv_shoes() - for(var/X in actions) - var/datum/action/A = X - A.UpdateButtonIcon() diff --git a/code/modules/clothing/shoes/colour.dm b/code/modules/clothing/shoes/colour.dm deleted file mode 100644 index 70de84d69a..0000000000 --- a/code/modules/clothing/shoes/colour.dm +++ /dev/null @@ -1,89 +0,0 @@ -/obj/item/clothing/shoes/sneakers - dying_key = DYE_REGISTRY_SNEAKERS - -/obj/item/clothing/shoes/sneakers/black - name = "black shoes" - icon_state = "black" - desc = "" - custom_price = 20 - - cold_protection = FEET - min_cold_protection_temperature = SHOES_MIN_TEMP_PROTECT - heat_protection = FEET - max_heat_protection_temperature = SHOES_MAX_TEMP_PROTECT - -/obj/item/clothing/shoes/sneakers/brown - name = "brown shoes" - desc = "" - icon_state = "brown" - -/obj/item/clothing/shoes/sneakers/blue - name = "blue shoes" - icon_state = "blue" - -/obj/item/clothing/shoes/sneakers/green - name = "green shoes" - icon_state = "green" - -/obj/item/clothing/shoes/sneakers/yellow - name = "yellow shoes" - icon_state = "yellow" - -/obj/item/clothing/shoes/sneakers/purple - name = "purple shoes" - icon_state = "purple" - -/obj/item/clothing/shoes/sneakers/red - name = "red shoes" - desc = "" - icon_state = "red" - -/obj/item/clothing/shoes/sneakers/white - name = "white shoes" - icon_state = "white" - permeability_coefficient = 0.01 - -/obj/item/clothing/shoes/sneakers/rainbow - name = "rainbow shoes" - desc = "" - icon_state = "rain_bow" - -/obj/item/clothing/shoes/sneakers/orange - name = "orange shoes" - icon_state = "orange" - -/obj/item/clothing/shoes/sneakers/orange/attack_self(mob/user) - if (src.chained) - src.chained = null - src.slowdown = SHOES_SLOWDOWN - new /obj/item/restraints/handcuffs( user.loc ) - src.icon_state = "orange" - return - -/obj/item/clothing/shoes/sneakers/orange/attackby(obj/H, loc, params) - ..() - // Note: not using istype here because we want to ignore all subtypes - if (H.type == /obj/item/restraints/handcuffs && !chained) - qdel(H) - src.chained = 1 - src.slowdown = 15 - src.icon_state = "orange1" - return - -/obj/item/clothing/shoes/sneakers/orange/allow_attack_hand_drop(mob/user) - if(ishuman(user)) - var/mob/living/carbon/human/C = user - if(C.shoes == src && chained == 1) - to_chat(user, "I need help taking these off!") - return FALSE - return ..() - -/obj/item/clothing/shoes/sneakers/orange/MouseDrop(atom/over) - var/mob/m = usr - if(ishuman(m)) - var/mob/living/carbon/human/c = m - if(c.shoes == src && chained == 1) - to_chat(c, "I need help taking these off!") - return - return ..() - diff --git a/code/modules/clothing/shoes/magboots.dm b/code/modules/clothing/shoes/magboots.dm deleted file mode 100644 index b95f896c74..0000000000 --- a/code/modules/clothing/shoes/magboots.dm +++ /dev/null @@ -1,59 +0,0 @@ -/obj/item/clothing/shoes/magboots - desc = "" - name = "magboots" - icon_state = "magboots0" - var/magboot_state = "magboots" - var/magpulse = 0 - var/slowdown_active = 2 - permeability_coefficient = 0.05 - actions_types = list(/datum/action/item_action/toggle) - strip_delay = 70 - equip_delay_other = 70 - resistance_flags = FIRE_PROOF - -/obj/item/clothing/shoes/magboots/verb/toggle() - set name = "Toggle Magboots" - set hidden = 1 - set src in usr - if(!can_use(usr)) - return - attack_self(usr) - - -/obj/item/clothing/shoes/magboots/attack_self(mob/user) - if(magpulse) - clothing_flags &= ~NOSLIP - slowdown = SHOES_SLOWDOWN - else - clothing_flags |= NOSLIP - slowdown = slowdown_active - magpulse = !magpulse - icon_state = "[magboot_state][magpulse]" - to_chat(user, "I [magpulse ? "enable" : "disable"] the mag-pulse traction system.") - user.update_inv_shoes() //so our mob-overlays update - user.update_gravity(user.has_gravity()) - for(var/X in actions) - var/datum/action/A = X - A.UpdateButtonIcon() - -/obj/item/clothing/shoes/magboots/negates_gravity() - return clothing_flags & NOSLIP - -/obj/item/clothing/shoes/magboots/examine(mob/user) - . = ..() - . += "Its mag-pulse traction system appears to be [magpulse ? "enabled" : "disabled"]." - - -/obj/item/clothing/shoes/magboots/advance - desc = "" - name = "advanced magboots" - icon_state = "advmag0" - magboot_state = "advmag" - slowdown_active = SHOES_SLOWDOWN - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF - -/obj/item/clothing/shoes/magboots/syndie - desc = "" - name = "blood-red magboots" - icon_state = "syndiemag0" - magboot_state = "syndiemag" diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm deleted file mode 100644 index adddddc73e..0000000000 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ /dev/null @@ -1,420 +0,0 @@ - - -/obj/item/clothing/shoes/sneakers/mime - name = "mime shoes" - icon_state = "mime" - -/obj/item/clothing/shoes/combat //basic syndicate combat boots for nuke ops and mob corpses - name = "combat boots" - desc = "" - icon_state = "jackboots" - item_state = "jackboots" - lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' - armor = list("melee" = 25, "bullet" = 25, "laser" = 25, "energy" = 25, "bomb" = 50, "bio" = 10, "rad" = 0, "fire" = 70, "acid" = 50) - strip_delay = 40 - resistance_flags = NONE - permeability_coefficient = 0.05 //Thick soles, and covers the ankle - pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes - -/obj/item/clothing/shoes/combat/swat //overpowered boots for death squads - name = "\improper SWAT boots" - desc = "" - permeability_coefficient = 0.01 - clothing_flags = NOSLIP - armor = list("melee" = 40, "bullet" = 30, "laser" = 25, "energy" = 25, "bomb" = 50, "bio" = 30, "rad" = 30, "fire" = 90, "acid" = 50) - -/obj/item/clothing/shoes/sandal - desc = "" - name = "sandals" - icon_state = "wizard" - strip_delay = 5 - equip_delay_other = 50 - permeability_coefficient = 0.9 - -/obj/item/clothing/shoes/sandal/marisa - desc = "" - name = "magic shoes" - icon_state = "black" - resistance_flags = FIRE_PROOF | ACID_PROOF - -/obj/item/clothing/shoes/sandal/magic - name = "magical sandals" - desc = "" - resistance_flags = FIRE_PROOF | ACID_PROOF - -/obj/item/clothing/shoes/galoshes - desc = "" - name = "galoshes" - icon_state = "galoshes" - permeability_coefficient = 0.01 - clothing_flags = NOSLIP - slowdown = SHOES_SLOWDOWN+1 - strip_delay = 30 - equip_delay_other = 50 - resistance_flags = NONE - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 40, "acid" = 75) - can_be_bloody = FALSE - custom_price = 100 - -/obj/item/clothing/shoes/galoshes/dry - name = "absorbent galoshes" - desc = "" - icon_state = "galoshes_dry" - -/obj/item/clothing/shoes/galoshes/dry/step_action() - var/turf/open/t_loc = get_turf(src) - SEND_SIGNAL(t_loc, COMSIG_TURF_MAKE_DRY, TURF_WET_WATER, TRUE, INFINITY) - -/obj/item/clothing/shoes/clown_shoes - desc = "" - name = "clown shoes" - icon_state = "clown" - item_state = "clown_shoes" - slowdown = SHOES_SLOWDOWN+1 - pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes/clown - var/datum/component/waddle - var/enabled_waddle = TRUE - -/obj/item/clothing/shoes/clown_shoes/Initialize() - . = ..() - AddComponent(/datum/component/squeak, list('sound/blank.ogg'=1), 50) - -/obj/item/clothing/shoes/clown_shoes/equipped(mob/user, slot) - . = ..() - if(slot == SLOT_SHOES) - if(enabled_waddle) - waddle = user.AddComponent(/datum/component/waddling) - if(user.mind && user.mind.assigned_role == "Clown") - SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "clownshoes", /datum/mood_event/clownshoes) - -/obj/item/clothing/shoes/clown_shoes/dropped(mob/user) - . = ..() - QDEL_NULL(waddle) - if(user.mind && user.mind.assigned_role == "Clown") - SEND_SIGNAL(user, COMSIG_CLEAR_MOOD_EVENT, "clownshoes") - -/obj/item/clothing/shoes/clown_shoes/CtrlClick(mob/living/user) - if(!isliving(user)) - return - if(user.get_active_held_item() != src) - to_chat(user, "I must hold the [src] in your hand to do this!") - return - if (!enabled_waddle) - to_chat(user, "I switch off the waddle dampeners!") - enabled_waddle = TRUE - else - to_chat(user, "I switch on the waddle dampeners!") - enabled_waddle = FALSE - -/obj/item/clothing/shoes/clown_shoes/jester - name = "jester shoes" - desc = "" - icon_state = "jester_shoes" - -/obj/item/clothing/shoes/jackboots - name = "jackboots" - desc = "" - icon_state = "jackboots" - item_state = "jackboots" - lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' - strip_delay = 30 - equip_delay_other = 50 - resistance_flags = NONE - permeability_coefficient = 0.05 //Thick soles, and covers the ankle - pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes - -/obj/item/clothing/shoes/jackboots/fast - slowdown = -1 - -/obj/item/clothing/shoes/winterboots - name = "winter boots" - desc = "" - icon_state = "winterboots" - item_state = "winterboots" - permeability_coefficient = 0.15 - cold_protection = FEET|LEGS - min_cold_protection_temperature = SHOES_MIN_TEMP_PROTECT - heat_protection = FEET|LEGS - max_heat_protection_temperature = SHOES_MAX_TEMP_PROTECT - pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes - -/obj/item/clothing/shoes/workboots - name = "work boots" - desc = "" - icon_state = "workboots" - item_state = "jackboots" - lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' - permeability_coefficient = 0.15 - strip_delay = 20 - equip_delay_other = 40 - pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes - -/obj/item/clothing/shoes/workboots/mining - name = "mining boots" - desc = "" - icon_state = "explorer" - resistance_flags = FIRE_PROOF - -/obj/item/clothing/shoes/cult - name = "\improper Nar'Sien invoker boots" - desc = "" - icon_state = "cult" - item_state = "cult" - cold_protection = FEET - min_cold_protection_temperature = SHOES_MIN_TEMP_PROTECT - heat_protection = FEET - max_heat_protection_temperature = SHOES_MAX_TEMP_PROTECT - -/obj/item/clothing/shoes/cult/alt - name = "cultist boots" - icon_state = "cultalt" - -/obj/item/clothing/shoes/cult/alt/ghost - item_flags = DROPDEL - -/obj/item/clothing/shoes/cult/alt/ghost/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, CULT_TRAIT) - -/obj/item/clothing/shoes/cyborg - name = "cyborg boots" - desc = "" - icon_state = "boots" - -/obj/item/clothing/shoes/laceup - name = "laceup shoes" - desc = "" - icon_state = "laceups" - equip_delay_other = 50 - -/obj/item/clothing/shoes/roman - name = "roman sandals" - desc = "" - icon_state = "roman" - item_state = "roman" - strip_delay = 100 - equip_delay_other = 100 - permeability_coefficient = 0.9 - -/obj/item/clothing/shoes/griffin - name = "griffon boots" - desc = "" - icon_state = "griffinboots" - item_state = "griffinboots" - pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes - -/obj/item/clothing/shoes/bhop - name = "jump boots" - desc = "" - icon_state = "jetboots" - item_state = "jetboots" - resistance_flags = FIRE_PROOF - pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes - actions_types = list(/datum/action/item_action/bhop) - permeability_coefficient = 0.05 - strip_delay = 30 - var/jumpdistance = 5 //-1 from to see the actual distance, e.g 4 goes over 3 tiles - var/jumpspeed = 3 - var/recharging_rate = 60 //default 6 seconds between each dash - var/recharging_time = 0 //time until next dash - -/obj/item/clothing/shoes/bhop/ui_action_click(mob/user, action) - if(!isliving(user)) - return - - if(recharging_time > world.time) - to_chat(user, "The boot's internal propulsion needs to recharge still!") - return - - var/atom/target = get_edge_target_turf(user, user.dir) //gets the user's direction - - if (user.throw_at(target, jumpdistance, jumpspeed, spin = FALSE, diagonals_first = TRUE)) - playsound(src, 'sound/blank.ogg', 50, TRUE, TRUE) - user.visible_message("[usr] dashes forward into the air!") - recharging_time = world.time + recharging_rate - else - to_chat(user, "Something prevents you from dashing forward!") - -/obj/item/clothing/shoes/singery - name = "yellow performer's boots" - desc = "" - icon_state = "ysing" - equip_delay_other = 50 - -/obj/item/clothing/shoes/singerb - name = "blue performer's boots" - desc = "" - icon_state = "bsing" - equip_delay_other = 50 - -/obj/item/clothing/shoes/bronze - name = "bronze boots" - desc = "" - icon = 'icons/obj/clothing/clockwork_garb.dmi' - icon_state = "clockwork_treads" - -/obj/item/clothing/shoes/bronze/Initialize() - . = ..() - AddComponent(/datum/component/squeak, list('sound/blank.ogg' = 1), 50) - -/obj/item/clothing/shoes/wheelys - name = "Wheely-Heels" - desc = "" //Thanks Fel - icon_state = "wheelys" - item_state = "wheelys" - actions_types = list(/datum/action/item_action/wheelys) - var/wheelToggle = FALSE //False means wheels are not popped out - var/obj/vehicle/ridden/scooter/wheelys/W - -/obj/item/clothing/shoes/wheelys/Initialize() - . = ..() - W = new /obj/vehicle/ridden/scooter/wheelys(null) - -/obj/item/clothing/shoes/wheelys/ui_action_click(mob/user, action) - if(!isliving(user)) - return - if(!istype(user.get_item_by_slot(SLOT_SHOES), /obj/item/clothing/shoes/wheelys)) - to_chat(user, "I must be wearing the wheely-heels to use them!") - return - if(!(W.is_occupant(user))) - wheelToggle = FALSE - if(wheelToggle) - W.unbuckle_mob(user) - wheelToggle = FALSE - return - W.forceMove(get_turf(user)) - W.buckle_mob(user) - wheelToggle = TRUE - -/obj/item/clothing/shoes/wheelys/dropped(mob/user) - if(wheelToggle) - W.unbuckle_mob(user) - wheelToggle = FALSE - ..() - -/obj/item/clothing/shoes/wheelys/Destroy() - QDEL_NULL(W) - . = ..() - -/obj/item/clothing/shoes/kindleKicks - name = "Kindle Kicks" - desc = "" - icon_state = "kindleKicks" - item_state = "kindleKicks" - actions_types = list(/datum/action/item_action/kindleKicks) - var/lightCycle = 0 - var/active = FALSE - -/obj/item/clothing/shoes/kindleKicks/ui_action_click(mob/user, action) - if(active) - return - active = TRUE - set_light(2, 2, 3, l_color = rgb(rand(0,255),rand(0,255),rand(0,255))) - addtimer(CALLBACK(src, PROC_REF(lightUp)), 5) - -/obj/item/clothing/shoes/kindleKicks/proc/lightUp(mob/user) - if(lightCycle < 15) - set_light(2, 2, 3, l_color = rgb(rand(0,255),rand(0,255),rand(0,255))) - lightCycle += 1 - addtimer(CALLBACK(src, PROC_REF(lightUp)), 5) - else - set_light(0) - lightCycle = 0 - active = FALSE - -/obj/item/clothing/shoes/russian - name = "russian boots" - desc = "" - icon_state = "rus_shoes" - item_state = "rus_shoes" - pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes - -/obj/item/clothing/shoes/cowboy - name = "cowboy boots" - desc = "" - icon_state = "cowboy_brown" - permeability_coefficient = 0.05 //these are quite tall - pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes - custom_price = 35 //poor assistants cant afford 50 credits - var/list/occupants = list() - var/max_occupants = 4 - -/obj/item/clothing/shoes/cowboy/Initialize() - . = ..() - if(prob(2)) - var/mob/living/simple_animal/hostile/retaliate/poison/snake/bootsnake = new/mob/living/simple_animal/hostile/retaliate/poison/snake(src) - occupants += bootsnake - - -/obj/item/clothing/shoes/cowboy/equipped(mob/living/carbon/user, slot) - . = ..() - if(slot == SLOT_SHOES) - for(var/mob/living/occupant in occupants) - occupant.forceMove(user.drop_location()) - user.visible_message("[user] recoils as something slithers out of [src].", "I feel a sudden stabbing pain in your [pick("foot", "toe", "ankle")]!") - user.Knockdown(20) //Is one second paralyze better here? I feel you would fall on your ass in some fashion. - user.apply_damage(5, BRUTE, pick(BODY_ZONE_R_LEG, BODY_ZONE_L_LEG)) - if(istype(occupant, /mob/living/simple_animal/hostile/retaliate/poison)) - user.reagents.add_reagent(/datum/reagent/toxin, 7) - occupants.Cut() - -/obj/item/clothing/shoes/cowboy/MouseDrop_T(mob/living/target, mob/living/user) - . = ..() - if(user.stat || !(user.mobility_flags & MOBILITY_USE) || user.restrained() || !Adjacent(user) || !user.Adjacent(target) || target.stat == DEAD) - return - if(occupants.len >= max_occupants) - to_chat(user, "[src] are full!") - return - if(istype(target, /mob/living/simple_animal/hostile/retaliate/poison/snake)) - occupants += target - target.forceMove(src) - to_chat(user, "[target] slithers into [src].") - -/obj/item/clothing/shoes/cowboy/container_resist(mob/living/user) - if(!do_after(user, 10, target = user)) - return - user.forceMove(user.drop_location()) - occupants -= user - -/obj/item/clothing/shoes/cowboy/white - name = "white cowboy boots" - icon_state = "cowboy_white" - -/obj/item/clothing/shoes/cowboy/black - name = "black cowboy boots" - desc = "" - icon_state = "cowboy_black" - -/obj/item/clothing/shoes/cowboy/fancy - name = "bilton wrangler boots" - desc = "" - icon_state = "cowboy_fancy" - permeability_coefficient = 0.08 - -/obj/item/clothing/shoes/cowboy/lizard - name = "lizard skin boots" - desc = "" - icon_state = "lizardboots_green" - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 40, "acid" = 0) //lizards like to stay warm - -/obj/item/clothing/shoes/cowboy/lizard/masterwork - name = "\improper Hugs-The-Feet lizard skin boots" - desc = "" - icon_state = "lizardboots_blue" - -/obj/effect/spawner/lootdrop/lizardboots - name = "random lizard boot quality" - desc = "" - icon = 'icons/obj/clothing/shoes.dmi' - icon_state = "lizardboots_green" - loot = list( - /obj/item/clothing/shoes/cowboy/lizard = 7, - /obj/item/clothing/shoes/cowboy/lizard/masterwork = 1) - -/obj/item/clothing/shoes/cookflops - desc = "" - name = "grilling sandals" - icon_state = "cookflops" diff --git a/code/modules/clothing/suits/_suits.dm b/code/modules/clothing/suits/_suits.dm index de870b1741..2b327e54ce 100644 --- a/code/modules/clothing/suits/_suits.dm +++ b/code/modules/clothing/suits/_suits.dm @@ -2,7 +2,6 @@ icon = 'icons/obj/clothing/suits.dmi' name = "suit" var/fire_resist = T0C+100 - allowed = list(/obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) drop_sound = 'sound/blank.ogg' pickup_sound = 'sound/blank.ogg' @@ -15,10 +14,6 @@ /obj/item/clothing/suit/worn_overlays(isinhands = FALSE) . = list() if(!isinhands) -// if(damaged_clothes) -// . += mutable_appearance('icons/effects/item_damage.dmi', "damaged[blood_overlay_type]") -// if(HAS_BLOOD_DNA(src)) -// . += mutable_appearance('icons/effects/blood.dmi', "[blood_overlay_type]blood") var/mob/living/carbon/human/M = loc if(ishuman(M) && M.wear_pants) var/obj/item/clothing/under/U = M.wear_pants @@ -31,6 +26,5 @@ ..() if(ismob(loc)) var/mob/M = loc -// M.update_inv_wear_suit() M.update_inv_shirt() M.update_inv_armor() diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm deleted file mode 100644 index e621d14d98..0000000000 --- a/code/modules/clothing/suits/armor.dm +++ /dev/null @@ -1,279 +0,0 @@ -/obj/item/clothing/suit/armor - allowed = null - body_parts_covered = CHEST - cold_protection = CHEST|GROIN - min_cold_protection_temperature = ARMOR_MIN_TEMP_PROTECT - heat_protection = CHEST|GROIN - max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT - strip_delay = 60 - equip_delay_other = 40 - max_integrity = 250 - resistance_flags = NONE - armor = list("melee" = 30, "bullet" = 30, "laser" = 30, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) - -/obj/item/clothing/suit/armor/Initialize() - . = ..() - if(!allowed) - allowed = GLOB.security_vest_allowed - -/obj/item/clothing/suit/armor/vest - name = "armor vest" - desc = "" - icon_state = "armoralt" - item_state = "armoralt" - blood_overlay_type = "armor" - dog_fashion = /datum/dog_fashion/back - -/obj/item/clothing/suit/armor/vest/alt - desc = "" - icon_state = "armor" - item_state = "armor" - -/obj/item/clothing/suit/armor/vest/old - name = "degrading armor vest" - desc = "" - icon_state = "armor" - item_state = "armor" - slowdown = 1 - -/obj/item/clothing/suit/armor/vest/blueshirt - name = "large armor vest" - desc = "" - icon_state = "blueshift" - item_state = "blueshift" - custom_premium_price = 600 - -/obj/item/clothing/suit/armor/hos - name = "armored greatcoat" - desc = "" - icon_state = "hos" - item_state = "greatcoat" - body_parts_covered = CHEST|GROIN|ARMS|LEGS - armor = list("melee" = 30, "bullet" = 30, "laser" = 30, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 90) - cold_protection = CHEST|GROIN|LEGS|ARMS - heat_protection = CHEST|GROIN|LEGS|ARMS - strip_delay = 80 - -/obj/item/clothing/suit/armor/hos/trenchcoat - name = "armored trenchcoat" - desc = "" - icon_state = "hostrench" - item_state = "hostrench" - flags_inv = 0 - strip_delay = 80 - -/obj/item/clothing/suit/armor/vest/warden - name = "warden's jacket" - desc = "" - icon_state = "warden_alt" - item_state = "armor" - body_parts_covered = CHEST|GROIN|ARMS - cold_protection = CHEST|GROIN|ARMS|HANDS - heat_protection = CHEST|GROIN|ARMS|HANDS - strip_delay = 70 - resistance_flags = FLAMMABLE - dog_fashion = null - -/obj/item/clothing/suit/armor/vest/warden/alt - name = "warden's armored jacket" - desc = "" - icon_state = "warden_jacket" - -/obj/item/clothing/suit/armor/vest/leather - name = "security overcoat" - desc = "" - icon_state = "leathercoat-sec" - item_state = "hostrench" - body_parts_covered = CHEST|GROIN|ARMS|LEGS - cold_protection = CHEST|GROIN|LEGS|ARMS - heat_protection = CHEST|GROIN|LEGS|ARMS - dog_fashion = null - -/obj/item/clothing/suit/armor/vest/capcarapace - name = "captain's carapace" - desc = "" - icon_state = "capcarapace" - item_state = "armor" - body_parts_covered = CHEST|GROIN - armor = list("melee" = 50, "bullet" = 40, "laser" = 50, "energy" = 50, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 90) - dog_fashion = null - resistance_flags = FIRE_PROOF - -/obj/item/clothing/suit/armor/vest/capcarapace/syndicate - name = "syndicate captain's vest" - desc = "" - icon_state = "syndievest" - -/obj/item/clothing/suit/armor/vest/capcarapace/alt - name = "captain's parade jacket" - desc = "" - icon_state = "capformal" - item_state = "capspacesuit" - -/obj/item/clothing/suit/armor/riot - name = "riot suit" - desc = "" - icon_state = "riot" - item_state = "swat_suit" - body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - armor = list("melee" = 50, "bullet" = 10, "laser" = 10, "energy" = 10, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 80) - clothing_flags = BLOCKS_SHOVE_KNOCKDOWN - strip_delay = 80 - equip_delay_other = 60 - -/obj/item/clothing/suit/armor/bone - name = "bone armor" - desc = "" - icon_state = "bonearmor" - item_state = "bonearmor" - blood_overlay_type = "armor" - armor = list("melee" = 35, "bullet" = 25, "laser" = 25, "energy" = 35, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) - body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS - -/obj/item/clothing/suit/armor/bulletproof - name = "bulletproof armor" - desc = "" - icon_state = "bulletproof" - item_state = "armor" - blood_overlay_type = "armor" - armor = list("melee" = 15, "bullet" = 60, "laser" = 10, "energy" = 10, "bomb" = 40, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) - strip_delay = 70 - equip_delay_other = 50 - -/obj/item/clothing/suit/armor/laserproof - name = "reflector vest" - desc = "" - icon_state = "armor_reflec" - item_state = "armor_reflec" - blood_overlay_type = "armor" - body_parts_covered = CHEST|GROIN|ARMS - cold_protection = CHEST|GROIN|ARMS - heat_protection = CHEST|GROIN|ARMS - armor = list("melee" = 10, "bullet" = 10, "laser" = 60, "energy" = 60, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF - var/hit_reflect_chance = 50 - -/obj/item/clothing/suit/armor/laserproof/IsReflect(def_zone) - if(!(def_zone in list(BODY_ZONE_CHEST, BODY_ZONE_PRECISE_GROIN, BODY_ZONE_L_ARM, BODY_ZONE_R_ARM))) //If not shot where ablative is covering you, you don't get the reflection bonus! - return FALSE - if (prob(hit_reflect_chance)) - return TRUE - -/obj/item/clothing/suit/armor/vest/det_suit - name = "detective's armor vest" - desc = "" - icon_state = "detective-armor" - resistance_flags = FLAMMABLE - dog_fashion = null - -/obj/item/clothing/suit/armor/vest/det_suit/Initialize() - . = ..() - allowed = GLOB.detective_vest_allowed - -//All of the armor below is mostly unused - -/obj/item/clothing/suit/armor/centcom - name = "\improper CentCom armor" - desc = "" - icon_state = "centcom" - item_state = "centcom" - w_class = WEIGHT_CLASS_BULKY - body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - allowed = list(/obj/item/restraints/handcuffs, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) - clothing_flags = THICKMATERIAL - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - cold_protection = CHEST | GROIN | LEGS | FEET | ARMS | HANDS - min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT - heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT - armor = list("melee" = 80, "bullet" = 80, "laser" = 50, "energy" = 50, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 90) - -/obj/item/clothing/suit/armor/heavy - name = "heavy armor" - desc = "" - icon_state = "heavy" - item_state = "swat_suit" - w_class = WEIGHT_CLASS_BULKY - gas_transfer_coefficient = 0.9 - clothing_flags = THICKMATERIAL - body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - slowdown = 3 - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - armor = list("melee" = 80, "bullet" = 80, "laser" = 50, "energy" = 50, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 90) - -/obj/item/clothing/suit/armor/tdome - body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - clothing_flags = THICKMATERIAL - cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - armor = list("melee" = 80, "bullet" = 80, "laser" = 50, "energy" = 50, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 90) - -/obj/item/clothing/suit/armor/tdome/red - name = "thunderdome suit" - desc = "" - icon_state = "tdred" - item_state = "tdred" - -/obj/item/clothing/suit/armor/tdome/green - name = "thunderdome suit" - desc = "" //classy. - icon_state = "tdgreen" - item_state = "tdgreen" - - -/obj/item/clothing/suit/armor/riot/knight - name = "plate armour" - desc = "" - icon_state = "knight_green" - item_state = "knight_green" - -/obj/item/clothing/suit/armor/riot/knight/yellow - icon_state = "knight_yellow" - item_state = "knight_yellow" - -/obj/item/clothing/suit/armor/riot/knight/blue - icon_state = "knight_blue" - item_state = "knight_blue" - -/obj/item/clothing/suit/armor/riot/knight/red - icon_state = "knight_red" - item_state = "knight_red" - -/obj/item/clothing/suit/armor/riot/knight/greyscale - name = "knight armour" - desc = "" - icon_state = "knight_greyscale" - item_state = "knight_greyscale" - material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR//Can change color and add prefix - armor = list("melee" = 35, "bullet" = 10, "laser" = 10, "energy" = 10, "bomb" = 10, "bio" = 10, "rad" = 10, "fire" = 40, "acid" = 40) - -/obj/item/clothing/suit/armor/vest/durathread - name = "durathread vest" - desc = "" - icon_state = "durathread" - item_state = "durathread" - strip_delay = 60 - equip_delay_other = 40 - max_integrity = 200 - resistance_flags = FLAMMABLE - armor = list("melee" = 20, "bullet" = 10, "laser" = 30, "energy" = 40, "bomb" = 15, "bio" = 0, "rad" = 0, "fire" = 40, "acid" = 50) - -/obj/item/clothing/suit/armor/vest/russian - name = "russian vest" - desc = "" - icon_state = "rus_armor" - item_state = "rus_armor" - armor = list("melee" = 25, "bullet" = 30, "laser" = 0, "energy" = 10, "bomb" = 10, "bio" = 0, "rad" = 20, "fire" = 20, "acid" = 50) - -/obj/item/clothing/suit/armor/vest/russian_coat - name = "russian battle coat" - desc = "" - icon_state = "rus_coat" - item_state = "rus_coat" - body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT - armor = list("melee" = 25, "bullet" = 20, "laser" = 20, "energy" = 30, "bomb" = 20, "bio" = 50, "rad" = 20, "fire" = -10, "acid" = 50) diff --git a/code/modules/clothing/suits/bio.dm b/code/modules/clothing/suits/bio.dm deleted file mode 100644 index 77284a6507..0000000000 --- a/code/modules/clothing/suits/bio.dm +++ /dev/null @@ -1,100 +0,0 @@ -//Biosuit complete with shoes (in the item sprite) -/obj/item/clothing/head/bio_hood - name = "bio hood" - icon_state = "bio" - desc = "" - permeability_coefficient = 0.01 - clothing_flags = THICKMATERIAL | BLOCK_GAS_SMOKE_EFFECT | SNUG_FIT - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 80, "fire" = 30, "acid" = 100) - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEHAIR|HIDEFACIALHAIR|HIDEFACE - resistance_flags = ACID_PROOF - flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF - -/obj/item/clothing/suit/bio_suit - name = "bio suit" - desc = "" - icon_state = "bio" - item_state = "bio_suit" - w_class = WEIGHT_CLASS_BULKY - gas_transfer_coefficient = 0.01 - permeability_coefficient = 0.01 - clothing_flags = THICKMATERIAL - body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - slowdown = 0.5 - allowed = list(/obj/item/tank/internals, /obj/item/reagent_containers/dropper, /obj/item/flashlight/pen, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/reagent_containers/glass/beaker) - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 80, "fire" = 30, "acid" = 100) - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - strip_delay = 70 - equip_delay_other = 70 - resistance_flags = ACID_PROOF - -//Standard biosuit, orange stripe -/obj/item/clothing/head/bio_hood/general - icon_state = "bio_general" - -/obj/item/clothing/suit/bio_suit/general - icon_state = "bio_general" - - -//Virology biosuit, green stripe -/obj/item/clothing/head/bio_hood/virology - icon_state = "bio_virology" - -/obj/item/clothing/suit/bio_suit/virology - icon_state = "bio_virology" - - -//Security biosuit, grey with red stripe across the chest -/obj/item/clothing/head/bio_hood/security - armor = list("melee" = 25, "bullet" = 15, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 100, "rad" = 80, "fire" = 30, "acid" = 100) - icon_state = "bio_security" - -/obj/item/clothing/suit/bio_suit/security - armor = list("melee" = 25, "bullet" = 15, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 100, "rad" = 80, "fire" = 30, "acid" = 100) - icon_state = "bio_security" - -/obj/item/clothing/suit/bio_suit/security/Initialize() - . = ..() - allowed += GLOB.security_vest_allowed - -//Janitor's biosuit, grey with purple arms -/obj/item/clothing/head/bio_hood/janitor - icon_state = "bio_janitor" - -/obj/item/clothing/suit/bio_suit/janitor - icon_state = "bio_janitor" - -/obj/item/clothing/suit/bio_suit/janitor/Initialize() - . = ..() - allowed += list(/obj/item/storage/bag/trash, /obj/item/reagent_containers/spray) - -//Scientist's biosuit, white with a pink-ish hue -/obj/item/clothing/head/bio_hood/scientist - icon_state = "bio_scientist" - -/obj/item/clothing/suit/bio_suit/scientist - icon_state = "bio_scientist" - -//CMO's biosuit, blue stripe -/obj/item/clothing/head/bio_hood/cmo - icon_state = "bio_cmo" - -/obj/item/clothing/suit/bio_suit/cmo - icon_state = "bio_cmo" - -/obj/item/clothing/suit/bio_suit/cmo/Initialize() - . = ..() - allowed += list(/obj/item/melee/classic_baton/telescopic) - -//Plague Dr mask can be found in clothing/masks/gasmask.dm -/obj/item/clothing/suit/bio_suit/plaguedoctorsuit - name = "plague doctor suit" - desc = "" - icon_state = "plaguedoctor" - item_state = "bio_suit" - strip_delay = 40 - equip_delay_other = 20 - -/obj/item/clothing/suit/bio_suit/plaguedoctorsuit/Initialize() - . = ..() - allowed += list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/cane) diff --git a/code/modules/clothing/suits/chaplainsuits.dm b/code/modules/clothing/suits/chaplainsuits.dm deleted file mode 100644 index e0de76a2ec..0000000000 --- a/code/modules/clothing/suits/chaplainsuits.dm +++ /dev/null @@ -1,87 +0,0 @@ -//Chaplain Suit Subtypes -//If any new staple chaplain items get added, put them in these lists -/obj/item/clothing/suit/chaplainsuit - allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) - -/obj/item/clothing/suit/hooded/chaplainsuit - allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) - -//Suits -/obj/item/clothing/suit/chaplainsuit/holidaypriest - name = "holiday priest" - desc = "" - icon_state = "holidaypriest" - item_state = "w_suit" - body_parts_covered = CHEST|GROIN|LEGS|ARMS - flags_inv = HIDEJUMPSUIT - -/obj/item/clothing/suit/chaplainsuit/nun - name = "nun robe" - desc = "" - icon_state = "nun" - item_state = "nun" - body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS - flags_inv = HIDESHOES|HIDEJUMPSUIT - -/obj/item/clothing/suit/chaplainsuit/bishoprobe - name = "bishop's robes" - desc = "" - icon_state = "bishoprobe" - item_state = "bishoprobe" - body_parts_covered = CHEST|GROIN|LEGS|ARMS - flags_inv = HIDEJUMPSUIT - -/obj/item/clothing/suit/chaplainsuit/studentuni - name = "student robe" - desc = "" - icon_state = "studentuni" - item_state = "studentuni" - body_parts_covered = ARMS|CHEST - -/obj/item/clothing/suit/chaplainsuit/witchhunter - name = "witchunter garb" - desc = "" - icon_state = "witchhunter" - item_state = "witchhunter" - body_parts_covered = CHEST|GROIN|LEGS|ARMS - -/obj/item/clothing/suit/hooded/chaplainsuit/monkfrock - name = "monk's frock" - desc = "" - icon_state = "monkfrock" - item_state = "monkfrock" - body_parts_covered = CHEST|GROIN|LEGS|ARMS - hoodtype = /obj/item/clothing/head/hooded/monkfrock - -/obj/item/clothing/head/hooded/monkfrock - name = "monk's hood" - desc = "" - icon_state = "monkhood" - item_state = "monkhood" - body_parts_covered = HEAD - flags_inv = HIDEHAIR|HIDEEARS - -/obj/item/clothing/suit/chaplainsuit/monkrobeeast - name = "eastern monk's robes" - desc = "" - icon_state = "monkrobeeast" - item_state = "monkrobeeast" - body_parts_covered = GROIN|LEGS - flags_inv = HIDEJUMPSUIT - -/obj/item/clothing/suit/chaplainsuit/whiterobe - name = "white robe" - desc = "" - icon_state = "whiterobe" - item_state = "whiterobe" - body_parts_covered = CHEST|GROIN|LEGS|ARMS - flags_inv = HIDEJUMPSUIT - -/obj/item/clothing/suit/chaplainsuit/clownpriest - name = "Robes of the Honkmother" - desc = "" - icon_state = "clownpriest" - item_state = "clownpriest" - body_parts_covered = CHEST|GROIN|LEGS|ARMS - flags_inv = HIDEJUMPSUIT - allowed = list(/obj/item/megaphone/clown, /obj/item/soap, /obj/item/reagent_containers/food/snacks/pie/cream, /obj/item/bikehorn, /obj/item/bikehorn/golden, /obj/item/bikehorn/airhorn, /obj/item/instrument/bikehorn, /obj/item/reagent_containers/food/drinks/soda_cans/canned_laughter, /obj/item/toy/crayon, /obj/item/toy/crayon/spraycan, /obj/item/toy/crayon/spraycan/lubecan, /obj/item/grown/bananapeel, /obj/item/reagent_containers/food/snacks/grown/banana) diff --git a/code/modules/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm deleted file mode 100644 index 7531e1de6c..0000000000 --- a/code/modules/clothing/suits/labcoat.dm +++ /dev/null @@ -1,49 +0,0 @@ -/obj/item/clothing/suit/toggle/labcoat - name = "labcoat" - desc = "" - icon_state = "labcoat" - item_state = "labcoat" - blood_overlay_type = "coat" - body_parts_covered = CHEST|ARMS - allowed = list(/obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/soap, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 50, "rad" = 0, "fire" = 50, "acid" = 50) - togglename = "buttons" - species_exception = list(/datum/species/golem) - -/obj/item/clothing/suit/toggle/labcoat/cmo - name = "chief medical officer's labcoat" - desc = "" - icon_state = "labcoat_cmo" - item_state = "labcoat_cmo" - -/obj/item/clothing/suit/toggle/labcoat/emt - name = "\improper EMT's jacket" - desc = "" - icon_state = "labcoat_emt" - item_state = "labcoat_cmo" - -/obj/item/clothing/suit/toggle/labcoat/mad - name = "\proper The Mad's labcoat" - desc = "" - icon_state = "labgreen" - item_state = "labgreen" - -/obj/item/clothing/suit/toggle/labcoat/genetics - name = "geneticist labcoat" - desc = "" - icon_state = "labcoat_gen" - -/obj/item/clothing/suit/toggle/labcoat/chemist - name = "chemist labcoat" - desc = "" - icon_state = "labcoat_chem" - -/obj/item/clothing/suit/toggle/labcoat/virologist - name = "virologist labcoat" - desc = "" - icon_state = "labcoat_vir" - -/obj/item/clothing/suit/toggle/labcoat/science - name = "scientist labcoat" - desc = "" - icon_state = "labcoat_tox" diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm deleted file mode 100644 index aac60d277f..0000000000 --- a/code/modules/clothing/suits/miscellaneous.dm +++ /dev/null @@ -1,652 +0,0 @@ -/* - * Contains: - * Costume - * Misc - */ - -/* - * Costume - */ -/obj/item/clothing/suit/hooded/flashsuit - name = "flashy costume" - desc = "" - icon_state = "flashsuit" - item_state = "armor" - body_parts_covered = CHEST|GROIN - hoodtype = /obj/item/clothing/head/hooded/flashsuit - -/obj/item/clothing/head/hooded/flashsuit - name = "flash button" - desc = "" - icon_state = "flashsuit" - body_parts_covered = HEAD - flags_inv = HIDEHAIR|HIDEEARS|HIDEFACIALHAIR|HIDEFACE|HIDEMASK - -/obj/item/clothing/suit/pirate - name = "pirate coat" - desc = "" - icon_state = "pirate" - item_state = "pirate" - allowed = list(/obj/item/clothing/glasses/eyepatch, /obj/item/reagent_containers/food/drinks/bottle/rum) - -/obj/item/clothing/suit/pirate/captain - name = "pirate captain coat" - desc = "" - icon_state = "hgpirate" - item_state = "hgpirate" - - -/obj/item/clothing/suit/cyborg_suit - name = "cyborg suit" - desc = "" - icon_state = "death" - item_state = "death" - flags_1 = CONDUCT_1 - fire_resist = T0C+5200 - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - - -/obj/item/clothing/suit/justice - name = "justice suit" - desc = "" //Needs no fixing - icon_state = "justice" - item_state = "justice" - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - - -/obj/item/clothing/suit/judgerobe - name = "judge's robe" - desc = "" - icon_state = "judge" - item_state = "judge" - body_parts_covered = CHEST|GROIN|LEGS|ARMS - allowed = list(/obj/item/storage/fancy/cigarettes, /obj/item/stack/spacecash) - flags_inv = HIDEJUMPSUIT - - -/obj/item/clothing/suit/apron/overalls - name = "coveralls" - desc = "" - icon_state = "overalls" - item_state = "overalls" - body_parts_covered = CHEST|GROIN|LEGS - -/obj/item/clothing/suit/apron/purple_bartender - name = "purple bartender apron" - desc = "" - icon_state = "purplebartenderapron" - item_state = "purplebartenderapron" - body_parts_covered = CHEST|GROIN|LEGS - -/obj/item/clothing/suit/syndicatefake - name = "black and red space suit replica" - icon_state = "syndicate-black-red" - item_state = "syndicate-black-red" - desc = "" - w_class = WEIGHT_CLASS_NORMAL - allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy) - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - resistance_flags = NONE - -/obj/item/clothing/suit/hastur - name = "\improper Hastur's robe" - desc = "" - icon_state = "hastur" - item_state = "hastur" - body_parts_covered = CHEST|GROIN|LEGS|ARMS - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - - -/obj/item/clothing/suit/imperium_monk - name = "\improper Imperium monk suit" - desc = "" - icon_state = "imperium_monk" - item_state = "imperium_monk" - body_parts_covered = CHEST|GROIN|LEGS|ARMS - flags_inv = HIDESHOES|HIDEJUMPSUIT - allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen) - - -/obj/item/clothing/suit/chickensuit - name = "chicken suit" - desc = "" - icon_state = "chickensuit" - item_state = "chickensuit" - body_parts_covered = CHEST|ARMS|GROIN|LEGS|FEET - flags_inv = HIDESHOES|HIDEJUMPSUIT - - -/obj/item/clothing/suit/monkeysuit - name = "monkey suit" - desc = "" - icon_state = "monkeysuit" - item_state = "monkeysuit" - body_parts_covered = CHEST|ARMS|GROIN|LEGS|FEET|HANDS - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - -/obj/item/clothing/suit/toggle/owlwings - name = "owl cloak" - desc = "" - icon_state = "owl_wings" - item_state = "owl_wings" - togglename = "wings" - body_parts_covered = ARMS|CHEST - actions_types = list(/datum/action/item_action/toggle_wings) - -/obj/item/clothing/suit/toggle/owlwings/Initialize() - . = ..() - allowed = GLOB.security_vest_allowed - -/obj/item/clothing/suit/toggle/owlwings/griffinwings - name = "griffon cloak" - desc = "" - icon_state = "griffin_wings" - item_state = "griffin_wings" - -/obj/item/clothing/suit/cardborg - name = "cardborg suit" - desc = "" - icon_state = "cardborg" - item_state = "cardborg" - body_parts_covered = CHEST|GROIN - flags_inv = HIDEJUMPSUIT - dog_fashion = /datum/dog_fashion/back - -/obj/item/clothing/suit/snowman - name = "snowman outfit" - desc = "" - icon_state = "snowman" - item_state = "snowman" - body_parts_covered = CHEST|GROIN - flags_inv = HIDEJUMPSUIT - -/obj/item/clothing/suit/poncho - name = "poncho" - desc = "" - icon_state = "classicponcho" - item_state = "classicponcho" - -/obj/item/clothing/suit/poncho/green - name = "green poncho" - desc = "" - icon_state = "greenponcho" - item_state = "greenponcho" - -/obj/item/clothing/suit/poncho/red - name = "red poncho" - desc = "" - icon_state = "redponcho" - item_state = "redponcho" - -/obj/item/clothing/suit/poncho/ponchoshame - name = "poncho of shame" - desc = "" - icon_state = "ponchoshame" - item_state = "ponchoshame" - -/obj/item/clothing/suit/poncho/ponchoshame/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, SHAMEBRERO_TRAIT) - -/obj/item/clothing/suit/whitedress - name = "white dress" - desc = "" - icon_state = "white_dress" - item_state = "w_suit" - body_parts_covered = CHEST|GROIN|LEGS|FEET - flags_inv = HIDEJUMPSUIT|HIDESHOES - -/obj/item/clothing/suit/hooded/carp_costume - name = "carp costume" - desc = "" - icon_state = "carp_casual" - item_state = "labcoat" - body_parts_covered = CHEST|GROIN|ARMS - cold_protection = CHEST|GROIN|ARMS - min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT //Space carp like space, so you should too - allowed = list(/obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/pneumatic_cannon/speargun) - hoodtype = /obj/item/clothing/head/hooded/carp_hood - -/obj/item/clothing/head/hooded/carp_hood - name = "carp hood" - desc = "" - icon_state = "carp_casual" - body_parts_covered = HEAD - cold_protection = HEAD - min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT - flags_inv = HIDEHAIR|HIDEEARS - -/obj/item/clothing/head/hooded/carp_hood/equipped(mob/living/carbon/human/user, slot) - ..() - if (slot == SLOT_HEAD) - user.faction |= "carp" - -/obj/item/clothing/head/hooded/carp_hood/dropped(mob/living/carbon/human/user) - ..() - if (user.head == src) - user.faction -= "carp" - -/obj/item/clothing/suit/hooded/ian_costume //It's Ian, rub his bell- oh god what happened to his inside parts? - name = "corgi costume" - desc = "" - icon_state = "ian" - item_state = "labcoat" - body_parts_covered = CHEST|GROIN|ARMS - //cold_protection = CHEST|GROIN|ARMS - //min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT - allowed = list() - hoodtype = /obj/item/clothing/head/hooded/ian_hood - dog_fashion = /datum/dog_fashion/back - -/obj/item/clothing/head/hooded/ian_hood - name = "corgi hood" - desc = "" - icon_state = "ian" - body_parts_covered = HEAD - //cold_protection = HEAD - //min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT - flags_inv = HIDEHAIR|HIDEEARS - -/obj/item/clothing/suit/hooded/bee_costume // It's Hip! - name = "bee costume" - desc = "" - icon_state = "bee" - item_state = "labcoat" - body_parts_covered = CHEST|GROIN|ARMS - clothing_flags = THICKMATERIAL - hoodtype = /obj/item/clothing/head/hooded/bee_hood - -/obj/item/clothing/head/hooded/bee_hood - name = "bee hood" - desc = "" - icon_state = "bee" - body_parts_covered = HEAD - clothing_flags = THICKMATERIAL - flags_inv = HIDEHAIR|HIDEEARS - dynamic_hair_suffix = "" - -/obj/item/clothing/suit/hooded/bloated_human //OH MY GOD WHAT HAVE YOU DONE!?!?!? - name = "bloated human suit" - desc = "" - icon_state = "lingspacesuit" - item_state = "labcoat" - body_parts_covered = CHEST|GROIN|ARMS - allowed = list() - actions_types = list(/datum/action/item_action/toggle_human_head) - hoodtype = /obj/item/clothing/head/hooded/human_head - - -/obj/item/clothing/head/hooded/human_head - name = "bloated human head" - desc = "" - icon_state = "lingspacehelmet" - body_parts_covered = HEAD - flags_cover = HEADCOVERSEYES - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR - -/obj/item/clothing/suit/security/officer/russian - name = "\improper Russian officer's jacket" - desc = "" - icon_state = "officertanjacket" - item_state = "officertanjacket" - body_parts_covered = CHEST|ARMS - -/obj/item/clothing/suit/shrine_maiden - name = "shrine maiden's outfit" - desc = "" - icon_state = "shrine_maiden" - item_state = "shrine_maiden" - body_parts_covered = CHEST|GROIN|LEGS|ARMS - flags_inv = HIDEJUMPSUIT - -/* - * Misc - */ - -/obj/item/clothing/suit/straight_jacket - name = "straight jacket" - desc = "" //Straight jacket is antifun - icon_state = "straight_jacket" - item_state = "straight_jacket" - body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - equip_delay_self = 50 - strip_delay = 60 - breakouttime = 3000 - -/obj/item/clothing/suit/ianshirt - name = "worn shirt" - desc = "" - icon_state = "ianshirt" - item_state = "ianshirt" - -/obj/item/clothing/suit/nerdshirt - name = "gamer shirt" - desc = "" - icon_state = "nerdshirt" - item_state = "nerdshirt" - -/obj/item/clothing/suit/vapeshirt //wearing this is asking to get beat. - name = "Vape Naysh shirt" - desc = "" - icon_state = "vapeshirt" - item_state = "vapeshirt" - -/obj/item/clothing/suit/striped_sweater - name = "striped sweater" - desc = "" - icon_state = "waldo_shirt" - item_state = "waldo_shirt" - -/obj/item/clothing/suit/jacket - name = "bomber jacket" - desc = "" - icon_state = "bomberjacket" - item_state = "brownjsuit" - allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter) - body_parts_covered = CHEST|GROIN|ARMS - cold_protection = CHEST|GROIN|ARMS - min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT - -/obj/item/clothing/suit/jacket/leather - name = "leather jacket" - desc = "" - icon_state = "leatherjacket" - item_state = "hostrench" - resistance_flags = NONE - max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT - allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/gun/ballistic/automatic/pistol, /obj/item/gun/ballistic/revolver, /obj/item/gun/ballistic/revolver/detective) - -/obj/item/clothing/suit/jacket/leather/overcoat - name = "leather overcoat" - desc = "" - icon_state = "leathercoat" - body_parts_covered = CHEST|GROIN|ARMS|LEGS - cold_protection = CHEST|GROIN|ARMS|LEGS - -/obj/item/clothing/suit/jacket/puffer - name = "puffer jacket" - desc = "" - icon_state = "pufferjacket" - item_state = "hostrench" - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 50, "rad" = 0, "fire" = 0, "acid" = 0) - -/obj/item/clothing/suit/jacket/puffer/vest - name = "puffer vest" - desc = "" - icon_state = "puffervest" - item_state = "armor" - body_parts_covered = CHEST|GROIN - cold_protection = CHEST|GROIN - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 30, "rad" = 0, "fire" = 0, "acid" = 0) - -/obj/item/clothing/suit/jacket/miljacket - name = "military jacket" - desc = "" - icon_state = "militaryjacket" - item_state = "militaryjacket" - allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/gun/ballistic/automatic/pistol, /obj/item/gun/ballistic/revolver) - -/obj/item/clothing/suit/jacket/letterman - name = "letterman jacket" - desc = "" - icon_state = "letterman" - item_state = "letterman" - -/obj/item/clothing/suit/jacket/letterman_red - name = "red letterman jacket" - desc = "" - icon_state = "letterman_red" - item_state = "letterman_red" - -/obj/item/clothing/suit/jacket/letterman_syndie - name = "blood-red letterman jacket" - desc = "" - icon_state = "letterman_s" - item_state = "letterman_s" - -/obj/item/clothing/suit/jacket/letterman_nanotrasen - name = "blue letterman jacket" - desc = "" - icon_state = "letterman_n" - item_state = "letterman_n" - -/obj/item/clothing/suit/dracula - name = "dracula coat" - desc = "" - icon_state = "draculacoat" - item_state = "draculacoat" - -/obj/item/clothing/suit/drfreeze_coat - name = "doctor freeze's labcoat" - desc = "" - icon_state = "drfreeze_coat" - item_state = "drfreeze_coat" - -/obj/item/clothing/suit/gothcoat - name = "gothic coat" - desc = "" - icon_state = "gothcoat" - item_state = "gothcoat" - -/obj/item/clothing/suit/nemes - name = "pharoah tunic" - desc = "" - icon_state = "pharoah" - item_state = "pharoah" - body_parts_covered = CHEST|GROIN - -/obj/item/clothing/suit/caution - name = "wet floor sign" - desc = "" - icon_state = "caution" - lefthand_file = 'icons/mob/inhands/equipment/custodial_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/custodial_righthand.dmi' - force = 1 - throwforce = 3 - throw_speed = 2 - throw_range = 5 - w_class = WEIGHT_CLASS_SMALL - body_parts_covered = CHEST|GROIN - attack_verb = list("warned", "cautioned", "smashed") - armor = list("melee" = 5, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - - - -// WINTER COATS - -/obj/item/clothing/suit/hooded/wintercoat - name = "winter coat" - desc = "" - icon_state = "coatwinter" - item_state = "coatwinter" - body_parts_covered = CHEST|GROIN|ARMS - cold_protection = CHEST|GROIN|ARMS - min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0) - allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter) - -/obj/item/clothing/head/hooded/winterhood - name = "winter hood" - desc = "" - icon_state = "winterhood" - body_parts_covered = HEAD - cold_protection = HEAD - min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT - flags_inv = HIDEHAIR|HIDEEARS - -/obj/item/clothing/suit/hooded/wintercoat/captain - name = "captain's winter coat" - icon_state = "coatcaptain" - item_state = "coatcaptain" - armor = list("melee" = 25, "bullet" = 30, "laser" = 30, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 50) - hoodtype = /obj/item/clothing/head/hooded/winterhood/captain - -/obj/item/clothing/suit/hooded/wintercoat/captain/Initialize() - . = ..() - allowed = GLOB.security_wintercoat_allowed - -/obj/item/clothing/head/hooded/winterhood/captain - icon_state = "winterhood_captain" - -/obj/item/clothing/suit/hooded/wintercoat/security - name = "security winter coat" - icon_state = "coatsecurity" - item_state = "coatsecurity" - armor = list("melee" = 25, "bullet" = 15, "laser" = 30, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 45) - hoodtype = /obj/item/clothing/head/hooded/winterhood/security - -/obj/item/clothing/suit/hooded/wintercoat/security/Initialize() - . = ..() - allowed = GLOB.security_wintercoat_allowed - -/obj/item/clothing/head/hooded/winterhood/security - icon_state = "winterhood_security" - -/obj/item/clothing/suit/hooded/wintercoat/medical - name = "medical winter coat" - icon_state = "coatmedical" - item_state = "coatmedical" - allowed = list(/obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 50, "rad" = 0, "fire" = 0, "acid" = 45) - hoodtype = /obj/item/clothing/head/hooded/winterhood/medical - -/obj/item/clothing/head/hooded/winterhood/medical - icon_state = "winterhood_medical" - -/obj/item/clothing/suit/hooded/wintercoat/science - name = "science winter coat" - icon_state = "coatscience" - item_state = "coatscience" - allowed = list(/obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - hoodtype = /obj/item/clothing/head/hooded/winterhood/science - -/obj/item/clothing/head/hooded/winterhood/science - icon_state = "winterhood_science" - -/obj/item/clothing/suit/hooded/wintercoat/engineering - name = "engineering winter coat" - icon_state = "coatengineer" - item_state = "coatengineer" - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 20, "fire" = 30, "acid" = 45) - allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter) - hoodtype = /obj/item/clothing/head/hooded/winterhood/engineering - -/obj/item/clothing/head/hooded/winterhood/engineering - icon_state = "winterhood_engineer" - -/obj/item/clothing/suit/hooded/wintercoat/engineering/atmos - name = "atmospherics winter coat" - icon_state = "coatatmos" - item_state = "coatatmos" - hoodtype = /obj/item/clothing/head/hooded/winterhood/engineering/atmos - -/obj/item/clothing/head/hooded/winterhood/engineering/atmos - icon_state = "winterhood_atmos" - -/obj/item/clothing/suit/hooded/wintercoat/hydro - name = "hydroponics winter coat" - icon_state = "coathydro" - item_state = "coathydro" - allowed = list(/obj/item/reagent_containers/spray/plantbgone, /obj/item/plant_analyzer, /obj/item/seeds, /obj/item/reagent_containers/glass/bottle, /obj/item/cultivator, /obj/item/reagent_containers/spray/pestspray, /obj/item/hatchet, /obj/item/storage/bag/plants, /obj/item/toy, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/storage/fancy/cigarettes, /obj/item/lighter) - hoodtype = /obj/item/clothing/head/hooded/winterhood/hydro - -/obj/item/clothing/head/hooded/winterhood/hydro - icon_state = "winterhood_hydro" - -/obj/item/clothing/suit/hooded/wintercoat/cargo - name = "cargo winter coat" - icon_state = "coatcargo" - item_state = "coatcargo" - hoodtype = /obj/item/clothing/head/hooded/winterhood/cargo - -/obj/item/clothing/head/hooded/winterhood/cargo - icon_state = "winterhood_cargo" - -/obj/item/clothing/suit/hooded/wintercoat/miner - name = "mining winter coat" - icon_state = "coatminer" - item_state = "coatminer" - allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter) - armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - hoodtype = /obj/item/clothing/head/hooded/winterhood/miner - -/obj/item/clothing/head/hooded/ablative - name = "ablative hood" - desc = "" - icon_state = "ablativehood" - armor = list("melee" = 10, "bullet" = 10, "laser" = 60, "energy" = 50, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) - strip_delay = 30 - var/hit_reflect_chance = 50 - -/obj/item/clothing/head/hooded/ablative/equipped(mob/living/carbon/human/user, slot) - ..() - to_chat(user, "As you put on the hood, a visor shifts into place and starts analyzing the people around you. Neat!") - ADD_TRAIT(user, TRAIT_SECURITY_HUD, HELMET_TRAIT) - var/datum/atom_hud/H = GLOB.huds[DATA_HUD_SECURITY_ADVANCED] - H.add_hud_to(user) - -/obj/item/clothing/head/hooded/ablative/dropped(mob/living/carbon/human/user) - ..() - to_chat(user, "You take off the hood, removing the visor in the process and disabling its integrated hud.") - REMOVE_TRAIT(user, TRAIT_SECURITY_HUD, HELMET_TRAIT) - var/datum/atom_hud/H = GLOB.huds[DATA_HUD_SECURITY_ADVANCED] - H.remove_hud_from(user) - -/obj/item/clothing/head/hooded/ablative/IsReflect(def_zone) - if(!(def_zone in BODY_ZONE_HEAD)) //If not shot where ablative is covering you, you don't get the reflection bonus! - return FALSE - if (prob(hit_reflect_chance)) - return TRUE - -/obj/item/clothing/suit/hooded/ablative - name = "ablative trenchcoat" - desc = "" - icon_state = "ablativecoat" - item_state = "ablativecoat" - body_parts_covered = CHEST|GROIN|LEGS|ARMS - armor = list("melee" = 10, "bullet" = 10, "laser" = 60, "energy" = 50, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) - hoodtype = /obj/item/clothing/head/hooded/ablative - strip_delay = 30 - equip_delay_other = 40 - var/hit_reflect_chance = 50 - -/obj/item/clothing/suit/hooded/ablative/Initialize() - . = ..() - allowed = GLOB.security_vest_allowed - -/obj/item/clothing/suit/hooded/ablative/IsReflect(def_zone) - if(!(def_zone in list(BODY_ZONE_CHEST, BODY_ZONE_PRECISE_GROIN, BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG))) //If not shot where ablative is covering you, you don't get the reflection bonus! - return FALSE - if (prob(hit_reflect_chance)) - return TRUE - -/obj/item/clothing/head/hooded/winterhood/miner - icon_state = "winterhood_miner" - -/obj/item/clothing/suit/spookyghost - name = "spooky ghost" - desc = "" - icon_state = "bedsheet" - user_vars_to_edit = list("name" = "Spooky Ghost", "real_name" = "Spooky Ghost" , "incorporeal_move" = INCORPOREAL_MOVE_BASIC, "appearance_flags" = KEEP_TOGETHER|TILE_BOUND, "alpha" = 150) - alternate_worn_layer = ABOVE_BODY_FRONT_LAYER //so the bedsheet goes over everything but fire - -/obj/item/clothing/suit/bronze - name = "bronze suit" - desc = "" - icon = 'icons/obj/clothing/clockwork_garb.dmi' - icon_state = "clockwork_cuirass_old" - armor = list("melee" = 5, "bullet" = 0, "laser" = -5, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 20) - -/obj/item/clothing/suit/ghost_sheet - name = "ghost sheet" - desc = "" - icon_state = "ghost_sheet" - item_state = "ghost_sheet" - throwforce = 0 - throw_speed = 1 - throw_range = 2 - w_class = WEIGHT_CLASS_TINY - flags_inv = HIDEGLOVES|HIDEEARS|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR - alternate_worn_layer = UNDER_HAT_LAYER diff --git a/code/modules/clothing/suits/toggles.dm b/code/modules/clothing/suits/toggles.dm index a1ddda166c..1af94c73b3 100644 --- a/code/modules/clothing/suits/toggles.dm +++ b/code/modules/clothing/suits/toggles.dm @@ -46,19 +46,6 @@ body_parts_covered = initial(body_parts_covered) prevent_crits = initial(prevent_crits) -// if(!slot_flags == ITEM_SLOT_HEAD|ITEM_SLOT_HIP) // Prevents people right clicking visored helmets on their hip and exploiting coverage -// body_parts_covered = initial(body_parts_covered) - -/* -/obj/item/clothing/ui_action_click() - . = ..() - if(hoodtype) - ToggleHood() - -/obj/item/clothing/item_action_slot_check(slot, mob/user) - if(slot == SLOT_ARMOR|SLOT_CLOAK) - return 1 -*/ /obj/item/clothing/equipped(mob/user, slot) if(hoodtype && slot != SLOT_ARMOR|SLOT_CLOAK) RemoveHood() @@ -121,9 +108,7 @@ H.update_inv_neck() H.update_inv_pants() H.update_fov_angles() -// for(var/X in actions) -// var/datum/action/A = X -// A.UpdateButtonIcon() + else RemoveHood() testing("endtoggle") diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm deleted file mode 100644 index 4eb6b5aae2..0000000000 --- a/code/modules/clothing/suits/utility.dm +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Contains: - * Fire protection - * Bomb protection - * Radiation protection - */ - -/* - * Fire protection - */ - -/obj/item/clothing/suit/fire - name = "emergency firesuit" - desc = "" - icon_state = "fire" - item_state = "ro_suit" - w_class = WEIGHT_CLASS_BULKY - gas_transfer_coefficient = 0.9 - permeability_coefficient = 0.5 - body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/extinguisher, /obj/item/crowbar) - slowdown = 1 - armor = list("melee" = 15, "bullet" = 5, "laser" = 20, "energy" = 10, "bomb" = 20, "bio" = 10, "rad" = 20, "fire" = 100, "acid" = 50) - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - clothing_flags = STOPSPRESSUREDAMAGE | THICKMATERIAL - heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT - cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT - strip_delay = 60 - equip_delay_other = 60 - resistance_flags = FIRE_PROOF - -/obj/item/clothing/suit/fire/firefighter - icon_state = "firesuit" - item_state = "firefighter" - -/obj/item/clothing/suit/fire/heavy - name = "heavy firesuit" - desc = "" - icon_state = "thermal" - item_state = "firefighter" - slowdown = 1.5 - -/obj/item/clothing/suit/fire/atmos - name = "firesuit" - desc = "" - icon_state = "atmos_firesuit" - item_state = "firesuit_atmos" - max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT - -/* - * Bomb protection - */ -/obj/item/clothing/head/bomb_hood - name = "bomb hood" - desc = "" - icon_state = "bombsuit" - clothing_flags = THICKMATERIAL | SNUG_FIT - armor = list("melee" = 20, "bullet" = 0, "laser" = 20,"energy" = 10, "bomb" = 100, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 50) - flags_inv = HIDEFACE|HIDEMASK|HIDEEARS|HIDEEYES|HIDEHAIR|HIDEFACIALHAIR - dynamic_hair_suffix = "" - dynamic_fhair_suffix = "" - cold_protection = HEAD - min_cold_protection_temperature = HELMET_MIN_TEMP_PROTECT - heat_protection = HEAD - max_heat_protection_temperature = HELMET_MAX_TEMP_PROTECT - strip_delay = 70 - equip_delay_other = 70 - flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF - resistance_flags = NONE - - -/obj/item/clothing/suit/bomb_suit - name = "bomb suit" - desc = "" - icon_state = "bombsuit" - item_state = "bombsuit" - w_class = WEIGHT_CLASS_BULKY - gas_transfer_coefficient = 0.01 - permeability_coefficient = 0.01 - clothing_flags = THICKMATERIAL - body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - slowdown = 2 - armor = list("melee" = 20, "bullet" = 0, "laser" = 20,"energy" = 10, "bomb" = 100, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 50) - flags_inv = HIDEJUMPSUIT - heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT - cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - min_cold_protection_temperature = ARMOR_MIN_TEMP_PROTECT - strip_delay = 70 - equip_delay_other = 70 - resistance_flags = NONE - - -/obj/item/clothing/head/bomb_hood/security - icon_state = "bombsuit_sec" - item_state = "bombsuit_sec" - -/obj/item/clothing/suit/bomb_suit/security - icon_state = "bombsuit_sec" - item_state = "bombsuit_sec" - allowed = list(/obj/item/restraints/handcuffs) - - -/obj/item/clothing/head/bomb_hood/white - icon_state = "bombsuit_white" - item_state = "bombsuit_white" - -/obj/item/clothing/suit/bomb_suit/white - icon_state = "bombsuit_white" - item_state = "bombsuit_white" - -/* -* Radiation protection -*/ - -/obj/item/clothing/head/radiation - name = "radiation hood" - icon_state = "rad" - desc = "" - clothing_flags = THICKMATERIAL | SNUG_FIT - flags_inv = HIDEMASK|HIDEEARS|HIDEFACE|HIDEEYES|HIDEHAIR|HIDEFACIALHAIR - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 60, "rad" = 100, "fire" = 30, "acid" = 30) - strip_delay = 60 - equip_delay_other = 60 - flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF - resistance_flags = NONE - rad_flags = RAD_PROTECT_CONTENTS - -/obj/item/clothing/suit/radiation - name = "radiation suit" - desc = "" - icon_state = "rad" - item_state = "rad_suit" - w_class = WEIGHT_CLASS_BULKY - gas_transfer_coefficient = 0.9 - permeability_coefficient = 0.5 - clothing_flags = THICKMATERIAL - body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/geiger_counter) - slowdown = 1.5 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 60, "rad" = 100, "fire" = 30, "acid" = 30) - strip_delay = 60 - equip_delay_other = 60 - flags_inv = HIDEJUMPSUIT - resistance_flags = NONE - rad_flags = RAD_PROTECT_CONTENTS diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm deleted file mode 100644 index b0f247da09..0000000000 --- a/code/modules/clothing/suits/wiz_robe.dm +++ /dev/null @@ -1,154 +0,0 @@ -/obj/item/clothing/head/wizard - name = "wizard hat" - desc = "" - icon_state = "wizard" - gas_transfer_coefficient = 0.01 // IT'S MAGICAL OKAY JEEZ +1 TO NOT DIE - permeability_coefficient = 0.01 - armor = list("melee" = 30, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 20, "bio" = 20, "rad" = 20, "fire" = 100, "acid" = 100) - strip_delay = 50 - equip_delay_other = 50 - clothing_flags = SNUG_FIT - resistance_flags = FIRE_PROOF | ACID_PROOF - dog_fashion = /datum/dog_fashion/head/blue_wizard - -/obj/item/clothing/head/wizard/red - name = "red wizard hat" - desc = "" - icon_state = "redwizard" - dog_fashion = /datum/dog_fashion/head/red_wizard - -/obj/item/clothing/head/wizard/yellow - name = "yellow wizard hat" - desc = "" - icon_state = "yellowwizard" - dog_fashion = null - -/obj/item/clothing/head/wizard/black - name = "black wizard hat" - desc = "" - icon_state = "blackwizard" - dog_fashion = null - -/obj/item/clothing/head/wizard/fake - name = "wizard hat" - desc = "" - icon_state = "wizard-fake" - gas_transfer_coefficient = 1 - permeability_coefficient = 1 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - resistance_flags = FLAMMABLE - dog_fashion = /datum/dog_fashion/head/blue_wizard - -/obj/item/clothing/head/wizard/marisa - name = "witch hat" - desc = "" - icon_state = "marisa" - dog_fashion = null - -/obj/item/clothing/head/wizard/magus - name = "\improper Magus helm" - desc = "" - icon_state = "magus" - item_state = "magus" - dog_fashion = null - -/obj/item/clothing/head/wizard/santa - name = "Santa's hat" - desc = "" - icon_state = "santahat" - flags_inv = HIDEHAIR|HIDEFACIALHAIR - dog_fashion = null - -/obj/item/clothing/suit/wizrobe - name = "wizard robe" - desc = "" - icon_state = "wizard" - item_state = "wizrobe" - gas_transfer_coefficient = 0.01 - permeability_coefficient = 0.01 - body_parts_covered = CHEST|GROIN|ARMS|LEGS - armor = list("melee" = 30, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 20, "bio" = 20, "rad" = 20, "fire" = 100, "acid" = 100) - allowed = list(/obj/item/teleportation_scroll) - flags_inv = HIDEJUMPSUIT - strip_delay = 50 - equip_delay_other = 50 - resistance_flags = FIRE_PROOF | ACID_PROOF - -/obj/item/clothing/suit/wizrobe/red - name = "red wizard robe" - desc = "" - icon_state = "redwizard" - item_state = "redwizrobe" - -/obj/item/clothing/suit/wizrobe/yellow - name = "yellow wizard robe" - desc = "" - icon_state = "yellowwizard" - item_state = "yellowwizrobe" - -/obj/item/clothing/suit/wizrobe/black - name = "black wizard robe" - desc = "" - icon_state = "blackwizard" - item_state = "blackwizrobe" - -/obj/item/clothing/suit/wizrobe/marisa - name = "witch robe" - desc = "" - icon_state = "marisa" - item_state = "marisarobe" - -/obj/item/clothing/suit/wizrobe/magusblue - name = "\improper Magus robe" - desc = "" - icon_state = "magusblue" - item_state = "magusblue" - -/obj/item/clothing/suit/wizrobe/magusred - name = "\improper Magus robe" - desc = "" - icon_state = "magusred" - item_state = "magusred" - - -/obj/item/clothing/suit/wizrobe/santa - name = "Santa's suit" - desc = "" - icon_state = "santa" - item_state = "santa" - -/obj/item/clothing/suit/wizrobe/fake - name = "wizard robe" - desc = "" - icon_state = "wizard-fake" - item_state = "wizrobe" - gas_transfer_coefficient = 1 - permeability_coefficient = 1 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - resistance_flags = FLAMMABLE - -/obj/item/clothing/head/wizard/marisa/fake - name = "witch hat" - desc = "" - icon_state = "marisa" - gas_transfer_coefficient = 1 - permeability_coefficient = 1 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - resistance_flags = FLAMMABLE - -/obj/item/clothing/suit/wizrobe/marisa/fake - name = "witch robe" - desc = "" - icon_state = "marisa" - item_state = "marisarobe" - gas_transfer_coefficient = 1 - permeability_coefficient = 1 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - resistance_flags = FLAMMABLE - -/obj/item/clothing/suit/wizrobe/paper - name = "papier-mache robe" // no non-latin characters! - desc = "" - icon_state = "wizard-paper" - item_state = "wizard-paper" - var/robe_charge = TRUE diff --git a/code/modules/clothing/under/accessories.dm b/code/modules/clothing/under/accessories.dm index 8343beaebd..f48661d5f1 100644 --- a/code/modules/clothing/under/accessories.dm +++ b/code/modules/clothing/under/accessories.dm @@ -83,292 +83,3 @@ . += "\The [src] can be attached to a uniform. Alt-click to remove it once attached." if(initial(above_suit)) . += "\The [src] can be worn above or below my suit. Alt-click to toggle." - -/obj/item/clothing/accessory/waistcoat - name = "waistcoat" - desc = "" - icon_state = "waistcoat" - item_state = "waistcoat" - minimize_when_attached = FALSE - attachment_slot = null - -/obj/item/clothing/accessory/maidapron - name = "maid apron" - desc = "" - icon_state = "maidapron" - item_state = "maidapron" - minimize_when_attached = FALSE - attachment_slot = null - -////////// -//Medals// -////////// - -/obj/item/clothing/accessory/medal - name = "bronze medal" - desc = "" - icon_state = "bronze" - custom_materials = list(/datum/material/iron=1000) - resistance_flags = FIRE_PROOF - var/medaltype = "medal" //Sprite used for medalbox - var/commended = FALSE - -//Pinning medals on people -/obj/item/clothing/accessory/medal/attack(mob/living/carbon/human/M, mob/living/user) - if(ishuman(M) && (user.used_intent.type == INTENT_HELP)) - - if(M.wear_armor) - if((M.wear_armor.flags_inv & HIDEJUMPSUIT)) //Check if the jumpsuit is covered - to_chat(user, "Medals can only be pinned on jumpsuits.") - return - - if(M.wear_pants) - var/obj/item/clothing/under/U = M.wear_pants - var/delay = 20 - if(user == M) - delay = 0 - else - user.visible_message("[user] is trying to pin [src] on [M]'s chest.", \ - "I try to pin [src] on [M]'s chest.") - var/input - if(!commended && user != M) - input = stripped_input(user,"Please input a reason for this commendation, it will be recorded by Nanotrasen.", ,"", 140) - if(do_after(user, delay, target = M)) - if(U.attach_accessory(src, user, 0)) //Attach it, do not notify the user of the attachment - if(user == M) - to_chat(user, "I attach [src] to [U].") - else - user.visible_message("[user] pins \the [src] on [M]'s chest.", \ - "I pin \the [src] on [M]'s chest.") - if(input) - SSblackbox.record_feedback("associative", "commendation", 1, list("commender" = "[user.real_name]", "commendee" = "[M.real_name]", "medal" = "[src]", "reason" = input)) - GLOB.commendations += "[user.real_name] awarded [M.real_name] the [name]! \n- [input]" - commended = TRUE - desc += "
The inscription reads: [input] - [user.real_name]" - log_game("[key_name(M)] was given the following commendation by [key_name(user)]: [input]") - message_admins("[key_name_admin(M)] was given the following commendation by [key_name_admin(user)]: [input]") - - else - to_chat(user, "Medals can only be pinned on jumpsuits!") - else - ..() - -/obj/item/clothing/accessory/medal/conduct - name = "distinguished conduct medal" - desc = "" - -/obj/item/clothing/accessory/medal/bronze_heart - name = "bronze heart medal" - desc = "" - icon_state = "bronze_heart" - -/obj/item/clothing/accessory/medal/ribbon - name = "ribbon" - desc = "" - icon_state = "cargo" - -/obj/item/clothing/accessory/medal/ribbon/cargo - name = "\"cargo tech of the shift\" award" - desc = "" - -/obj/item/clothing/accessory/medal/silver - name = "silver medal" - desc = "" - icon_state = "silver" - medaltype = "medal-silver" - custom_materials = list(/datum/material/silver=1000) - -/obj/item/clothing/accessory/medal/silver/valor - name = "medal of valor" - desc = "" - -/obj/item/clothing/accessory/medal/silver/security - name = "robust security award" - desc = "" - -/obj/item/clothing/accessory/medal/silver/excellence - name = "the head of personnel award for outstanding achievement in the field of excellence" - desc = "" - -/obj/item/clothing/accessory/medal/gold - name = "gold medal" - desc = "" - icon_state = "gold" - medaltype = "medal-gold" - custom_materials = list(/datum/material/gold=1000) - -/obj/item/clothing/accessory/medal/gold/captain - name = "medal of captaincy" - desc = "" - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF - -/obj/item/clothing/accessory/medal/gold/heroism - name = "medal of exceptional heroism" - desc = "" - -/obj/item/clothing/accessory/medal/plasma - name = "plasma medal" - desc = "" - icon_state = "plasma" - medaltype = "medal-plasma" - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = -10, "acid" = 0) //It's made of plasma. Of course it's flammable. - custom_materials = list(/datum/material/plasma=1000) - -/obj/item/clothing/accessory/medal/plasma/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if(exposed_temperature > 300) - atmos_spawn_air("plasma=20;TEMP=[exposed_temperature]") - visible_message("\The [src] bursts into flame!", "My [src] bursts into flame!") - qdel(src) - -/obj/item/clothing/accessory/medal/plasma/nobel_science - name = "nobel sciences award" - desc = "" - - - -//////////// -//Armbands// -//////////// - -/obj/item/clothing/accessory/armband - name = "red armband" - desc = "" - icon_state = "redband" - attachment_slot = null - -/obj/item/clothing/accessory/armband/deputy - name = "security deputy armband" - desc = "" - -/obj/item/clothing/accessory/armband/cargo - name = "cargo bay guard armband" - desc = "" - icon_state = "cargoband" - -/obj/item/clothing/accessory/armband/engine - name = "engineering guard armband" - desc = "" - icon_state = "engieband" - -/obj/item/clothing/accessory/armband/science - name = "science guard armband" - desc = "" - icon_state = "rndband" - -/obj/item/clothing/accessory/armband/hydro - name = "hydroponics guard armband" - desc = "" - icon_state = "hydroband" - -/obj/item/clothing/accessory/armband/med - name = "medical guard armband" - desc = "" - icon_state = "medband" - -/obj/item/clothing/accessory/armband/medblue - name = "medical guard armband" - desc = "" - icon_state = "medblueband" - -////////////// -//OBJECTION!// -////////////// - -/obj/item/clothing/accessory/lawyers_badge - name = "attorney's badge" - desc = "" - icon_state = "lawyerbadge" - -/obj/item/clothing/accessory/lawyers_badge/attack_self(mob/user) - if(prob(1)) - user.say("The testimony contradicts the evidence!", forced = "attorney's badge") - user.visible_message("[user] shows [user.p_their()] attorney's badge.", "I show my attorney's badge.") - -/obj/item/clothing/accessory/lawyers_badge/on_uniform_equip(obj/item/clothing/under/U, user) - var/mob/living/L = user - if(L) - L.bubble_icon = "lawyer" - -/obj/item/clothing/accessory/lawyers_badge/on_uniform_dropped(obj/item/clothing/under/U, user) - var/mob/living/L = user - if(L) - L.bubble_icon = initial(L.bubble_icon) - -//////////////// -//HA HA! NERD!// -//////////////// -/obj/item/clothing/accessory/pocketprotector - name = "pocket protector" - desc = "" - icon_state = "pocketprotector" - pocket_storage_component_path = /datum/component/storage/concrete/pockets/pocketprotector - -/obj/item/clothing/accessory/pocketprotector/full/Initialize() - . = ..() - new /obj/item/pen/red(src) - new /obj/item/pen(src) - new /obj/item/pen/blue(src) - -/obj/item/clothing/accessory/pocketprotector/cosmetology/Initialize() - . = ..() - for(var/i in 1 to 3) - new /obj/item/lipstick/random(src) - -//////////////// -//REAL BIG FAN// -//////////////// - -/obj/item/clothing/accessory/fan_clown_pin - name = "Clown Pin" - desc = "" - icon_state = "fan_clown_pin" - above_suit = TRUE - minimize_when_attached = TRUE - attachment_slot = CHEST - -/obj/item/clothing/accessory/fan_clown_pin/on_uniform_equip(obj/item/clothing/under/U, user) - var/mob/living/L = user - if(HAS_TRAIT(L, TRAIT_FAN_CLOWN)) - SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "fan_clown_pin", /datum/mood_event/fan_clown_pin) - -/obj/item/clothing/accessory/fan_clown_pin/on_uniform_dropped(obj/item/clothing/under/U, user) - var/mob/living/L = user - if(HAS_TRAIT(L, TRAIT_FAN_CLOWN)) - SEND_SIGNAL(L, COMSIG_CLEAR_MOOD_EVENT, "fan_clown_pin") - -/obj/item/clothing/accessory/fan_mime_pin - name = "Mime Pin" - desc = "" - icon_state = "fan_mime_pin" - above_suit = TRUE - minimize_when_attached = TRUE - attachment_slot = CHEST - -/obj/item/clothing/accessory/fan_clown_pin/on_uniform_equip(obj/item/clothing/under/U, user) - var/mob/living/L = user - if(HAS_TRAIT(L, TRAIT_FAN_MIME)) - SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "fan_mime_pin", /datum/mood_event/fan_mime_pin) - -/obj/item/clothing/accessory/fan_clown_pin/on_uniform_dropped(obj/item/clothing/under/U, user) - var/mob/living/L = user - if(HAS_TRAIT(L, TRAIT_FAN_MIME)) - SEND_SIGNAL(L, COMSIG_CLEAR_MOOD_EVENT, "fan_clown_pin") - -//////////////// -//OONGA BOONGA// -//////////////// - -/obj/item/clothing/accessory/talisman - name = "bone talisman" - desc = "" - icon_state = "talisman" - armor = list("melee" = 5, "bullet" = 5, "laser" = 5, "energy" = 5, "bomb" = 20, "bio" = 20, "rad" = 5, "fire" = 0, "acid" = 25) - attachment_slot = null - -/obj/item/clothing/accessory/skullcodpiece - name = "skull codpiece" - desc = "" - icon_state = "skull" - above_suit = TRUE - armor = list("melee" = 5, "bullet" = 5, "laser" = 5, "energy" = 5, "bomb" = 20, "bio" = 20, "rad" = 5, "fire" = 0, "acid" = 25) - attachment_slot = GROIN diff --git a/code/modules/clothing/under/color.dm b/code/modules/clothing/under/color.dm deleted file mode 100644 index bae616be50..0000000000 --- a/code/modules/clothing/under/color.dm +++ /dev/null @@ -1,231 +0,0 @@ -/obj/item/clothing/under/color - desc = "" - dying_key = DYE_REGISTRY_UNDER - icon = 'icons/obj/clothing/under/color.dmi' - mob_overlay_icon = 'icons/mob/clothing/under/color.dmi' - -/obj/item/clothing/under/color/jumpskirt - body_parts_covered = CHEST|GROIN|ARMS - can_adjust = FALSE - fitted = FEMALE_UNIFORM_TOP - -/obj/item/clothing/under/color/random - icon_state = "random_jumpsuit" - -/obj/item/clothing/under/color/random/Initialize() - ..() - var/obj/item/clothing/under/color/C = pick(subtypesof(/obj/item/clothing/under/color) - typesof(/obj/item/clothing/under/color/jumpskirt) - /obj/item/clothing/under/color/random - /obj/item/clothing/under/color/grey/glorf - /obj/item/clothing/under/color/black/ghost) - if(ishuman(loc)) - var/mob/living/carbon/human/H = loc - H.equip_to_slot_or_del(new C(H), SLOT_PANTS) //or else you end up with naked assistants running around everywhere... - else - new C(loc) - return INITIALIZE_HINT_QDEL - -/obj/item/clothing/under/color/jumpskirt/random - icon_state = "random_jumpsuit" //Skirt variant needed - -/obj/item/clothing/under/color/jumpskirt/random/Initialize() - ..() - var/obj/item/clothing/under/color/jumpskirt/C = pick(subtypesof(/obj/item/clothing/under/color/jumpskirt) - /obj/item/clothing/under/color/jumpskirt/random) - if(ishuman(loc)) - var/mob/living/carbon/human/H = loc - H.equip_to_slot_or_del(new C(H), SLOT_PANTS) - else - new C(loc) - return INITIALIZE_HINT_QDEL - -/obj/item/clothing/under/color/black - name = "black jumpsuit" - icon_state = "black" - item_state = "bl_suit" - resistance_flags = NONE - -/obj/item/clothing/under/color/jumpskirt/black - name = "black jumpskirt" - icon_state = "black_skirt" - item_state = "bl_suit" - -/obj/item/clothing/under/color/black/ghost - item_flags = DROPDEL - -/obj/item/clothing/under/color/black/ghost/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, CULT_TRAIT) - -/obj/item/clothing/under/color/grey - name = "grey jumpsuit" - desc = "" - icon_state = "grey" - item_state = "gy_suit" - -/obj/item/clothing/under/color/jumpskirt/grey - name = "grey jumpskirt" - desc = "" - icon_state = "grey_skirt" - item_state = "gy_suit" - -/obj/item/clothing/under/color/grey/glorf - name = "ancient jumpsuit" - desc = "" - -/obj/item/clothing/under/color/grey/glorf/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - owner.forcesay(GLOB.hit_appends) - return 0 - -/obj/item/clothing/under/color/blue - name = "blue jumpsuit" - icon_state = "blue" - item_state = "b_suit" - -/obj/item/clothing/under/color/jumpskirt/blue - name = "blue jumpskirt" - icon_state = "blue_skirt" - item_state = "b_suit" - -/obj/item/clothing/under/color/green - name = "green jumpsuit" - icon_state = "green" - item_state = "g_suit" - -/obj/item/clothing/under/color/jumpskirt/green - name = "green jumpskirt" - icon_state = "green_skirt" - item_state = "g_suit" - -/obj/item/clothing/under/color/orange - name = "orange jumpsuit" - desc = "" - icon_state = "orange" - item_state = "o_suit" - -/obj/item/clothing/under/color/jumpskirt/orange - name = "orange jumpskirt" - icon_state = "orange_skirt" - item_state = "o_suit" - -/obj/item/clothing/under/color/pink - name = "pink jumpsuit" - icon_state = "pink" - desc = "" - item_state = "p_suit" - -/obj/item/clothing/under/color/jumpskirt/pink - name = "pink jumpskirt" - icon_state = "pink_skirt" - item_state = "p_suit" - -/obj/item/clothing/under/color/red - name = "red jumpsuit" - icon_state = "red" - item_state = "r_suit" - -/obj/item/clothing/under/color/jumpskirt/red - name = "red jumpskirt" - icon_state = "red_skirt" - item_state = "r_suit" - -/obj/item/clothing/under/color/white - name = "white jumpsuit" - icon_state = "white" - item_state = "w_suit" - -/obj/item/clothing/under/color/jumpskirt/white - name = "white jumpskirt" - icon_state = "white_skirt" - item_state = "w_suit" - -/obj/item/clothing/under/color/yellow - name = "yellow jumpsuit" - icon_state = "yellow" - item_state = "y_suit" - -/obj/item/clothing/under/color/jumpskirt/yellow - name = "yellow jumpskirt" - icon_state = "yellow_skirt" - item_state = "y_suit" - -/obj/item/clothing/under/color/darkblue - name = "darkblue jumpsuit" - icon_state = "darkblue" - item_state = "b_suit" - -/obj/item/clothing/under/color/jumpskirt/darkblue - name = "darkblue jumpskirt" - icon_state = "darkblue_skirt" - item_state = "b_suit" - -/obj/item/clothing/under/color/teal - name = "teal jumpsuit" - icon_state = "teal" - item_state = "b_suit" - -/obj/item/clothing/under/color/jumpskirt/teal - name = "teal jumpskirt" - icon_state = "teal_skirt" - item_state = "b_suit" - - -/obj/item/clothing/under/color/lightpurple - name = "purple jumpsuit" - icon_state = "lightpurple" - item_state = "p_suit" - -/obj/item/clothing/under/color/jumpskirt/lightpurple - name = "lightpurple jumpskirt" - icon_state = "lightpurple_skirt" - item_state = "p_suit" - -/obj/item/clothing/under/color/darkgreen - name = "darkgreen jumpsuit" - icon_state = "darkgreen" - item_state = "g_suit" - -/obj/item/clothing/under/color/jumpskirt/darkgreen - name = "darkgreen jumpskirt" - icon_state = "darkgreen_skirt" - item_state = "g_suit" - -/obj/item/clothing/under/color/lightbrown - name = "lightbrown jumpsuit" - icon_state = "lightbrown" - item_state = "lb_suit" - -/obj/item/clothing/under/color/jumpskirt/lightbrown - name = "lightbrown jumpskirt" - icon_state = "lightbrown_skirt" - item_state = "lb_suit" - -/obj/item/clothing/under/color/brown - name = "brown jumpsuit" - icon_state = "brown" - item_state = "lb_suit" - -/obj/item/clothing/under/color/jumpskirt/brown - name = "brown jumpskirt" - icon_state = "brown_skirt" - item_state = "lb_suit" - -/obj/item/clothing/under/color/maroon - name = "maroon jumpsuit" - icon_state = "maroon" - item_state = "r_suit" - -/obj/item/clothing/under/color/jumpskirt/maroon - name = "maroon jumpskirt" - icon_state = "maroon_skirt" - item_state = "r_suit" - -/obj/item/clothing/under/color/rainbow - name = "rainbow jumpsuit" - desc = "" - icon_state = "rainbow" - item_state = "rainbow" - can_adjust = FALSE - -/obj/item/clothing/under/color/jumpskirt/rainbow - name = "rainbow jumpskirt" - desc = "" - icon_state = "rainbow_skirt" - item_state = "rainbow" - can_adjust = FALSE diff --git a/code/modules/clothing/under/costume.dm b/code/modules/clothing/under/costume.dm deleted file mode 100644 index f2d5498500..0000000000 --- a/code/modules/clothing/under/costume.dm +++ /dev/null @@ -1,255 +0,0 @@ -/obj/item/clothing/under/costume - icon = 'icons/obj/clothing/under/costume.dmi' - mob_overlay_icon = 'icons/mob/clothing/under/costume.dmi' - -/obj/item/clothing/under/costume/roman - name = "\improper Roman armor" - desc = "" - icon_state = "roman" - item_state = "armor" - can_adjust = FALSE - strip_delay = 100 - resistance_flags = NONE - -/obj/item/clothing/under/costume/jabroni - name = "jabroni outfit" - desc = "" - icon_state = "darkholme" - item_state = "darkholme" - can_adjust = FALSE - -/obj/item/clothing/under/costume/owl - name = "owl uniform" - desc = "" - icon_state = "owl" - can_adjust = FALSE - -/obj/item/clothing/under/costume/griffin - name = "griffon uniform" - desc = "" - icon_state = "griffin" - can_adjust = FALSE - -/obj/item/clothing/under/costume/schoolgirl - name = "blue schoolgirl uniform" - desc = "" - icon_state = "schoolgirl" - item_state = "schoolgirl" - body_parts_covered = CHEST|GROIN|ARMS - fitted = FEMALE_UNIFORM_TOP - can_adjust = FALSE - -/obj/item/clothing/under/costume/schoolgirl/red - name = "red schoolgirl uniform" - icon_state = "schoolgirlred" - item_state = "schoolgirlred" - -/obj/item/clothing/under/costume/schoolgirl/green - name = "green schoolgirl uniform" - icon_state = "schoolgirlgreen" - item_state = "schoolgirlgreen" - -/obj/item/clothing/under/costume/schoolgirl/orange - name = "orange schoolgirl uniform" - icon_state = "schoolgirlorange" - item_state = "schoolgirlorange" - -/obj/item/clothing/under/costume/pirate - name = "pirate outfit" - desc = "" - icon_state = "pirate" - item_state = "pirate" - can_adjust = FALSE - -/obj/item/clothing/under/costume/soviet - name = "soviet uniform" - desc = "" - icon_state = "soviet" - item_state = "soviet" - can_adjust = FALSE - -/obj/item/clothing/under/costume/redcoat - name = "redcoat uniform" - desc = "" - icon_state = "redcoat" - item_state = "redcoat" - can_adjust = FALSE - -/obj/item/clothing/under/costume/kilt - name = "kilt" - desc = "" - icon_state = "kilt" - item_state = "kilt" - body_parts_covered = CHEST|GROIN|LEGS|FEET - fitted = FEMALE_UNIFORM_TOP - can_adjust = FALSE - -/obj/item/clothing/under/costume/kilt/highlander - desc = "" - -/obj/item/clothing/under/costume/kilt/highlander/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, HIGHLANDER) - -/obj/item/clothing/under/costume/gladiator - name = "gladiator uniform" - desc = "" - icon_state = "gladiator" - item_state = "gladiator" - body_parts_covered = CHEST|GROIN|ARMS - fitted = NO_FEMALE_UNIFORM - can_adjust = FALSE - resistance_flags = NONE - -/obj/item/clothing/under/costume/gladiator/ash_walker - desc = "" - has_sensor = NO_SENSORS - -/obj/item/clothing/under/costume/maid - name = "maid costume" - desc = "" - icon_state = "maid" - item_state = "maid" - body_parts_covered = CHEST|GROIN - fitted = FEMALE_UNIFORM_TOP - can_adjust = FALSE - -/obj/item/clothing/under/costume/maid/Initialize() - . = ..() - var/obj/item/clothing/accessory/maidapron/A = new (src) - attach_accessory(A) - -/obj/item/clothing/under/costume/geisha - name = "geisha suit" - desc = "" - icon_state = "geisha" - body_parts_covered = CHEST|GROIN|ARMS - can_adjust = FALSE - -/obj/item/clothing/under/costume/villain - name = "villain suit" - desc = "" - icon_state = "villain" - can_adjust = FALSE - -/obj/item/clothing/under/costume/sailor - name = "sailor suit" - desc = "" - icon_state = "sailor" - item_state = "b_suit" - can_adjust = FALSE - -/obj/item/clothing/under/costume/singer - desc = "" - body_parts_covered = CHEST|GROIN|ARMS - alternate_worn_layer = ABOVE_SHOES_LAYER - can_adjust = FALSE - -/obj/item/clothing/under/costume/singer/yellow - name = "yellow performer's outfit" - icon_state = "ysing" - item_state = "ysing" - fitted = NO_FEMALE_UNIFORM - -/obj/item/clothing/under/costume/singer/blue - name = "blue performer's outfit" - icon_state = "bsing" - item_state = "bsing" - fitted = FEMALE_UNIFORM_TOP - -/obj/item/clothing/under/costume/mummy - name = "mummy wrapping" - desc = "" - icon_state = "mummy" - item_state = "mummy" - body_parts_covered = CHEST|GROIN|ARMS|LEGS - fitted = NO_FEMALE_UNIFORM - can_adjust = FALSE - resistance_flags = NONE - -/obj/item/clothing/under/costume/scarecrow - name = "scarecrow clothes" - desc = "" - icon_state = "scarecrow" - item_state = "scarecrow" - body_parts_covered = CHEST|GROIN|ARMS|LEGS - fitted = NO_FEMALE_UNIFORM - can_adjust = FALSE - resistance_flags = NONE - -/obj/item/clothing/under/costume/draculass - name = "draculass coat" - desc = "" - icon_state = "draculass" - item_state = "draculass" - body_parts_covered = CHEST|GROIN|ARMS - fitted = FEMALE_UNIFORM_TOP - can_adjust = FALSE - -/obj/item/clothing/under/costume/drfreeze - name = "doctor freeze's jumpsuit" - desc = "" - icon_state = "drfreeze" - item_state = "drfreeze" - can_adjust = FALSE - -/obj/item/clothing/under/costume/lobster - name = "foam lobster suit" - desc = "" - icon_state = "lobster" - item_state = "lobster" - fitted = NO_FEMALE_UNIFORM - can_adjust = FALSE - -/obj/item/clothing/under/costume/gondola - name = "gondola hide suit" - desc = "" - icon_state = "gondola" - item_state = "lb_suit" - can_adjust = FALSE - -/obj/item/clothing/under/costume/skeleton - name = "skeleton jumpsuit" - desc = "" - icon_state = "skeleton" - item_state = "skeleton" - body_parts_covered = CHEST|GROIN|ARMS|LEGS - fitted = NO_FEMALE_UNIFORM - can_adjust = FALSE - resistance_flags = NONE - -/obj/item/clothing/under/costume/mech_suit - name = "red mech pilot's suit" - desc = "" - icon_state = "red_mech_suit" - item_state = "red_mech_suit" - body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - fitted = NO_FEMALE_UNIFORM - alternate_worn_layer = GLOVES_LAYER //covers hands but gloves can go over it. This is how these things work in my head. - can_adjust = FALSE - -/obj/item/clothing/under/costume/mech_suit/white - name = "white mech pilot's suit" - desc = "" - icon_state = "white_mech_suit" - item_state = "white_mech_suit" - -/obj/item/clothing/under/costume/mech_suit/blue - name = "blue mech pilot's suit" - desc = "" - icon_state = "blue_mech_suit" - item_state = "blue_mech_suit" - -/obj/item/clothing/under/costume/russian_officer - name = "\improper Russian officer's uniform" - desc = "" - icon = 'icons/obj/clothing/under/security.dmi' - icon_state = "hostanclothes" - item_state = "hostanclothes" - mob_overlay_icon = 'icons/mob/clothing/under/security.dmi' - alt_covers_chest = TRUE - armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 30) - strip_delay = 50 - sensor_mode = SENSOR_COORDS - random_sensor = FALSE diff --git a/code/modules/clothing/under/jobs/Plasmaman/civilian_service.dm b/code/modules/clothing/under/jobs/Plasmaman/civilian_service.dm deleted file mode 100644 index da236236f8..0000000000 --- a/code/modules/clothing/under/jobs/Plasmaman/civilian_service.dm +++ /dev/null @@ -1,76 +0,0 @@ -/obj/item/clothing/under/plasmaman/cargo - name = "cargo plasma envirosuit" - desc = "" - icon_state = "cargo_envirosuit" - item_state = "cargo_envirosuit" - -/obj/item/clothing/under/plasmaman/mining - name = "mining plasma envirosuit" - desc = "" - icon_state = "explorer_envirosuit" - item_state = "explorer_envirosuit" - - -/obj/item/clothing/under/plasmaman/chef - name = "chef's plasma envirosuit" - desc = "" - icon_state = "chef_envirosuit" - item_state = "chef_envirosuit" - -/obj/item/clothing/under/plasmaman/enviroslacks - name = "enviroslacks" - desc = "" - icon_state = "enviroslacks" - item_state = "enviroslacks" - -/obj/item/clothing/under/plasmaman/chaplain - name = "chaplain's plasma envirosuit" - desc = "" - icon_state = "chap_envirosuit" - item_state = "chap_envirosuit" - -/obj/item/clothing/under/plasmaman/curator - name = "curator's plasma envirosuit" - desc = "" - icon_state = "prototype_envirosuit" - item_state = "prototype_envirosuit" - -/obj/item/clothing/under/plasmaman/janitor - name = "janitor's plasma envirosuit" - desc = "" - icon_state = "janitor_envirosuit" - item_state = "janitor_envirosuit" - -/obj/item/clothing/under/plasmaman/botany - name = "botany envirosuit" - desc = "" - icon_state = "botany_envirosuit" - item_state = "botany_envirosuit" - - -/obj/item/clothing/under/plasmaman/mime - name = "mime envirosuit" - desc = "" - icon_state = "mime_envirosuit" - item_state = "mime_envirosuit" - -/obj/item/clothing/under/plasmaman/clown - name = "clown envirosuit" - desc = "" - icon_state = "clown_envirosuit" - item_state = "clown_envirosuit" - -/obj/item/clothing/under/plasmaman/clown/Extinguish(mob/living/carbon/human/H) - if(!istype(H)) - return - - if(H.on_fire) - if(extinguishes_left) - if(next_extinguish > world.time) - return - next_extinguish = world.time + extinguish_cooldown - extinguishes_left-- - H.visible_message("[H]'s suit spews out a tonne of space lube!","My suit spews out a tonne of space lube!") - H.ExtinguishMob() - new /obj/effect/particle_effect/foam(loc) //Truely terrifying. - return 0 diff --git a/code/modules/clothing/under/jobs/Plasmaman/engineering.dm b/code/modules/clothing/under/jobs/Plasmaman/engineering.dm deleted file mode 100644 index 273f4d91ea..0000000000 --- a/code/modules/clothing/under/jobs/Plasmaman/engineering.dm +++ /dev/null @@ -1,13 +0,0 @@ -/obj/item/clothing/under/plasmaman/engineering - name = "engineering plasma envirosuit" - desc = "" - icon_state = "engineer_envirosuit" - item_state = "engineer_envirosuit" - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 10, "fire" = 95, "acid" = 95) - -/obj/item/clothing/under/plasmaman/atmospherics - name = "atmospherics plasma envirosuit" - desc = "" - icon_state = "atmos_envirosuit" - item_state = "atmos_envirosuit" - diff --git a/code/modules/clothing/under/jobs/Plasmaman/medsci.dm b/code/modules/clothing/under/jobs/Plasmaman/medsci.dm deleted file mode 100644 index 85fbf2b8a9..0000000000 --- a/code/modules/clothing/under/jobs/Plasmaman/medsci.dm +++ /dev/null @@ -1,35 +0,0 @@ -/obj/item/clothing/under/plasmaman/medical - name = "medical plasma envirosuit" - desc = "" - icon_state = "doctor_envirosuit" - item_state = "doctor_envirosuit" - -/obj/item/clothing/under/plasmaman/science - name = "science plasma envirosuit" - desc = "" - icon_state = "scientist_envirosuit" - item_state = "scientist_envirosuit" - -/obj/item/clothing/under/plasmaman/robotics - name = "robotics plasma envirosuit" - desc = "" - icon_state = "roboticist_envirosuit" - item_state = "roboticist_envirosuit" - -/obj/item/clothing/under/plasmaman/viro - name = "virology plasma envirosuit" - desc = "" - icon_state = "virologist_envirosuit" - item_state = "virologist_envirosuit" - -/obj/item/clothing/under/plasmaman/genetics - name = "genetics plasma envirosuit" - desc = "" - icon_state = "geneticist_envirosuit" - item_state = "geneticist_envirosuit" - -/obj/item/clothing/under/plasmaman/chemist - name = "chemistry plasma envirosuit" - desc = "" - icon_state = "chemist_envirosuit" - item_state = "chemist_envirosuit" diff --git a/code/modules/clothing/under/jobs/Plasmaman/security.dm b/code/modules/clothing/under/jobs/Plasmaman/security.dm deleted file mode 100644 index 4cf66cf89c..0000000000 --- a/code/modules/clothing/under/jobs/Plasmaman/security.dm +++ /dev/null @@ -1,12 +0,0 @@ -/obj/item/clothing/under/plasmaman/security - name = "security plasma envirosuit" - desc = "" - icon_state = "security_envirosuit" - item_state = "security_envirosuit" - armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 0, "fire" = 95, "acid" = 95) - -/obj/item/clothing/under/plasmaman/security/warden - name = "warden plasma envirosuit" - desc = "" - icon_state = "warden_envirosuit" - item_state = "warden_envirosuit" diff --git a/code/modules/clothing/under/jobs/cargo.dm b/code/modules/clothing/under/jobs/cargo.dm deleted file mode 100644 index a32ce785a9..0000000000 --- a/code/modules/clothing/under/jobs/cargo.dm +++ /dev/null @@ -1,52 +0,0 @@ -/obj/item/clothing/under/rank/cargo - icon = 'icons/obj/clothing/under/cargo.dmi' - mob_overlay_icon = 'icons/mob/clothing/under/cargo.dmi' - -/obj/item/clothing/under/rank/cargo/qm - name = "quartermaster's jumpsuit" - desc = "" - icon_state = "qm" - item_state = "lb_suit" - -/obj/item/clothing/under/rank/cargo/qm/skirt - name = "quartermaster's jumpskirt" - desc = "" - icon_state = "qm_skirt" - item_state = "lb_suit" - body_parts_covered = CHEST|GROIN|ARMS - can_adjust = FALSE - fitted = FEMALE_UNIFORM_TOP - -/obj/item/clothing/under/rank/cargo/tech - name = "cargo technician's jumpsuit" - desc = "" - icon_state = "cargotech" - item_state = "lb_suit" - body_parts_covered = CHEST|GROIN|ARMS - mutantrace_variation = MUTANTRACE_VARIATION - alt_covers_chest = TRUE - -/obj/item/clothing/under/rank/cargo/tech/skirt - name = "cargo technician's jumpskirt" - desc = "" - icon_state = "cargo_skirt" - item_state = "lb_suit" - body_parts_covered = CHEST|GROIN|ARMS - mutantrace_variation = NO_MUTANTRACE_VARIATION - can_adjust = FALSE - fitted = FEMALE_UNIFORM_TOP - -/obj/item/clothing/under/rank/cargo/miner - desc = "" - name = "shaft miner's jumpsuit" - icon_state = "miner" - item_state = "miner" - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 0) - resistance_flags = NONE - -/obj/item/clothing/under/rank/cargo/miner/lavaland - desc = "" - name = "shaft miner's jumpsuit" - icon_state = "explorer" - item_state = "explorer" - can_adjust = FALSE diff --git a/code/modules/clothing/under/jobs/centcom.dm b/code/modules/clothing/under/jobs/centcom.dm deleted file mode 100644 index c3ba56131a..0000000000 --- a/code/modules/clothing/under/jobs/centcom.dm +++ /dev/null @@ -1,23 +0,0 @@ -/obj/item/clothing/under/rank - icon = 'icons/obj/clothing/under/centcom.dmi' - mob_overlay_icon = 'icons/mob/clothing/under/centcom.dmi' - -/obj/item/clothing/under/rank/centcom/officer - name = "\improper CentCom officer's jumpsuit" - desc = "" - icon_state = "officer" - item_state = "g_suit" - alt_covers_chest = TRUE - -/obj/item/clothing/under/rank/centcom/commander - name = "\improper CentCom officer's jumpsuit" - desc = "" - icon_state = "centcom" - item_state = "dg_suit" - -/obj/item/clothing/under/rank/centcom/intern - name = "\improper CentCom intern's jumpsuit" - desc = "" - icon_state = "intern" - item_state = "g_suit" - can_adjust = FALSE diff --git a/code/modules/clothing/under/jobs/civilian/civilian.dm b/code/modules/clothing/under/jobs/civilian/civilian.dm deleted file mode 100644 index 630a7b909e..0000000000 --- a/code/modules/clothing/under/jobs/civilian/civilian.dm +++ /dev/null @@ -1,133 +0,0 @@ -//Alphabetical order of civilian jobs. - -/obj/item/clothing/under/rank/civilian - icon = 'icons/obj/clothing/under/civilian.dmi' - mob_overlay_icon = 'icons/mob/clothing/under/civilian.dmi' - -/obj/item/clothing/under/rank/civilian/bartender - desc = "" - name = "bartender's uniform" - icon_state = "barman" - item_state = "bar_suit" - alt_covers_chest = TRUE - -/obj/item/clothing/under/rank/civilian/bartender/purple - desc = "" - name = "purple bartender's uniform" - icon_state = "purplebartender" - can_adjust = FALSE - -/obj/item/clothing/under/rank/civilian/bartender/skirt - name = "bartender's skirt" - desc = "" - icon_state = "barman_skirt" - item_state = "bar_suit" - body_parts_covered = CHEST|GROIN|ARMS - can_adjust = FALSE - fitted = FEMALE_UNIFORM_TOP - -/obj/item/clothing/under/rank/civilian/chaplain - desc = "" - name = "chaplain's jumpsuit" - icon_state = "chaplain" - item_state = "bl_suit" - can_adjust = FALSE - -/obj/item/clothing/under/rank/civilian/chaplain/skirt - name = "chaplain's jumpskirt" - desc = "" - icon_state = "chapblack_skirt" - item_state = "bl_suit" - body_parts_covered = CHEST|GROIN|ARMS - can_adjust = FALSE - fitted = FEMALE_UNIFORM_TOP - -/obj/item/clothing/under/rank/civilian/chef - name = "cook's suit" - desc = "" - icon_state = "chef" - alt_covers_chest = TRUE - -/obj/item/clothing/under/rank/civilian/chef/skirt - name = "cook's skirt" - desc = "" - icon_state = "chef_skirt" - body_parts_covered = CHEST|GROIN|ARMS - can_adjust = FALSE - fitted = FEMALE_UNIFORM_TOP - -/obj/item/clothing/under/rank/civilian/head_of_personnel - desc = "" - name = "head of personnel's jumpsuit" - icon_state = "hop" - item_state = "b_suit" - can_adjust = FALSE - -/obj/item/clothing/under/rank/civilian/head_of_personnel/skirt - name = "head of personnel's jumpskirt" - desc = "" - icon_state = "hop_skirt" - item_state = "b_suit" - body_parts_covered = CHEST|GROIN|ARMS - can_adjust = FALSE - fitted = FEMALE_UNIFORM_TOP - -/obj/item/clothing/under/rank/civilian/head_of_personnel/suit - name = "head of personnel's suit" - desc = "" - icon_state = "teal_suit" - item_state = "g_suit" - can_adjust = FALSE - -/obj/item/clothing/under/rank/civilian/head_of_personnel/suit/skirt - name = "teal suitskirt" - desc = "" - icon_state = "teal_suit_skirt" - item_state = "g_suit" - body_parts_covered = CHEST|GROIN|ARMS - can_adjust = FALSE - fitted = FEMALE_UNIFORM_TOP - -/obj/item/clothing/under/rank/civilian/hydroponics - desc = "" - name = "botanist's jumpsuit" - icon_state = "hydroponics" - item_state = "g_suit" - permeability_coefficient = 0.5 - -/obj/item/clothing/under/rank/civilian/hydroponics/skirt - name = "botanist's jumpskirt" - desc = "" - icon_state = "hydroponics_skirt" - item_state = "g_suit" - body_parts_covered = CHEST|GROIN|ARMS - can_adjust = FALSE - fitted = FEMALE_UNIFORM_TOP - -/obj/item/clothing/under/rank/civilian/janitor - desc = "" - name = "janitor's jumpsuit" - icon_state = "janitor" - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0) - -/obj/item/clothing/under/rank/civilian/janitor/skirt - name = "janitor's jumpskirt" - desc = "" - icon_state = "janitor_skirt" - body_parts_covered = CHEST|GROIN|ARMS - can_adjust = FALSE - fitted = FEMALE_UNIFORM_TOP - -/obj/item/clothing/under/rank/civilian/janitor/maid - name = "maid uniform" - desc = "" - icon_state = "janimaid" - item_state = "janimaid" - body_parts_covered = CHEST|GROIN - fitted = FEMALE_UNIFORM_TOP - can_adjust = FALSE - -/obj/item/clothing/under/rank/civilian/cookjorts - name = "grilling shorts" - desc = "" - icon_state = "cookjorts" diff --git a/code/modules/clothing/under/jobs/civilian/clown_mime.dm b/code/modules/clothing/under/jobs/civilian/clown_mime.dm deleted file mode 100644 index 8c4197e363..0000000000 --- a/code/modules/clothing/under/jobs/civilian/clown_mime.dm +++ /dev/null @@ -1,98 +0,0 @@ - -/obj/item/clothing/under/rank/civilian/mime - name = "mime's outfit" - desc = "" - icon_state = "mime" - item_state = "mime" - -/obj/item/clothing/under/rank/civilian/mime/skirt - name = "mime's skirt" - desc = "" - icon_state = "mime_skirt" - item_state = "mime" - body_parts_covered = CHEST|GROIN|ARMS - can_adjust = FALSE - fitted = FEMALE_UNIFORM_TOP - -/obj/item/clothing/under/rank/civilian/mime/sexy - name = "sexy mime outfit" - desc = "" - icon_state = "sexymime" - item_state = "sexymime" - body_parts_covered = CHEST|GROIN|LEGS - fitted = FEMALE_UNIFORM_TOP - can_adjust = FALSE - -/obj/item/clothing/under/rank/civilian/clown - name = "clown suit" - desc = "" - icon_state = "clown" - item_state = "clown" - -/obj/item/clothing/under/rank/civilian/clown/blue - name = "blue clown suit" - desc = "" - icon_state = "blueclown" - item_state = "blueclown" - fitted = FEMALE_UNIFORM_TOP - can_adjust = FALSE - -/obj/item/clothing/under/rank/civilian/clown/green - name = "green clown suit" - desc = "" - icon_state = "greenclown" - item_state = "greenclown" - fitted = FEMALE_UNIFORM_TOP - can_adjust = FALSE - -/obj/item/clothing/under/rank/civilian/clown/yellow - name = "yellow clown suit" - desc = "" - icon_state = "yellowclown" - item_state = "yellowclown" - fitted = FEMALE_UNIFORM_TOP - can_adjust = FALSE - -/obj/item/clothing/under/rank/civilian/clown/purple - name = "purple clown suit" - desc = "" - icon_state = "purpleclown" - item_state = "purpleclown" - fitted = FEMALE_UNIFORM_TOP - can_adjust = FALSE - -/obj/item/clothing/under/rank/civilian/clown/orange - name = "orange clown suit" - desc = "" - icon_state = "orangeclown" - item_state = "orangeclown" - fitted = FEMALE_UNIFORM_TOP - can_adjust = FALSE - -/obj/item/clothing/under/rank/civilian/clown/rainbow - name = "rainbow clown suit" - desc = "" - icon_state = "rainbowclown" - item_state = "rainbowclown" - fitted = FEMALE_UNIFORM_TOP - can_adjust = FALSE - -/obj/item/clothing/under/rank/civilian/clown/jester - name = "jester suit" - desc = "" - icon_state = "jester" - can_adjust = FALSE - -/obj/item/clothing/under/rank/civilian/clown/jester/alt - icon_state = "jester2" - -/obj/item/clothing/under/rank/civilian/clown/sexy - name = "sexy-clown suit" - desc = "" - icon_state = "sexyclown" - item_state = "sexyclown" - can_adjust = FALSE - -/obj/item/clothing/under/rank/civilian/clown/Initialize() - . = ..() - AddComponent(/datum/component/squeak, list('sound/blank.ogg'=1), 50) diff --git a/code/modules/clothing/under/jobs/civilian/curator.dm b/code/modules/clothing/under/jobs/civilian/curator.dm deleted file mode 100644 index 3ef05991b9..0000000000 --- a/code/modules/clothing/under/jobs/civilian/curator.dm +++ /dev/null @@ -1,45 +0,0 @@ -/obj/item/clothing/under/rank/civilian/curator - name = "sensible suit" - desc = "" - icon = 'icons/obj/clothing/under/suits.dmi' - icon_state = "red_suit" - item_state = "red_suit" - mob_overlay_icon = 'icons/mob/clothing/under/suits.dmi' - can_adjust = FALSE - -/obj/item/clothing/under/rank/civilian/curator/skirt - name = "sensible suitskirt" - desc = "" - icon = 'icons/obj/clothing/under/suits.dmi' - icon_state = "red_suit_skirt" - item_state = "red_suit" - mob_overlay_icon = 'icons/mob/clothing/under/suits.dmi' - body_parts_covered = CHEST|GROIN|ARMS - can_adjust = FALSE - fitted = FEMALE_UNIFORM_TOP - -/obj/item/clothing/under/rank/civilian/curator/treasure_hunter - name = "treasure hunter uniform" - desc = "" - icon = 'icons/obj/clothing/under/civilian.dmi' - icon_state = "curator" - item_state = "curator" - mob_overlay_icon = 'icons/mob/clothing/under/civilian.dmi' - -/obj/item/clothing/under/rank/civilian/curator/nasa - name = "\improper NASA jumpsuit" - desc = "" - icon = 'icons/obj/clothing/under/color.dmi' - icon_state = "black" - item_state = "bl_suit" - mob_overlay_icon = 'icons/mob/clothing/under/color.dmi' - w_class = WEIGHT_CLASS_BULKY - gas_transfer_coefficient = 0.01 - permeability_coefficient = 0.02 - body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - cold_protection = CHEST | GROIN | LEGS | ARMS //Needs gloves and shoes with cold protection to be fully protected. - min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT - heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT - can_adjust = FALSE - resistance_flags = NONE diff --git a/code/modules/clothing/under/jobs/command.dm b/code/modules/clothing/under/jobs/command.dm deleted file mode 100644 index 15a5fc91ac..0000000000 --- a/code/modules/clothing/under/jobs/command.dm +++ /dev/null @@ -1,41 +0,0 @@ -/obj/item/clothing/under/rank/captain - desc = "" - name = "captain's jumpsuit" - icon_state = "captain" - item_state = "b_suit" - sensor_mode = SENSOR_COORDS - random_sensor = FALSE - icon = 'icons/obj/clothing/under/captain.dmi' - mob_overlay_icon = 'icons/mob/clothing/under/captain.dmi' - -/obj/item/clothing/under/rank/captain/skirt - name = "captain's jumpskirt" - desc = "" - icon_state = "captain_skirt" - item_state = "b_suit" - body_parts_covered = CHEST|GROIN|ARMS - can_adjust = FALSE - fitted = FEMALE_UNIFORM_TOP - -/obj/item/clothing/under/rank/captain/suit - name = "captain's suit" - desc = "" - icon_state = "green_suit" - item_state = "dg_suit" - can_adjust = FALSE - -/obj/item/clothing/under/rank/captain/suit/skirt - name = "green suitskirt" - desc = "" - icon_state = "green_suit_skirt" - item_state = "dg_suit" - body_parts_covered = CHEST|GROIN|ARMS - can_adjust = FALSE - fitted = FEMALE_UNIFORM_TOP - -/obj/item/clothing/under/rank/captain/parade - name = "captain's parade uniform" - desc = "" - icon_state = "captain_parade" - item_state = "by_suit" - can_adjust = FALSE diff --git a/code/modules/clothing/under/jobs/engineering.dm b/code/modules/clothing/under/jobs/engineering.dm deleted file mode 100644 index 34586d466f..0000000000 --- a/code/modules/clothing/under/jobs/engineering.dm +++ /dev/null @@ -1,63 +0,0 @@ -//Contains: Engineering department jumpsuits - -/obj/item/clothing/under/rank/engineering - icon = 'icons/obj/clothing/under/engineering.dmi' - mob_overlay_icon = 'icons/mob/clothing/under/engineering.dmi' - -/obj/item/clothing/under/rank/engineering/chief_engineer - desc = "" - name = "chief engineer's jumpsuit" - icon_state = "chiefengineer" - item_state = "gy_suit" - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 10, "fire" = 80, "acid" = 40) - resistance_flags = NONE - -/obj/item/clothing/under/rank/engineering/chief_engineer/skirt - name = "chief engineer's jumpskirt" - desc = "" - icon_state = "chief_skirt" - item_state = "gy_suit" - body_parts_covered = CHEST|GROIN|ARMS - can_adjust = FALSE - fitted = FEMALE_UNIFORM_TOP - -/obj/item/clothing/under/rank/engineering/atmospheric_technician - desc = "" - name = "atmospheric technician's jumpsuit" - icon_state = "atmos" - item_state = "atmos_suit" - resistance_flags = NONE - -/obj/item/clothing/under/rank/engineering/atmospheric_technician/skirt - name = "atmospheric technician's jumpskirt" - desc = "" - icon_state = "atmos_skirt" - item_state = "atmos_suit" - body_parts_covered = CHEST|GROIN|ARMS - can_adjust = FALSE - fitted = FEMALE_UNIFORM_TOP - -/obj/item/clothing/under/rank/engineering/engineer - desc = "" - name = "engineer's jumpsuit" - icon_state = "engine" - item_state = "engi_suit" - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 10, "fire" = 60, "acid" = 20) - resistance_flags = NONE - -/obj/item/clothing/under/rank/engineering/engineer/hazard - name = "engineer's hazard jumpsuit" - desc = "" - icon_state = "hazard" - item_state = "suit-orange" - alt_covers_chest = TRUE - -/obj/item/clothing/under/rank/engineering/engineer/skirt - name = "engineer's jumpskirt" - desc = "" - icon_state = "engine_skirt" - item_state = "engi_suit" - body_parts_covered = CHEST|GROIN|ARMS - can_adjust = FALSE - fitted = FEMALE_UNIFORM_TOP - diff --git a/code/modules/clothing/under/jobs/medical.dm b/code/modules/clothing/under/jobs/medical.dm deleted file mode 100644 index ab103eeed0..0000000000 --- a/code/modules/clothing/under/jobs/medical.dm +++ /dev/null @@ -1,117 +0,0 @@ -/obj/item/clothing/under/rank/medical - icon = 'icons/obj/clothing/under/medical.dmi' - mob_overlay_icon = 'icons/mob/clothing/under/medical.dmi' - -/obj/item/clothing/under/rank/medical/chief_medical_officer - desc = "" - name = "chief medical officer's jumpsuit" - icon_state = "cmo" - item_state = "w_suit" - permeability_coefficient = 0.5 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0) - -/obj/item/clothing/under/rank/medical/chief_medical_officer/skirt - name = "chief medical officer's jumpskirt" - desc = "" - icon_state = "cmo_skirt" - item_state = "w_suit" - body_parts_covered = CHEST|GROIN|ARMS - can_adjust = FALSE - fitted = FEMALE_UNIFORM_TOP - -/obj/item/clothing/under/rank/medical/geneticist - desc = "" - name = "geneticist's jumpsuit" - icon_state = "genetics" - item_state = "w_suit" - permeability_coefficient = 0.5 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0) - -/obj/item/clothing/under/rank/medical/geneticist/skirt - name = "geneticist's jumpskirt" - desc = "" - icon_state = "geneticswhite_skirt" - item_state = "w_suit" - body_parts_covered = CHEST|GROIN|ARMS - can_adjust = FALSE - fitted = FEMALE_UNIFORM_TOP - -/obj/item/clothing/under/rank/medical/virologist - desc = "" - name = "virologist's jumpsuit" - icon_state = "virology" - item_state = "w_suit" - permeability_coefficient = 0.5 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0) - -/obj/item/clothing/under/rank/medical/virologist/skirt - name = "virologist's jumpskirt" - desc = "" - icon_state = "virologywhite_skirt" - item_state = "w_suit" - body_parts_covered = CHEST|GROIN|ARMS - can_adjust = FALSE - fitted = FEMALE_UNIFORM_TOP - -/obj/item/clothing/under/rank/medical/doctor/nurse - desc = "" - name = "nurse's suit" - icon_state = "nursesuit" - item_state = "w_suit" - permeability_coefficient = 0.5 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0) - body_parts_covered = CHEST|GROIN|ARMS - fitted = NO_FEMALE_UNIFORM - can_adjust = FALSE - -/obj/item/clothing/under/rank/medical/doctor - desc = "" - name = "medical doctor's jumpsuit" - icon_state = "medical" - item_state = "w_suit" - permeability_coefficient = 0.5 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0) - -/obj/item/clothing/under/rank/medical/doctor/blue - name = "medical scrubs" - desc = "" - icon_state = "scrubsblue" - can_adjust = FALSE - -/obj/item/clothing/under/rank/medical/doctor/green - name = "medical scrubs" - desc = "" - icon_state = "scrubsgreen" - can_adjust = FALSE - -/obj/item/clothing/under/rank/medical/doctor/purple - name = "medical scrubs" - desc = "" - icon_state = "scrubspurple" - can_adjust = FALSE - -/obj/item/clothing/under/rank/medical/doctor/skirt - name = "medical doctor's jumpskirt" - desc = "" - icon_state = "medical_skirt" - item_state = "w_suit" - body_parts_covered = CHEST|GROIN|ARMS - can_adjust = FALSE - fitted = FEMALE_UNIFORM_TOP - -/obj/item/clothing/under/rank/medical/chemist - desc = "" - name = "chemist's jumpsuit" - icon_state = "chemistry" - item_state = "w_suit" - permeability_coefficient = 0.5 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 50, "acid" = 65) - -/obj/item/clothing/under/rank/medical/chemist/skirt - name = "chemist's jumpskirt" - desc = "" - icon_state = "chemistrywhite_skirt" - item_state = "w_suit" - body_parts_covered = CHEST|GROIN|ARMS - can_adjust = FALSE - fitted = FEMALE_UNIFORM_TOP diff --git a/code/modules/clothing/under/jobs/rnd.dm b/code/modules/clothing/under/jobs/rnd.dm deleted file mode 100644 index d257932ba3..0000000000 --- a/code/modules/clothing/under/jobs/rnd.dm +++ /dev/null @@ -1,89 +0,0 @@ -/obj/item/clothing/under/rank/rnd - icon = 'icons/obj/clothing/under/rnd.dmi' - mob_overlay_icon = 'icons/mob/clothing/under/rnd.dmi' - -/obj/item/clothing/under/rank/rnd/research_director - desc = "" - name = "research director's vest suit" - icon_state = "director" - item_state = "lb_suit" - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 10, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 35) - can_adjust = FALSE - -/obj/item/clothing/under/rank/rnd/research_director/skirt - name = "research director's vest suitskirt" - desc = "" - icon_state = "director_skirt" - item_state = "lb_suit" - body_parts_covered = CHEST|GROIN|ARMS - can_adjust = FALSE - fitted = FEMALE_UNIFORM_TOP - -/obj/item/clothing/under/rank/rnd/research_director/alt - desc = "" - name = "research director's tan suit" - icon_state = "rdwhimsy" - item_state = "rdwhimsy" - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 10, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0) - can_adjust = TRUE - alt_covers_chest = TRUE - -/obj/item/clothing/under/rank/rnd/research_director/alt/skirt - name = "research director's tan suitskirt" - desc = "" - icon_state = "rdwhimsy_skirt" - item_state = "rdwhimsy" - body_parts_covered = CHEST|GROIN|ARMS - can_adjust = FALSE - fitted = FEMALE_UNIFORM_TOP - -/obj/item/clothing/under/rank/rnd/research_director/turtleneck - desc = "" - name = "research director's turtleneck" - icon_state = "rdturtle" - item_state = "p_suit" - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 10, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0) - can_adjust = TRUE - alt_covers_chest = TRUE - -/obj/item/clothing/under/rank/rnd/research_director/turtleneck/skirt - name = "research director's turtleneck skirt" - desc = "" - icon_state = "rdturtle_skirt" - item_state = "p_suit" - body_parts_covered = CHEST|GROIN|ARMS - can_adjust = FALSE - fitted = FEMALE_UNIFORM_TOP - -/obj/item/clothing/under/rank/rnd/scientist - desc = "" - name = "scientist's jumpsuit" - icon_state = "toxins" - item_state = "w_suit" - permeability_coefficient = 0.5 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - -/obj/item/clothing/under/rank/rnd/scientist/skirt - name = "scientist's jumpskirt" - desc = "" - icon_state = "toxinswhite_skirt" - item_state = "w_suit" - body_parts_covered = CHEST|GROIN|ARMS - can_adjust = FALSE - fitted = FEMALE_UNIFORM_TOP - -/obj/item/clothing/under/rank/rnd/roboticist - desc = "" - name = "roboticist's jumpsuit" - icon_state = "robotics" - item_state = "robotics" - resistance_flags = NONE - -/obj/item/clothing/under/rank/rnd/roboticist/skirt - name = "roboticist's jumpskirt" - desc = "" - icon_state = "robotics_skirt" - item_state = "robotics" - body_parts_covered = CHEST|GROIN|ARMS - can_adjust = FALSE - fitted = FEMALE_UNIFORM_TOP diff --git a/code/modules/clothing/under/jobs/security.dm b/code/modules/clothing/under/jobs/security.dm deleted file mode 100644 index 267554e5e0..0000000000 --- a/code/modules/clothing/under/jobs/security.dm +++ /dev/null @@ -1,223 +0,0 @@ -/* - * Contains: - * Security - * Detective - * Navy uniforms - */ - -/* - * Security - */ - -/obj/item/clothing/under/rank/security - icon = 'icons/obj/clothing/under/security.dmi' - mob_overlay_icon = 'icons/mob/clothing/under/security.dmi' - -/obj/item/clothing/under/rank/security/officer - name = "security jumpsuit" - desc = "" - icon_state = "rsecurity" - item_state = "r_suit" - armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 30) - strip_delay = 50 - alt_covers_chest = TRUE - sensor_mode = SENSOR_COORDS - random_sensor = FALSE - -/obj/item/clothing/under/rank/security/officer/grey - name = "grey security jumpsuit" - desc = "" - icon_state = "security" - item_state = "gy_suit" - -/obj/item/clothing/under/rank/security/officer/skirt - name = "security jumpskirt" - desc = "" - icon_state = "secskirt" - item_state = "r_suit" - body_parts_covered = CHEST|GROIN|ARMS - can_adjust = FALSE //you know now that i think of it if you adjust the skirt and the sprite disappears isn't that just like flashing everyone - fitted = FEMALE_UNIFORM_TOP - -/obj/item/clothing/under/rank/security/officer/blueshirt - name = "blue shirt and tie" - desc = "" - icon_state = "blueshift" - item_state = "blueshift" - can_adjust = FALSE - -/obj/item/clothing/under/rank/security/officer/formal - name = "security officer's formal uniform" - desc = "" - icon_state = "officerblueclothes" - item_state = "officerblueclothes" - alt_covers_chest = TRUE - -/obj/item/clothing/under/rank/security/warden - name = "security suit" - desc = "" - icon_state = "rwarden" - item_state = "r_suit" - armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 30) - strip_delay = 50 - alt_covers_chest = TRUE - sensor_mode = 3 - random_sensor = FALSE - -/obj/item/clothing/under/rank/security/warden/grey - name = "grey security suit" - desc = "" - icon_state = "warden" - item_state = "gy_suit" - -/obj/item/clothing/under/rank/security/warden/skirt - name = "warden's suitskirt" - desc = "" - icon_state = "rwarden_skirt" - item_state = "r_suit" - body_parts_covered = CHEST|GROIN|ARMS - can_adjust = FALSE - fitted = FEMALE_UNIFORM_TOP - -/obj/item/clothing/under/rank/security/warden/formal - desc = "" - name = "warden's formal uniform" - icon_state = "wardenblueclothes" - item_state = "wardenblueclothes" - alt_covers_chest = TRUE - -/* - * Detective - */ -/obj/item/clothing/under/rank/security/detective - name = "hard-worn suit" - desc = "" - icon_state = "detective" - item_state = "det" - armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 30) - strip_delay = 50 - alt_covers_chest = TRUE - sensor_mode = 3 - random_sensor = FALSE - -/obj/item/clothing/under/rank/security/detective/skirt - name = "detective's suitskirt" - desc = "" - icon_state = "detective_skirt" - item_state = "det" - body_parts_covered = CHEST|GROIN|ARMS - can_adjust = FALSE - fitted = FEMALE_UNIFORM_TOP - -/obj/item/clothing/under/rank/security/detective/grey - name = "noir suit" - desc = "" - icon_state = "greydet" - item_state = "greydet" - alt_covers_chest = TRUE - -/obj/item/clothing/under/rank/security/detective/grey/skirt - name = "noir suitskirt" - desc = "" - icon_state = "greydet_skirt" - item_state = "greydet" - body_parts_covered = CHEST|GROIN|ARMS - can_adjust = FALSE - fitted = FEMALE_UNIFORM_TOP - -/* - * Head of Security - */ -/obj/item/clothing/under/rank/security/head_of_security - name = "head of security's jumpsuit" - desc = "" - icon_state = "rhos" - item_state = "r_suit" - armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) - strip_delay = 60 - alt_covers_chest = TRUE - sensor_mode = 3 - random_sensor = FALSE - -/obj/item/clothing/under/rank/security/head_of_security/skirt - name = "head of security's jumpskirt" - desc = "" - icon_state = "rhos_skirt" - item_state = "r_suit" - body_parts_covered = CHEST|GROIN|ARMS - can_adjust = FALSE - fitted = FEMALE_UNIFORM_TOP - -/obj/item/clothing/under/rank/security/head_of_security/grey - name = "head of security's grey jumpsuit" - desc = "" - icon_state = "hos" - item_state = "gy_suit" - -/obj/item/clothing/under/rank/security/head_of_security/alt - name = "head of security's turtleneck" - desc = "" - icon_state = "hosalt" - item_state = "bl_suit" - -/obj/item/clothing/under/rank/security/head_of_security/alt/skirt - name = "head of security's turtleneck skirt" - desc = "" - icon_state = "hosalt_skirt" - item_state = "bl_suit" - body_parts_covered = CHEST|GROIN|ARMS - can_adjust = FALSE - fitted = FEMALE_UNIFORM_TOP - -/obj/item/clothing/under/rank/security/head_of_security/parade - name = "head of security's parade uniform" - desc = "" - icon_state = "hos_parade_male" - item_state = "r_suit" - can_adjust = FALSE - -/obj/item/clothing/under/rank/security/head_of_security/parade/female - name = "head of security's parade uniform" - desc = "" - icon_state = "hos_parade_fem" - item_state = "r_suit" - fitted = FEMALE_UNIFORM_TOP - can_adjust = FALSE - -/obj/item/clothing/under/rank/security/head_of_security/formal - desc = "" - name = "head of security's formal uniform" - icon_state = "hosblueclothes" - item_state = "hosblueclothes" - alt_covers_chest = TRUE - -/* - *Spacepol - */ - -/obj/item/clothing/under/rank/security/officer/spacepol - name = "police uniform" - desc = "" - icon_state = "spacepol" - item_state = "spacepol" - can_adjust = FALSE - -/obj/item/clothing/under/rank/prisoner - name = "prison jumpsuit" - desc = "" - icon = 'icons/obj/clothing/under/security.dmi' - icon_state = "prisoner" - item_state = "o_suit" - mob_overlay_icon = 'icons/mob/clothing/under/security.dmi' - has_sensor = LOCKED_SENSORS - sensor_mode = SENSOR_COORDS - random_sensor = FALSE - -/obj/item/clothing/under/rank/prisoner/skirt - name = "prison jumpskirt" - desc = "" - icon_state = "prisoner_skirt" - item_state = "o_suit" - body_parts_covered = CHEST|GROIN|ARMS - can_adjust = FALSE - fitted = FEMALE_UNIFORM_TOP diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm deleted file mode 100644 index 3e74536188..0000000000 --- a/code/modules/clothing/under/miscellaneous.dm +++ /dev/null @@ -1,144 +0,0 @@ -/obj/item/clothing/under/misc - icon = 'icons/obj/clothing/under/misc.dmi' - mob_overlay_icon = 'icons/mob/clothing/under/misc.dmi' - -/obj/item/clothing/under/misc/pj - name = "\improper PJs" - desc = "" - can_adjust = FALSE - item_state = "w_suit" - -/obj/item/clothing/under/misc/pj/red - icon_state = "red_pyjamas" - -/obj/item/clothing/under/misc/pj/blue - icon_state = "blue_pyjamas" - -/obj/item/clothing/under/misc/patriotsuit - name = "Patriotic Suit" - desc = "" - icon_state = "ek" - item_state = "ek" - can_adjust = FALSE - -/obj/item/clothing/under/misc/mailman - name = "mailman's jumpsuit" - desc = "" - icon_state = "mailman" - item_state = "b_suit" - -/obj/item/clothing/under/misc/psyche - name = "psychedelic jumpsuit" - desc = "" - icon_state = "psyche" - item_state = "p_suit" - -/obj/item/clothing/under/misc/vice_officer - name = "vice officer's jumpsuit" - desc = "" - icon_state = "vice" - item_state = "gy_suit" - can_adjust = FALSE - -/obj/item/clothing/under/misc/adminsuit - name = "administrative cybernetic jumpsuit" - icon = 'icons/obj/clothing/under/syndicate.dmi' - icon_state = "syndicate" - item_state = "bl_suit" - mob_overlay_icon = 'icons/mob/clothing/under/syndicate.dmi' - desc = "" - gas_transfer_coefficient = 0.01 - permeability_coefficient = 0.01 - body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - armor = list("melee" = 100, "bullet" = 100, "laser" = 100,"energy" = 100, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100) - cold_protection = CHEST | GROIN | LEGS | FEET | ARMS | HANDS - min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT - heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT - can_adjust = FALSE - resistance_flags = FIRE_PROOF | ACID_PROOF - -/obj/item/clothing/under/misc/burial - name = "burial garments" - desc = "" - icon_state = "burial" - item_state = "burial" - can_adjust = FALSE - has_sensor = NO_SENSORS - -/obj/item/clothing/under/misc/overalls - name = "laborer's overalls" - desc = "" - icon_state = "overalls" - item_state = "lb_suit" - can_adjust = FALSE - custom_price = 20 - -/obj/item/clothing/under/misc/assistantformal - name = "assistant's formal uniform" - desc = "" - icon_state = "assistant_formal" - item_state = "gy_suit" - can_adjust = FALSE - -/obj/item/clothing/under/plasmaman - name = "plasma envirosuit" - desc = "" - icon_state = "plasmaman" - item_state = "plasmaman" - icon = 'icons/obj/clothing/under/plasmaman.dmi' - mob_overlay_icon = 'icons/mob/clothing/under/plasmaman.dmi' - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 0, "fire" = 95, "acid" = 95) - body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - can_adjust = FALSE - strip_delay = 80 - var/next_extinguish = 0 - var/extinguish_cooldown = 100 - var/extinguishes_left = 5 - - -/obj/item/clothing/under/plasmaman/examine(mob/user) - . = ..() - . += "There are [extinguishes_left] extinguisher charges left in this suit." - -/obj/item/clothing/under/plasmaman/proc/Extinguish(mob/living/carbon/human/H) - if(!istype(H)) - return - - if(H.on_fire) - if(extinguishes_left) - if(next_extinguish > world.time) - return - next_extinguish = world.time + extinguish_cooldown - extinguishes_left-- - H.visible_message("[H]'s suit automatically extinguishes [H.p_them()]!","My suit automatically extinguishes you.") - H.ExtinguishMob() - new /obj/effect/particle_effect/water(get_turf(H)) - return 0 - -/obj/item/clothing/under/plasmaman/attackby(obj/item/E, mob/user, params) - ..() - if (istype(E, /obj/item/extinguisher_refill)) - if (extinguishes_left == 5) - to_chat(user, "The inbuilt extinguisher is full.") - return - else - extinguishes_left = 5 - to_chat(user, "I refill the suit's built-in extinguisher, using up the cartridge.") - qdel(E) - return - return - -/obj/item/extinguisher_refill - name = "envirosuit extinguisher cartridge" - desc = "" - icon_state = "plasmarefill" - icon = 'icons/obj/device.dmi' - -/obj/item/clothing/under/misc/durathread - name = "durathread jumpsuit" - desc = "" - icon_state = "durathread" - item_state = "durathread" - can_adjust = FALSE - armor = list("melee" = 10, "laser" = 10, "fire" = 40, "acid" = 10, "bomb" = 5) diff --git a/code/modules/clothing/under/pants.dm b/code/modules/clothing/under/pants.dm deleted file mode 100644 index 8e8035307c..0000000000 --- a/code/modules/clothing/under/pants.dm +++ /dev/null @@ -1,69 +0,0 @@ -/obj/item/clothing/under/pants - gender = PLURAL - body_parts_covered = GROIN|LEGS - fitted = NO_FEMALE_UNIFORM - can_adjust = FALSE - custom_price = 20 - icon = 'icons/obj/clothing/under/shorts_pants.dmi' - mob_overlay_icon = 'icons/mob/clothing/under/shorts_pants.dmi' - -/obj/item/clothing/under/pants/classicjeans - name = "classic jeans" - desc = "" - icon_state = "jeansclassic" - -/obj/item/clothing/under/pants/mustangjeans - name = "Must Hang jeans" - desc = "" - icon_state = "jeansmustang" - custom_price = 75 - -/obj/item/clothing/under/pants/blackjeans - name = "black jeans" - desc = "" - icon_state = "jeansblack" - -/obj/item/clothing/under/pants/youngfolksjeans - name = "Young Folks jeans" - desc = "" - icon_state = "jeansyoungfolks" - -/obj/item/clothing/under/pants/white - name = "white pants" - desc = "" - icon_state = "whitepants" - -/obj/item/clothing/under/pants/red - name = "red pants" - desc = "" - icon_state = "redpants" - -/obj/item/clothing/under/pants/black - name = "black pants" - desc = "" - icon_state = "blackpants" - -/obj/item/clothing/under/pants/tan - name = "tan pants" - desc = "" - icon_state = "tanpants" - -/obj/item/clothing/under/pants/track - name = "track pants" - desc = "" - icon_state = "trackpants" - -/obj/item/clothing/under/pants/jeans - name = "jeans" - desc = "" - icon_state = "jeans" - -/obj/item/clothing/under/pants/khaki - name = "khaki pants" - desc = "" - icon_state = "khaki" - -/obj/item/clothing/under/pants/camo - name = "camo pants" - desc = "" - icon_state = "camopants" diff --git a/code/modules/clothing/under/shorts.dm b/code/modules/clothing/under/shorts.dm deleted file mode 100644 index 86f3cba337..0000000000 --- a/code/modules/clothing/under/shorts.dm +++ /dev/null @@ -1,34 +0,0 @@ -/obj/item/clothing/under/shorts - name = "athletic shorts" - desc = "" - gender = PLURAL - body_parts_covered = GROIN - fitted = NO_FEMALE_UNIFORM - mutantrace_variation = MUTANTRACE_VARIATION - can_adjust = FALSE - icon = 'icons/obj/clothing/under/shorts_pants.dmi' - mob_overlay_icon = 'icons/mob/clothing/under/shorts_pants.dmi' - -/obj/item/clothing/under/shorts/red - name = "red athletic shorts" - icon_state = "redshorts" - -/obj/item/clothing/under/shorts/green - name = "green athletic shorts" - icon_state = "greenshorts" - -/obj/item/clothing/under/shorts/blue - name = "blue athletic shorts" - icon_state = "blueshorts" - -/obj/item/clothing/under/shorts/black - name = "black athletic shorts" - icon_state = "blackshorts" - -/obj/item/clothing/under/shorts/grey - name = "grey athletic shorts" - icon_state = "greyshorts" - -/obj/item/clothing/under/shorts/purple - name = "purple athletic shorts" - icon_state = "purpleshorts" diff --git a/code/modules/clothing/under/skirt_dress.dm b/code/modules/clothing/under/skirt_dress.dm deleted file mode 100644 index 68f4e8e1d1..0000000000 --- a/code/modules/clothing/under/skirt_dress.dm +++ /dev/null @@ -1,90 +0,0 @@ -/obj/item/clothing/under/dress - fitted = FEMALE_UNIFORM_TOP - can_adjust = FALSE - body_parts_covered = CHEST|GROIN - icon = 'icons/obj/clothing/under/dress.dmi' - mob_overlay_icon = 'icons/mob/clothing/under/dress.dmi' - -/obj/item/clothing/under/dress/sundress - name = "sundress" - desc = "" - icon_state = "sundress" - item_state = "sundress" - -/obj/item/clothing/under/dress/blacktango - name = "black tango dress" - desc = "" - icon_state = "black_tango" - item_state = "wcoat" - -/obj/item/clothing/under/dress/striped - name = "striped dress" - desc = "" - icon_state = "striped_dress" - item_state = "striped_dress" - fitted = FEMALE_UNIFORM_FULL - -/obj/item/clothing/under/dress/sailor - name = "sailor dress" - desc = "" - icon_state = "sailor_dress" - item_state = "sailor_dress" - -/obj/item/clothing/under/dress/redeveninggown - name = "red evening gown" - desc = "" - icon_state = "red_evening_gown" - item_state = "red_evening_gown" - -/obj/item/clothing/under/dress/skirt - name = "black skirt" - desc = "" - icon_state = "blackskirt" - -/obj/item/clothing/under/dress/skirt/blue - name = "blue skirt" - desc = "" - icon_state = "blueskirt" - item_state = "b_suit" - custom_price = 25 - -/obj/item/clothing/under/dress/skirt/red - name = "red skirt" - desc = "" - icon_state = "redskirt" - item_state = "r_suit" - custom_price = 25 - -/obj/item/clothing/under/dress/skirt/purple - name = "purple skirt" - desc = "" - icon_state = "purpleskirt" - item_state = "p_suit" - custom_price = 25 - -/obj/item/clothing/under/dress/skirt/plaid - name = "red plaid skirt" - desc = "" - icon_state = "plaid_red" - item_state = "plaid_red" - can_adjust = TRUE - alt_covers_chest = TRUE - custom_price = 25 - -/obj/item/clothing/under/dress/skirt/plaid/blue - name = "blue plaid skirt" - desc = "" - icon_state = "plaid_blue" - item_state = "plaid_blue" - -/obj/item/clothing/under/dress/skirt/plaid/purple - name = "purple plaid skirt" - desc = "" - icon_state = "plaid_purple" - item_state = "plaid_purple" - -/obj/item/clothing/under/dress/skirt/plaid/green - name = "green plaid skirt" - desc = "" - icon_state = "plaid_green" - item_state = "plaid_green" diff --git a/code/modules/clothing/under/suits.dm b/code/modules/clothing/under/suits.dm deleted file mode 100644 index a6f3a14649..0000000000 --- a/code/modules/clothing/under/suits.dm +++ /dev/null @@ -1,127 +0,0 @@ -/obj/item/clothing/under/suit - icon = 'icons/obj/clothing/under/suits.dmi' - mob_overlay_icon = 'icons/mob/clothing/under/suits.dmi' - -/obj/item/clothing/under/suit/white_on_white - name = "white suit" - desc = "" - icon_state = "scratch" - item_state = "scratch" - can_adjust = FALSE - -/obj/item/clothing/under/suit/white/skirt - name = "white suitskirt" - desc = "" - icon_state = "white_suit_skirt" - item_state = "scratch" - body_parts_covered = CHEST|GROIN|ARMS - can_adjust = FALSE - fitted = FEMALE_UNIFORM_TOP - -/obj/item/clothing/under/suit/sl - desc = "" - name = "amish suit" - icon_state = "sl_suit" - can_adjust = FALSE - -/obj/item/clothing/under/suit/waiter - name = "waiter's outfit" - desc = "" - icon_state = "waiter" - item_state = "waiter" - can_adjust = FALSE - -/obj/item/clothing/under/suit/blacktwopiece - name = "black two piece suit" - desc = "" - icon_state = "black_suit" - item_state = "bl_suit" - can_adjust = FALSE - -/obj/item/clothing/under/suit/black - name = "black suit" - desc = "" - icon_state = "blacksuit" - item_state = "blacksuit" - can_adjust = FALSE - -/obj/item/clothing/under/suit/black/skirt - name = "black suitskirt" - desc = "" - icon_state = "blacksuit_skirt" - item_state = "bar_suit" - alt_covers_chest = TRUE - fitted = FEMALE_UNIFORM_TOP - -/obj/item/clothing/under/suit/black_really - name = "executive suit" - desc = "" - icon_state = "really_black_suit" - item_state = "really_black_suit" - can_adjust = FALSE - -/obj/item/clothing/under/suit/black_really/skirt - name = "executive suitskirt" - desc = "" - icon_state = "really_black_suit_skirt" - item_state = "really_black_suit_skirt" - body_parts_covered = CHEST|GROIN|ARMS - can_adjust = FALSE - fitted = FEMALE_UNIFORM_TOP - -/obj/item/clothing/under/suit/black/female - name = "executive suit" - desc = "" - icon_state = "black_suit_fem" - item_state = "black_suit_fem" - -/obj/item/clothing/under/suit/green - name = "green suit" - desc = "" - icon = 'icons/obj/clothing/under/captain.dmi' - icon_state = "green_suit" - item_state = "dg_suit" - mob_overlay_icon = 'icons/mob/clothing/under/captain.dmi' - can_adjust = FALSE - -/obj/item/clothing/under/suit/red - name = "red suit" - desc = "" - icon_state = "red_suit" - item_state = "r_suit" - -/obj/item/clothing/under/suit/charcoal - name = "charcoal suit" - desc = "" - icon_state = "charcoal_suit" - item_state = "charcoal_suit" - -/obj/item/clothing/under/suit/navy - name = "navy suit" - desc = "" - icon_state = "navy_suit" - item_state = "navy_suit" - -/obj/item/clothing/under/suit/burgundy - name = "burgundy suit" - desc = "" - icon_state = "burgundy_suit" - item_state = "burgundy_suit" - -/obj/item/clothing/under/suit/checkered - name = "checkered suit" - desc = "" - icon_state = "checkered_suit" - item_state = "checkered_suit" - -/obj/item/clothing/under/suit/tan - name = "tan suit" - desc = "" - icon_state = "tan_suit" - item_state = "tan_suit" - -/obj/item/clothing/under/suit/white - name = "white suit" - desc = "" - icon_state = "white_suit" - item_state = "white_suit" diff --git a/code/modules/clothing/under/syndicate.dm b/code/modules/clothing/under/syndicate.dm deleted file mode 100644 index c164eff30d..0000000000 --- a/code/modules/clothing/under/syndicate.dm +++ /dev/null @@ -1,75 +0,0 @@ -/obj/item/clothing/under/syndicate - name = "tactical turtleneck" - desc = "" - icon_state = "syndicate" - item_state = "bl_suit" - has_sensor = NO_SENSORS - armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 40) - alt_covers_chest = TRUE - icon = 'icons/obj/clothing/under/syndicate.dmi' - mob_overlay_icon = 'icons/mob/clothing/under/syndicate.dmi' - -/obj/item/clothing/under/syndicate/skirt - name = "tactical skirtleneck" - desc = "" - icon_state = "syndicate_skirt" - item_state = "bl_suit" - has_sensor = NO_SENSORS - armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 40) - alt_covers_chest = TRUE - fitted = FEMALE_UNIFORM_TOP - can_adjust = FALSE - -/obj/item/clothing/under/syndicate/tacticool - name = "tacticool turtleneck" - desc = "" - icon_state = "tactifool" - item_state = "bl_suit" - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 40) - -/obj/item/clothing/under/syndicate/tacticool/skirt - name = "tacticool skirtleneck" - desc = "" - icon_state = "tactifool_skirt" - item_state = "bl_suit" - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 40) - fitted = FEMALE_UNIFORM_TOP - can_adjust = FALSE - -/obj/item/clothing/under/syndicate/sniper - name = "Tactical turtleneck suit" - desc = "" - icon = 'icons/obj/clothing/under/suits.dmi' - icon_state = "really_black_suit" - item_state = "bl_suit" - mob_overlay_icon = 'icons/mob/clothing/under/suits.dmi' - can_adjust = FALSE - -/obj/item/clothing/under/syndicate/camo - name = "camouflage fatigues" - desc = "" - icon_state = "camogreen" - item_state = "g_suit" - can_adjust = FALSE - -/obj/item/clothing/under/syndicate/soviet - name = "Ratnik 5 tracksuit" - desc = "" - icon_state = "trackpants" - can_adjust = FALSE - armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - resistance_flags = NONE - -/obj/item/clothing/under/syndicate/combat - name = "combat uniform" - desc = "" - icon_state = "syndicate_combat" - can_adjust = FALSE - -/obj/item/clothing/under/syndicate/rus_army - name = "advanced military tracksuit" - desc = "" - icon_state = "rus_under" - can_adjust = FALSE - armor = list("melee" = 5, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - resistance_flags = NONE diff --git a/code/modules/clothing/under/trek.dm b/code/modules/clothing/under/trek.dm deleted file mode 100644 index f70263c3ec..0000000000 --- a/code/modules/clothing/under/trek.dm +++ /dev/null @@ -1,64 +0,0 @@ -//Just some alt-uniforms themed around Star Trek - Pls don't sue, Mr Roddenberry ;_; - - -/obj/item/clothing/under/trek - can_adjust = FALSE - icon = 'icons/obj/clothing/under/trek.dmi' - mob_overlay_icon = 'icons/mob/clothing/under/trek.dmi' - - -//TOS -/obj/item/clothing/under/trek/command - name = "command uniform" - desc = "" - icon_state = "trek_command" - item_state = "y_suit" - -/obj/item/clothing/under/trek/engsec - name = "engsec uniform" - desc = "" - icon_state = "trek_engsec" - item_state = "r_suit" - armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) //more sec than eng, but w/e. - strip_delay = 50 - -/obj/item/clothing/under/trek/medsci - name = "medsci uniform" - desc = "" - icon_state = "trek_medsci" - item_state = "b_suit" - - -//TNG -/obj/item/clothing/under/trek/command/next - icon_state = "trek_next_command" - item_state = "r_suit" - -/obj/item/clothing/under/trek/engsec/next - icon_state = "trek_next_engsec" - item_state = "y_suit" - -/obj/item/clothing/under/trek/medsci/next - icon_state = "trek_next_medsci" - - -//ENT -/obj/item/clothing/under/trek/command/ent - icon_state = "trek_ent_command" - item_state = "bl_suit" - -/obj/item/clothing/under/trek/engsec/ent - icon_state = "trek_ent_engsec" - item_state = "bl_suit" - -/obj/item/clothing/under/trek/medsci/ent - icon_state = "trek_ent_medsci" - item_state = "bl_suit" - - -//Q -/obj/item/clothing/under/trek/Q - name = "french marshall's uniform" - desc = "" - icon_state = "trek_Q" - item_state = "r_suit" diff --git a/code/modules/events/spacevine.dm b/code/modules/events/spacevine.dm index a2aacf9220..3e24c94977 100644 --- a/code/modules/events/spacevine.dm +++ b/code/modules/events/spacevine.dm @@ -255,21 +255,6 @@ else . = expected_damage -/datum/spacevine_mutation/flowering - name = "flowering" - hue = "#0A480D" - quality = NEGATIVE - severity = 10 - -/datum/spacevine_mutation/flowering/on_grow(obj/structure/spacevine/holder) - if(holder.energy == 2 && prob(severity) && !locate(/obj/structure/alien/resin/flower_bud_enemy) in range(5,holder)) - new/obj/structure/alien/resin/flower_bud_enemy(get_turf(holder)) - -/datum/spacevine_mutation/flowering/on_cross(obj/structure/spacevine/holder, mob/living/crosser) - if(prob(25)) - holder.entangle(crosser) - - // SPACE VINES (Note that this code is very similar to Biomass code) /obj/structure/spacevine name = "weepvine" @@ -538,7 +523,7 @@ /obj/structure/spacevine/proc/spread() var/direction = pick(GLOB.cardinals) var/turf/stepturf = get_step(src,direction) - if (!isspaceturf(stepturf) && stepturf.Enter(src)) + if (stepturf.Enter(src)) for(var/datum/spacevine_mutation/SM in mutations) SM.on_spread(src, stepturf) stepturf = get_step(src,direction) //in case turf changes, to make sure no runtimes happen diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index 4bdab0a27e..751c1e8d61 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -10,7 +10,6 @@ GLOBAL_LIST_INIT(hallucination_list, list( /datum/hallucination/fake_alert = 12, /datum/hallucination/weird_sounds = 8, /datum/hallucination/stationmessage = 7, - /datum/hallucination/stray_bullet = 7, /datum/hallucination/items_other = 7, /datum/hallucination/husks = 7, /datum/hallucination/items = 4, @@ -1036,25 +1035,3 @@ GLOBAL_LIST_INIT(hallucination_list, list( target.client.images -= target.halbody QDEL_NULL(target.halbody) qdel(src) - -//hallucination projectile code in code/modules/projectiles/projectile/special.dm -/datum/hallucination/stray_bullet - -/datum/hallucination/stray_bullet/New(mob/living/carbon/C, forced = TRUE) - set waitfor = FALSE - ..() - var/list/turf/startlocs = list() - for(var/turf/open/T in view(world.view+1,target)-view(world.view,target)) - startlocs += T - if(!startlocs.len) - qdel(src) - return - var/turf/start = pick(startlocs) - var/proj_type = pick(subtypesof(/obj/projectile/hallucination)) - feedback_details += "Type: [proj_type]" - var/obj/projectile/hallucination/H = new proj_type(start) - target.playsound_local(start, H.hal_fire_sound, 60, 1) - H.hal_target = target - H.preparePixelProjectile(target, start) - H.fire() - qdel(src) diff --git a/code/modules/food_and_drinks/drinks/drinks.dm b/code/modules/food_and_drinks/drinks/drinks.dm deleted file mode 100644 index e09a87969f..0000000000 --- a/code/modules/food_and_drinks/drinks/drinks.dm +++ /dev/null @@ -1,560 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -/// Drinks. -//////////////////////////////////////////////////////////////////////////////// -/obj/item/reagent_containers/food/drinks - name = "drink" - desc = "" - icon = 'icons/obj/drinks.dmi' - icon_state = null - lefthand_file = 'icons/mob/inhands/misc/food_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/food_righthand.dmi' - reagent_flags = OPENCONTAINER - var/gulp_size = 5 //This is now officially broken ... need to think of a nice way to fix it. - possible_transfer_amounts = list(5,10,15,20,25,30,50) - volume = 50 - resistance_flags = NONE - var/isGlass = TRUE //Whether the 'bottle' is made of glass or not so that milk cartons dont shatter when someone gets hit by it - -/obj/item/reagent_containers/food/drinks/on_reagent_change(changetype) - . = ..() - gulp_size = max(round(reagents.total_volume / 5), 5) - -/obj/item/reagent_containers/food/drinks/attack(mob/living/M, mob/user, def_zone) - - if(!reagents || !reagents.total_volume) - to_chat(user, "[src] is empty!") - return 0 - - if(!canconsume(M, user)) - return 0 - - if (!is_drainable()) - to_chat(user, "[src]'s lid hasn't been opened!") - return 0 - - if(M == user) - user.visible_message("[user] swallows a gulp of [src].", \ - "I swallow a gulp of [src].") - if(HAS_TRAIT(M, TRAIT_VORACIOUS)) - M.changeNext_move(CLICK_CD_MELEE * 0.5) //chug! chug! chug! - - else - M.visible_message("[user] attempts to feed [M] the contents of [src].", \ - "[user] attempts to feed you the contents of [src].") - if(!do_mob(user, M)) - return - if(!reagents || !reagents.total_volume) - return // The drink might be empty after the delay, such as by spam-feeding - M.visible_message("[user] fed [M] the contents of [src].", \ - "[user] fed you the contents of [src].") - log_combat(user, M, "fed", reagents.log_list()) - - var/fraction = min(gulp_size/reagents.total_volume, 1) - checkLiked(fraction, M) - reagents.reaction(M, INGEST, fraction) - reagents.trans_to(M, gulp_size, transfered_by = user) - playsound(M.loc,'sound/blank.ogg', rand(10,50), TRUE) - return 1 - -/obj/item/reagent_containers/food/drinks/afterattack(obj/target, mob/user , proximity) - . = ..() - if(!proximity) - return - - if(target.is_refillable() && is_drainable()) //Something like a glass. Player probably wants to transfer TO it. - if(!reagents.total_volume) - to_chat(user, "[src] is empty.") - return - - if(target.reagents.holder_full()) - to_chat(user, "[target] is full.") - return - - var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this, transfered_by = user) - to_chat(user, "I transfer [trans] units of the solution to [target].") - - else if(target.is_drainable()) //A dispenser. Transfer FROM it TO us. - if (!is_refillable()) - to_chat(user, "[src]'s tab isn't open!") - return - - if(!target.reagents.total_volume) - to_chat(user, "[target] is empty.") - return - - if(reagents.holder_full()) - to_chat(user, "[src] is full.") - return - - var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this, transfered_by = user) - to_chat(user, "I fill [src] with [trans] units of the contents of [target].") - -/obj/item/reagent_containers/food/drinks/attackby(obj/item/I, mob/user, params) - var/hotness = I.get_temperature() - if(hotness && reagents) - reagents.expose_temperature(hotness) - to_chat(user, "I heat [name] with [I]!") - ..() - -/obj/item/reagent_containers/food/drinks/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) - . = ..() - if(!.) //if the bottle wasn't caught - smash(hit_atom, throwingdatum?.thrower, TRUE) - -/obj/item/reagent_containers/food/drinks/proc/smash(atom/target, mob/thrower, ranged = FALSE) - if(!isGlass) - return - if(QDELING(src) || !target) //Invalid loc - return - if(bartender_check(target) && ranged) - return - var/obj/item/broken_bottle/B = new (loc) - B.icon_state = icon_state - var/icon/I = new('icons/obj/drinks.dmi', src.icon_state) - I.Blend(B.broken_outline, ICON_OVERLAY, rand(5), 1) - I.SwapColor(rgb(255, 0, 220, 255), rgb(0, 0, 0, 0)) - B.icon = I - B.name = "broken [name]" - if(prob(33)) - var/obj/item/shard/S = new(drop_location()) - target.Bumped(S) - playsound(src, "shatter", 70, TRUE) - transfer_fingerprints_to(B) - qdel(src) - target.Bumped(B) - -/obj/item/reagent_containers/food/drinks/bullet_act(obj/projectile/P) - . = ..() - if(!(P.nodamage) && P.damage_type == BRUTE && !QDELETED(src)) - var/atom/T = get_turf(src) - smash(T) - return - - - -//////////////////////////////////////////////////////////////////////////////// -/// Drinks. END -//////////////////////////////////////////////////////////////////////////////// - - -/obj/item/reagent_containers/food/drinks/trophy - name = "pewter cup" - desc = "" - icon_state = "pewter_cup" - w_class = WEIGHT_CLASS_TINY - force = 1 - throwforce = 1 - amount_per_transfer_from_this = 5 - custom_materials = list(/datum/material/iron=100) - possible_transfer_amounts = list() - volume = 5 - flags_1 = CONDUCT_1 - spillable = TRUE - resistance_flags = FIRE_PROOF - isGlass = FALSE - -/obj/item/reagent_containers/food/drinks/trophy/gold_cup - name = "gold cup" - desc = "" - icon_state = "golden_cup" - w_class = WEIGHT_CLASS_BULKY - force = 14 - throwforce = 10 - amount_per_transfer_from_this = 20 - custom_materials = list(/datum/material/gold=1000) - volume = 150 - -/obj/item/reagent_containers/food/drinks/trophy/silver_cup - name = "silver cup" - desc = "" - icon_state = "silver_cup" - w_class = WEIGHT_CLASS_NORMAL - force = 10 - throwforce = 8 - amount_per_transfer_from_this = 15 - custom_materials = list(/datum/material/silver=800) - volume = 100 - - -/obj/item/reagent_containers/food/drinks/trophy/bronze_cup - name = "bronze cup" - desc = "" - icon_state = "bronze_cup" - w_class = WEIGHT_CLASS_SMALL - force = 5 - throwforce = 4 - amount_per_transfer_from_this = 10 - custom_materials = list(/datum/material/iron=400) - volume = 25 - -///////////////////////////////////////////////Drinks -//Notes by Darem: Drinks are simply containers that start preloaded. Unlike condiments, the contents can be ingested directly -// rather then having to add it to something else first. They should only contain liquids. They have a default container size of 50. -// Formatting is the same as food. - -/obj/item/reagent_containers/food/drinks/coffee - name = "robust coffee" - desc = "" - icon_state = "coffee" - list_reagents = list(/datum/reagent/consumable/coffee = 30) - spillable = TRUE - resistance_flags = FREEZE_PROOF - isGlass = FALSE - foodtype = BREAKFAST - -/obj/item/reagent_containers/food/drinks/ice - name = "ice cup" - desc = "" - custom_price = 5 - icon_state = "coffee" - list_reagents = list(/datum/reagent/consumable/ice = 30) - spillable = TRUE - isGlass = FALSE - -/obj/item/reagent_containers/food/drinks/ice/prison - name = "dirty ice cup" - desc = "" - list_reagents = list(/datum/reagent/consumable/ice = 25, /datum/reagent/liquidgibs = 5) - -/obj/item/reagent_containers/food/drinks/mug/ // parent type is literally just so empty mug sprites are a thing - name = "mug" - desc = "" - icon_state = "tea" - item_state = "coffee" - spillable = TRUE - -/obj/item/reagent_containers/food/drinks/mug/on_reagent_change(changetype) - if(reagents.total_volume) - icon_state = "tea" - else - icon_state = "tea_empty" - -/obj/item/reagent_containers/food/drinks/mug/tea - name = "Duke Purple tea" - desc = "" - list_reagents = list(/datum/reagent/consumable/tea = 30) - -/obj/item/reagent_containers/food/drinks/mug/coco - name = "Dutch hot coco" - desc = "" - list_reagents = list(/datum/reagent/consumable/hot_coco = 15, /datum/reagent/consumable/sugar = 5) - foodtype = SUGAR - resistance_flags = FREEZE_PROOF - custom_price = 42 - - -/obj/item/reagent_containers/food/drinks/dry_ramen - name = "cup ramen" - desc = "" - icon_state = "ramen" - list_reagents = list(/datum/reagent/consumable/dry_ramen = 15, /datum/reagent/consumable/sodiumchloride = 3) - foodtype = GRAIN - isGlass = FALSE - custom_price = 38 - -/obj/item/reagent_containers/food/drinks/beer - name = "space beer" - desc = "" - icon_state = "beer" - list_reagents = list(/datum/reagent/consumable/ethanol/beer = 30) - foodtype = GRAIN | ALCOHOL - -/obj/item/reagent_containers/food/drinks/beer/light - name = "Carp Lite" - desc = "" - list_reagents = list(/datum/reagent/consumable/ethanol/beer/light = 30) - -/obj/item/reagent_containers/food/drinks/ale - name = "Magm-Ale" - desc = "" - icon_state = "alebottle" - item_state = "beer" - list_reagents = list(/datum/reagent/consumable/ethanol/ale = 30) - foodtype = GRAIN | ALCOHOL - -/obj/item/reagent_containers/food/drinks/sillycup - name = "paper cup" - desc = "" - icon_state = "water_cup_e" - possible_transfer_amounts = list() - volume = 10 - spillable = TRUE - isGlass = FALSE - -/obj/item/reagent_containers/food/drinks/sillycup/on_reagent_change(changetype) - if(reagents.total_volume) - icon_state = "water_cup" - else - icon_state = "water_cup_e" - -/obj/item/reagent_containers/food/drinks/sillycup/smallcarton - name = "small carton" - desc = "" - icon_state = "juicebox" - volume = 15 //I figure if you have to craft these it should at least be slightly better than something you can get for free from a watercooler - -/obj/item/reagent_containers/food/drinks/sillycup/smallcarton/smash(atom/target, mob/thrower, ranged = FALSE) - if(bartender_check(target) && ranged) - return - var/obj/item/broken_bottle/B = new (loc) - B.icon_state = icon_state - var/icon/I = new('icons/obj/drinks.dmi', src.icon_state) - I.Blend(B.broken_outline, ICON_OVERLAY, rand(5), 1) - I.SwapColor(rgb(255, 0, 220, 255), rgb(0, 0, 0, 0)) - B.icon = I - B.name = "broken [name]" - B.force = 0 - B.throwforce = 0 - B.desc = "" - transfer_fingerprints_to(B) - qdel(src) - target.Bumped(B) - -/obj/item/reagent_containers/food/drinks/sillycup/smallcarton/on_reagent_change(changetype) - if (reagents.reagent_list.len) - switch(reagents.get_master_reagent_id()) - if(/datum/reagent/consumable/orangejuice) - icon_state = "orangebox" - name = "orange juice box" - desc = "" - foodtype = FRUIT | BREAKFAST - if(/datum/reagent/consumable/milk) - icon_state = "milkbox" - name = "carton of milk" - desc = "" - foodtype = DAIRY | BREAKFAST - if(/datum/reagent/consumable/applejuice) - icon_state = "juicebox" - name = "apple juice box" - desc = "" - foodtype = FRUIT - if(/datum/reagent/consumable/grapejuice) - icon_state = "grapebox" - name = "grape juice box" - desc = "" - foodtype = FRUIT - if(/datum/reagent/consumable/milk/chocolate_milk) - icon_state = "chocolatebox" - name = "carton of chocolate milk" - desc = "" - foodtype = SUGAR - if(/datum/reagent/consumable/ethanol/eggnog) - icon_state = "nog2" - name = "carton of eggnog" - desc = "" - foodtype = MEAT - else - icon_state = "juicebox" - name = "small carton" - desc = "" - - - -//////////////////////////drinkingglass and shaker// -//Note by Darem: This code handles the mixing of drinks. New drinks go in three places: In Chemistry-Reagents.dm (for the drink -// itself), in Chemistry-Recipes.dm (for the reaction that changes the components into the drink), and here (for the drinking glass -// icon states. - -/obj/item/reagent_containers/food/drinks/shaker - name = "shaker" - desc = "" - icon_state = "shaker" - custom_materials = list(/datum/material/iron=1500) - amount_per_transfer_from_this = 10 - volume = 100 - isGlass = FALSE - -/obj/item/reagent_containers/food/drinks/flask - name = "flask" - desc = "" - custom_price = 30 - icon_state = "flask" - custom_materials = list(/datum/material/iron=250) - volume = 60 - isGlass = FALSE - -/obj/item/reagent_containers/food/drinks/flask/gold - name = "captain's flask" - desc = "" - icon_state = "flask_gold" - custom_materials = list(/datum/material/gold=500) - -/obj/item/reagent_containers/food/drinks/flask/det - name = "detective's flask" - desc = "" - icon_state = "detflask" - list_reagents = list(/datum/reagent/consumable/ethanol/whiskey = 30) - -/obj/item/reagent_containers/food/drinks/britcup - name = "cup" - desc = "" - icon_state = "britcup" - volume = 30 - spillable = TRUE - -//////////////////////////soda_cans// -//These are in their own group to be used as IED's in /obj/item/grenade/ghettobomb.dm - -/obj/item/reagent_containers/food/drinks/soda_cans - name = "soda can" - lefthand_file = 'icons/mob/inhands/misc/food_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/food_righthand.dmi' - reagent_flags = NONE - spillable = FALSE - isGlass = FALSE - custom_price = 10 - -/obj/item/reagent_containers/food/drinks/soda_cans/suicide_act(mob/living/carbon/human/H) - if(!reagents.total_volume) - H.visible_message("[H] is trying to take a big sip from [src]... The can is empty!") - return SHAME - if(!is_drainable()) - open_soda() - sleep(10) - H.visible_message("[H] takes a big sip from [src]! It looks like [H.p_theyre()] trying to commit suicide!") - playsound(H,'sound/blank.ogg', 80, TRUE) - reagents.trans_to(H, src.reagents.total_volume, transfered_by = H) //a big sip - sleep(5) - H.say(pick("Now, Outbomb Cuban Pete, THAT was a game.", "All these new fangled arcade games are too slow. I prefer the classics.", "They don't make 'em like Orion Trail anymore.", "You know what they say. Worst day of spess carp fishing is better than the best day at work.", "They don't make 'em like good old fashioned singularity engines anymore.")) - if(H.age >= 30) - H.Stun(50) - sleep(50) - playsound(H,'sound/blank.ogg', 80, TRUE) - H.say(pick("Another day, another dollar.", "I wonder if I should hold?", "Diversifying is for young'ns.", "Yeap, times were good back then.")) - return MANUAL_SUICIDE_NONLETHAL - sleep(20) //dramatic pause - return TOXLOSS - -/obj/item/reagent_containers/food/drinks/soda_cans/attack(mob/M, mob/user) - if(istype(M, /mob/living/carbon) && !reagents.total_volume && user.used_intent.type == INTENT_HARM && user.zone_selected == BODY_ZONE_HEAD) - if(M == user) - user.visible_message("[user] crushes the can of [src] on [user.p_their()] forehead!", "I crush the can of [src] on your forehead.") - else - user.visible_message("[user] crushes the can of [src] on [M]'s forehead!", "I crush the can of [src] on [M]'s forehead.") - playsound(M,'sound/blank.ogg', rand(10,50), TRUE) - var/obj/item/trash/can/crushed_can = new /obj/item/trash/can(M.loc) - crushed_can.icon_state = icon_state - qdel(src) - return TRUE - . = ..() - -/obj/item/reagent_containers/food/drinks/soda_cans/bullet_act(obj/projectile/P) - . = ..() - if(!(P.nodamage) && P.damage_type == BRUTE && !QDELETED(src)) - var/obj/item/trash/can/crushed_can = new /obj/item/trash/can(src.loc) - crushed_can.icon_state = icon_state - var/atom/throw_target = get_edge_target_turf(crushed_can, pick(GLOB.alldirs)) - crushed_can.throw_at(throw_target, rand(1,2), 7) - qdel(src) - return - -/obj/item/reagent_containers/food/drinks/soda_cans/proc/open_soda(mob/user) - to_chat(user, "You pull back the tab of \the [src] with a satisfying pop.") //Ahhhhhhhh - ENABLE_BITFIELD(reagents.flags, OPENCONTAINER) - playsound(src, "can_open", 50, TRUE) - spillable = TRUE - -/obj/item/reagent_containers/food/drinks/soda_cans/attack_self(mob/user) - if(!is_drainable()) - open_soda(user) - return ..() - -/obj/item/reagent_containers/food/drinks/soda_cans/cola - name = "Space Cola" - desc = "" - icon_state = "cola" - list_reagents = list(/datum/reagent/consumable/space_cola = 30) - foodtype = SUGAR - -/obj/item/reagent_containers/food/drinks/soda_cans/tonic - name = "T-Borg's tonic water" - desc = "" - icon_state = "tonic" - list_reagents = list(/datum/reagent/consumable/tonic = 50) - foodtype = ALCOHOL - -/obj/item/reagent_containers/food/drinks/soda_cans/sodawater - name = "soda water" - desc = "" - icon_state = "sodawater" - list_reagents = list(/datum/reagent/consumable/sodawater = 50) - -/obj/item/reagent_containers/food/drinks/soda_cans/lemon_lime - name = "orange soda" - desc = "" - icon_state = "lemon-lime" - list_reagents = list(/datum/reagent/consumable/lemon_lime = 30) - foodtype = FRUIT - -/obj/item/reagent_containers/food/drinks/soda_cans/lemon_lime/Initialize() - . = ..() - name = "lemon-lime soda" - -/obj/item/reagent_containers/food/drinks/soda_cans/space_up - name = "Space-Up!" - desc = "" - icon_state = "space-up" - list_reagents = list(/datum/reagent/consumable/space_up = 30) - foodtype = SUGAR | JUNKFOOD - -/obj/item/reagent_containers/food/drinks/soda_cans/starkist - name = "Star-kist" - desc = "" - icon_state = "starkist" - list_reagents = list(/datum/reagent/consumable/space_cola = 15, /datum/reagent/consumable/orangejuice = 15) - foodtype = SUGAR | FRUIT | JUNKFOOD - -/obj/item/reagent_containers/food/drinks/soda_cans/space_mountain_wind - name = "Space Mountain Wind" - desc = "" - icon_state = "space_mountain_wind" - list_reagents = list(/datum/reagent/consumable/spacemountainwind = 30) - foodtype = SUGAR | JUNKFOOD - -/obj/item/reagent_containers/food/drinks/soda_cans/thirteenloko - name = "Thirteen Loko" - desc = "" - icon_state = "thirteen_loko" - list_reagents = list(/datum/reagent/consumable/ethanol/thirteenloko = 30) - foodtype = SUGAR | JUNKFOOD - -/obj/item/reagent_containers/food/drinks/soda_cans/dr_gibb - name = "Dr. Gibb" - desc = "" - icon_state = "dr_gibb" - list_reagents = list(/datum/reagent/consumable/dr_gibb = 30) - foodtype = SUGAR | JUNKFOOD - -/obj/item/reagent_containers/food/drinks/soda_cans/pwr_game - name = "Pwr Game" - desc = "" - icon_state = "purple_can" - list_reagents = list(/datum/reagent/consumable/pwr_game = 30) - -/obj/item/reagent_containers/food/drinks/soda_cans/shamblers - name = "Shambler's juice" - desc = "" - icon_state = "shamblers" - list_reagents = list(/datum/reagent/consumable/shamblers = 30) - foodtype = SUGAR | JUNKFOOD - -/obj/item/reagent_containers/food/drinks/soda_cans/grey_bull - name = "Grey Bull" - desc = "" - icon_state = "energy_drink" - list_reagents = list(/datum/reagent/consumable/grey_bull = 20) - foodtype = SUGAR | JUNKFOOD - -/obj/item/reagent_containers/food/drinks/soda_cans/monkey_energy - name = "Monkey Energy" - desc = "" - icon_state = "monkey_energy" - item_state = "monkey_energy" - list_reagents = list(/datum/reagent/consumable/monkey_energy = 50) - foodtype = SUGAR | JUNKFOOD - -/obj/item/reagent_containers/food/drinks/soda_cans/air - name = "canned air" - desc = "" - icon_state = "air" - list_reagents = list(/datum/reagent/nitrogen = 24, /datum/reagent/oxygen = 6) diff --git a/code/modules/food_and_drinks/drinks/drinks/bottle.dm b/code/modules/food_and_drinks/drinks/drinks/bottle.dm deleted file mode 100644 index 14ea23e03d..0000000000 --- a/code/modules/food_and_drinks/drinks/drinks/bottle.dm +++ /dev/null @@ -1,401 +0,0 @@ - - -///////////////////////////////////////////////Alchohol bottles! -Agouri ////////////////////////// -//Functionally identical to regular drinks. The only difference is that the default bottle size is 100. - Darem -//Bottles now knockdown and break when smashed on people's heads. - Giacom - -/obj/item/reagent_containers/food/drinks/bottle - amount_per_transfer_from_this = 10 - volume = 100 - force = 15 //Smashing bottles over someone's head hurts. - throwforce = 15 - item_state = "broken_beer" //Generic held-item sprite until unique ones are made. - lefthand_file = 'icons/mob/inhands/misc/food_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/food_righthand.dmi' - var/const/duration = 13 //Directly relates to the 'knockdown' duration. Lowered by armor (i.e. helmets) - isGlass = TRUE - foodtype = ALCOHOL - - -/obj/item/reagent_containers/food/drinks/bottle/smash(mob/living/target, mob/thrower, ranged = FALSE) - //Creates a shattering noise and replaces the bottle with a broken_bottle - if(bartender_check(target) && ranged) - return - var/obj/item/broken_bottle/B = new (loc) - if(!ranged && thrower) - thrower.put_in_hands(B) - B.icon_state = icon_state - - var/icon/I = new('icons/obj/drinks.dmi', src.icon_state) - I.Blend(B.broken_outline, ICON_OVERLAY, rand(5), 1) - I.SwapColor(rgb(255, 0, 220, 255), rgb(0, 0, 0, 0)) - B.icon = I - - if(isGlass) - if(prob(33)) - var/obj/item/shard/S = new(drop_location()) - target.Bumped(S) - playsound(src, "shatter", 70, TRUE) - else - B.force = 0 - B.throwforce = 0 - B.desc = "" - B.name = "broken [name]" - transfer_fingerprints_to(B) - - qdel(src) - target.Bumped(B) - -/obj/item/reagent_containers/food/drinks/bottle/attack(mob/living/target, mob/living/user) - - if(!target) - return - - if(user.used_intent.type != INTENT_HARM || !isGlass) - return ..() - - if(HAS_TRAIT(user, TRAIT_PACIFISM)) - to_chat(user, "I don't want to harm [target]!") - return - - var/obj/item/bodypart/affecting = user.zone_selected //Find what the player is aiming at - - var/armor_block = 0 //Get the target's armor values for normal attack damage. - var/armor_duration = 0 //The more force the bottle has, the longer the duration. - - //Calculating duration and calculating damage. - if(ishuman(target)) - - var/mob/living/carbon/human/H = target - var/headarmor = 0 // Target's head armor - armor_block = H.run_armor_check(affecting, "melee","","",armor_penetration) // For normal attack damage - - //If they have a hat/helmet and the user is targeting their head. - if(istype(H.head, /obj/item/clothing/head) && affecting == BODY_ZONE_HEAD) - headarmor = H.head.armor.melee - else - headarmor = 0 - - //Calculate the knockdown duration for the target. - armor_duration = (duration - headarmor) + force - - else - //Only humans can have armor, right? - armor_block = target.run_armor_check(affecting, "melee") - if(affecting == BODY_ZONE_HEAD) - armor_duration = duration + force - - //Apply the damage! - armor_block = min(90,armor_block) - target.apply_damage(force, BRUTE, affecting, armor_block) - - // You are going to knock someone down for longer if they are not wearing a helmet. - var/head_attack_message = "" - if(affecting == BODY_ZONE_HEAD && istype(target, /mob/living/carbon/)) - head_attack_message = " on the head" - if(armor_duration) - target.apply_effect(min(armor_duration, 200) , EFFECT_KNOCKDOWN) - - //Display an attack message. - if(target != user) - target.visible_message("[user] hits [target][head_attack_message] with a bottle of [src.name]!", \ - "[user] hits you [head_attack_message] with a bottle of [src.name]!") - else - target.visible_message("[target] hits [target.p_them()]self with a bottle of [src.name][head_attack_message]!", \ - "I hit myself with a bottle of [src.name][head_attack_message]!") - - //Attack logs - log_combat(user, target, "attacked", src) - - //The reagents in the bottle splash all over the target, thanks for the idea Nodrak - SplashReagents(target) - - //Finally, smash the bottle. This kills (del) the bottle. - smash(target, user) - - return - -//Keeping this here for now, I'll ask if I should keep it here. -/obj/item/broken_bottle - name = "broken bottle" - desc = "" - icon = 'icons/obj/drinks.dmi' - icon_state = "broken_bottle" - force = 9 - throwforce = 5 - throw_speed = 1 - throw_range = 5 - w_class = WEIGHT_CLASS_TINY - item_state = "beer" - hitsound = 'sound/blank.ogg' - attack_verb = list("stabbed", "slashed", "attacked") - sharpness = IS_SHARP - var/static/icon/broken_outline = icon('icons/obj/drinks.dmi', "broken") - -/obj/item/broken_bottle/Initialize() - . = ..() - AddComponent(/datum/component/butchering, 200, 55) - -/obj/item/reagent_containers/food/drinks/bottle/whiskey - name = "Uncle Git's special reserve" - desc = "" - icon_state = "whiskeybottle" - list_reagents = list(/datum/reagent/consumable/ethanol/whiskey = 100) - -/obj/item/reagent_containers/food/drinks/bottle/vodka - name = "Tunguska triple distilled" - desc = "" - icon_state = "vodkabottle" - list_reagents = list(/datum/reagent/consumable/ethanol/vodka = 100) - -/obj/item/reagent_containers/food/drinks/bottle/vodka/badminka - name = "Badminka vodka" - desc = "" - icon_state = "badminka" - list_reagents = list(/datum/reagent/consumable/ethanol/vodka = 100) - -/obj/item/reagent_containers/food/drinks/bottle/bottleofnothing - name = "bottle of nothing" - desc = "" - icon_state = "bottleofnothing" - list_reagents = list(/datum/reagent/consumable/nothing = 100) - foodtype = NONE - -/obj/item/reagent_containers/food/drinks/bottle/rum - name = "Captain Pete's Cuban spiced rum" - desc = "" - icon_state = "rumbottle" - list_reagents = list(/datum/reagent/consumable/ethanol/rum = 100) - -/obj/item/reagent_containers/food/drinks/bottle/holywater - name = "flask of holy water" - desc = "" - icon_state = "holyflask" - list_reagents = list(/datum/reagent/water/holywater = 100) - foodtype = NONE - -/obj/item/reagent_containers/food/drinks/bottle/holywater/hell - desc = "" - list_reagents = list(/datum/reagent/hellwater = 100) - -/obj/item/reagent_containers/food/drinks/bottle/wine - name = "Doublebeard's bearded special wine" - desc = "" - icon_state = "winebottle" - list_reagents = list(/datum/reagent/consumable/ethanol/wine = 100) - foodtype = FRUIT | ALCOHOL - -/obj/item/reagent_containers/food/drinks/bottle/absinthe - name = "extra-strong absinthe" - desc = "" - icon_state = "absinthebottle" - list_reagents = list(/datum/reagent/consumable/ethanol/absinthe = 100) - -/obj/item/reagent_containers/food/drinks/bottle/absinthe/Initialize() - . = ..() - redact() - -/obj/item/reagent_containers/food/drinks/bottle/absinthe/proc/redact() - // There was a large fight in the coderbus about a player reference - // in absinthe. Ergo, this is why the name generation is now so - // complicated. Judge us kindly. - var/shortname = pickweight( - list("T&T" = 1, "A&A" = 1, "Generic" = 1)) - var/fullname - switch(shortname) - if("T&T") - fullname = "Teal and Tealer" - if("A&A") - fullname = "Ash and Asher" - if("Generic") - fullname = "Nanotrasen Cheap Imitations" - var/removals = list("\[REDACTED\]", "\[EXPLETIVE DELETED\]", - "\[EXPUNGED\]", "\[INFORMATION ABOVE YOUR SECURITY CLEARANCE\]", - "\[MOVE ALONG CITIZEN\]", "\[NOTHING TO SEE HERE\]") - var/chance = 50 - - if(prob(chance)) - shortname = pick_n_take(removals) - - var/list/final_fullname = list() - for(var/word in splittext(fullname, " ")) - if(prob(chance)) - word = pick_n_take(removals) - final_fullname += word - - fullname = jointext(final_fullname, " ") - - // Actually finally setting the new name and desc - name = "[shortname] [name]" - desc = "" - - -/obj/item/reagent_containers/food/drinks/bottle/absinthe/premium - name = "Gwyn's premium absinthe" - desc = "" - icon_state = "absinthepremium" - -/obj/item/reagent_containers/food/drinks/bottle/absinthe/premium/redact() - return - -/obj/item/reagent_containers/food/drinks/bottle/lizardwine - name = "bottle of lizard wine" - desc = "" - icon_state = "lizardwine" - list_reagents = list(/datum/reagent/consumable/ethanol/lizardwine = 100) - foodtype = FRUIT | ALCOHOL - - -/obj/item/reagent_containers/food/drinks/bottle/sake - name = "Ryo's traditional sake" - desc = "" - icon_state = "sakebottle" - list_reagents = list(/datum/reagent/consumable/ethanol/sake = 100) - -/obj/item/reagent_containers/food/drinks/bottle/sake/Initialize() - . = ..() - if(prob(10)) - name = "Fluffy Tail Sake" - desc += " On the bottle is a picture of a kitsune with nine touchable tails." - icon_state = "sakebottle_k" - else if(prob(10)) - name = "Inubashiri's Home Brew" - desc += " Awoo." - icon_state = "sakebottle_i" - -/obj/item/reagent_containers/food/drinks/bottle/fernet - name = "Fernet Bronca" - desc = "" - icon_state = "fernetbottle" - list_reagents = list(/datum/reagent/consumable/ethanol/fernet = 100) - -//////////////////////////JUICES AND STUFF /////////////////////// - -/obj/item/reagent_containers/food/drinks/bottle/orangejuice - name = "orange juice" - desc = "" - custom_price = 10 - icon_state = "orangejuice" - item_state = "carton" - lefthand_file = 'icons/mob/inhands/equipment/kitchen_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/kitchen_righthand.dmi' - isGlass = FALSE - list_reagents = list(/datum/reagent/consumable/orangejuice = 100) - foodtype = FRUIT | BREAKFAST - -/obj/item/reagent_containers/food/drinks/bottle/cream - name = "milk cream" - desc = "" - custom_price = 10 - icon_state = "cream" - item_state = "carton" - lefthand_file = 'icons/mob/inhands/equipment/kitchen_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/kitchen_righthand.dmi' - isGlass = FALSE - list_reagents = list(/datum/reagent/consumable/cream = 100) - foodtype = DAIRY - -/obj/item/reagent_containers/food/drinks/bottle/tomatojuice - name = "tomato juice" - desc = "" - custom_price = 10 - icon_state = "tomatojuice" - item_state = "carton" - lefthand_file = 'icons/mob/inhands/equipment/kitchen_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/kitchen_righthand.dmi' - isGlass = FALSE - list_reagents = list(/datum/reagent/consumable/tomatojuice = 100) - foodtype = VEGETABLES - -/obj/item/reagent_containers/food/drinks/bottle/limejuice - name = "lime juice" - desc = "" - custom_price = 10 - icon_state = "limejuice" - item_state = "carton" - lefthand_file = 'icons/mob/inhands/equipment/kitchen_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/kitchen_righthand.dmi' - isGlass = FALSE - list_reagents = list(/datum/reagent/consumable/limejuice = 100) - foodtype = FRUIT - - -/obj/item/reagent_containers/food/drinks/bottle/blank //Don't let players print these from a lathe, bottles should be obtained in mass from the bar only. - name = "glass bottle" - desc = "" - icon_state = "glassbottle" - fill_icon_thresholds = list(0, 10, 20, 30, 40, 50, 60, 70, 80, 90) - -/obj/item/reagent_containers/food/drinks/bottle/blank/update_icon() - ..() - add_overlay("[initial(icon_state)]shine") - -/obj/item/reagent_containers/food/drinks/bottle/blank/small - name = "small glass bottle" - desc = "" - icon_state = "glassbottlesmall" - volume = 50 - -////////////////////////// MOLOTOV /////////////////////// -/obj/item/reagent_containers/food/drinks/bottle/molotov - name = "molotov cocktail" - desc = "" - icon_state = "vodkabottle" - list_reagents = list() - var/list/accelerants = list( /datum/reagent/consumable/ethanol, /datum/reagent/fuel, /datum/reagent/clf3, /datum/reagent/phlogiston, - /datum/reagent/napalm, /datum/reagent/hellwater, /datum/reagent/toxin/plasma, /datum/reagent/toxin/spore_burning) - var/active = 0 - -/obj/item/reagent_containers/food/drinks/bottle/molotov/CheckParts(list/parts_list) - ..() - var/obj/item/reagent_containers/food/drinks/bottle/B = locate() in contents - if(B) - icon_state = B.icon_state - B.reagents.copy_to(src,100) - if(!B.isGlass) - desc += " You're not sure if making this out of a carton was the brightest idea." - isGlass = FALSE - return - -/obj/item/reagent_containers/food/drinks/bottle/molotov/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) - var/firestarter = 0 - for(var/datum/reagent/R in reagents.reagent_list) - for(var/A in accelerants) - if(istype(R,A)) - firestarter = 1 - break - if(firestarter && active) - hit_atom.fire_act() - new /obj/effect/hotspot(get_turf(hit_atom)) - ..() - -/obj/item/reagent_containers/food/drinks/bottle/molotov/attackby(obj/item/I, mob/user, params) - if(I.get_temperature() && !active) - active = TRUE - log_bomber(user, "has primed a", src, "for detonation") - - to_chat(user, "I light [src] on fire.") - add_overlay(GLOB.fire_overlay) - if(!isGlass) - addtimer(CALLBACK(src, PROC_REF(explode)), 5 SECONDS) - -/obj/item/reagent_containers/food/drinks/bottle/molotov/proc/explode() - if(!active) - return - if(get_turf(src)) - var/atom/target = loc - for(var/i in 1 to 2) - if(istype(target, /obj/item/storage)) - target = target.loc - SplashReagents(target) - target.fire_act() - qdel(src) - -/obj/item/reagent_containers/food/drinks/bottle/molotov/attack_self(mob/user) - if(active) - if(!isGlass) - to_chat(user, "The flame's spread too far on it!") - return - to_chat(user, "I snuff out the flame on [src].") - cut_overlay(GLOB.fire_overlay) - active = 0 diff --git a/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm b/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm deleted file mode 100644 index 220eee8774..0000000000 --- a/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm +++ /dev/null @@ -1,129 +0,0 @@ - - -/obj/item/reagent_containers/food/drinks/drinkingglass - name = "drinking glass" - desc = "" - custom_price = 5 - icon_state = "glass_empty" - amount_per_transfer_from_this = 10 - volume = 50 - custom_materials = list(/datum/material/glass=500) - max_integrity = 20 - spillable = TRUE - resistance_flags = ACID_PROOF - obj_flags = CAN_BE_HIT | UNIQUE_RENAME - drop_sound = 'sound/blank.ogg' - pickup_sound = 'sound/blank.ogg' - -/obj/item/reagent_containers/food/drinks/drinkingglass/on_reagent_change(changetype) - cut_overlays() - if(reagents.reagent_list.len) - var/datum/reagent/R = reagents.get_master_reagent() - if(!renamedByPlayer) - name = R.glass_name - desc = R.glass_desc - if(R.glass_icon_state) - icon_state = R.glass_icon_state - else - var/mutable_appearance/reagent_overlay = mutable_appearance(icon, "glassoverlay") - icon_state = "glass_empty" - reagent_overlay.color = mix_color_from_reagents(reagents.reagent_list) - add_overlay(reagent_overlay) - else - icon_state = "glass_empty" - renamedByPlayer = FALSE //so new drinks can rename the glass - -//Shot glasses!// -// This lets us add shots in here instead of lumping them in with drinks because >logic // -// The format for shots is the exact same as iconstates for the drinking glass, except you use a shot glass instead. // -// If it's a new drink, remember to add it to Chemistry-Reagents.dm and Chemistry-Recipes.dm as well. // -// You can only mix the ported-over drinks in shot glasses for now (they'll mix in a shaker, but the sprite won't change for glasses). // -// This is on a case-by-case basis, and you can even make a separate sprite for shot glasses if you want. // - -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass - name = "shot glass" - desc = "" - custom_price = 5 - icon_state = "shotglass" - gulp_size = 15 - amount_per_transfer_from_this = 15 - possible_transfer_amounts = list() - volume = 15 - custom_materials = list(/datum/material/glass=100) - -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/on_reagent_change(changetype) - cut_overlays() - - gulp_size = max(round(reagents.total_volume / 15), 15) - - if (reagents.reagent_list.len > 0) - var/datum/reagent/largest_reagent = reagents.get_master_reagent() - name = "filled shot glass" - desc = "" - - if(largest_reagent.shot_glass_icon_state) - icon_state = largest_reagent.shot_glass_icon_state - else - icon_state = "shotglassclear" - var/mutable_appearance/shot_overlay = mutable_appearance(icon, "shotglassoverlay") - shot_overlay.color = mix_color_from_reagents(reagents.reagent_list) - add_overlay(shot_overlay) - - - else - icon_state = "shotglass" - name = "shot glass" - desc = "" - return - -/obj/item/reagent_containers/food/drinks/drinkingglass/filled/Initialize() - . = ..() - on_reagent_change(ADD_REAGENT) - -/obj/item/reagent_containers/food/drinks/drinkingglass/filled/soda - name = "Soda Water" - list_reagents = list(/datum/reagent/consumable/sodawater = 50) - -/obj/item/reagent_containers/food/drinks/drinkingglass/filled/cola - name = "Space Cola" - list_reagents = list(/datum/reagent/consumable/space_cola = 50) - -/obj/item/reagent_containers/food/drinks/drinkingglass/filled/nuka_cola - name = "Nuka Cola" - list_reagents = list(/datum/reagent/consumable/nuka_cola = 50) - -/obj/item/reagent_containers/food/drinks/drinkingglass/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/reagent_containers/food/snacks/egg)) //breaking eggs - var/obj/item/reagent_containers/food/snacks/egg/E = I - if(reagents) - if(reagents.total_volume >= reagents.maximum_volume) - to_chat(user, "[src] is full.") - else - to_chat(user, "I break [E] in [src].") - reagents.add_reagent(/datum/reagent/consumable/eggyolk, 5) - qdel(E) - return - else - ..() - -/obj/item/reagent_containers/food/drinks/drinkingglass/attack(obj/target, mob/user) - if(user.used_intent.type == INTENT_HARM && ismob(target) && target.reagents && reagents.total_volume) - target.visible_message("[user] splashes the contents of [src] onto [target]!", \ - "[user] splashes the contents of [src] onto you!") - log_combat(user, target, "splashed", src) - reagents.reaction(target, TOUCH) - reagents.clear_reagents() - return - ..() - -/obj/item/reagent_containers/food/drinks/drinkingglass/afterattack(obj/target, mob/user, proximity) - . = ..() - if((!proximity) || !check_allowed_items(target,target_self=1)) - return - - else if(reagents.total_volume && user.used_intent.type == INTENT_HARM) - user.visible_message("[user] splashes the contents of [src] onto [target]!", \ - "I splash the contents of [src] onto [target].") - reagents.reaction(target, TOUCH) - reagents.clear_reagents() - return diff --git a/code/modules/food_and_drinks/food/condiment.dm b/code/modules/food_and_drinks/food/condiment.dm index a1551e36ec..a8fe537dad 100644 --- a/code/modules/food_and_drinks/food/condiment.dm +++ b/code/modules/food_and_drinks/food/condiment.dm @@ -101,21 +101,7 @@ . = ..() if(!proximity) return - if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us. - - if(!target.reagents.total_volume) - to_chat(user, "[target] is empty!") - return - - if(reagents.total_volume >= reagents.maximum_volume) - to_chat(user, "[src] is full!") - return - - var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this, transfered_by = user) - to_chat(user, "I fill [src] with [trans] units of the contents of [target].") - - //Something like a glass or a food item. Player probably wants to transfer TO it. - else if(target.is_drainable() || istype(target, /obj/item/reagent_containers/food/snacks)) + if(target.is_drainable() || istype(target, /obj/item/reagent_containers/food/snacks)) if(!reagents.total_volume) to_chat(user, "[src] is empty!") return diff --git a/code/modules/food_and_drinks/food/customizables.dm b/code/modules/food_and_drinks/food/customizables.dm index ad244866ce..3776af058f 100644 --- a/code/modules/food_and_drinks/food/customizables.dm +++ b/code/modules/food_and_drinks/food/customizables.dm @@ -181,7 +181,6 @@ name = "kebab" desc = "" ingredients_placement = INGREDIENTS_LINE - trash = /obj/item/stack/rods list_reagents = list(/datum/reagent/consumable/nutriment = 1) ingMax = 6 icon_state = "rod" diff --git a/code/modules/food_and_drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm index 7ea6ab98c7..e74a622863 100644 --- a/code/modules/food_and_drinks/food/snacks.dm +++ b/code/modules/food_and_drinks/food/snacks.dm @@ -534,7 +534,7 @@ All foods are distributed among various categories. Use common sense. . = ..() if(!dunkable || !proximity) return - if(istype(M, /obj/item/reagent_containers/glass) || istype(M, /obj/item/reagent_containers/food/drinks)) //you can dunk dunkable snacks into beakers or drinks + if(istype(M, /obj/item/reagent_containers/glass)) //you can dunk dunkable snacks into beakers or drinks if(!M.is_drainable()) to_chat(user, "[M] is unable to be dunked in!") return diff --git a/code/modules/food_and_drinks/food/snacks_cake.dm b/code/modules/food_and_drinks/food/snacks_cake.dm index cacc7bb97f..c746a8368d 100644 --- a/code/modules/food_and_drinks/food/snacks_cake.dm +++ b/code/modules/food_and_drinks/food/snacks_cake.dm @@ -175,10 +175,6 @@ tastes = list("cake" = 5, "sweetness" = 1) foodtype = GRAIN | DAIRY | JUNKFOOD | SUGAR -/obj/item/reagent_containers/food/snacks/store/cake/birthday/heating_act() //super sekrit club - new /obj/item/clothing/head/hardhat/cakehat(get_turf(src)) - qdel(src) - /obj/item/reagent_containers/food/snacks/cakeslice/birthday name = "birthday cake slice" desc = "" @@ -207,10 +203,6 @@ . = ..() energy_bite(M, user) -/obj/item/reagent_containers/food/snacks/store/cake/birthday/energy/heating_act() //super sekriter club - new /obj/item/clothing/head/hardhat/cakehat/energycake(get_turf(src)) - qdel(src) - /obj/item/reagent_containers/food/snacks/cakeslice/birthday/energy name = "energy cake slice" desc = "" diff --git a/code/modules/food_and_drinks/food/snacks_egg.dm b/code/modules/food_and_drinks/food/snacks_egg.dm index af68dd4e1b..f98fe2add2 100644 --- a/code/modules/food_and_drinks/food/snacks_egg.dm +++ b/code/modules/food_and_drinks/food/snacks_egg.dm @@ -25,7 +25,7 @@ icon = 'modular/Neu_Food/icons/food.dmi' name = "cackleberry" desc = "" - icon_state = "egg" + icon_state = "egg" list_reagents = list(/datum/reagent/consumable/eggyolk = 5) cooked_type = null fried_type = /obj/item/reagent_containers/food/snacks/rogue/friedegg @@ -63,38 +63,6 @@ var/color = mix_color_from_reagents(reagents.reagent_list) add_atom_colour(color, FIXED_COLOUR_PRIORITY) -/obj/item/reagent_containers/food/snacks/egg/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) - if(!..()) //was it caught by a mob? - var/turf/T = get_turf(hit_atom) - var/obj/O = new /obj/effect/decal/cleanable/food/egg_smudge(T) - O.pixel_x = rand(-8,8) - O.pixel_y = rand(-8,8) - if(prob(1)) //Roughly (1%) chance to make a chick, as in Minecraft. I decided not to include the chances for the creation of multiple chicks from the impact of one egg, since that'd probably require nested prob()s or something (and people might think that it was a bug, anyway). - if(chick_count < MAX_CHICKENS) //Chicken code uses this MAX_CHICKENS variable, so I figured that I'd use it again here. Even this check and the check in chicken code both use the MAX_CHICKENS variable, they use independent counter variables and thus are independent of each other. - new /mob/living/simple_animal/chick(T) - chick_count++ - reagents.reaction(hit_atom, TOUCH) - qdel(src) - -/obj/item/reagent_containers/food/snacks/egg/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/toy/crayon)) - var/obj/item/toy/crayon/C = W - var/clr = C.crayon_color - - if(!(clr in list("blue", "green", "mime", "orange", "purple", "rainbow", "red", "yellow"))) - to_chat(usr, "[src] refuses to take on this colour!") - return - - to_chat(usr, "I colour [src] with [W].") - icon_state = "egg-[clr]" - else if(istype(W, /obj/item/stamp/clown)) - var/clowntype = pick("grock", "grimaldi", "rainbow", "chaos", "joker", "sexy", "standard", "bobble", "krusty", "bozo", "pennywise", "ronald", "jacobs", "kelly", "popov", "cluwne") - icon_state = "egg-clown-[clowntype]" - desc = "" - to_chat(usr, "I stamp [src] with [W], creating an artistic and not remotely horrifying likeness of clown makeup.") - else - ..() - /obj/item/reagent_containers/food/snacks/egg/blue icon_state = "egg-blue" diff --git a/code/modules/food_and_drinks/food/snacks_frozen.dm b/code/modules/food_and_drinks/food/snacks_frozen.dm index 61b122e964..0bd29d397c 100644 --- a/code/modules/food_and_drinks/food/snacks_frozen.dm +++ b/code/modules/food_and_drinks/food/snacks_frozen.dm @@ -52,7 +52,6 @@ desc = "" icon = 'icons/obj/food/snowcones.dmi' icon_state = "flaverless_sc" - trash = /obj/item/reagent_containers/food/drinks/sillycup //We dont eat paper cups bonus_reagents = list(/datum/reagent/water = 10) //Base line will allways give water list_reagents = list(/datum/reagent/water = 1) // We dont get food for water/juices filling_color = "#FFFFFF" //Ice is white diff --git a/code/modules/food_and_drinks/food/snacks_meat.dm b/code/modules/food_and_drinks/food/snacks_meat.dm index 59a5494664..d90d00dd7b 100644 --- a/code/modules/food_and_drinks/food/snacks_meat.dm +++ b/code/modules/food_and_drinks/food/snacks_meat.dm @@ -109,24 +109,8 @@ filling_color = "#800000" tastes = list("meat" = 1) foodtype = MEAT -/* -/obj/item/reagent_containers/food/snacks/sausage - name = "sausage" - desc = "" - icon_state = "sausage" - filling_color = "#CD5C5C" - bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 1) - list_reagents = list(/datum/reagent/consumable/nutriment = 6, /datum/reagent/consumable/nutriment/vitamin = 1) - tastes = list("meat" = 1) - foodtype = MEAT | BREAKFAST - var/roasted = FALSE -/obj/item/reagent_containers/food/snacks/sausage/Initialize() - . = ..() - eatverb = pick("bite","chew","nibble","deep throat","gobble","chomp") -*/ /obj/item/reagent_containers/food/snacks/kebab - trash = /obj/item/stack/rods icon_state = "kebab" w_class = WEIGHT_CLASS_NORMAL list_reagents = list(/datum/reagent/consumable/nutriment = 8) diff --git a/code/modules/food_and_drinks/food/snacks_other.dm b/code/modules/food_and_drinks/food/snacks_other.dm index a4750cc987..bc3410039f 100644 --- a/code/modules/food_and_drinks/food/snacks_other.dm +++ b/code/modules/food_and_drinks/food/snacks_other.dm @@ -543,7 +543,6 @@ name = "butter on a stick" desc = "" icon_state = "butteronastick" - trash = /obj/item/stack/rods /obj/item/reagent_containers/food/snacks/pineappleslice name = "pineapple slice" diff --git a/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm b/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm deleted file mode 100644 index 024e095899..0000000000 --- a/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm +++ /dev/null @@ -1,163 +0,0 @@ -#define STORAGE_CAPACITY 30 -#define LIQUID_CAPACIY 200 -#define MIXER_CAPACITY 100 - -/obj/machinery/food_cart - name = "food cart" - desc = "" - icon = 'icons/obj/kitchen.dmi' - icon_state = "foodcart" - density = TRUE - anchored = FALSE - use_power = NO_POWER_USE - var/food_stored = 0 - var/glasses = 0 - var/portion = 10 - var/selected_drink - var/list/stored_food = list() - var/obj/item/reagent_containers/mixer - -/obj/machinery/food_cart/Initialize() - . = ..() - create_reagents(LIQUID_CAPACIY, OPENCONTAINER | NO_REACT) - mixer = new /obj/item/reagent_containers(src, MIXER_CAPACITY) - mixer.name = "Mixer" - -/obj/machinery/food_cart/Destroy() - QDEL_NULL(mixer) - return ..() - -/obj/machinery/food_cart/ui_interact(mob/user) - . = ..() - var/dat - dat += "
STORED INGREDIENTS AND DRINKS
" - dat += "Remaining glasses: [glasses]
" - dat += "Portion: [portion]
" - for(var/datum/reagent/R in reagents.reagent_list) - dat += "[R.name]: [R.volume] " - dat += "Purge" - if (glasses > 0) - dat += "Pour in a glass" - dat += "Add to the mixer
" - dat += "

MIXER CONTENTS
" - for(var/datum/reagent/R in mixer.reagents.reagent_list) - dat += "[R.name]: [R.volume] " - dat += "Transfer back" - if (glasses > 0) - dat += "Pour in a glass" - dat += "
" - dat += "

STORED FOOD
" - for(var/V in stored_food) - if(stored_food[V] > 0) - dat += "[V]: [stored_food[V]] Dispense
" - dat += "

Refresh Close" - - var/datum/browser/popup = new(user, "foodcart","Food Cart", 500, 350, src) - popup.set_content(dat) - popup.open() - -/obj/machinery/food_cart/proc/isFull() - return food_stored >= STORAGE_CAPACITY - -/obj/machinery/food_cart/attackby(obj/item/O, mob/user, params) - if(O.tool_behaviour == TOOL_WRENCH) - default_unfasten_wrench(user, O, 0) - return TRUE - if(istype(O, /obj/item/reagent_containers/food/drinks/drinkingglass)) - var/obj/item/reagent_containers/food/drinks/drinkingglass/DG = O - if(!DG.reagents.total_volume) //glass is empty - qdel(DG) - glasses++ - to_chat(user, "[src] accepts the drinking glass, sterilizing it.") - else if(istype(O, /obj/item/reagent_containers/food/snacks)) - if(isFull()) - to_chat(user, "[src] is at full capacity.") - else - var/obj/item/reagent_containers/food/snacks/S = O - if(!user.transferItemToLoc(S, src)) - return - if(stored_food[sanitize(S.name)]) - stored_food[sanitize(S.name)]++ - else - stored_food[sanitize(S.name)] = 1 - else if(istype(O, /obj/item/stack/sheet/glass)) - var/obj/item/stack/sheet/glass/G = O - if(G.get_amount() >= 1) - G.use(1) - glasses += 4 - to_chat(user, "[src] accepts a sheet of glass.") - else if(istype(O, /obj/item/storage/bag/tray)) - var/obj/item/storage/bag/tray/T = O - for(var/obj/item/reagent_containers/food/snacks/S in T.contents) - if(isFull()) - to_chat(user, "[src] is at full capacity.") - break - else - if(SEND_SIGNAL(T, COMSIG_TRY_STORAGE_TAKE, S, src)) - if(stored_food[sanitize(S.name)]) - stored_food[sanitize(S.name)]++ - else - stored_food[sanitize(S.name)] = 1 - else if(O.is_drainable()) - return - else - . = ..() - updateDialog() - -/obj/machinery/food_cart/Topic(href, href_list) - if(..()) - return - - if(href_list["disposeI"]) - reagents.del_reagent(href_list["disposeI"]) - - if(href_list["dispense"]) - if(stored_food[href_list["dispense"]]-- <= 0) - stored_food[href_list["dispense"]] = 0 - else - for(var/obj/O in contents) - if(sanitize(O.name) == href_list["dispense"]) - O.forceMove(drop_location()) - break - log_combat(usr, src, "dispensed [O] from", null, "with [stored_food[href_list["dispense"]]] remaining") - - if(href_list["portion"]) - portion = CLAMP(input("How much drink do you want to dispense per glass?") as num|null, 0, 50) - - if (isnull(portion)) - return - - if(href_list["pour"] || href_list["m_pour"]) - if(glasses-- <= 0) - to_chat(usr, "There are no glasses left!") - glasses = 0 - else - var/obj/item/reagent_containers/food/drinks/drinkingglass/DG = new(loc) - if(href_list["pour"]) - reagents.trans_id_to(DG, href_list["pour"], portion) - if(href_list["m_pour"]) - mixer.reagents.trans_id_to(DG, href_list["m_pour"], portion) - - if(href_list["mix"]) - if(reagents.trans_id_to(mixer, href_list["mix"], portion) == 0) - to_chat(usr, "[mixer] is full!") - - if(href_list["transfer"]) - if(mixer.reagents.trans_id_to(src, href_list["transfer"], portion) == 0) - to_chat(usr, "[src] is full!") - - updateDialog() - - if(href_list["close"]) - usr.unset_machine() - usr << browse(null,"window=foodcart") - return - -/obj/machinery/food_cart/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) - new /obj/item/stack/sheet/metal(loc, 4) - qdel(src) - -#undef STORAGE_CAPACITY -#undef LIQUID_CAPACIY -#undef MIXER_CAPACITY diff --git a/code/modules/food_and_drinks/kitchen_machinery/grill.dm b/code/modules/food_and_drinks/kitchen_machinery/grill.dm deleted file mode 100644 index 5ddfcb275c..0000000000 --- a/code/modules/food_and_drinks/kitchen_machinery/grill.dm +++ /dev/null @@ -1,138 +0,0 @@ -//I JUST WANNA GRILL FOR GOD'S SAKE - -/obj/machinery/grill - name = "grill" - desc = "" - icon = 'icons/obj/kitchen.dmi' - icon_state = "grill_open" - density = TRUE - layer = BELOW_OBJ_LAYER - use_power = NO_POWER_USE - var/grill_fuel = 0 - var/obj/item/reagent_containers/food/grilled_item - var/grill_time = 0 - var/datum/looping_sound/grill/grill_loop - -/obj/machinery/grill/Initialize() - . = ..() - grill_loop = new(list(src), FALSE) - -/obj/machinery/grill/update_icon() - if(grilled_item) - icon_state = "grill" - else if(grill_fuel) - icon_state = "grill_on" - else - icon_state = "grill_open" - -/obj/machinery/grill/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/stack/sheet/mineral/coal) || istype(I, /obj/item/stack/sheet/mineral/wood)) - var/obj/item/stack/S = I - var/stackamount = S.get_amount() - to_chat(user, "I put [stackamount] [I]s in [src].") - if(istype(I, /obj/item/stack/sheet/mineral/coal)) - grill_fuel += (500 * stackamount) - else - grill_fuel += (50 * stackamount) - S.use(stackamount) - update_icon() - return - if(I.resistance_flags & INDESTRUCTIBLE) - to_chat(user, "I don't feel it would be wise to grill [I]...") - return ..() - if(istype(I, /obj/item/reagent_containers)) - if(istype(I, /obj/item/reagent_containers/food) && !istype(I, /obj/item/reagent_containers/food/drinks)) - if(HAS_TRAIT(I, TRAIT_NODROP) || (I.item_flags & (ABSTRACT | DROPDEL))) - return ..() - else if(!grill_fuel) - to_chat(user, "There is not enough fuel!") - return - else if(!grilled_item && user.transferItemToLoc(I, src)) - grilled_item = I - to_chat(user, "I put the [grilled_item] on [src].") - update_icon() - grill_loop.start() - return - else - if(I.reagents.has_reagent(/datum/reagent/consumable/monkey_energy)) - grill_fuel += (20 * (I.reagents.get_reagent_amount(/datum/reagent/consumable/monkey_energy))) - to_chat(user, "I pour the Monkey Energy in [src].") - I.reagents.remove_reagent(/datum/reagent/consumable/monkey_energy, I.reagents.get_reagent_amount(/datum/reagent/consumable/monkey_energy)) - update_icon() - return - ..() - -/obj/machinery/grill/process() - ..() - update_icon() - if(!grill_fuel) - return - else - grill_fuel -= 1 - if(prob(1)) - var/datum/effect_system/smoke_spread/bad/smoke = new - smoke.set_up(1, loc) - smoke.start() - if(grilled_item) - grill_time += 1 - grilled_item.reagents.add_reagent(/datum/reagent/consumable/char, 1) - grill_fuel -= 10 - grilled_item.AddComponent(/datum/component/sizzle) - -/obj/machinery/grill/Exited(atom/movable/AM) - if(AM == grilled_item) - finish_grill() - grilled_item = null - ..() - -/obj/machinery/grill/Destroy() - grilled_item = null - . = ..() - -/obj/machinery/grill/handle_atom_del(atom/A) - if(A == grilled_item) - grilled_item = null - . = ..() - -/obj/machinery/grill/wrench_act(mob/living/user, obj/item/I) - . = ..() - if(default_unfasten_wrench(user, I) != CANT_UNFASTEN) - return TRUE - -/obj/machinery/grill/deconstruct(disassembled = TRUE) - finish_grill() - if(!(flags_1 & NODECONSTRUCT_1)) - new /obj/item/stack/sheet/metal(loc, 5) - new /obj/item/stack/rods(loc, 5) - ..() - -/obj/machinery/grill/attack_hand(mob/user) - if(grilled_item) - to_chat(user, "I take out [grilled_item] from [src].") - grilled_item.forceMove(drop_location()) - update_icon() - return - return ..() - -/obj/machinery/grill/proc/finish_grill() - switch(grill_time) //no 0-9 to prevent spam - if(10 to 15) - grilled_item.name = "lightly-grilled [grilled_item.name]" - grilled_item.desc = "" - if(16 to 39) - grilled_item.name = "grilled [grilled_item.name]" - grilled_item.desc = "" - grilled_item.foodtype |= FRIED - if(40 to 50) - grilled_item.name = "heavily grilled [grilled_item.name]" - grilled_item.desc = "" - grilled_item.foodtype |= FRIED - if(51 to INFINITY) //grill marks reach max alpha - grilled_item.name = "Powerfully Grilled [grilled_item.name]" - grilled_item.desc = "" - grilled_item.foodtype |= FRIED - grill_time = 0 - grill_loop.stop() - -/obj/machinery/grill/unwrenched - anchored = FALSE diff --git a/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm b/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm deleted file mode 100644 index 75f565f36d..0000000000 --- a/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm +++ /dev/null @@ -1,313 +0,0 @@ -#define ICECREAM_VANILLA 1 -#define ICECREAM_CHOCOLATE 2 -#define ICECREAM_STRAWBERRY 3 -#define ICECREAM_BLUE 4 -#define ICECREAM_CUSTOM 5 -#define CONE_WAFFLE 6 -#define CONE_CHOC 7 - -/obj/machinery/icecream_vat - name = "ice cream vat" - desc = "" - icon = 'icons/obj/kitchen.dmi' - icon_state = "icecream_vat" - density = TRUE - anchored = FALSE - use_power = NO_POWER_USE - layer = BELOW_OBJ_LAYER - max_integrity = 300 - var/list/product_types = list() - var/dispense_flavour = ICECREAM_VANILLA - var/flavour_name = "vanilla" - var/obj/item/reagent_containers/beaker = null - var/static/list/icecream_vat_reagents = list( - /datum/reagent/consumable/milk = 6, - /datum/reagent/consumable/flour = 6, - /datum/reagent/consumable/sugar = 6, - /datum/reagent/consumable/ice = 6, - /datum/reagent/consumable/coco = 6, - /datum/reagent/consumable/vanilla = 6, - /datum/reagent/consumable/berryjuice = 6, - /datum/reagent/consumable/ethanol/singulo = 6) - -/obj/machinery/icecream_vat/proc/get_ingredient_list(type) - switch(type) - if(ICECREAM_CHOCOLATE) - return list(/datum/reagent/consumable/milk, /datum/reagent/consumable/ice, /datum/reagent/consumable/coco) - if(ICECREAM_STRAWBERRY) - return list(/datum/reagent/consumable/milk, /datum/reagent/consumable/ice, /datum/reagent/consumable/berryjuice) - if(ICECREAM_BLUE) - return list(/datum/reagent/consumable/milk, /datum/reagent/consumable/ice, /datum/reagent/consumable/ethanol/singulo) - if(ICECREAM_CUSTOM) - return list(/datum/reagent/consumable/milk, /datum/reagent/consumable/ice) - if(CONE_WAFFLE) - return list(/datum/reagent/consumable/flour, /datum/reagent/consumable/sugar) - if(CONE_CHOC) - return list(/datum/reagent/consumable/flour, /datum/reagent/consumable/sugar, /datum/reagent/consumable/coco) - else //ICECREAM_VANILLA - return list(/datum/reagent/consumable/milk, /datum/reagent/consumable/ice, /datum/reagent/consumable/vanilla) - - -/obj/machinery/icecream_vat/proc/get_flavour_name(flavour_type) - switch(flavour_type) - if(ICECREAM_CHOCOLATE) - return "chocolate" - if(ICECREAM_STRAWBERRY) - return "strawberry" - if(ICECREAM_BLUE) - return "blue" - if(ICECREAM_CUSTOM) - return "custom" - if(CONE_WAFFLE) - return "waffle" - if(CONE_CHOC) - return "chocolate" - else //ICECREAM_VANILLA - return "vanilla" - - -/obj/machinery/icecream_vat/Initialize() - . = ..() - while(product_types.len < 7) - product_types.Add(5) - create_reagents(100, NO_REACT | OPENCONTAINER) - for(var/reagent in icecream_vat_reagents) - reagents.add_reagent(reagent, icecream_vat_reagents[reagent]) - -/obj/machinery/icecream_vat/ui_interact(mob/user) - . = ..() - var/dat - dat += "ICE CREAM
" - dat += "Dispensing: [flavour_name] icecream

" - dat += "Vanilla ice cream: Select Make x5 [product_types[ICECREAM_VANILLA]] scoops left. (Ingredients: milk, ice, vanilla)
" - dat += "Strawberry ice cream: Select Make x5 [product_types[ICECREAM_STRAWBERRY]] dollops left. (Ingredients: milk, ice, berry juice)
" - dat += "Chocolate ice cream: Select Make x5 [product_types[ICECREAM_CHOCOLATE]] dollops left. (Ingredients: milk, ice, coco powder)
" - dat += "Blue ice cream: Select Make x5 [product_types[ICECREAM_BLUE]] dollops left. (Ingredients: milk, ice, singulo)
" - dat += "Custom ice cream: Select Make x5 [product_types[ICECREAM_CUSTOM]] dollops left. (Ingredients: milk, ice, optional flavoring)
" - dat += "
CONES
" - dat += "Waffle cones: Dispense Make x5 [product_types[CONE_WAFFLE]] cones left. (Ingredients: flour, sugar)
" - dat += "Chocolate cones: Dispense Make x5 [product_types[CONE_CHOC]] cones left. (Ingredients: flour, sugar, coco powder)
" - dat += "
" - if(beaker) - dat += "BEAKER CONTENT
" - for(var/datum/reagent/R in beaker.reagents.reagent_list) - dat += "[R.name]: [R.volume]u
" - dat += "Refill from beaker
" - dat += "
" - dat += "VAT CONTENT
" - for(var/datum/reagent/R in reagents.reagent_list) - dat += "[R.name]: [R.volume]" - dat += "Purge
" - dat += "Refresh Close" - - var/datum/browser/popup = new(user, "icecreamvat","Icecream Vat", 700, 500, src) - popup.set_content(dat) - popup.open() - -/obj/machinery/icecream_vat/attackby(obj/item/O, mob/user, params) - if(istype(O, /obj/item/reagent_containers/food/snacks/icecream)) - var/obj/item/reagent_containers/food/snacks/icecream/I = O - if(!I.ice_creamed) - if(product_types[dispense_flavour] > 0) - visible_message("[icon2html(src, viewers(src))] [user] scoops delicious [flavour_name] ice cream into [I].") - product_types[dispense_flavour] -= 1 - if(beaker && beaker.reagents.total_volume) - I.add_ice_cream(flavour_name, beaker.reagents) - else - I.add_ice_cream(flavour_name) - if(I.reagents.total_volume < 10) - I.reagents.add_reagent(/datum/reagent/consumable/sugar, 10 - I.reagents.total_volume) - updateDialog() - else - to_chat(user, "There is not enough ice cream left!") - else - to_chat(user, "[O] already has ice cream in it!") - return 1 - if(istype(O, /obj/item/reagent_containers) && !(O.item_flags & ABSTRACT) && O.is_open_container()) - . = TRUE //no afterattack - var/obj/item/reagent_containers/B = O - if(!user.transferItemToLoc(B, src)) - return - replace_beaker(user, B) - to_chat(user, "I add [B] to [src].") - updateUsrDialog() - update_icon() - return - else if(O.is_drainable()) - return - else - return ..() - -/obj/machinery/icecream_vat/proc/RefillFromBeaker() - if(!beaker || !beaker.reagents) - return - for(var/datum/reagent/R in beaker.reagents.reagent_list) - if(R.type in icecream_vat_reagents) - beaker.reagents.trans_id_to(src, R.type, R.volume) - say("Internalizing reagent.") - playsound(src, 'sound/blank.ogg', 25, TRUE) - return - - - -/obj/machinery/icecream_vat/proc/make(mob/user, make_type, amount) - var/recipe_amount = amount * 3 //prevents reagent duping by requring roughly the amount of reagenst you gain back by grinding. - for(var/R in get_ingredient_list(make_type)) - if(reagents.has_reagent(R, recipe_amount)) - continue - amount = 0 - break - if(amount) - for(var/R in get_ingredient_list(make_type)) - reagents.remove_reagent(R, recipe_amount) - product_types[make_type] += amount - var/flavour = get_flavour_name(make_type) - if(make_type > 5) - src.visible_message("[user] cooks up some [flavour] cones.") - else - src.visible_message("[user] whips up some [flavour] icecream.") - else - to_chat(user, "I don't have the ingredients to make this!") - -/obj/machinery/icecream_vat/Topic(href, href_list) - if(..()) - return - if(href_list["select"]) - dispense_flavour = text2num(href_list["select"]) - flavour_name = get_flavour_name(dispense_flavour) - src.visible_message("[usr] sets [src] to dispense [flavour_name] flavoured ice cream.") - - if(href_list["cone"]) - var/dispense_cone = text2num(href_list["cone"]) - var/cone_name = get_flavour_name(dispense_cone) - if(product_types[dispense_cone] >= 1) - product_types[dispense_cone] -= 1 - var/obj/item/reagent_containers/food/snacks/icecream/I = new(src.loc) - I.set_cone_type(cone_name) - src.visible_message("[usr] dispenses a crunchy [cone_name] cone from [src].") - else - to_chat(usr, "There are no [cone_name] cones left!") - - if(href_list["make"]) - var/amount = (text2num(href_list["amount"])) - var/C = text2num(href_list["make"]) - make(usr, C, amount) - - if(href_list["disposeI"]) - reagents.del_reagent(text2path(href_list["disposeI"])) - - if(href_list["refill"]) - RefillFromBeaker() - - updateDialog() - - if(href_list["refresh"]) - updateDialog() - - if(href_list["close"]) - usr.unset_machine() - usr << browse(null,"window=icecreamvat") - return - -/obj/item/reagent_containers/food/snacks/icecream - name = "ice cream cone" - desc = "" - icon = 'icons/obj/kitchen.dmi' - icon_state = "icecream_cone_waffle" //default for admin-spawned cones, href_list["cone"] should overwrite this all the time - list_reagents = list(/datum/reagent/consumable/nutriment = 4) - tastes = list("cream" = 2, "waffle" = 1) - var/ice_creamed = 0 - var/cone_type - bitesize = 4 - foodtype = DAIRY | SUGAR - -/obj/item/reagent_containers/food/snacks/icecream/Initialize() - . = ..() - reagents.maximum_volume = 20 - -/obj/item/reagent_containers/food/snacks/icecream/proc/set_cone_type(cone_name) - cone_type = cone_name - icon_state = "icecream_cone_[cone_name]" - switch (cone_type) - if ("waffle") - reagents.add_reagent(/datum/reagent/consumable/nutriment, 1) - if ("chocolate") - reagents.add_reagent(/datum/reagent/consumable/coco, 1) // chocolate ain't as nutritious kids - - desc = "" - - -/obj/item/reagent_containers/food/snacks/icecream/proc/add_ice_cream(flavour_name, datum/reagents/R = null) - name = "[flavour_name] icecream" - switch (flavour_name) // adding the actual reagents advertised in the ingredient list - if ("vanilla") - desc = "" - reagents.add_reagent(/datum/reagent/consumable/vanilla, 3) - filling_color = "#ECE1C1" - if ("chocolate") - desc = "" - reagents.add_reagent(/datum/reagent/consumable/coco, 3) - filling_color = "#93673B" - if ("strawberry") - desc = "" - reagents.add_reagent(/datum/reagent/consumable/berryjuice, 3) - filling_color = "#EFB4B4" - if ("blue") - desc = "" - reagents.add_reagent(/datum/reagent/consumable/ethanol/singulo, 3) - filling_color = "#ACBCED" - if ("mob") - desc = "" - reagents.add_reagent(/datum/reagent/liquidgibs, 3) - filling_color = "#EFB4B4" - if ("custom") - if(R && R.total_volume >= 4) //consumable reagents have stronger taste so higher volume will allow non-food flavourings to break through better. - var/mutable_appearance/flavoring = mutable_appearance(icon,"icecream_custom") - var/datum/reagent/master = R.get_master_reagent() - flavoring.color = master.color - filling_color = master.color - name = "[master.name] icecream" - desc = "" - R.trans_to(src, 4) - add_overlay(flavoring) - else - name = "bland icecream" - desc = "" - add_overlay("icecream_custom") - if(flavour_name != "custom") - src.add_overlay("icecream_[flavour_name]") - ice_creamed = 1 - -/obj/item/reagent_containers/food/snacks/icecream/proc/add_mob_flavor(mob/M) - add_ice_cream("mob") - name = "[M.name] icecream" - -/obj/machinery/icecream_vat/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) - new /obj/item/stack/sheet/metal(loc, 4) - qdel(src) - -/obj/machinery/icecream_vat/AltClick(mob/living/user) - if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) - return - replace_beaker(user) - -/obj/machinery/icecream_vat/proc/replace_beaker(mob/living/user, obj/item/reagent_containers/new_beaker) - if(beaker) - beaker.forceMove(drop_location()) - if(user && Adjacent(user)) - user.put_in_hands(beaker) - if(new_beaker) - beaker = new_beaker - else - beaker = null - updateDialog() - return TRUE - -#undef ICECREAM_VANILLA -#undef ICECREAM_CHOCOLATE -#undef ICECREAM_STRAWBERRY -#undef ICECREAM_BLUE -#undef ICECREAM_CUSTOM -#undef CONE_WAFFLE -#undef CONE_CHOC diff --git a/code/modules/games/cas.dm b/code/modules/games/cas.dm deleted file mode 100644 index 9f774439c1..0000000000 --- a/code/modules/games/cas.dm +++ /dev/null @@ -1,158 +0,0 @@ -// CARDS AGAINST SPESS -// This is a parody of Cards Against Humanity (https://en.wikipedia.org/wiki/Cards_Against_Humanity) -// which is licensed under CC BY-NC-SA 2.0, the full text of which can be found at the following URL: -// https://creativecommons.org/licenses/by-nc-sa/2.0/legalcode -// Original code by Zuhayr, Polaris Station, ported with modifications -/datum/playingcard - var/name = "playing card" - var/card_icon = "card_back" - var/suit - var/number - -/obj/item/toy/cards/deck/cas - name = "\improper CAS deck (white)" - desc = "" - icon = 'icons/obj/toy.dmi' - icon_state = "deck_caswhite_full" - deckstyle = "caswhite" - var/card_face = "cas_white" - var/blanks = 25 - var/decksize = 150 - var/card_text_file = "strings/cas_white.txt" - var/list/allcards = list() - -/obj/item/toy/cards/deck/cas/black - name = "\improper CAS deck (black)" - desc = "" - icon_state = "deck_casblack_full" - deckstyle = "casblack" - card_face = "cas_black" - blanks = 0 - decksize = 50 - card_text_file = "strings/cas_black.txt" - -/obj/item/toy/cards/deck/cas/populate_deck() - var/static/list/cards_against_space = list("cas_white" = world.file2list("strings/cas_white.txt"),"cas_black" = world.file2list("strings/cas_black.txt")) - allcards = cards_against_space[card_face] - var/list/possiblecards = allcards.Copy() - if(possiblecards.len < decksize) // sanity check - decksize = (possiblecards.len - 1) - var/list/randomcards = list() - for(var/x in 1 to decksize) - randomcards += pick_n_take(possiblecards) - for(var/x in 1 to randomcards.len) - var/cardtext = randomcards[x] - var/datum/playingcard/P - P = new() - P.name = "[cardtext]" - P.card_icon = "[src.card_face]" - cards += P - if(!blanks) - return - for(var/x in 1 to blanks) - var/datum/playingcard/P - P = new() - P.name = "Blank Card" - P.card_icon = "cas_white" - cards += P - shuffle_inplace(cards) // distribute blank cards throughout deck - -/obj/item/toy/cards/deck/cas/draw_card(mob/user) - if(isliving(user)) - var/mob/living/L = user - if(!(L.mobility_flags & MOBILITY_PICKUP)) - return - if(cards.len == 0) - to_chat(user, "There are no more cards to draw!") - return - var/obj/item/toy/cards/singlecard/cas/H = new/obj/item/toy/cards/singlecard/cas(user.loc) - var/datum/playingcard/choice = cards[1] - if (choice.name == "Blank Card") - H.blank = 1 - H.name = choice.name - H.buffertext = choice.name - H.icon_state = choice.card_icon - H.card_face = choice.card_icon - H.parentdeck = src - src.cards -= choice - H.pickup(user) - user.put_in_hands(H) - user.visible_message("[user] draws a card from the deck.", "I draw a card from the deck.") - update_icon() - -/obj/item/toy/cards/deck/cas/attackby(obj/item/I, mob/living/user, params) - if(istype(I, /obj/item/toy/cards/singlecard/cas)) - var/obj/item/toy/cards/singlecard/cas/SC = I - if(!user.temporarilyRemoveItemFromInventory(SC)) - to_chat(user, "The card is stuck to your hand, you can't add it to the deck!") - return - var/datum/playingcard/RC // replace null datum for the re-added card - RC = new() - RC.name = "[SC.name]" - RC.card_icon = SC.card_face - cards += RC - user.visible_message("[user] adds a card to the bottom of the deck.","I add the card to the bottom of the deck.") - qdel(SC) - update_icon() - -/obj/item/toy/cards/deck/cas/update_icon() - if(cards.len < 26) - icon_state = "deck_[deckstyle]_low" - -/obj/item/toy/cards/singlecard/cas - name = "CAS card" - desc = "" - icon_state = "cas_white" - flipped = 0 - var/card_face = "cas_white" - var/blank = 0 - var/buffertext = "A funny bit of text." - -/obj/item/toy/cards/singlecard/cas/examine(mob/user) - . = ..() - if (flipped) - . += "The card is face down." - else if (blank) - . += "The card is blank. Write on it with a pen." - else - . += "The card reads: [name]" - . += "Alt-click to flip it." - -/obj/item/toy/cards/singlecard/cas/Flip() - set name = "Flip Card" - set hidden = 1 - set src in range(1) - if(!ishuman(usr) || !usr.canUseTopic(src, BE_CLOSE)) - return - if(!flipped) - name = "CAS card" - else if(flipped) - name = buffertext - flipped = !flipped - update_icon() - -/obj/item/toy/cards/singlecard/cas/AltClick(mob/living/user) - if(!ishuman(user) || !user.canUseTopic(src, BE_CLOSE)) - return - Flip() - -/obj/item/toy/cards/singlecard/cas/update_icon() - if(flipped) - icon_state = "[card_face]_flipped" - else - icon_state = "[card_face]" - -/obj/item/toy/cards/singlecard/cas/attackby(obj/item/I, mob/living/user, params) - if(istype(I, /obj/item/pen)) - if(!user.is_literate()) - to_chat(user, "I scribble illegibly on [src]!") - return - if(!blank) - to_chat(user, "I cannot write on that card!") - return - var/cardtext = stripped_input(user, "What do you wish to write on the card?", "Card Writing", "", 50) - if(!cardtext || !user.canUseTopic(src, BE_CLOSE)) - return - name = cardtext - buffertext = cardtext - blank = 0 diff --git a/code/modules/holiday/easter.dm b/code/modules/holiday/easter.dm deleted file mode 100644 index 4adb0a90dd..0000000000 --- a/code/modules/holiday/easter.dm +++ /dev/null @@ -1,234 +0,0 @@ -/datum/round_event_control/easter - name = "Easter Eggselence" - holidayID = EASTER - typepath = /datum/round_event/easter - weight = -1 - max_occurrences = 1 - earliest_start = 0 MINUTES - -/datum/round_event/easter/announce(fake) - priority_announce(pick("Hip-hop into Easter!","Find some Bunny's stash!","Today is National 'Hunt a Wabbit' Day.","Be kind, give Chocolate Eggs!")) - - -/datum/round_event_control/rabbitrelease - name = "Release the Rabbits!" - holidayID = EASTER - typepath = /datum/round_event/rabbitrelease - weight = 5 - max_occurrences = 10 - -/datum/round_event/rabbitrelease/announce(fake) - priority_announce("Unidentified furry objects detected coming aboard [station_name()]. Beware of Adorable-ness.", "Fluffy Alert", 'sound/blank.ogg') - - -/datum/round_event/rabbitrelease/start() - for(var/obj/effect/landmark/R in GLOB.landmarks_list) - if(R.name != "blobspawn") - if(prob(35)) - if(isspaceturf(R.loc)) - new /mob/living/simple_animal/chicken/rabbit/space(R.loc) - else - new /mob/living/simple_animal/chicken/rabbit(R.loc) - -/mob/living/simple_animal/chicken/rabbit - name = "\improper rabbit" - desc = "" - icon = 'icons/mob/easter.dmi' - icon_state = "rabbit_white" - icon_living = "rabbit_white" - icon_dead = "rabbit_white_dead" - speak = list("Hop into Easter!","Come get your eggs!","Prizes for everyone!") - speak_emote = list("sniffles","twitches") - emote_hear = list("hops.") - emote_see = list("hops around","bounces up and down") - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 1) - egg_type = /obj/item/reagent_containers/food/snacks/egg/loaded -// food_type = /obj/item/reagent_containers/food/snacks/grown/carrot - eggsleft = 10 - eggsFertile = FALSE - icon_prefix = "rabbit" - feedMessages = list("It nibbles happily.","It noms happily.") - layMessage = list("hides an egg.","scampers around suspiciously.","begins making a huge racket.","begins shuffling.") - -/mob/living/simple_animal/chicken/rabbit/space - icon_prefix = "s_rabbit" - icon_state = "s_rabbit_white" - icon_living = "s_rabbit_white" - icon_dead = "s_rabbit_white_dead" - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 - maxbodytemp = 1500 - unsuitable_atmos_damage = 0 - -//Easter Baskets -/obj/item/storage/bag/easterbasket - name = "Easter Basket" - icon = 'icons/mob/easter.dmi' - icon_state = "basket" - -/obj/item/storage/bag/easterbasket/Initialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.set_holdable(list(/obj/item/reagent_containers/food/snacks/egg, /obj/item/reagent_containers/food/snacks/chocolateegg, /obj/item/reagent_containers/food/snacks/boiledegg)) - -/obj/item/storage/bag/easterbasket/proc/countEggs() - cut_overlays() - add_overlay("basket-grass") - add_overlay("basket-egg[min(contents.len, 5)]") - -/obj/item/storage/bag/easterbasket/Exited() - . = ..() - countEggs() - -/obj/item/storage/bag/easterbasket/Entered() - . = ..() - countEggs() - -//Bunny Suit -/obj/item/clothing/head/bunnyhead - name = "Easter Bunny Head" - icon_state = "bunnyhead" - item_state = "bunnyhead" - desc = "" - slowdown = -1 - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR - -/obj/item/clothing/suit/bunnysuit - name = "Easter Bunny Suit" - desc = "" - icon_state = "bunnysuit" - item_state = "bunnysuit" - slowdown = -1 - body_parts_covered = CHEST|GROIN|LEGS|ARMS - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - -//Egg prizes and egg spawns! -/obj/item/reagent_containers/food/snacks/egg - var/containsPrize = FALSE - -/obj/item/reagent_containers/food/snacks/egg/loaded - containsPrize = TRUE - -/obj/item/reagent_containers/food/snacks/egg/loaded/Initialize() - . = ..() - var/eggcolor = pick("blue","green","mime","orange","purple","rainbow","red","yellow") - icon_state = "egg-[eggcolor]" - -/obj/item/reagent_containers/food/snacks/egg/proc/dispensePrize(turf/where) - var/won = pick(/obj/item/clothing/head/bunnyhead, - /obj/item/clothing/suit/bunnysuit, - - /obj/item/reagent_containers/food/snacks/chocolateegg, - /obj/item/toy/balloon, - /obj/item/toy/gun, - /obj/item/toy/sword, - /obj/item/toy/foamblade, - /obj/item/toy/prize/ripley, - /obj/item/toy/prize/honk, - /obj/item/toy/plush/carpplushie, - /obj/item/toy/redbutton, - /obj/item/clothing/head/collectable/rabbitears) - new won(where) - new/obj/item/reagent_containers/food/snacks/chocolateegg(where) - -/obj/item/reagent_containers/food/snacks/egg/attack_self(mob/user) - ..() - if(containsPrize) - to_chat(user, "I unwrap [src] and find a prize inside!") - dispensePrize(get_turf(user)) - containsPrize = FALSE - qdel(src) - -//Easter Recipes + food -/obj/item/reagent_containers/food/snacks/hotcrossbun - bitesize = 2 - name = "hot-cross bun" - desc = "" - icon_state = "hotcrossbun" - -/datum/crafting_recipe/food/hotcrossbun - name = "Hot-Cross Bun" - reqs = list( - /obj/item/reagent_containers/food/snacks/store/bread/plain = 1, - /datum/reagent/consumable/sugar = 1 - ) - result = /obj/item/reagent_containers/food/snacks/hotcrossbun - category = CAT_NONE - - -/obj/item/reagent_containers/food/snacks/store/cake/brioche - name = "brioche cake" - desc = "" - icon_state = "briochecake" - slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/brioche - slices_num = 6 - bonus_reagents = list(/datum/reagent/consumable/nutriment = 10, /datum/reagent/consumable/nutriment/vitamin = 2) - -/obj/item/reagent_containers/food/snacks/cakeslice/brioche - name = "brioche cake slice" - desc = "" - icon_state = "briochecake_slice" - filling_color = "#FFD700" - -/datum/crafting_recipe/food/briochecake - name = "Brioche cake" - reqs = list( - /obj/item/reagent_containers/food/snacks/store/cake/plain = 1, - /datum/reagent/consumable/sugar = 2 - ) - result = /obj/item/reagent_containers/food/snacks/store/cake/brioche - category = CAT_NONE - -/obj/item/reagent_containers/food/snacks/scotchegg - name = "scotch egg" - desc = "" - icon_state = "scotchegg" - bonus_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/vitamin = 2) - bitesize = 3 - filling_color = "#FFFFF0" - list_reagents = list(/datum/reagent/consumable/nutriment = 6) - -/datum/crafting_recipe/food/scotchegg - name = "Scotch egg" - reqs = list( - /datum/reagent/consumable/sodiumchloride = 1, - /datum/reagent/consumable/blackpepper = 1, - /obj/item/reagent_containers/food/snacks/boiledegg = 1, - /obj/item/reagent_containers/food/snacks/faggot = 1 - ) - result = /obj/item/reagent_containers/food/snacks/scotchegg - category = CAT_NONE - -/obj/item/reagent_containers/food/snacks/soup/mammi - name = "Mammi" - desc = "" - icon_state = "mammi" - bonus_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/vitamin = 1) - list_reagents = list(/datum/reagent/consumable/nutriment = 8, /datum/reagent/consumable/nutriment/vitamin = 1) - -/datum/crafting_recipe/food/mammi - name = "Mammi" - reqs = list( - /obj/item/reagent_containers/food/snacks/store/bread/plain = 1, - /obj/item/reagent_containers/food/snacks/chocolatebar = 1, - /datum/reagent/consumable/milk = 5 - ) - result = /obj/item/reagent_containers/food/snacks/soup/mammi - category = CAT_NONE - -/obj/item/reagent_containers/food/snacks/chocolatebunny - name = "chocolate bunny" - desc = "" - icon_state = "chocolatebunny" - bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 1) - list_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/sugar = 2, /datum/reagent/consumable/coco = 2) - filling_color = "#A0522D" - -/datum/crafting_recipe/food/chocolatebunny - name = "Chocolate bunny" - reqs = list( - /datum/reagent/consumable/sugar = 2, - /obj/item/reagent_containers/food/snacks/chocolatebar = 1 - ) - result = /obj/item/reagent_containers/food/snacks/chocolatebunny - category = CAT_NONE diff --git a/code/modules/holiday/holidays.dm b/code/modules/holiday/holidays.dm index 3829ebac0f..6057b7aa95 100644 --- a/code/modules/holiday/holidays.dm +++ b/code/modules/holiday/holidays.dm @@ -61,540 +61,3 @@ return TRUE return FALSE - -// The actual holidays -/* -/datum/holiday/new_year - name = NEW_YEAR - begin_day = 30 - begin_month = DECEMBER - end_day = 2 - end_month = JANUARY - drone_hat = /obj/item/clothing/head/festive - -/datum/holiday/new_year/getStationPrefix() - return pick("Party","New","Hangover","Resolution", "Auld") - -/datum/holiday/groundhog - name = "Groundhog Day" - begin_day = 2 - begin_month = FEBRUARY - drone_hat = /obj/item/clothing/head/helmet/space/chronos - -/datum/holiday/groundhog/getStationPrefix() - return pick("Deja Vu") //I have been to this place before - -/datum/holiday/valentines - name = VALENTINES - begin_day = 13 - end_day = 15 - begin_month = FEBRUARY - -/datum/holiday/valentines/getStationPrefix() - return pick("Love","Amore","Single","Smootch","Hug") - -/datum/holiday/birthday - name = "Birthday of Space Station 13" - begin_day = 16 - begin_month = FEBRUARY - drone_hat = /obj/item/clothing/head/festive - -/datum/holiday/birthday/greet() - var/game_age = text2num(time2text(world.timeofday, "YY")) - 3 - var/Fact - switch(game_age) - if(16) - Fact = " SS13 is now old enough to drive!" - if(18) - Fact = " SS13 is now legal!" - if(21) - Fact = " SS13 can now drink!" - if(26) - Fact = " SS13 can now rent a car!" - if(30) - Fact = " SS13 can now go home and be a family man!" - if(35) - Fact = " SS13 can now run for President of the United States!" - if(40) - Fact = " SS13 can now suffer a midlife crisis!" - if(50) - Fact = " Happy golden anniversary!" - if(65) - Fact = " SS13 can now start thinking about retirement!" - if(96) - Fact = " Please send a time machine back to pick me up, I need to update the time formatting for this feature!" //See you later suckers - if(!Fact) - Fact = " SS13 is now [game_age] years old!" - - return "Say 'Happy Birthday' to Space Station 13, first publicly playable on February 16th, 2003![Fact]" - -/datum/holiday/random_kindness - name = "Random Acts of Kindness Day" - begin_day = 17 - begin_month = FEBRUARY - -/datum/holiday/random_kindness/greet() - return "Go do some random acts of kindness for a stranger!" //haha yeah right - -/datum/holiday/leap - name = "Leap Day" - begin_day = 29 - begin_month = FEBRUARY - -/datum/holiday/pi - name = "Pi Day" - begin_day = 14 - begin_month = MARCH - -/datum/holiday/pi/getStationPrefix() - return pick("Sine","Cosine","Tangent","Secant", "Cosecant", "Cotangent") - -/datum/holiday/no_this_is_patrick - name = "St. Patrick's Day" - begin_day = 17 - begin_month = MARCH - drone_hat = /obj/item/clothing/head/soft/green - -/datum/holiday/no_this_is_patrick/getStationPrefix() - return pick("Blarney","Green","Leprechaun","Booze") - -/datum/holiday/no_this_is_patrick/greet() - return "Happy National Inebriation Day!" - -/datum/holiday/april_fools - name = APRIL_FOOLS - begin_day = 1 - end_day = 1 - begin_month = APRIL - -/datum/holiday/april_fools/celebrate() - SSjob.set_overflow_role("Clown") - SSticker.login_music = 'sound/blank.ogg' - for(var/i in GLOB.new_player_list) - var/mob/dead/new_player/P = i - if(P.client) - P.client.playtitlemusic() - -/datum/holiday/spess - name = "Cosmonautics Day" - begin_day = 12 - begin_month = APRIL - drone_hat = /obj/item/clothing/head/syndicatefake - -/datum/holiday/spess/greet() - return "On this day over 600 years ago, Comrade Yuri Gagarin first ventured into space!" - -/datum/holiday/fourtwenty - name = "Four-Twenty" - begin_day = 20 - begin_month = APRIL - -/datum/holiday/fourtwenty/getStationPrefix() - return pick("Snoop","Blunt","Toke","Dank","Cheech","Chong") - -/datum/holiday/tea - name = "National Tea Day" - begin_day = 21 - begin_month = APRIL - -/datum/holiday/tea/getStationPrefix() - return pick("Crumpet","Assam","Oolong","Pu-erh","Sweet Tea","Green","Black") - -/datum/holiday/earth - name = "Earth Day" - begin_day = 22 - begin_month = APRIL - -/datum/holiday/labor - name = "Labor Day" - begin_day = 1 - begin_month = MAY - drone_hat = /obj/item/clothing/head/hardhat - -/datum/holiday/firefighter - name = "Firefighter's Day" - begin_day = 4 - begin_month = MAY - drone_hat = /obj/item/clothing/head/hardhat/red - -/datum/holiday/firefighter/getStationPrefix() - return pick("Burning","Blazing","Plasma","Fire") - -/datum/holiday/bee - name = "Bee Day" - begin_day = 20 - begin_month = MAY - drone_hat = /obj/item/clothing/mask/rat/bee - -/datum/holiday/bee/getStationPrefix() - return pick("Bee","Honey","Hive","Africanized","Mead","Buzz") - -/datum/holiday/summersolstice - name = "Summer Solstice" - begin_day = 21 - begin_month = JUNE - -/datum/holiday/doctor - name = "Doctor's Day" - begin_day = 1 - begin_month = JULY - drone_hat = /obj/item/clothing/head/nursehat - -/datum/holiday/UFO - name = "UFO Day" - begin_day = 2 - begin_month = JULY - drone_hat = /obj/item/clothing/mask/facehugger/dead - -/datum/holiday/UFO/getStationPrefix() //Is such a thing even possible? - return pick("Ayy","Truth","Tsoukalos","Mulder","Scully") //Yes it is! - -/datum/holiday/USA - name = "Independence Day" - begin_day = 4 - begin_month = JULY - -/datum/holiday/USA/getStationPrefix() - return pick("Independent","American","Burger","Bald Eagle","Star-Spangled", "Fireworks") - -/datum/holiday/writer - name = "Writer's Day" - begin_day = 8 - begin_month = JULY - -/datum/holiday/france - name = "Bastille Day" - begin_day = 14 - begin_month = JULY - drone_hat = /obj/item/clothing/head/beret - -/datum/holiday/france/getStationPrefix() - return pick("Francais","Fromage", "Zut", "Merde") - -/datum/holiday/france/greet() - return "Do you hear the people sing?" - -/datum/holiday/friendship - name = "Friendship Day" - begin_day = 30 - begin_month = JULY - -/datum/holiday/friendship/greet() - return "Have a magical [name]!" - -/datum/holiday/beer - name = "Beer Day" - -/datum/holiday/beer/shouldCelebrate(dd, mm, yy, ww, ddd) - if(mm == 8 && ddd == FRIDAY && ww == 1) //First Friday in August - return TRUE - return FALSE - -/datum/holiday/beer/getStationPrefix() - return pick("Stout","Porter","Lager","Ale","Malt","Bock","Doppelbock","Hefeweizen","Pilsner","IPA","Lite") //I'm sorry for the last one - -/datum/holiday/pirate - name = "Talk-Like-a-Pirate Day" - begin_day = 19 - begin_month = SEPTEMBER - drone_hat = /obj/item/clothing/head/pirate - -/datum/holiday/pirate/greet() - return "Ye be talkin' like a pirate today or else ye'r walkin' tha plank, matey!" - -/datum/holiday/pirate/getStationPrefix() - return pick("Yarr","Scurvy","Yo-ho-ho") - -/datum/holiday/programmers - name = "Programmers' Day" - -/datum/holiday/programmers/shouldCelebrate(dd, mm, yy, ww, ddd) //Programmer's day falls on the 2^8th day of the year - if(mm == 9) - if(yy/4 == round(yy/4)) //Note: Won't work right on September 12th, 2200 (at least it's a Friday!) - if(dd == 12) - return 1 - else - if(dd == 13) - return 1 - return 0 - -/datum/holiday/programmers/getStationPrefix() - return pick("span>","DEBUG: ","null","/list","EVENT PREFIX NOT FOUND") //Portability - -/datum/holiday/questions - name = "Stupid-Questions Day" - begin_day = 28 - begin_month = SEPTEMBER - -/datum/holiday/questions/greet() - return "Are you having a happy [name]?" - -/datum/holiday/animal - name = "Animal's Day" - begin_day = 4 - begin_month = OCTOBER - -/datum/holiday/animal/getStationPrefix() - return pick("Parrot","Corgi","Cat","Pug","Goat","Fox") - -/datum/holiday/smile - name = "Smiling Day" - begin_day = 7 - begin_month = OCTOBER - drone_hat = /obj/item/clothing/head/papersack/smiley - -/datum/holiday/boss - name = "Boss' Day" - begin_day = 16 - begin_month = OCTOBER - drone_hat = /obj/item/clothing/head/that - -/datum/holiday/halloween - name = HALLOWEEN - begin_day = 28 - begin_month = OCTOBER - end_day = 2 - end_month = NOVEMBER - -/datum/holiday/halloween/greet() - return "Have a spooky Halloween!" - -/datum/holiday/halloween/getStationPrefix() - return pick("Bone-Rattling","Mr. Bones' Own","2SPOOKY","Spooky","Scary","Skeletons") - -/datum/holiday/vegan - name = "Vegan Day" - begin_day = 1 - begin_month = NOVEMBER - -/datum/holiday/vegan/getStationPrefix() - return pick("Tofu", "Tempeh", "Seitan", "Tofurkey") - -/datum/holiday/october_revolution - name = "October Revolution" - begin_day = 6 - begin_month = NOVEMBER - end_day = 7 - -/datum/holiday/october_revolution/getStationPrefix() - return pick("Communist", "Soviet", "Bolshevik", "Socialist", "Red", "Workers'") - -/datum/holiday/kindness - name = "Kindness Day" - begin_day = 13 - begin_month = NOVEMBER - -/datum/holiday/flowers - name = "Flowers Day" - begin_day = 19 - begin_month = NOVEMBER - drone_hat = /obj/item/reagent_containers/food/snacks/grown/moonflower - -/datum/holiday/hello - name = "Saying-'Hello' Day" - begin_day = 21 - begin_month = NOVEMBER - -/datum/holiday/hello/greet() - return "[pick(list("Aloha", "Bonjour", "Hello", "Hi", "Greetings", "Salutations", "Bienvenidos", "Hola", "Howdy", "Ni hao", "Guten Tag", "Konnichiwa", "G'day cunt"))]! " + ..() - -/datum/holiday/human_rights - name = "Human-Rights Day" - begin_day = 10 - begin_month = DECEMBER - -/datum/holiday/monkey - name = "Monkey Day" - begin_day = 14 - begin_month = DECEMBER - drone_hat = /obj/item/clothing/mask/gas/monkeymask - -/datum/holiday/thanksgiving - name = "Thanksgiving in the United States" - begin_week = 4 - begin_month = NOVEMBER - begin_weekday = THURSDAY - drone_hat = /obj/item/clothing/head/that //This is the closest we can get to a pilgrim's hat - -/datum/holiday/thanksgiving/canada - name = "Thanksgiving in Canada" - begin_week = 2 - begin_month = OCTOBER - begin_weekday = MONDAY - -/datum/holiday/columbus - name = "Columbus Day" - begin_week = 2 - begin_month = OCTOBER - begin_weekday = MONDAY - -/datum/holiday/mother - name = "Mother's Day" - begin_week = 2 - begin_month = MAY - begin_weekday = SUNDAY - -/datum/holiday/mother/greet() - return "Happy Mother's Day in most of the Americas, Asia, and Oceania!" - -/datum/holiday/father - name = "Father's Day" - begin_week = 3 - begin_month = JUNE - begin_weekday = SUNDAY - -/datum/holiday/moth - name = "Moth Week" - -/datum/holiday/moth/shouldCelebrate(dd, mm, yy, ww, ddd) //National Moth Week falls on the last full week of July - return mm == JULY && (ww == 4 || (ww == 5 && ddd == SUNDAY)) - -/datum/holiday/moth/getStationPrefix() - return pick("Mothball","Lepidopteran","Lightbulb","Moth","Giant Atlas","Twin-spotted Sphynx","Madagascan Sunset","Luna","Death's Head","Emperor Gum","Polyphenus","Oleander Hawk","Io","Rosy Maple","Cecropia","Noctuidae","Giant Leopard","Dysphania Militaris","Garden Tiger") - -/datum/holiday/ramadan - name = "Start of Ramadan" - -/* - -For anyone who stumbles on this some time in the future: this was calibrated to 2017 -Calculated based on the start and end of Ramadan in 2000 (First year of the Gregorian Calendar supported by BYOND) -This is going to be accurate for at least a decade, likely a lot longer -Since the date fluctuates, it may be inaccurate one year and then accurate for several after -Inaccuracies will never be by more than one day for at least a hundred years -Finds the number of days since the day in 2000 and gets the modulo of that and the average length of a Muslim year since the first one (622 AD, Gregorian) -Since Ramadan is an entire month that lasts 29.5 days on average, the start and end are holidays and are calculated from the two dates in 2000 - -*/ - -/datum/holiday/ramadan/shouldCelebrate(dd, mm, yy, ww, ddd) - if (round(((world.realtime - 285984000) / 864000) % 354.373435326843) == 0) - return TRUE - return FALSE - -/datum/holiday/ramadan/getStationPrefix() - return pick("Harm","Halaal","Jihad","Muslim") - -/datum/holiday/ramadan/end - name = "End of Ramadan" - -/datum/holiday/ramadan/end/shouldCelebrate(dd, mm, yy, ww, ddd) - if (round(((world.realtime - 312768000) / 864000) % 354.373435326843) == 0) - return TRUE - return FALSE - -/datum/holiday/lifeday - name = "Life Day" - begin_day = 17 - begin_month = NOVEMBER - -/datum/holiday/lifeday/getStationPrefix() - return pick("Itchy", "Lumpy", "Malla", "Kazook") //he really pronounced it "Kazook", I wish I was making shit up - -/datum/holiday/doomsday - name = "Mayan Doomsday Anniversary" - begin_day = 21 - begin_month = DECEMBER - drone_hat = /obj/item/clothing/mask/rat/tribal - -/datum/holiday/xmas - name = CHRISTMAS - begin_day = 22 - begin_month = DECEMBER - end_day = 27 - drone_hat = /obj/item/clothing/head/santa - -/datum/holiday/xmas/greet() - return "Have a merry Christmas!" - -/datum/holiday/xmas/celebrate() - SSticker.OnRoundstart(CALLBACK(src, PROC_REF(roundstart_celebrate))) - GLOB.maintenance_loot += list( - /obj/item/toy/xmas_cracker = 3, - /obj/item/clothing/head/santa = 1, - /obj/item/a_gift/anything = 1 - ) - -/datum/holiday/xmas/proc/roundstart_celebrate() - for(var/obj/machinery/computer/security/telescreen/entertainment/Monitor in GLOB.machines) - Monitor.icon_state_on = "entertainment_xmas" - - for(var/mob/living/simple_animal/pet/dog/corgi/Ian/Ian in GLOB.mob_living_list) - Ian.place_on_head(new /obj/item/clothing/head/helmet/space/santahat(Ian)) - - -/datum/holiday/festive_season - name = FESTIVE_SEASON - begin_day = 1 - begin_month = DECEMBER - end_day = 31 - drone_hat = /obj/item/clothing/head/santa - -/datum/holiday/festive_season/greet() - return "Have a nice festive season!" - -/datum/holiday/boxing - name = "Boxing Day" - begin_day = 26 - begin_month = DECEMBER - -/datum/holiday/friday_thirteenth - name = "Friday the 13th" - -/datum/holiday/friday_thirteenth/shouldCelebrate(dd, mm, yy, ww, ddd) - if(dd == 13 && ddd == FRIDAY) - return TRUE - return FALSE - -/datum/holiday/friday_thirteenth/getStationPrefix() - return pick("Mike","Friday","Evil","Myers","Murder","Deathly","Stabby") - -/datum/holiday/easter - name = EASTER - drone_hat = /obj/item/clothing/head/rabbitears - var/const/days_early = 1 //to make editing the holiday easier - var/const/days_extra = 1 - -/datum/holiday/easter/shouldCelebrate(dd, mm, yy, ww, ddd) - if(!begin_month) - current_year = text2num(time2text(world.timeofday, "YYYY")) - var/list/easterResults = EasterDate(current_year+year_offset) - - begin_day = easterResults["day"] - begin_month = easterResults["month"] - - end_day = begin_day + days_extra - end_month = begin_month - if(end_day >= 32 && end_month == MARCH) //begins in march, ends in april - end_day -= 31 - end_month++ - if(end_day >= 31 && end_month == APRIL) //begins in april, ends in june - end_day -= 30 - end_month++ - - begin_day -= days_early - if(begin_day <= 0) - if(begin_month == APRIL) - begin_day += 31 - begin_month-- //begins in march, ends in april - - return ..() - -/datum/holiday/easter/celebrate() - GLOB.maintenance_loot += list( - /obj/item/reagent_containers/food/snacks/egg/loaded = 15, - /obj/item/storage/bag/easterbasket = 15) - -/datum/holiday/easter/greet() - return "Greetings! Have a Happy Easter and keep an eye out for Easter Bunnies!" - -/datum/holiday/easter/getStationPrefix() - return pick("Fluffy","Bunny","Easter","Egg") - -/datum/holiday/ianbirthday - name = "Ian's Birthday" - begin_day = 15 - begin_month = MARCH - -/datum/holiday/ianbirthday/greet() - return "Happy birthday, Ian!"*/ diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index ef70f4fc7b..62c445c619 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -92,25 +92,9 @@ /obj/item/reagent_containers/food/snacks/grown/attackby(obj/item/O, mob/user, params) ..() - if (istype(O, /obj/item/plant_analyzer)) - var/msg = "*---------*\n This is \a [src].\n" - if(seed) - msg += seed.get_analyzer_text() - var/reag_txt = "" - if(seed) - for(var/reagent_id in seed.reagents_add) - var/datum/reagent/R = GLOB.chemical_reagents_list[reagent_id] - var/amt = reagents.get_reagent_amount(reagent_id) - reag_txt += "\n- [R.name]: [amt]" - - if(reag_txt) - msg += reag_txt - msg += "
*---------*" - to_chat(user, msg) - else - if(seed) - for(var/datum/plant_gene/trait/T in seed.genes) - T.on_attackby(src, O, user) + if(seed) + for(var/datum/plant_gene/trait/T in seed.genes) + T.on_attackby(src, O, user) // Various gene procs @@ -230,7 +214,7 @@ if(cotton.amount > old_cotton_amount) to_chat(user, "I add the newly-formed [cotton_name] to the stack. It now contains [cotton.amount] [cotton_name].") qdel(src) - + /obj/item/grown/novaflower Could be rerolled to fyrtius flowers I suppose, could be useful inspiration name = "novaflower" @@ -276,7 +260,7 @@ ..() if(!user.gloves) to_chat(user, "The [name] burns my bare hand!") - user.adjustFireLoss(rand(1, 5)) + user.adjustFireLoss(rand(1, 5)) // corpse flower effect, another worth saving /obj/item/seeds/starthistle/corpse_flower/process() diff --git a/code/modules/hydroponics/grown/kudzu.dm b/code/modules/hydroponics/grown/kudzu.dm index be54aec8b7..e6d27b9ff9 100644 --- a/code/modules/hydroponics/grown/kudzu.dm +++ b/code/modules/hydroponics/grown/kudzu.dm @@ -27,8 +27,6 @@ return (BRUTELOSS) /obj/item/seeds/kudzu/proc/plant(mob/user) - if(isspaceturf(user.loc)) - return if(!isturf(user.loc)) to_chat(user, "I need more space to plant [src].") return FALSE diff --git a/code/modules/hydroponics/grown/mushrooms.dm b/code/modules/hydroponics/grown/mushrooms.dm index 8b224261ce..439407fde5 100644 --- a/code/modules/hydroponics/grown/mushrooms.dm +++ b/code/modules/hydroponics/grown/mushrooms.dm @@ -125,7 +125,7 @@ growthstages = 3 genes = list(/datum/plant_gene/trait/plant_type/fungal_metabolism) growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi' - mutatelist = list(/obj/item/seeds/plump/walkingmushroom) + mutatelist = list() reagents_add = list(/datum/reagent/consumable/nutriment/vitamin = 0.04, /datum/reagent/consumable/nutriment = 0.1) /obj/item/reagent_containers/food/snacks/grown/mushroom/plumphelmet @@ -136,44 +136,6 @@ filling_color = "#9370DB" distill_reagent = /datum/reagent/consumable/ethanol/manly_dorf -// Walking Mushroom -/obj/item/seeds/plump/walkingmushroom - name = "pack of walking mushroom mycelium" - desc = "" - icon_state = "mycelium-walkingmushroom" - species = "walkingmushroom" - plantname = "Walking Mushrooms" - product = /obj/item/reagent_containers/food/snacks/grown/mushroom/walkingmushroom - lifespan = 30 - endurance = 30 - maturation = 5 - yield = 1 - growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi' - mutatelist = list() - reagents_add = list(/datum/reagent/consumable/nutriment/vitamin = 0.05, /datum/reagent/consumable/nutriment = 0.15) - rarity = 30 - -/obj/item/reagent_containers/food/snacks/grown/mushroom/walkingmushroom - seed = /obj/item/seeds/plump/walkingmushroom - name = "walking mushroom" - desc = "" - icon_state = "walkingmushroom" - filling_color = "#9370DB" - can_distill = FALSE - -/obj/item/reagent_containers/food/snacks/grown/mushroom/walkingmushroom/attack_self(mob/user) - if(isspaceturf(user.loc)) - return - var/mob/living/simple_animal/hostile/mushroom/M = new /mob/living/simple_animal/hostile/mushroom(user.loc) - M.maxHealth += round(seed.endurance / 4) - M.melee_damage_lower += round(seed.potency / 20) - M.melee_damage_upper += round(seed.potency / 20) - M.move_to_delay -= round(seed.production / 50) - M.health = M.maxHealth - qdel(src) - to_chat(user, "I plant the walking mushroom.") - - // Chanterelle /obj/item/seeds/chanter name = "pack of chanterelle mycelium" diff --git a/code/modules/hydroponics/grown/towercap.dm b/code/modules/hydroponics/grown/towercap.dm index 44f2086750..b65149edbd 100644 --- a/code/modules/hydroponics/grown/towercap.dm +++ b/code/modules/hydroponics/grown/towercap.dm @@ -41,7 +41,6 @@ throw_speed = 2 throw_range = 3 attack_verb = list("bashed", "battered", "bludgeoned", "whacked") - var/plank_type = /obj/item/stack/sheet/mineral/wood var/plank_name = "wooden planks" var/static/list/accepted = typecacheof(list(/*/obj/item/reagent_containers/food/snacks/grown/tobacco, /obj/item/reagent_containers/food/snacks/grown/tea, @@ -49,23 +48,6 @@ /obj/item/reagent_containers/food/snacks/grown/ambrosia/deus, /obj/item/reagent_containers/food/snacks/produce/wheat*/)) -///obj/item/grown/log/attackby(obj/item/W, mob/user, params) -// if(W.get_sharpness()) -// user.show_message("I make [plank_name] out of \the [src]!", MSG_VISUAL) -// var/seed_modifier = 0 -// if(seed) -// seed_modifier = round(seed.potency / 25) -// var/obj/item/stack/plank = new plank_type(user.loc, 1 + seed_modifier) -// var/old_plank_amount = plank.amount -// for(var/obj/item/stack/ST in user.loc) -// if(ST != plank && istype(ST, plank_type) && ST.amount < ST.max_amount) -// ST.attackby(plank, user) //we try to transfer all old unfinished stacks to the new stack we created. -// if(plank.amount > old_plank_amount) -// to_chat(user, "I add the newly-formed [plank_name] to the stack. It now contains [plank.amount] [plank_name].") -// qdel(src) -// else -// return ..() - /obj/item/grown/log/proc/CheckAccepted(obj/item/I) return is_type_in_typecache(I, accepted) @@ -74,7 +56,6 @@ name = "steel-cap log" desc = "" icon_state = "steellogs" - plank_type = /obj/item/stack/rods plank_name = "rods" /obj/item/grown/log/steel/CheckAccepted(obj/item/I) @@ -103,7 +84,6 @@ name = "bamboo log" desc = "" icon_state = "bamboo" - plank_type = /obj/item/stack/sheet/mineral/bamboo plank_name = "bamboo sticks" /obj/item/grown/log/bamboo/CheckAccepted(obj/item/I) @@ -154,25 +134,6 @@ return ..() /obj/structure/bonfire/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/stack/rods) && !can_buckle && !grill) - var/obj/item/stack/rods/R = W - var/choice = input(user, "What would you like to construct?", "Bonfire") as null|anything in list("Stake","Grill") - switch(choice) - if("Stake") - R.use(1) - can_buckle = TRUE - buckle_requires_restraints = TRUE - to_chat(user, "I add a rod to \the [src].") - var/mutable_appearance/rod_underlay = mutable_appearance('icons/obj/hydroponics/equipment.dmi', "bonfire_rod") - rod_underlay.pixel_y = 16 - underlays += rod_underlay - if("Grill") - R.use(1) - grill = TRUE - to_chat(user, "I add a grill to \the [src].") - add_overlay("bonfire_grill") - else - return ..() if(W.get_temperature()) StartBurning() if(grill) @@ -202,8 +163,6 @@ var/obj/item/grown/log/L = new /obj/item/grown/log(src.loc) L.pixel_x += rand(1,4) L.pixel_y += rand(1,4) - if(can_buckle || grill) - new /obj/item/stack/rods(loc, 1) qdel(src) return diff --git a/code/modules/hydroponics/growninedible.dm b/code/modules/hydroponics/growninedible.dm index 0a7f16c6de..acc31f085d 100644 --- a/code/modules/hydroponics/growninedible.dm +++ b/code/modules/hydroponics/growninedible.dm @@ -31,17 +31,6 @@ transform *= TRANSFORM_USING_VARIABLE(seed.potency, 100) + 0.5 add_juice() - -/obj/item/grown/attackby(obj/item/O, mob/user, params) - ..() - if (istype(O, /obj/item/plant_analyzer)) - var/msg = "*---------*\n This is \a [src]\n" - if(seed) - msg += seed.get_analyzer_text() - msg += "" - to_chat(usr, msg) - return - /obj/item/grown/proc/add_juice() if(reagents) return 1 diff --git a/code/modules/hydroponics/hydroitemdefines.dm b/code/modules/hydroponics/hydroitemdefines.dm deleted file mode 100644 index 1e3c597b68..0000000000 --- a/code/modules/hydroponics/hydroitemdefines.dm +++ /dev/null @@ -1,215 +0,0 @@ -// Plant analyzer -/obj/item/plant_analyzer - name = "plant analyzer" - desc = "" - icon = 'icons/obj/device.dmi' - icon_state = "hydro" - item_state = "analyzer" - lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' - w_class = WEIGHT_CLASS_TINY - slot_flags = ITEM_SLOT_BELT - custom_materials = list(/datum/material/iron=30, /datum/material/glass=20) - -// ************************************* -// Hydroponics Tools -// ************************************* - -/obj/item/reagent_containers/spray/weedspray // -- Skie - desc = "" - icon = 'icons/obj/hydroponics/equipment.dmi' - name = "weed spray" - icon_state = "weedspray" - item_state = "spraycan" - lefthand_file = 'icons/mob/inhands/equipment/hydroponics_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/hydroponics_righthand.dmi' - volume = 100 - list_reagents = list(/datum/reagent/toxin/plantbgone/weedkiller = 100) - -/obj/item/reagent_containers/spray/weedspray/suicide_act(mob/user) - user.visible_message("[user] is huffing [src]! It looks like [user.p_theyre()] trying to commit suicide!") - return (TOXLOSS) - -/obj/item/reagent_containers/spray/pestspray // -- Skie - desc = "" - icon = 'icons/obj/hydroponics/equipment.dmi' - name = "pest spray" - icon_state = "pestspray" - item_state = "plantbgone" - lefthand_file = 'icons/mob/inhands/equipment/hydroponics_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/hydroponics_righthand.dmi' - volume = 100 - list_reagents = list(/datum/reagent/toxin/pestkiller = 100) - -/obj/item/reagent_containers/spray/pestspray/suicide_act(mob/user) - user.visible_message("[user] is huffing [src]! It looks like [user.p_theyre()] trying to commit suicide!") - return (TOXLOSS) - -/obj/item/cultivator - name = "cultivator" - desc = "" - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "cultivator" - item_state = "cultivator" - lefthand_file = 'icons/mob/inhands/equipment/hydroponics_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/hydroponics_righthand.dmi' - flags_1 = CONDUCT_1 - force = 5 - throwforce = 7 - w_class = WEIGHT_CLASS_SMALL - custom_materials = list(/datum/material/iron=50) - attack_verb = list("slashed", "sliced", "cut", "clawed") - hitsound = 'sound/blank.ogg' - -/obj/item/cultivator/suicide_act(mob/user) - user.visible_message("[user] is scratching [user.p_their()] back as hard as [user.p_they()] can with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!") - return (BRUTELOSS) - -/obj/item/cultivator/rake - name = "rake" - icon_state = "rake" - w_class = WEIGHT_CLASS_NORMAL - attack_verb = list("slashed", "sliced", "bashed", "clawed") - hitsound = null - custom_materials = null - flags_1 = NONE - resistance_flags = FLAMMABLE - -/obj/item/cultivator/rake/Crossed(mob/living/carbon/human/H) - if(istype(H) && has_gravity(loc) && HAS_TRAIT(H, TRAIT_CLUMSY) && !H.resting) - H.confused = max(H.confused, 10) - H.Stun(20) - playsound(src, 'sound/blank.ogg', 50, TRUE) - H.visible_message("[H] steps on [src] causing the handle to hit [H.p_them()] right in the face!", \ - "I step on [src] causing the handle to hit you right in the face!") - -/obj/item/hatchet - name = "hatchet" - desc = "" - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "hatchet" - item_state = "hatchet" - lefthand_file = 'icons/mob/inhands/equipment/hydroponics_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/hydroponics_righthand.dmi' - flags_1 = CONDUCT_1 - force = 12 - w_class = WEIGHT_CLASS_SMALL - throwforce = 15 - throw_speed = 1 - throw_range = 4 - custom_materials = list(/datum/material/iron = 15000) - attack_verb = list("chopped", "torn", "cut") - hitsound = 'sound/blank.ogg' - sharpness = IS_SHARP - -/obj/item/hatchet/Initialize() - . = ..() - AddComponent(/datum/component/butchering, 70, 100) - -/obj/item/hatchet/suicide_act(mob/user) - user.visible_message("[user] is chopping at [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to commit suicide!") - playsound(src, 'sound/blank.ogg', 50, TRUE, -1) - return (BRUTELOSS) - -/obj/item/hatchet/wooden - desc = "" - icon_state = "woodhatchet" - custom_materials = null - flags_1 = NONE - -/obj/item/scythe - icon_state = "scythe0" - lefthand_file = 'icons/mob/inhands/weapons/polearms_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/polearms_righthand.dmi' - name = "scythe" - desc = "" - force = 13 - throwforce = 5 - throw_speed = 2 - throw_range = 3 - w_class = WEIGHT_CLASS_BULKY - flags_1 = CONDUCT_1 - armor_penetration = 20 - slot_flags = ITEM_SLOT_BACK - attack_verb = list("chopped", "sliced", "cut", "reaped") - hitsound = 'sound/blank.ogg' - var/swiping = FALSE - -/obj/item/scythe/Initialize() - . = ..() - AddComponent(/datum/component/butchering, 90, 105) - -/obj/item/scythe/suicide_act(mob/user) - user.visible_message("[user] is beheading [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to commit suicide!") - if(iscarbon(user)) - var/mob/living/carbon/C = user - var/obj/item/bodypart/BP = C.get_bodypart(BODY_ZONE_HEAD) - if(BP) - BP.drop_limb() - playsound(src, "desceration" ,50, TRUE, -1) - return (BRUTELOSS) - -/obj/item/scythe/pre_attack(atom/A, mob/living/user, params) - if(swiping || !istype(A, /obj/structure/spacevine) || get_turf(A) == get_turf(user)) - return ..() - var/turf/user_turf = get_turf(user) - var/dir_to_target = get_dir(user_turf, get_turf(A)) - swiping = TRUE - var/static/list/scythe_slash_angles = list(0, 45, 90, -45, -90) - for(var/i in scythe_slash_angles) - var/turf/T = get_step(user_turf, turn(dir_to_target, i)) - for(var/obj/structure/spacevine/V in T) - if(user.Adjacent(V)) - melee_attack_chain(user, V) - swiping = FALSE - return TRUE - -// ************************************* -// Nutrient defines for hydroponics -// ************************************* - - -/obj/item/reagent_containers/glass/bottle/nutrient - name = "bottle of nutrient" - volume = 50 - amount_per_transfer_from_this = 10 - possible_transfer_amounts = list(1,2,5,10,15,25,50) - -/obj/item/reagent_containers/glass/bottle/nutrient/Initialize() - . = ..() - pixel_x = rand(-5, 5) - pixel_y = rand(-5, 5) - - -/obj/item/reagent_containers/glass/bottle/nutrient/ez - name = "bottle of E-Z-Nutrient" - desc = "" - list_reagents = list(/datum/reagent/plantnutriment/eznutriment = 50) - -/obj/item/reagent_containers/glass/bottle/nutrient/l4z - name = "bottle of Left 4 Zed" - desc = "" - list_reagents = list(/datum/reagent/plantnutriment/left4zednutriment = 50) - -/obj/item/reagent_containers/glass/bottle/nutrient/rh - name = "bottle of Robust Harvest" - desc = "" - list_reagents = list(/datum/reagent/plantnutriment/robustharvestnutriment = 50) - -/obj/item/reagent_containers/glass/bottle/nutrient/empty - name = "bottle" - -/obj/item/reagent_containers/glass/bottle/killer - volume = 50 - amount_per_transfer_from_this = 10 - possible_transfer_amounts = list(1,2,5,10,15,25,50) - -/obj/item/reagent_containers/glass/bottle/killer/weedkiller - name = "bottle of weed killer" - desc = "" - list_reagents = list(/datum/reagent/toxin/plantbgone/weedkiller = 50) - -/obj/item/reagent_containers/glass/bottle/killer/pestkiller - name = "bottle of pest spray" - desc = "" - list_reagents = list(/datum/reagent/toxin/pestkiller = 50) diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm index 4c9f1303f6..8c7be976bd 100644 --- a/code/modules/hydroponics/seeds.dm +++ b/code/modules/hydroponics/seeds.dm @@ -337,64 +337,6 @@ /obj/item/seeds/proc/on_chem_reaction(datum/reagents/S) //in case seeds have some special interaction with special chems return -/obj/item/seeds/attackby(obj/item/O, mob/user, params) - if (istype(O, /obj/item/plant_analyzer)) - to_chat(user, "*---------*\n This is \a [src].") - var/text = get_analyzer_text() - if(text) - to_chat(user, "[text]") - - return - -/* if(istype(O, /obj/item/pen)) - var/choice = input("What would you like to change?") in list("Plant Name", "Seed Description", "Product Description", "Cancel") - if(!user.canUseTopic(src, BE_CLOSE)) - return - switch(choice) - if("Plant Name") - var/newplantname = reject_bad_text(stripped_input(user, "Write a new plant name:", name, plantname)) - if(!user.canUseTopic(src, BE_CLOSE)) - return - if (length(newplantname) > 20) - to_chat(user, "That name is too long!") - return - if(!newplantname) - to_chat(user, "That name is invalid.") - return - else - name = "[lowertext(newplantname)]" - plantname = newplantname - if("Seed Description") - var/newdesc = stripped_input(user, "Write a new description:", name, desc) - if(!user.canUseTopic(src, BE_CLOSE)) - return - if (length(newdesc) > 180) - to_chat(user, "That description is too long!") - return - if(!newdesc) - to_chat(user, "That description is invalid.") - return - else - desc = newdesc - if("Product Description") - if(product && !productdesc) - productdesc = initial(product.desc) - var/newproductdesc = stripped_input(user, "Write a new description:", name, productdesc) - if(!user.canUseTopic(src, BE_CLOSE)) - return - if (length(newproductdesc) > 180) - to_chat(user, "That description is too long!") - return - if(!newproductdesc) - to_chat(user, "That description is invalid.") - return - else - productdesc = newproductdesc - else - return -*/ - ..() // Fallthrough to item/attackby() so that bags can pick seeds up - // Checks plants for broken tray icons. Use Advanced Proc Call to activate. // Maybe some day it would be used as unit test. /proc/check_plants_growth_stages_icons() diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm index f6f11cd849..f632e66b6d 100644 --- a/code/modules/jobs/job_types/_job.dm +++ b/code/modules/jobs/job_types/_job.dm @@ -311,50 +311,13 @@ /datum/job/proc/map_check() return TRUE -/datum/job/proc/radio_help_message(mob/M) - to_chat(M, "Prefix your message with :h to speak on your department's radio. To see other prefixes, look closely at your headset.") - /datum/outfit/job name = "Standard Gear" var/jobtype = null - uniform = /obj/item/clothing/under/color/grey back = /obj/item/storage/backpack - shoes = /obj/item/clothing/shoes/sneakers/black - box = /obj/item/storage/box/survival - - var/backpack = /obj/item/storage/backpack - var/satchel = /obj/item/storage/backpack/satchel - var/duffelbag = /obj/item/storage/backpack/duffelbag - - var/pda_slot = SLOT_BELT - -/datum/outfit/job/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - ..() -/* switch(H.backpack) - if(GBACKPACK) - back = /obj/item/storage/backpack //Grey backpack - if(GSATCHEL) - back = /obj/item/storage/backpack/satchel //Grey satchel - if(GDUFFELBAG) - back = /obj/item/storage/backpack/duffelbag //Grey Duffel bag - if(LSATCHEL) - back = /obj/item/storage/backpack/satchel/leather //Leather Satchel - if(DSATCHEL) - back = satchel //Department satchel - if(DDUFFELBAG) - back = duffelbag //Department duffel bag - else - back = backpack //Department backpack - //converts the uniform string into the path we'll wear, whether it's the skirt or regular variant - var/holder - if(H.jumpsuit_style == PREF_SKIRT) - holder = "[uniform]" - else - holder = "[uniform]" - uniform = text2path(holder)*/ /datum/outfit/job/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) if(visualsOnly) @@ -364,14 +327,6 @@ if(!J) J = SSjob.GetJob(H.job) -/datum/outfit/job/get_chameleon_disguise_info() - var/list/types = ..() - types -= /obj/item/storage/backpack //otherwise this will override the actual backpacks - types += backpack - types += satchel - types += duffelbag - return types - //Warden and regular officers add this result to their get_access() /datum/job/proc/check_config_for_sec_maint() if(CONFIG_GET(flag/security_has_maint_access)) diff --git a/code/modules/jobs/job_types/roguetown/roguetown.dm b/code/modules/jobs/job_types/roguetown/roguetown.dm index d94fe8f2ab..2ac63fd492 100644 --- a/code/modules/jobs/job_types/roguetown/roguetown.dm +++ b/code/modules/jobs/job_types/roguetown/roguetown.dm @@ -31,9 +31,6 @@ back = null shoes = null box = null - backpack = null - satchel = null - duffelbag = null /// List of patrons we are allowed to use var/list/allowed_patrons /// Default patron in case the patron is not allowed diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm index 1598754d9f..303ffb0cba 100644 --- a/code/modules/library/lib_items.dm +++ b/code/modules/library/lib_items.dm @@ -51,72 +51,6 @@ I.forceMove(src) update_icon() -/obj/structure/bookcase/attackby(obj/item/I, mob/user, params) - switch(state) - if(0) - if(I.tool_behaviour == TOOL_WRENCH) - if(I.use_tool(src, user, 20, volume=50)) - to_chat(user, "I wrench the frame into place.") - anchored = TRUE - state = 1 - if(I.tool_behaviour == TOOL_CROWBAR) - if(I.use_tool(src, user, 20, volume=50)) - to_chat(user, "I pry the frame apart.") - deconstruct(TRUE) - - if(1) - if(istype(I, /obj/item/stack/sheet/mineral/wood)) - var/obj/item/stack/sheet/mineral/wood/W = I - if(W.get_amount() >= 2) - W.use(2) - to_chat(user, "I add a shelf.") - state = 2 - icon_state = "book-0" - if(I.tool_behaviour == TOOL_WRENCH) - I.play_tool_sound(src, 100) - to_chat(user, "I unwrench the frame.") - anchored = FALSE - state = 0 - - if(2) - var/datum/component/storage/STR = I.GetComponent(/datum/component/storage) - if(is_type_in_list(I, allowed_books)) - if(!(contents.len <= 15)) - to_chat(user, "There are too many books on this shelf!") - return - if(!user.transferItemToLoc(I, src)) - return - update_icon() - else if(STR) - for(var/obj/item/T in I.contents) - if(istype(T, /obj/item/book)) - STR.remove_from_storage(T, src) - to_chat(user, "I empty \the [I] into \the [src].") - update_icon() - else if(istype(I, /obj/item/pen)) - if(!user.is_literate()) - to_chat(user, "I scribble illegibly on the side of [src]!") - return - var/newname = stripped_input(user, "What would you like to title this bookshelf?") - if(!user.canUseTopic(src, BE_CLOSE)) - return - if(!newname) - return - else - name = "bookcase ([sanitize(newname)])" - else if(I.tool_behaviour == TOOL_CROWBAR) - if(contents.len) - to_chat(user, "I need to remove the books first!") - else - I.play_tool_sound(src, 100) - to_chat(user, "I pry the shelf out.") - new /obj/item/stack/sheet/mineral/wood(drop_location(), 2) - state = 1 - icon_state = "bookempty" - else - return ..() - - /obj/structure/bookcase/attack_hand(mob/living/user) . = ..() if(.) diff --git a/code/modules/library/soapstone.dm b/code/modules/library/soapstone.dm deleted file mode 100644 index c54105437f..0000000000 --- a/code/modules/library/soapstone.dm +++ /dev/null @@ -1,265 +0,0 @@ -/obj/item/soapstone - name = "soapstone" - desc = "" - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "soapstone" - throw_speed = 1 - throw_range = 5 - w_class = WEIGHT_CLASS_TINY - var/tool_speed = 50 - var/remaining_uses = 3 - -/obj/item/soapstone/Initialize(mapload) - . = ..() - check_name() - -/obj/item/soapstone/examine(mob/user) - . = ..() - if(remaining_uses != -1) - . += "It has [remaining_uses] uses left." - -/obj/item/soapstone/afterattack(atom/target, mob/user, proximity) - . = ..() - var/turf/T = get_turf(target) - if(!proximity) - return - - var/obj/structure/chisel_message/existing_message = locate() in T - - if(!remaining_uses && !existing_message) - to_chat(user, "[src] is too worn out to use.") - return - - if(!good_chisel_message_location(T)) - to_chat(user, "It's not appropriate to engrave on [T].") - return - - if(existing_message) - user.visible_message("[user] starts erasing [existing_message].", "I start erasing [existing_message].", "I hear a chipping sound.") - playsound(loc, 'sound/blank.ogg', 50, TRUE, -1) - if(do_after(user, tool_speed, target = existing_message)) - user.visible_message("[user] erases [existing_message].", "I erase [existing_message][existing_message.creator_key == user.ckey ? ", refunding a use" : ""].") - existing_message.persists = FALSE - qdel(existing_message) - playsound(loc, 'sound/blank.ogg', 50, TRUE, -1) - if(existing_message.creator_key == user.ckey) - refund_use() - return - - var/message = stripped_input(user, "What would you like to engrave?", "Leave a message") - if(!message) - to_chat(user, "I decide not to engrave anything.") - return - - if(!target.Adjacent(user) && locate(/obj/structure/chisel_message) in T) - to_chat(user, "Someone wrote here before you chose! Find another spot.") - return - playsound(loc, 'sound/blank.ogg', 50, TRUE, -1) - user.visible_message("[user] starts engraving a message into [T]...", "I start engraving a message into [T]...", "I hear a chipping sound.") - if(can_use() && do_after(user, tool_speed, target = T) && can_use()) //This looks messy but it's actually really clever! - if(!locate(/obj/structure/chisel_message) in T) - user.visible_message("[user] leaves a message for future spacemen!", "I engrave a message into [T]!", "I hear a chipping sound.") - playsound(loc, 'sound/blank.ogg', 50, TRUE, -1) - var/obj/structure/chisel_message/M = new(T) - M.register(user, message) - remove_use() - -/obj/item/soapstone/proc/can_use() - return remaining_uses == -1 || remaining_uses >= 0 - -/obj/item/soapstone/proc/remove_use() - if(remaining_uses <= 0) - return - remaining_uses-- - check_name() - -/obj/item/soapstone/proc/refund_use() - if(remaining_uses == -1) - return - remaining_uses++ - check_name() - -/obj/item/soapstone/proc/check_name() - if(remaining_uses) - // This will mess up RPG loot names, but w/e - name = initial(name) - else - name = "dull [initial(name)]" - -/* Persistent engraved messages, etched onto the station turfs to serve - * as instructions and/or memes for the next generation of spessmen. - * - * Limited in location to station_z only. Can be smashed out or exploded, - * but only permamently removed with the curator's soapstone. -*/ - -/obj/item/soapstone/infinite - remaining_uses = -1 - -/obj/item/soapstone/empty - remaining_uses = 0 - -/proc/good_chisel_message_location(turf/T) - if(!T) - . = FALSE - else if(!(isfloorturf(T) || iswallturf(T))) - . = FALSE - else - . = TRUE - -/obj/structure/chisel_message - name = "engraved message" - desc = "" - icon = 'icons/obj/stationobjs.dmi' - icon_state = "soapstone_message" - layer = LATTICE_LAYER - density = FALSE - anchored = TRUE - max_integrity = 30 - - var/hidden_message - var/creator_key - var/creator_name - var/realdate - var/map - var/persists = TRUE - var/list/like_keys = list() - var/list/dislike_keys = list() - - var/turf/original_turf - -/obj/structure/chisel_message/Initialize(mapload) - . = ..() - SSpersistence.chisel_messages += src - var/turf/T = get_turf(src) - original_turf = T - - if(!good_chisel_message_location(T)) - persists = FALSE - return INITIALIZE_HINT_QDEL - -/obj/structure/chisel_message/proc/register(mob/user, newmessage) - hidden_message = newmessage - creator_name = user.real_name - creator_key = user.ckey - realdate = world.realtime - map = SSmapping.config.map_name - update_icon() - -/obj/structure/chisel_message/update_icon() - ..() - var/hash = md5(hidden_message) - var/newcolor = copytext(hash, 1, 7) - add_atom_colour("#[newcolor]", FIXED_COLOUR_PRIORITY) - light_color = "#[newcolor]" - set_light(1) - -/obj/structure/chisel_message/proc/pack() - var/list/data = list() - data["hidden_message"] = hidden_message - data["creator_name"] = creator_name - data["creator_key"] = creator_key - data["realdate"] = realdate - data["map"] = SSmapping.config.map_name - data["x"] = original_turf.x - data["y"] = original_turf.y - data["z"] = original_turf.z - data["like_keys"] = like_keys - data["dislike_keys"] = dislike_keys - return data - -/obj/structure/chisel_message/proc/unpack(list/data) - if(!islist(data)) - return - - hidden_message = data["hidden_message"] - creator_name = data["creator_name"] - creator_key = data["creator_key"] - realdate = data["realdate"] - like_keys = data["like_keys"] - if(!like_keys) - like_keys = list() - dislike_keys = data["dislike_keys"] - if(!dislike_keys) - dislike_keys = list() - - var/x = data["x"] - var/y = data["y"] - var/z = data["z"] - var/turf/newloc = locate(x, y, z) - if(isturf(newloc)) - forceMove(newloc) - update_icon() - -/obj/structure/chisel_message/examine(mob/user) - . = ..() - ui_interact(user) - -/obj/structure/chisel_message/Destroy() - if(persists) - SSpersistence.SaveChiselMessage(src) - SSpersistence.chisel_messages -= src - . = ..() - -/obj/structure/chisel_message/interact() - return - -/obj/structure/chisel_message/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.always_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "engraved_message", name, 600, 300, master_ui, state) - ui.open() - -/obj/structure/chisel_message/ui_data(mob/user) - var/list/data = list() - - data["hidden_message"] = hidden_message - data["realdate"] = SQLtime(realdate) - data["num_likes"] = like_keys.len - data["num_dislikes"] = dislike_keys.len - data["is_creator"] = user.ckey == creator_key - data["has_liked"] = (user.ckey in like_keys) - data["has_disliked"] = (user.ckey in dislike_keys) - - if(check_rights_for(user.client, R_ADMIN)) - data["admin_mode"] = TRUE - data["creator_key"] = creator_key - data["creator_name"] = creator_name - - return data - -/obj/structure/chisel_message/ui_act(action, params, datum/tgui/ui) - var/mob/user = usr - var/is_admin = check_rights_for(user.client, R_ADMIN) - var/is_creator = user.ckey == creator_key - var/has_liked = (user.ckey in like_keys) - var/has_disliked = (user.ckey in dislike_keys) - - switch(action) - if("like") - if(is_creator) - return - if(has_disliked) - dislike_keys -= user.ckey - like_keys |= user.ckey - . = TRUE - if("dislike") - if(is_creator) - return - if(has_liked) - like_keys -= user.ckey - dislike_keys |= user.ckey - . = TRUE - if("neutral") - if(is_creator) - return - dislike_keys -= user.ckey - like_keys -= user.ckey - . = TRUE - if("delete") - if(!is_admin) - return - var/confirm = alert(user, "Confirm deletion of engraved message?", "Confirm Deletion", "Yes", "No") - if(confirm == "Yes") - persists = FALSE - qdel(src) diff --git a/code/modules/lighting/lighting_object.dm b/code/modules/lighting/lighting_object.dm index 4f1ab39d70..d113da8abf 100644 --- a/code/modules/lighting/lighting_object.dm +++ b/code/modules/lighting/lighting_object.dm @@ -27,9 +27,6 @@ myturf.lighting_object = src myturf.luminosity = 0 - for(var/turf/open/space/S in RANGE_TURFS(1, src)) //RANGE_TURFS is in code\__HELPERS\game.dm - S.update_starlight() - needs_update = TRUE SSlighting.objects_queue += src diff --git a/code/modules/mapping/mapping_helpers.dm b/code/modules/mapping/mapping_helpers.dm index 6261da59e8..5d07376c27 100644 --- a/code/modules/mapping/mapping_helpers.dm +++ b/code/modules/mapping/mapping_helpers.dm @@ -18,7 +18,7 @@ /obj/effect/baseturf_helper/LateInitialize() if(!baseturf_to_replace) - baseturf_to_replace = typecacheof(list(/turf/open/space,/turf/baseturf_bottom)) + baseturf_to_replace = typecacheof(list(/turf/baseturf_bottom)) else if(!length(baseturf_to_replace)) baseturf_to_replace = list(baseturf_to_replace = TRUE) else if(baseturf_to_replace[baseturf_to_replace[1]] != TRUE) // It's not associative @@ -48,36 +48,6 @@ else thing.PlaceOnBottom(null, baseturf) - - -/obj/effect/baseturf_helper/space - name = "space baseturf editor" - baseturf = /turf/open/space - -/obj/effect/baseturf_helper/asteroid - name = "asteroid baseturf editor" - baseturf = /turf/open/floor/plating/asteroid - -/obj/effect/baseturf_helper/asteroid/airless - name = "asteroid airless baseturf editor" - baseturf = /turf/open/floor/plating/asteroid/airless - -/obj/effect/baseturf_helper/asteroid/basalt - name = "asteroid basalt baseturf editor" - baseturf = /turf/open/floor/plating/asteroid/basalt - -/obj/effect/baseturf_helper/asteroid/snow - name = "asteroid snow baseturf editor" - baseturf = /turf/open/floor/plating/asteroid/snow - -/obj/effect/baseturf_helper/beach/sand - name = "beach sand baseturf editor" - baseturf = /turf/open/floor/plating/beach/sand - -/obj/effect/baseturf_helper/beach/water - name = "water baseturf editor" - baseturf = /turf/open/floor/plating/beach/water - /obj/effect/baseturf_helper/lava name = "lava baseturf editor" baseturf = /turf/open/lava/smooth @@ -143,17 +113,12 @@ INITIALIZE_IMMEDIATE(/obj/effect/mapping_helpers/no_lava) var/bodycount = 2 //number of bodies to spawn /obj/effect/mapping_helpers/dead_body_placer/LateInitialize() - var/area/a = get_area(src) var/list/trays = list() - for (var/i in a.contents) - if (istype(i, /obj/structure/bodycontainer/morgue)) - trays += i if(!trays.len) log_mapping("[src] at [x],[y] could not find any morgues.") return for (var/i = 1 to bodycount) - var/obj/structure/bodycontainer/morgue/j = pick(trays) - var/mob/living/carbon/human/h = new /mob/living/carbon/human(j, 1) + var/mob/living/carbon/human/h = new /mob/living/carbon/human(get_turf(src), 1) h.death() for (var/part in h.internal_organs) //randomly remove organs from each body, set those we keep to be in stasis if (prob(40)) @@ -161,77 +126,8 @@ INITIALIZE_IMMEDIATE(/obj/effect/mapping_helpers/no_lava) else var/obj/item/organ/O = part O.organ_flags |= ORGAN_FROZEN - j.update_icon() qdel(src) - -//On Ian's birthday, the hop's office is decorated. -/obj/effect/mapping_helpers/ianbirthday - name = "Ian's Bday Helper" - late = TRUE - icon_state = "iansbdayhelper" - var/balloon_clusters = 2 - -/obj/effect/mapping_helpers/ianbirthday/LateInitialize() -// if(locate(/datum/holiday/ianbirthday) in SSevents.holidays) -// birthday() - qdel(src) - -/obj/effect/mapping_helpers/ianbirthday/proc/birthday() - var/area/a = get_area(src) - var/list/table = list()//should only be one aka the front desk, but just in case... - var/list/openturfs = list() - - //confetti and a corgi balloon! (and some list stuff for more decorations) - for(var/thing in a.contents) - if(istype(thing, /obj/structure/table/reinforced)) - table += thing - if(isopenturf(thing)) - new /obj/effect/decal/cleanable/confetti(thing) - if(locate(/obj/structure/bed/dogbed/ian) in thing) - new /obj/item/toy/balloon/corgi(thing) - else - openturfs += thing - //cake + knife to cut it! - var/turf/food_turf = get_turf(pick(table)) - new /obj/item/kitchen/knife(food_turf) - var/obj/item/reagent_containers/food/snacks/store/cake/birthday/iancake = new(food_turf) - iancake.desc = "" - //some balloons! this picks an open turf and pops a few balloons in and around that turf, yay. - for(var/i in 1 to balloon_clusters) - var/turf/clusterspot = pick_n_take(openturfs) - new /obj/item/toy/balloon(clusterspot) - var/balloons_left_to_give = 3 //the amount of balloons around the cluster - var/list/dirs_to_balloon = GLOB.cardinals.Copy() - while(balloons_left_to_give > 0) - balloons_left_to_give-- - var/chosen_dir = pick_n_take(dirs_to_balloon) - var/turf/balloonstep = get_step(clusterspot, chosen_dir) - var/placed = FALSE - if(isopenturf(balloonstep)) - var/obj/item/toy/balloon/B = new(balloonstep)//this clumps the cluster together - placed = TRUE - if(chosen_dir == NORTH) - B.pixel_y -= 10 - if(chosen_dir == SOUTH) - B.pixel_y += 10 - if(chosen_dir == EAST) - B.pixel_x -= 10 - if(chosen_dir == WEST) - B.pixel_x += 10 - if(!placed) - new /obj/item/toy/balloon(clusterspot) - //remind me to add wall decor! - -/obj/effect/mapping_helpers/ianbirthday/admin//so admins may birthday any room - name = "generic birthday setup" - icon_state = "bdayhelper" - -/obj/effect/mapping_helpers/ianbirthday/admin/LateInitialize() - birthday() - qdel(src) - - //This is our map object, which just gets placed anywhere on the map. A .dm file is linked to it to set the templates list. //If there's only one template in the list, it will only pick that (useful for editing parts of maps without editing the WHOLE map) /obj/effect/landmark/map_load_mark diff --git a/code/modules/mapping/ruins.dm b/code/modules/mapping/ruins.dm index db361cc195..f2cb80ac48 100644 --- a/code/modules/mapping/ruins.dm +++ b/code/modules/mapping/ruins.dm @@ -26,8 +26,6 @@ qdel(nest) for(var/mob/living/simple_animal/monster in T) qdel(monster) - for(var/obj/structure/flora/ash/plant in T) - qdel(plant) load(central_turf,centered = TRUE) loaded++ @@ -96,7 +94,7 @@ break else //Otherwise just pick random one current_pick = pickweight(ruins_availible) - + var/placement_tries = forced_turf ? 1 : PLACEMENT_TRIES //Only try once if we target specific turf var/failed_to_place = TRUE var/target_z = 0 @@ -169,5 +167,5 @@ for(var/datum/map_template/ruin/R in ruins_availible) if(R.cost > budget) ruins_availible -= R - + log_world("Ruin loader finished with [budget] left to spend.") diff --git a/code/modules/mapping/space_management/space_reservation.dm b/code/modules/mapping/space_management/space_reservation.dm index 265d2c996d..ba505ab5ec 100644 --- a/code/modules/mapping/space_management/space_reservation.dm +++ b/code/modules/mapping/space_management/space_reservation.dm @@ -8,10 +8,10 @@ var/bottom_left_coords[3] var/top_right_coords[3] var/wipe_reservation_on_release = TRUE - var/turf_type = /turf/open/space + var/turf_type = /turf/open/floor/rogue/blocks /datum/turf_reservation/transit - turf_type = /turf/open/space/transit + turf_type = /turf/open/floor/rogue/blocks /datum/turf_reservation/proc/Release() var/v = reserved_turfs.Copy() diff --git a/code/modules/mapping/space_management/space_transition.dm b/code/modules/mapping/space_management/space_transition.dm index 5a9d52033c..33c680484c 100644 --- a/code/modules/mapping/space_management/space_transition.dm +++ b/code/modules/mapping/space_management/space_transition.dm @@ -55,89 +55,3 @@ neigbours |= grid[x][y+1] if(y-1 >= 1) neigbours |= grid[x][y-1] - -/datum/controller/subsystem/mapping/proc/setup_map_transitions() //listamania - var/list/SLS = list() - var/list/cached_z_list = z_list - var/conf_set_len = 0 - for(var/A in cached_z_list) - var/datum/space_level/D = A - if (D.linkage == CROSSLINKED) - SLS.Add(D) - conf_set_len++ - var/list/point_grid[conf_set_len*2+1][conf_set_len*2+1] - var/list/grid = list() - var/datum/space_transition_point/P - for(var/i = 1, i<=conf_set_len*2+1, i++) - for(var/j = 1, j<=conf_set_len*2+1, j++) - P = new/datum/space_transition_point(i,j, point_grid) - point_grid[i][j] = P - grid.Add(P) - for(var/datum/space_transition_point/pnt in grid) - pnt.set_neigbours(point_grid) - P = point_grid[conf_set_len+1][conf_set_len+1] - var/list/possible_points = list() - var/list/used_points = list() - grid.Cut() - while(SLS.len) - var/datum/space_level/D = pick_n_take(SLS) - D.xi = P.x - D.yi = P.y - P.spl = D - possible_points |= P.neigbours - used_points |= P - possible_points.Remove(used_points) - D.set_neigbours(used_points) - P = pick(possible_points) - CHECK_TICK - - //Lists below are pre-calculated values arranged in the list in such a way to be easily accessable in the loop by the counter - //Its either this or madness with lotsa math - - var/list/x_pos_beginning = list(1, 1, world.maxx - TRANSITIONEDGE, 1) //x values of the lowest-leftest turfs of the respective 4 blocks on each side of zlevel - var/list/y_pos_beginning = list(world.maxy - TRANSITIONEDGE, 1, 1 + TRANSITIONEDGE, 1 + TRANSITIONEDGE) //y values respectively - var/list/x_pos_ending = list(world.maxx, world.maxx, world.maxx, 1 + TRANSITIONEDGE) //x values of the highest-rightest turfs of the respective 4 blocks on each side of zlevel - var/list/y_pos_ending = list(world.maxy, 1 + TRANSITIONEDGE, world.maxy - TRANSITIONEDGE, world.maxy - TRANSITIONEDGE) //y values respectively - var/list/x_pos_transition = list(1, 1, TRANSITIONEDGE + 2, world.maxx - TRANSITIONEDGE - 1) //values of x for the transition from respective blocks on the side of zlevel, 1 is being translated into turfs respective x value later in the code - var/list/y_pos_transition = list(TRANSITIONEDGE + 2, world.maxy - TRANSITIONEDGE - 1, 1, 1) //values of y for the transition from respective blocks on the side of zlevel, 1 is being translated into turfs respective y value later in the code - - for(var/I in cached_z_list) - var/datum/space_level/D = I - if(!D.neigbours.len) - continue - var/zlevelnumber = D.z_value - for(var/side in 1 to 4) - var/turf/beginning = locate(x_pos_beginning[side], y_pos_beginning[side], zlevelnumber) - var/turf/ending = locate(x_pos_ending[side], y_pos_ending[side], zlevelnumber) - var/list/turfblock = block(beginning, ending) - var/dirside = 2**(side-1) - var/zdestination = zlevelnumber - if(D.neigbours["[dirside]"] && D.neigbours["[dirside]"] != D) - D = D.neigbours["[dirside]"] - zdestination = D.z_value - else - dirside = turn(dirside, 180) - while(D.neigbours["[dirside]"] && D.neigbours["[dirside]"] != D) - D = D.neigbours["[dirside]"] - zdestination = D.z_value - D = I - for(var/turf/open/space/S in turfblock) - S.destination_x = x_pos_transition[side] == 1 ? S.x : x_pos_transition[side] - S.destination_y = y_pos_transition[side] == 1 ? S.y : y_pos_transition[side] - S.destination_z = zdestination - - // Mirage border code - var/mirage_dir - if(S.x == 1 + TRANSITIONEDGE) - mirage_dir |= WEST - else if(S.x == world.maxx - TRANSITIONEDGE) - mirage_dir |= EAST - if(S.y == 1 + TRANSITIONEDGE) - mirage_dir |= SOUTH - else if(S.y == world.maxy - TRANSITIONEDGE) - mirage_dir |= NORTH - if(!mirage_dir) - continue - - var/turf/place = locate(S.destination_x, S.destination_y, S.destination_z) - S.AddComponent(/datum/component/mirage_border, place, mirage_dir) diff --git a/code/modules/mining/lavaland/ash_flora.dm b/code/modules/mining/lavaland/ash_flora.dm deleted file mode 100644 index 82b0d6ce25..0000000000 --- a/code/modules/mining/lavaland/ash_flora.dm +++ /dev/null @@ -1,321 +0,0 @@ -//*******************Contains everything related to the flora on lavaland.******************************* -//This includes: The structures, their produce, their seeds and the crafting recipe for the mushroom bowl - -/obj/structure/flora/ash - gender = PLURAL - layer = PROJECTILE_HIT_THRESHHOLD_LAYER //sporangiums up don't shoot - icon = 'icons/obj/lavaland/ash_flora.dmi' - icon_state = "l_mushroom" - name = "large mushrooms" - desc = "" - var/harvested_name = "shortened mushrooms" - var/harvested_desc = "" - var/needs_sharp_harvest = TRUE - var/harvest = /obj/item/reagent_containers/food/snacks/grown/ash_flora/shavings - var/harvest_amount_low = 1 - var/harvest_amount_high = 3 - var/harvest_time = 60 - var/harvest_message_low = "You pick a mushroom, but fail to collect many shavings from its cap." - var/harvest_message_med = "You pick a mushroom, carefully collecting the shavings from its cap." - var/harvest_message_high = "You harvest and collect shavings from several mushroom caps." - var/harvested = FALSE - var/base_icon - var/regrowth_time_low = 8 MINUTES - var/regrowth_time_high = 16 MINUTES - -/obj/structure/flora/ash/Initialize() - . = ..() - base_icon = "[icon_state][rand(1, 4)]" - icon_state = base_icon - -/obj/structure/flora/ash/proc/harvest(user) - if(harvested) - return 0 - - var/rand_harvested = rand(harvest_amount_low, harvest_amount_high) - if(rand_harvested) - if(user) - var/msg = harvest_message_med - if(rand_harvested == harvest_amount_low) - msg = harvest_message_low - else if(rand_harvested == harvest_amount_high) - msg = harvest_message_high - to_chat(user, "[msg]") - for(var/i in 1 to rand_harvested) - new harvest(get_turf(src)) - - icon_state = "[base_icon]p" - name = harvested_name - desc = harvested_desc - harvested = TRUE - addtimer(CALLBACK(src, PROC_REF(regrow)), rand(regrowth_time_low, regrowth_time_high)) - return 1 - -/obj/structure/flora/ash/proc/regrow() - icon_state = base_icon - name = initial(name) - desc = initial(desc) - harvested = FALSE - -/obj/structure/flora/ash/attackby(obj/item/W, mob/user, params) - if(!harvested && needs_sharp_harvest && W.get_sharpness()) - user.visible_message("[user] starts to harvest from [src] with [W].","I begin to harvest from [src] with [W].") - if(do_after(user, harvest_time, target = src)) - harvest(user) - else - return ..() - -/obj/structure/flora/ash/attack_hand(mob/user) - . = ..() - if(.) - return - if(!harvested && !needs_sharp_harvest) - user.visible_message("[user] starts to harvest from [src].","I begin to harvest from [src].") - if(do_after(user, harvest_time, target = src)) - harvest(user) - -/obj/structure/flora/ash/tall_shroom //exists only so that the spawning check doesn't allow these spawning near other things - regrowth_time_low = 4200 - -/obj/structure/flora/ash/leaf_shroom - icon_state = "s_mushroom" - name = "leafy mushrooms" - desc = "" - harvested_name = "leafless mushrooms" - harvested_desc = "" - harvest = /obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_leaf - needs_sharp_harvest = FALSE - harvest_amount_high = 4 - harvest_time = 20 - harvest_message_low = "You pluck a single, suitable leaf." - harvest_message_med = "You pluck a number of leaves, leaving a few unsuitable ones." - harvest_message_high = "You pluck quite a lot of suitable leaves." - regrowth_time_low = 2400 - regrowth_time_high = 6000 - -/obj/structure/flora/ash/cap_shroom - icon_state = "r_mushroom" - name = "tall mushrooms" - desc = "" - harvested_name = "small mushrooms" - harvested_desc = "" - harvest = /obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_cap - harvest_amount_high = 4 - harvest_time = 50 - harvest_message_low = "You slice the cap off a mushroom." - harvest_message_med = "You slice off a few conks from the larger mushrooms." - harvest_message_high = "You slice off a number of caps and conks from these mushrooms." - regrowth_time_low = 3000 - regrowth_time_high = 5400 - -/obj/structure/flora/ash/stem_shroom - icon_state = "t_mushroom" - name = "numerous mushrooms" - desc = "" - light_outer_range = 1.5 - light_power = 2.1 - harvested_name = "tiny mushrooms" - harvested_desc = "" - harvest = /obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_stem - harvest_amount_high = 4 - harvest_time = 40 - harvest_message_low = "You pick and slice the cap off a mushroom, leaving the stem." - harvest_message_med = "You pick and decapitate several mushrooms for their stems." - harvest_message_high = "You acquire a number of stems from these mushrooms." - regrowth_time_low = 3000 - regrowth_time_high = 6000 - -/obj/structure/flora/ash/cacti - icon_state = "cactus" - name = "fruiting cacti" - desc = "" - harvested_name = "cacti" - harvested_desc = "" - harvest = /obj/item/reagent_containers/food/snacks/grown/ash_flora/cactus_fruit - needs_sharp_harvest = FALSE - harvest_amount_high = 2 - harvest_time = 10 - harvest_message_low = "You pick a cactus fruit." - harvest_message_med = "You pick several cactus fruit." //shouldn't show up, because you can't get more than two - harvest_message_high = "You pick a pair of cactus fruit." - regrowth_time_low = 4800 - regrowth_time_high = 7200 - -/obj/structure/flora/ash/cacti/Initialize(mapload) - . = ..() - // min dmg 3, max dmg 6, prob(70) - AddComponent(/datum/component/caltrop, 3, 6, 70) - -//SNACKS - -/obj/item/reagent_containers/food/snacks/grown/ash_flora - name = "mushroom shavings" - desc = "" - icon = 'icons/obj/lavaland/ash_flora.dmi' - icon_state = "mushroom_shavings" - w_class = WEIGHT_CLASS_TINY - resistance_flags = FLAMMABLE - max_integrity = 100 - seed = /obj/item/seeds/lavaland/polypore - wine_power = 20 - -/obj/item/reagent_containers/food/snacks/grown/ash_flora/Initialize() - . = ..() - pixel_x = rand(-4, 4) - pixel_y = rand(-4, 4) - -/obj/item/reagent_containers/food/snacks/grown/ash_flora/shavings //So we can't craft bowls from everything. - -/obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_leaf - name = "mushroom leaf" - desc = "" - icon_state = "mushroom_leaf" - seed = /obj/item/seeds/lavaland/porcini - wine_power = 40 - -/obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_cap - name = "mushroom cap" - desc = "" - icon_state = "mushroom_cap" - seed = /obj/item/seeds/lavaland/inocybe - wine_power = 70 - -/obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_stem - name = "mushroom stem" - desc = "" - icon_state = "mushroom_stem" - seed = /obj/item/seeds/lavaland/ember - wine_power = 60 - -/obj/item/reagent_containers/food/snacks/grown/ash_flora/cactus_fruit - name = "cactus fruit" - desc = "" - icon_state = "cactus_fruit" - seed = /obj/item/seeds/lavaland/cactus - wine_power = 50 - -//SEEDS - -/obj/item/seeds/lavaland - name = "lavaland seeds" - desc = "" - lifespan = 50 - endurance = 25 - maturation = 7 - production = 4 - yield = 4 - potency = 15 - growthstages = 3 - rarity = 20 - reagents_add = list(/datum/reagent/consumable/nutriment = 0.1) - resistance_flags = FIRE_PROOF - -/obj/item/seeds/lavaland/cactus - name = "pack of fruiting cactus seeds" - desc = "" - icon_state = "seed" - species = "cactus" - plantname = "Fruiting Cactus" - product = /obj/item/reagent_containers/food/snacks/grown/ash_flora/cactus_fruit - genes = list(/datum/plant_gene/trait/fire_resistance) - growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi' - growthstages = 2 - reagents_add = list(/datum/reagent/consumable/nutriment/vitamin = 0.04, /datum/reagent/consumable/nutriment = 0.04, /datum/reagent/consumable/vitfro = 0.08) - -/obj/item/seeds/lavaland/polypore - name = "pack of polypore mycelium" - desc = "" - icon_state = "mycelium-polypore" - species = "polypore" - plantname = "Polypore Mushrooms" - product = /obj/item/reagent_containers/food/snacks/grown/ash_flora/shavings - genes = list(/datum/plant_gene/trait/plant_type/fungal_metabolism, /datum/plant_gene/trait/fire_resistance) - growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi' - reagents_add = list(/datum/reagent/consumable/sugar = 0.06, /datum/reagent/consumable/ethanol = 0.04, /datum/reagent/stabilizing_agent = 0.06, /datum/reagent/toxin/minttoxin = 0.02) - -/obj/item/seeds/lavaland/porcini - name = "pack of porcini mycelium" - desc = "" - icon_state = "mycelium-porcini" - species = "porcini" - plantname = "Porcini Mushrooms" - product = /obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_leaf - genes = list(/datum/plant_gene/trait/plant_type/fungal_metabolism, /datum/plant_gene/trait/fire_resistance) - growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi' - reagents_add = list(/datum/reagent/consumable/nutriment = 0.06, /datum/reagent/consumable/vitfro = 0.04, /datum/reagent/drug/nicotine = 0.04) - - -/obj/item/seeds/lavaland/inocybe - name = "pack of inocybe mycelium" - desc = "" - icon_state = "mycelium-inocybe" - species = "inocybe" - plantname = "Inocybe Mushrooms" - product = /obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_cap - genes = list(/datum/plant_gene/trait/plant_type/fungal_metabolism, /datum/plant_gene/trait/fire_resistance) - growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi' - reagents_add = list(/datum/reagent/toxin/mindbreaker = 0.04, /datum/reagent/consumable/entpoly = 0.08, /datum/reagent/drug/mushroomhallucinogen = 0.04) - -/obj/item/seeds/lavaland/ember - name = "pack of embershroom mycelium" - desc = "" - icon_state = "mycelium-ember" - species = "ember" - plantname = "Embershroom Mushrooms" - product = /obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_stem - genes = list(/datum/plant_gene/trait/plant_type/fungal_metabolism, /datum/plant_gene/trait/glow, /datum/plant_gene/trait/fire_resistance) - growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi' - reagents_add = list(/datum/reagent/consumable/tinlux = 0.04, /datum/reagent/consumable/nutriment/vitamin = 0.02, /datum/reagent/drug/space_drugs = 0.02) - -//CRAFTING - -/datum/crafting_recipe/mushroom_bowl - name = "Mushroom Bowl" - result = /obj/item/reagent_containers/glass/bowl/mushroom_bowl - reqs = list(/obj/item/reagent_containers/food/snacks/grown/ash_flora/shavings = 5) - time = 30 - category = CAT_NONE - -/obj/item/reagent_containers/food/snacks/customizable/salad/ashsalad - desc = "" - trash = /obj/item/reagent_containers/glass/bowl/mushroom_bowl - icon = 'icons/obj/lavaland/ash_flora.dmi' - icon_state = "mushroom_bowl" - -/obj/item/reagent_containers/food/snacks/customizable/soup/ashsoup - desc = "" - trash = /obj/item/reagent_containers/glass/bowl/mushroom_bowl - icon = 'icons/obj/lavaland/ash_flora.dmi' - icon_state = "mushroom_soup" - -/obj/item/reagent_containers/glass/bowl/mushroom_bowl - name = "mushroom bowl" - desc = "" - icon = 'icons/obj/lavaland/ash_flora.dmi' - icon_state = "mushroom_bowl" - -/obj/item/reagent_containers/glass/bowl/mushroom_bowl/update_icon() - cut_overlays() - if(reagents && reagents.total_volume) - var/mutable_appearance/filling = mutable_appearance('icons/obj/lavaland/ash_flora.dmi', "fullbowl") - filling.color = mix_color_from_reagents(reagents.reagent_list) - add_overlay(filling) - else - icon_state = "mushroom_bowl" - -/obj/item/reagent_containers/glass/bowl/mushroom_bowl/attackby(obj/item/I,mob/user, params) - if(istype(I, /obj/item/reagent_containers/food/snacks)) - var/obj/item/reagent_containers/food/snacks/S = I - if(I.w_class > WEIGHT_CLASS_SMALL) - to_chat(user, "The ingredient is too big for [src]!") - else if(contents.len >= 20) - to_chat(user, "I can't add more ingredients to [src]!") - else - if(reagents.has_reagent(/datum/reagent/water, 10)) //are we starting a soup or a salad? - var/obj/item/reagent_containers/food/snacks/customizable/A = new/obj/item/reagent_containers/food/snacks/customizable/soup/ashsoup(get_turf(src)) - A.initialize_custom_food(src, S, user) - else - var/obj/item/reagent_containers/food/snacks/customizable/A = new/obj/item/reagent_containers/food/snacks/customizable/salad/ashsalad(get_turf(src)) - A.initialize_custom_food(src, S, user) - else - . = ..() diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm deleted file mode 100644 index 3795bd502c..0000000000 --- a/code/modules/mining/ores_coins.dm +++ /dev/null @@ -1,342 +0,0 @@ - -#define GIBTONITE_QUALITY_HIGH 3 -#define GIBTONITE_QUALITY_MEDIUM 2 -#define GIBTONITE_QUALITY_LOW 1 - -#define ORESTACK_OVERLAYS_MAX 10 - -/**********************Mineral ores**************************/ - -/obj/item/stack/ore - name = "rock" - icon = 'icons/obj/mining.dmi' - icon_state = "ore" - item_state = "ore" - full_w_class = WEIGHT_CLASS_BULKY - singular_name = "ore chunk" - var/points = 0 //How many points this ore gets you from the ore redemption machine - var/refined_type = null //What this ore defaults to being refined into - var/mine_experience = 5 //How much experience do you get for mining this ore? - novariants = TRUE // Ore stacks handle their icon updates themselves to keep the illusion that there's more going - mats_per_stack = 1 - var/list/stack_overlays - -/obj/item/stack/ore/update_icon() - var/difference = min(ORESTACK_OVERLAYS_MAX, amount) - (LAZYLEN(stack_overlays)+1) - if(difference == 0) - return - else if(difference < 0 && LAZYLEN(stack_overlays)) //amount < stack_overlays, remove excess. - cut_overlays() - if (LAZYLEN(stack_overlays)-difference <= 0) - stack_overlays = null; - else - stack_overlays.len += difference - else if(difference > 0) //amount > stack_overlays, add some. - cut_overlays() - for(var/i in 1 to difference) - var/mutable_appearance/newore = mutable_appearance(icon, icon_state) - newore.pixel_x = rand(-8,8) - newore.pixel_y = rand(-8,8) - LAZYADD(stack_overlays, newore) - if (stack_overlays) - add_overlay(stack_overlays) - -/obj/item/stack/ore/welder_act(mob/living/user, obj/item/I) - ..() - if(!refined_type) - return TRUE - - if(I.use_tool(src, user, 0, volume=50, amount=15)) - new refined_type(drop_location()) - use(1) - - return TRUE - -/obj/item/stack/ore/fire_act(added, maxstacks) - . = ..() - if(isnull(refined_type)) - return - else - var/probability = (rand(0,100))/100 - var/burn_value = probability*amount - var/amountrefined = round(burn_value, 1) - if(amountrefined < 1) - qdel(src) - else - new refined_type(drop_location(),amountrefined) - qdel(src) - -/obj/item/stack/ore/uranium - name = "uranium ore" - icon_state = "Uranium ore" - item_state = "Uranium ore" - singular_name = "uranium ore chunk" - points = 30 - material_flags = MATERIAL_NO_EFFECTS - custom_materials = list(/datum/material/uranium=MINERAL_MATERIAL_AMOUNT) - refined_type = /obj/item/stack/sheet/mineral/uranium - mine_experience = 6 - -/obj/item/stack/ore/iron - name = "iron ore" - icon_state = "Iron ore" - item_state = "Iron ore" - singular_name = "iron ore chunk" - points = 1 - custom_materials = list(/datum/material/iron=MINERAL_MATERIAL_AMOUNT) - refined_type = /obj/item/stack/sheet/metal - mine_experience = 1 - -/obj/item/stack/ore/glass - name = "sand pile" - icon_state = "Glass ore" - item_state = "Glass ore" - singular_name = "sand pile" - points = 1 - custom_materials = list(/datum/material/glass=MINERAL_MATERIAL_AMOUNT) - refined_type = /obj/item/stack/sheet/glass - w_class = WEIGHT_CLASS_TINY - mine_experience = 0 //its sand - -GLOBAL_LIST_INIT(sand_recipes, list(\ - new /datum/stack_recipe("sandstone", /obj/item/stack/sheet/mineral/sandstone, 1, 1, 50),\ - new /datum/stack_recipe("aesthetic volcanic floor tile", /obj/item/stack/tile/basalt, 2, 1, 50)\ -)) - -/obj/item/stack/ore/glass/get_main_recipes() - . = ..() - . += GLOB.sand_recipes - -/obj/item/stack/ore/glass/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) - if(..() || !ishuman(hit_atom)) - return - var/mob/living/carbon/human/C = hit_atom - if(C.is_eyes_covered()) - C.visible_message("[C]'s eye protection blocks the sand!", "My eye protection blocks the sand!") - return - C.adjust_blurriness(6) - C.adjustStaminaLoss(15)//the pain from my eyes burning does stamina damage - C.confused += 5 - to_chat(C, "\The [src] gets into my eyes! The pain, it burns!") - qdel(src) - -/obj/item/stack/ore/glass/ex_act(severity, target) - if (severity == EXPLODE_NONE) - return - qdel(src) - -/obj/item/stack/ore/glass/basalt - name = "volcanic ash" - icon_state = "volcanic_sand" - item_state = "volcanic_sand" - singular_name = "volcanic ash pile" - mine_experience = 0 - -/obj/item/stack/ore/plasma - name = "plasma ore" - icon_state = "Plasma ore" - item_state = "Plasma ore" - singular_name = "plasma ore chunk" - points = 15 - custom_materials = list(/datum/material/plasma=MINERAL_MATERIAL_AMOUNT) - refined_type = /obj/item/stack/sheet/mineral/plasma - mine_experience = 5 - -/obj/item/stack/ore/plasma/welder_act(mob/living/user, obj/item/I) - to_chat(user, "I can't hit a high enough temperature to smelt [src] properly!") - return TRUE - - -/obj/item/stack/ore/silver - name = "silver ore" - icon_state = "Silver ore" - item_state = "Silver ore" - singular_name = "silver ore chunk" - points = 16 - mine_experience = 3 - custom_materials = list(/datum/material/silver=MINERAL_MATERIAL_AMOUNT) - refined_type = /obj/item/stack/sheet/mineral/silver - -/obj/item/stack/ore/gold - name = "gold ore" - icon_state = "Gold ore" - item_state = "Gold ore" - singular_name = "gold ore chunk" - points = 18 - mine_experience = 5 - custom_materials = list(/datum/material/gold=MINERAL_MATERIAL_AMOUNT) - refined_type = /obj/item/stack/sheet/mineral/gold - sellprice = 25 - -/obj/item/stack/ore/diamond - name = "diamond ore" - icon_state = "Diamond ore" - item_state = "Diamond ore" - singular_name = "diamond ore chunk" - points = 50 - custom_materials = list(/datum/material/diamond=MINERAL_MATERIAL_AMOUNT) - refined_type = /obj/item/stack/sheet/mineral/diamond - mine_experience = 10 - -/obj/item/stack/ore/bananium - name = "bananium ore" - icon_state = "Bananium ore" - item_state = "Bananium ore" - singular_name = "bananium ore chunk" - points = 60 - custom_materials = list(/datum/material/bananium=MINERAL_MATERIAL_AMOUNT) - refined_type = /obj/item/stack/sheet/mineral/bananium - mine_experience = 15 - -/obj/item/stack/ore/titanium - name = "titanium ore" - icon_state = "Titanium ore" - item_state = "Titanium ore" - singular_name = "titanium ore chunk" - points = 50 - custom_materials = list(/datum/material/titanium=MINERAL_MATERIAL_AMOUNT) - refined_type = /obj/item/stack/sheet/mineral/titanium - mine_experience = 3 - -/obj/item/stack/ore/slag - name = "slag" - desc = "" - icon_state = "slag" - item_state = "slag" - singular_name = "slag chunk" - -/obj/item/stack/ore/Initialize() - . = ..() - pixel_x = rand(0,16)-8 - pixel_y = rand(0,8)-8 - -/obj/item/stack/ore/ex_act(severity, target) - if (!severity || severity >= 2) - return - qdel(src) - - -/*****************************Coin********************************/ - -// The coin's value is a value of it's materials. -// Yes, the gold standard makes a come-back! -// This is the only way to make coins that are possible to produce on station actually worth anything. -/obj/item/coin - icon = 'icons/obj/economy.dmi' - name = "coin" - icon_state = "coin" - flags_1 = CONDUCT_1 - force = 1 - throwforce = 2 - w_class = WEIGHT_CLASS_TINY - custom_materials = list(/datum/material/iron = 400) - material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR - var/list/sideslist = list("heads","tails") - var/cooldown = 0 - var/value - var/coinflip - item_flags = NO_MAT_REDEMPTION //You know, it's kind of a problem that money is worth more extrinsicly than intrinsically in this universe. - -/obj/item/coin/Initialize() - . = ..() - coinflip = pick(sideslist) - icon_state = "coin_[coinflip]" - pixel_x = rand(0,16)-8 - pixel_y = rand(0,8)-8 - -/obj/item/coin/set_custom_materials(list/materials, multiplier = 1) - . = ..() - value = 0 - for(var/i in custom_materials) - var/datum/material/M = i - value += M.value_per_unit * custom_materials[M] - -/obj/item/coin/get_item_credit_value() - return value - -/obj/item/coin/suicide_act(mob/living/user) - user.visible_message("[user] contemplates suicide with \the [src]!") - if (!attack_self(user)) - user.visible_message("[user] couldn't flip \the [src]!") - return SHAME - addtimer(CALLBACK(src, PROC_REF(manual_suicide), user), 10)//10 = time takes for flip animation - return MANUAL_SUICIDE_NONLETHAL - -/obj/item/coin/proc/manual_suicide(mob/living/user) - var/index = sideslist.Find(coinflip) - if (index==2)//tails - user.visible_message("\the [src] lands on [coinflip]! [user] promptly falls over, dead!") - user.adjustOxyLoss(200) - user.death(0) - user.set_suicide(TRUE) - user.suicide_log() - else - user.visible_message("\the [src] lands on [coinflip]! [user] keeps on living!") - -/obj/item/coin/examine(mob/user) - . = ..() - . += "It's worth [value] credit\s." - - - -/obj/item/coin/attack_self(mob/user) - if(cooldown < world.time) - cooldown = world.time + 15 - flick("coin_[coinflip]_flip", src) - coinflip = pick(sideslist) - icon_state = "coin_[coinflip]" - playsound(user.loc, 'sound/blank.ogg', 50, TRUE) - var/oldloc = loc - sleep(15) - if(loc == oldloc && user && !user.incapacitated()) - user.visible_message("[user] has flipped [src]. It lands on [coinflip].", \ - "I flip [src]. It lands on [coinflip].", \ - "I hear the clattering of loose change.") - return TRUE//did the coin flip? useful for suicide_act - -/obj/item/coin/gold - custom_materials = list(/datum/material/gold = 400) - -/obj/item/coin/silver - custom_materials = list(/datum/material/silver = 400) - -/obj/item/coin/diamond - custom_materials = list(/datum/material/diamond = 400) - -/obj/item/coin/plasma - custom_materials = list(/datum/material/plasma = 400) - -/obj/item/coin/uranium - custom_materials = list(/datum/material/uranium = 400) - -/obj/item/coin/titanium - custom_materials = list(/datum/material/titanium = 400) - -/obj/item/coin/bananium - custom_materials = list(/datum/material/bananium = 400) - - -/obj/item/coin/mythril - custom_materials = list(/datum/material/mythril = 400) - -/obj/item/coin/plastic - custom_materials = list(/datum/material/plastic = 400) - -/obj/item/coin/runite - custom_materials = list(/datum/material/runite = 400) - -/obj/item/coin/twoheaded - desc = "" - sideslist = list("heads") - -/obj/item/coin/antagtoken - name = "antag token" - desc = "" - icon_state = "coin_valid" - custom_materials = list(/datum/material/plastic = 400) - sideslist = list("valid", "salad") - material_flags = NONE - -/obj/item/coin/iron - -#undef ORESTACK_OVERLAYS_MAX diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index 13c5535c1e..283ea8ada4 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -501,13 +501,6 @@ GLOBAL_LIST_INIT(roleplay_readme, world.file2list("strings/rt/Lore_Primer.txt")) // add_roundplayed(character.ckey) log_manifest(character.mind.key,character.mind,character,latejoin = TRUE) -/mob/dead/new_player/proc/AddEmploymentContract(mob/living/carbon/human/employee) - //TODO: figure out a way to exclude wizards/nukeops/demons from this. - for(var/C in GLOB.employmentCabinets) - var/obj/structure/filingcabinet/employment/employmentCabinet = C - if(!employmentCabinet.virgin) - employmentCabinet.addFile(employee) - /mob/dead/new_player/proc/LateChoices() var/list/dat = list("
Round Duration: [DisplayTimeText(world.time - SSticker.round_start_time, 1)]
") diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 1e8e92823d..991c7da0f7 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -285,10 +285,6 @@ dat += "
Back: [back ? back : "Nothing"]" - - if(istype(wear_mask, /obj/item/clothing/mask) && istype(back, /obj/item/tank)) - dat += "
[internal ? "Disable Internals" : "Set Internals"]" - if(handcuffed) dat += "
Handcuffed" if(legcuffed) @@ -589,11 +585,10 @@ else if(message) visible_message("[src] pukes!", "I puke!") - if(!isflyperson(src)) - SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "vomit", /datum/mood_event/vomit) - if(iscarbon(src)) - var/mob/living/carbon/C = src - C.add_stress(/datum/stressevent/vomit) + SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "vomit", /datum/mood_event/vomit) + if(iscarbon(src)) + var/mob/living/carbon/C = src + C.add_stress(/datum/stressevent/vomit) else if(NOBLOOD in dna?.species?.species_traits) return TRUE diff --git a/code/modules/mob/living/carbon/carbon_movement.dm b/code/modules/mob/living/carbon/carbon_movement.dm index c1c1203b3c..3977d54eee 100644 --- a/code/modules/mob/living/carbon/carbon_movement.dm +++ b/code/modules/mob/living/carbon/carbon_movement.dm @@ -11,11 +11,6 @@ if(!isturf(loc)) return 0 - // Do we have a jetpack implant (and is it on)? - var/obj/item/organ/cyberimp/chest/thrusters/T = getorganslot(ORGAN_SLOT_THRUSTERS) - if(istype(T) && movement_dir && T.allow_thrust(0.01)) - return 1 - /mob/living/carbon/Move(NewLoc, direct) . = ..() if(. && !(movement_type & FLOATING)) //floating is easy diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 4e2a43f9d3..15bb68ae3f 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -495,13 +495,6 @@ if(R) . += "Rank: [R.fields["rank"]]\n\[Front photo\]\[Side photo\]" if(HAS_TRAIT(user, TRAIT_MEDICAL_HUD)) - var/cyberimp_detect - for(var/obj/item/organ/cyberimp/CI in internal_organs) - if(CI.status == ORGAN_ROBOTIC && !CI.syndicate_implant) - cyberimp_detect += "[name] is modified with a [CI.name]." - if(cyberimp_detect) - . += "Detected cybernetic modifications:" - . += cyberimp_detect if(R) var/health_r = R.fields["p_stat"] . += "\[[health_r]\]" diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 3cee38ceb4..a0a4cd68e6 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -141,9 +141,6 @@ /mob/living/carbon/human/prepare_data_huds() //Update med hud images... ..() - //...sec hud images... - sec_hud_set_implants() - sec_hud_set_security_status() //...and display them. add_to_all_human_data_huds() @@ -948,129 +945,21 @@ /mob/living/carbon/human/species/felinid race = /datum/species/human/felinid -/mob/living/carbon/human/species/fly - race = /datum/species/fly - -/mob/living/carbon/human/species/golem - race = /datum/species/golem - -/mob/living/carbon/human/species/golem/random - race = /datum/species/golem/random - -/mob/living/carbon/human/species/golem/adamantine - race = /datum/species/golem/adamantine - -/mob/living/carbon/human/species/golem/plasma - race = /datum/species/golem/plasma - -/mob/living/carbon/human/species/golem/diamond - race = /datum/species/golem/diamond - -/mob/living/carbon/human/species/golem/gold - race = /datum/species/golem/gold - -/mob/living/carbon/human/species/golem/silver - race = /datum/species/golem/silver - -/mob/living/carbon/human/species/golem/plasteel - race = /datum/species/golem/plasteel - -/mob/living/carbon/human/species/golem/titanium - race = /datum/species/golem/titanium - -/mob/living/carbon/human/species/golem/plastitanium - race = /datum/species/golem/plastitanium - -/mob/living/carbon/human/species/golem/alien_alloy - race = /datum/species/golem/alloy - -/mob/living/carbon/human/species/golem/wood - race = /datum/species/golem/wood - -/mob/living/carbon/human/species/golem/uranium - race = /datum/species/golem/uranium - -/mob/living/carbon/human/species/golem/sand - race = /datum/species/golem/sand - -/mob/living/carbon/human/species/golem/glass - race = /datum/species/golem/glass - -/mob/living/carbon/human/species/golem/bluespace - race = /datum/species/golem/bluespace - -/mob/living/carbon/human/species/golem/bananium - race = /datum/species/golem/bananium - -/mob/living/carbon/human/species/golem/blood_cult - race = /datum/species/golem/runic - -/mob/living/carbon/human/species/golem/cloth - race = /datum/species/golem/cloth - -/mob/living/carbon/human/species/golem/plastic - race = /datum/species/golem/plastic - -/mob/living/carbon/human/species/golem/bronze - race = /datum/species/golem/bronze - -/mob/living/carbon/human/species/golem/cardboard - race = /datum/species/golem/cardboard - -/mob/living/carbon/human/species/golem/leather - race = /datum/species/golem/leather - -/mob/living/carbon/human/species/golem/bone - race = /datum/species/golem/bone - -/mob/living/carbon/human/species/golem/durathread - race = /datum/species/golem/durathread - -/mob/living/carbon/human/species/golem/snow - race = /datum/species/golem/snow - -/mob/living/carbon/human/species/golem/capitalist - race = /datum/species/golem/capitalist - -/mob/living/carbon/human/species/golem/soviet - race = /datum/species/golem/soviet - /mob/living/carbon/human/species/lizard race = /datum/species/lizard /mob/living/carbon/human/species/ethereal race = /datum/species/ethereal -/mob/living/carbon/human/species/moth - race = /datum/species/moth - -/mob/living/carbon/human/species/mush - race = /datum/species/mush - -/mob/living/carbon/human/species/plasma - race = /datum/species/plasmaman - -/mob/living/carbon/human/species/pod - race = /datum/species/pod - /mob/living/carbon/human/species/shadow race = /datum/species/shadow /mob/living/carbon/human/species/shadow/nightmare race = /datum/species/shadow/nightmare -//mob/living/carbon/human/species/skeleton -// race = /datum/species/skeleton - /mob/living/carbon/human/species/snail race = /datum/species/snail -/mob/living/carbon/human/species/synth - race = /datum/species/synth - -/mob/living/carbon/human/species/synth/military - race = /datum/species/synth/military - /mob/living/carbon/human/species/vampire race = /datum/species/vampire diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 55931f7139..af524ca8e5 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -400,8 +400,6 @@ brute_loss = 30*(2 - round(bomb_armor*0.01, 0.05)) burn_loss = brute_loss //damage gets reduced from 120 to up to 60 combined brute+burn damage_clothes(100 - bomb_armor, BRUTE, "bomb") -// if (!istype(ears, /obj/item/clothing/ears/earmuffs)) -// adjustEarDamage(30, 120) Unconscious(20) //short amount of time for follow up attacks against elusive enemies like wizards Knockdown(200 - (bomb_armor * 1.6)) //between ~4 and ~20 seconds of knockdown depending on bomb armor @@ -409,9 +407,6 @@ brute_loss = 5 if(bomb_armor) brute_loss = 5*(2 - round(bomb_armor*0.01, 0.05)) -// damage_clothes(max(50 - bomb_armor, 0), BRUTE, "bomb") -// if (!istype(ears, /obj/item/clothing/ears/earmuffs)) -// adjustEarDamage(15,60) Knockdown(160 - (bomb_armor * 1.6)) //100 bomb armor will prevent knockdown altogether take_overall_damage(brute_loss,burn_loss) diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index 4432e0aff6..da2bf4a5de 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -360,12 +360,8 @@ /mob/living/carbon/human/wear_mask_update(obj/item/I, toggle_off = 1) if((I.flags_inv & (HIDEHAIR|HIDEFACIALHAIR)) || (initial(I.flags_inv) & (HIDEHAIR|HIDEFACIALHAIR))) update_hair() - if(toggle_off && internal && !getorganslot(ORGAN_SLOT_BREATHING_TUBE)) - update_internals_hud_icon(0) - internal = null if(I.flags_inv & HIDEEYES) update_inv_glasses() - sec_hud_set_security_status() ..() /mob/living/carbon/human/head_update(obj/item/I, forced) @@ -379,7 +375,6 @@ update_inv_glasses() if(I.flags_inv & HIDEEARS || forced) update_body() - sec_hud_set_security_status() ..() /mob/living/carbon/human/proc/equipOutfit(outfit, visualsOnly = FALSE) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 76bf8f86e0..3ec687e037 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -154,39 +154,6 @@ if(!dna || !dna.species.handle_mutations_and_radiation(src)) ..() -/mob/living/carbon/human/breathe() - if(!dna.species.breathe(src)) - ..() - -/mob/living/carbon/human/check_breath(datum/gas_mixture/breath) - - var/L = getorganslot(ORGAN_SLOT_LUNGS) - - if(!L) - if(health >= crit_threshold) - adjustOxyLoss(HUMAN_MAX_OXYLOSS + 1) - else if(!HAS_TRAIT(src, TRAIT_NOCRITDAMAGE)) - adjustOxyLoss(HUMAN_CRIT_MAX_OXYLOSS) - - failed_last_breath = 1 - - var/datum/species/S = dna.species - - if(S.breathid == "o2") - throw_alert("not_enough_oxy", /atom/movable/screen/alert/not_enough_oxy) - else if(S.breathid == "tox") - throw_alert("not_enough_tox", /atom/movable/screen/alert/not_enough_tox) - else if(S.breathid == "co2") - throw_alert("not_enough_co2", /atom/movable/screen/alert/not_enough_co2) - else if(S.breathid == "n2") - throw_alert("not_enough_nitro", /atom/movable/screen/alert/not_enough_nitro) - - return FALSE - else - if(istype(L, /obj/item/organ/lungs)) - var/obj/item/organ/lungs/lun = L - lun.check_breath(breath,src) - /mob/living/carbon/human/handle_environment(datum/gas_mixture/environment) dna.species.handle_environment(environment, src) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index bb62a1d59d..641ed4636a 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -2474,12 +2474,6 @@ GLOBAL_LIST_EMPTY(roundstart_races) return 1 /datum/species/proc/on_hit(obj/projectile/P, mob/living/carbon/human/H) - // called when hit by a projectile - switch(P.type) - if(/obj/projectile/energy/floramut) // overwritten by plants/pods - H.show_message(span_notice("The radiation beam dissipates harmlessly through my body.")) - if(/obj/projectile/energy/florayield) - H.show_message(span_notice("The radiation beam dissipates harmlessly through my body.")) /datum/species/proc/bullet_act(obj/projectile/P, mob/living/carbon/human/H, def_zone = BODY_ZONE_CHEST) // called before a projectile hit @@ -2493,15 +2487,6 @@ GLOBAL_LIST_EMPTY(roundstart_races) /obj/item/proc/blockproj(mob/living/carbon/human/H) return -///////////// -//BREATHING// -///////////// - -/datum/species/proc/breathe(mob/living/carbon/human/H) - if(HAS_TRAIT(H, TRAIT_NOBREATH)) - return TRUE - - /datum/species/proc/handle_environment(datum/gas_mixture/environment, mob/living/carbon/human/H) if(!environment) return diff --git a/code/modules/mob/living/carbon/human/species_types/flypeople.dm b/code/modules/mob/living/carbon/human/species_types/flypeople.dm deleted file mode 100644 index 6427fa57e2..0000000000 --- a/code/modules/mob/living/carbon/human/species_types/flypeople.dm +++ /dev/null @@ -1,36 +0,0 @@ -/datum/species/fly - name = "Flyperson" - id = "fly" - say_mod = "buzzes" - species_traits = list(NOEYESPRITES) - inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_BUG - mutanttongue = /obj/item/organ/tongue/fly - mutantliver = /obj/item/organ/liver/fly - mutantstomach = /obj/item/organ/stomach/fly - meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/fly - disliked_food = null - liked_food = GROSS - changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | SLIME_EXTRACT - -/datum/species/fly/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H) - if(chem.type == /datum/reagent/toxin/pestkiller) - H.adjustToxLoss(3) - H.reagents.remove_reagent(chem.type, REAGENTS_METABOLISM) - return 1 - - -/datum/species/fly/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H) - if(istype(chem, /datum/reagent/consumable)) - var/datum/reagent/consumable/nutri_check = chem - if(nutri_check.nutriment_factor > 0) - var/turf/pos = get_turf(H) - H.vomit(0, FALSE, FALSE, 2, TRUE) - playsound(pos, 'sound/blank.ogg', 50, TRUE) - H.visible_message("[H] vomits on the floor!", \ - "I throw up on the floor!") - ..() - -/datum/species/fly/check_species_weakness(obj/item/weapon, mob/living/attacker) - if(istype(weapon, /obj/item/melee/flyswatter)) - return 29 //Flyswatters deal 30x damage to flypeople. - return 0 diff --git a/code/modules/mob/living/carbon/human/species_types/golems.dm b/code/modules/mob/living/carbon/human/species_types/golems.dm deleted file mode 100644 index 46d2d23dff..0000000000 --- a/code/modules/mob/living/carbon/human/species_types/golems.dm +++ /dev/null @@ -1,1128 +0,0 @@ -/datum/species/golem - // Animated beings of stone. They have increased defenses, and do not need to breathe. They're also slow as fuuuck. - name = "Golem" - id = "iron golem" - species_traits = list(NOBLOOD,MUTCOLORS,NO_UNDERWEAR) - inherent_traits = list(TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOFIRE,TRAIT_CHUNKYFINGERS,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER) - inherent_biotypes = MOB_HUMANOID|MOB_MINERAL - mutant_organs = list(/obj/item/organ/adamantine_resonator) - speedmod = 2 - armor = 55 - siemens_coeff = 0 - punchdamagelow = 5 - punchdamagehigh = 14 - punchstunthreshold = 11 //about 40% chance to stun - no_equip = list(SLOT_WEAR_MASK, SLOT_ARMOR, SLOT_GLOVES, SLOT_SHOES, SLOT_PANTS, SLOT_S_STORE) - nojumpsuit = 1 - changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC - sexes = 1 - damage_overlay_type = "" - meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/golem - // To prevent golem subtypes from overwhelming the odds when random species - // changes, only the Random Golem type can be chosen - limbs_id = "golem" - fixed_mut_color = "aaa" - var/info_text = "As an Iron Golem, you don't have any special traits." - var/random_eligible = TRUE //If false, the golem subtype can't be made through golem mutation toxin - - var/prefix = "Iron" - var/list/special_names = list("Tarkus") - var/human_surname_chance = 3 - var/special_name_chance = 5 - var/owner //dobby is a free golem - -/datum/species/golem/random_name(gender,unique,lastname) - var/golem_surname = pick(GLOB.golem_names) - // 3% chance that our golem has a human surname, because - // cultural contamination - if(prob(human_surname_chance)) - golem_surname = pick(GLOB.last_names) - else if(special_names && special_names.len && prob(special_name_chance)) - golem_surname = pick(special_names) - - var/golem_name = "[prefix] [golem_surname]" - return golem_name - -/datum/species/golem/random - name = "Random Golem" - changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP - var/static/list/random_golem_types - -/datum/species/golem/random/on_species_gain(mob/living/carbon/C, datum/species/old_species) - ..() - if(!random_golem_types) - random_golem_types = subtypesof(/datum/species/golem) - type - for(var/V in random_golem_types) - var/datum/species/golem/G = V - if(!initial(G.random_eligible)) - random_golem_types -= G - var/datum/species/golem/golem_type = pick(random_golem_types) - var/mob/living/carbon/human/H = C - H.set_species(golem_type) - to_chat(H, "[initial(golem_type.info_text)]") - -/datum/species/golem/adamantine - name = "Adamantine Golem" - id = "adamantine golem" - meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/golem/adamantine - mutant_organs = list(/obj/item/organ/adamantine_resonator, /obj/item/organ/vocal_cords/adamantine) - fixed_mut_color = "4ed" - info_text = "As an Adamantine Golem, you possess special vocal cords allowing you to \"resonate\" messages to all golems. Your unique mineral makeup makes you immune to most types of magic." - prefix = "Adamantine" - special_names = null - -/datum/species/golem/adamantine/on_species_gain(mob/living/carbon/C, datum/species/old_species) - ..() - ADD_TRAIT(C, TRAIT_ANTIMAGIC, SPECIES_TRAIT) - -/datum/species/golem/adamantine/on_species_loss(mob/living/carbon/C) - REMOVE_TRAIT(C, TRAIT_ANTIMAGIC, SPECIES_TRAIT) - ..() - -//The suicide bombers of golemkind -/datum/species/golem/plasma - name = "Plasma Golem" - id = "plasma golem" - fixed_mut_color = "a3d" - meat = /obj/item/stack/ore/plasma - //Can burn and takes damage from heat - inherent_traits = list(TRAIT_NOBREATH, TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_CHUNKYFINGERS,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER) //no RESISTHEAT, NOFIRE - info_text = "As a Plasma Golem, you burn easily. Be careful, if you get hot enough while burning, you'll blow up!" - heatmod = 0 //fine until they blow up - prefix = "Plasma" - special_names = list("Flood","Fire","Bar","Man") - var/boom_warning = FALSE - var/datum/action/innate/ignite/ignite - -/datum/species/golem/plasma/spec_life(mob/living/carbon/human/H) - if(H.bodytemperature > 750) - if(!boom_warning && H.on_fire) - to_chat(H, "I feel like you could blow up at any moment!") - boom_warning = TRUE - else - if(boom_warning) - to_chat(H, "I feel more stable.") - boom_warning = FALSE - - if(H.bodytemperature > 850 && H.on_fire && prob(25)) - explosion(get_turf(H),1,2,4,flame_range = 5) - if(H) - H.gib() - if(H.fire_stacks < 2) //flammable - H.adjust_fire_stacks(1) - ..() - -/datum/species/golem/plasma/on_species_gain(mob/living/carbon/C, datum/species/old_species) - ..() - if(ishuman(C)) - ignite = new - ignite.Grant(C) - -/datum/species/golem/plasma/on_species_loss(mob/living/carbon/C) - if(ignite) - ignite.Remove(C) - ..() - -/datum/action/innate/ignite - name = "Ignite" - desc = "" - check_flags = AB_CHECK_CONSCIOUS - button_icon_state = "sacredflame" - -/datum/action/innate/ignite/Activate() - if(ishuman(owner)) - var/mob/living/carbon/human/H = owner - if(H.fire_stacks) - to_chat(owner, "I ignite yourself!") - else - to_chat(owner, "I try to ignite yourself, but fail!") - H.IgniteMob() //firestacks are already there passively - -//Harder to hurt -/datum/species/golem/diamond - name = "Diamond Golem" - id = "diamond golem" - fixed_mut_color = "0ff" - armor = 70 //up from 55 - meat = /obj/item/stack/ore/diamond - info_text = "As a Diamond Golem, you are more resistant than the average golem." - prefix = "Diamond" - special_names = list("Back","Grill") - -//Faster but softer and less armoured -/datum/species/golem/gold - name = "Gold Golem" - id = "gold golem" - fixed_mut_color = "cc0" - speedmod = 1 - armor = 25 //down from 55 - meat = /obj/item/stack/ore/gold - info_text = "As a Gold Golem, you are faster but less resistant than the average golem." - prefix = "Golden" - special_names = list("Boy") - -//Heavier, thus higher chance of stunning when punching -/datum/species/golem/silver - name = "Silver Golem" - id = "silver golem" - fixed_mut_color = "ddd" - punchstunthreshold = 9 //60% chance, from 40% - meat = /obj/item/stack/ore/silver - info_text = "As a Silver Golem, my attacks have a higher chance of stunning. Being made of silver, my body is immune to most types of magic." - prefix = "Silver" - special_names = list("Surfer", "Chariot", "Lining") - -/datum/species/golem/silver/on_species_gain(mob/living/carbon/C, datum/species/old_species) - ..() - ADD_TRAIT(C, TRAIT_HOLY, SPECIES_TRAIT) - -/datum/species/golem/silver/on_species_loss(mob/living/carbon/C) - REMOVE_TRAIT(C, TRAIT_HOLY, SPECIES_TRAIT) - ..() - -//Harder to stun, deals more damage, massively slowpokes, but gravproof and obstructive. Basically, The Wall. -/datum/species/golem/plasteel - name = "Plasteel Golem" - id = "plasteel golem" - fixed_mut_color = "bbb" - stunmod = 0.4 - punchdamagelow = 12 - punchdamagehigh = 21 - punchstunthreshold = 18 //still 40% stun chance - speedmod = 4 //pretty fucking slow - meat = /obj/item/stack/ore/iron - info_text = "As a Plasteel Golem, you are slower, but harder to stun, and hit very hard when punching. You also magnetically attach to surfaces and so don't float without gravity and cannot have positions swapped with other beings." - attack_verb = "smash" - attack_sound = 'sound/blank.ogg' //hits pretty hard - prefix = "Plasteel" - special_names = null - -/datum/species/golem/plasteel/negates_gravity(mob/living/carbon/human/H) - return TRUE - -/datum/species/golem/plasteel/on_species_gain(mob/living/carbon/C, datum/species/old_species) - ..() - ADD_TRAIT(C, TRAIT_NOMOBSWAP, SPECIES_TRAIT) //THE WALL THE WALL THE WALL - -/datum/species/golem/plasteel/on_species_loss(mob/living/carbon/C) - REMOVE_TRAIT(C, TRAIT_NOMOBSWAP, SPECIES_TRAIT) //NOTHING ON ERF CAN MAKE IT FALL - ..() - -//Immune to ash storms -/datum/species/golem/titanium - name = "Titanium Golem" - id = "titanium golem" - fixed_mut_color = "fff" - meat = /obj/item/stack/ore/titanium - info_text = "As a Titanium Golem, you are immune to ash storms, and slightly more resistant to burn damage." - burnmod = 0.9 - prefix = "Titanium" - special_names = list("Dioxide") - -/datum/species/golem/titanium/on_species_gain(mob/living/carbon/C, datum/species/old_species) - . = ..() - C.weather_immunities |= "ash" - -/datum/species/golem/titanium/on_species_loss(mob/living/carbon/C) - . = ..() - C.weather_immunities -= "ash" - -//Immune to ash storms and lava -/datum/species/golem/plastitanium - name = "Plastitanium Golem" - id = "plastitanium golem" - fixed_mut_color = "888" - meat = /obj/item/stack/ore/titanium - info_text = "As a Plastitanium Golem, you are immune to both ash storms and lava, and slightly more resistant to burn damage." - burnmod = 0.8 - prefix = "Plastitanium" - special_names = null - -/datum/species/golem/plastitanium/on_species_gain(mob/living/carbon/C, datum/species/old_species) - . = ..() - C.weather_immunities |= "lava" - C.weather_immunities |= "ash" - -/datum/species/golem/plastitanium/on_species_loss(mob/living/carbon/C) - . = ..() - C.weather_immunities -= "ash" - C.weather_immunities -= "lava" - -//Regenerates because self-repairing super-advanced alien tech -/datum/species/golem/alloy/spec_life(mob/living/carbon/human/H) - if(H.stat == DEAD) - return - H.heal_overall_damage(2,2, 0, BODYPART_ORGANIC) - H.adjustToxLoss(-2) - H.adjustOxyLoss(-2) - -//Since this will usually be created from a collaboration between podpeople and free golems, wood golems are a mix between the two races -/datum/species/golem/wood - name = "Wood Golem" - id = "wood golem" - fixed_mut_color = "9E704B" - meat = /obj/item/stack/sheet/mineral/wood - //Can burn and take damage from heat - inherent_traits = list(TRAIT_NOBREATH, TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_CHUNKYFINGERS,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER) - armor = 30 - burnmod = 1.25 - heatmod = 1.5 - info_text = "As a Wooden Golem, you have plant-like traits: you take damage from extreme temperatures, can be set on fire, and have lower armor than a normal golem. You regenerate when in the light and wither in the darkness." - prefix = "Wooden" - special_names = list("Bark", "Willow", "Catalpa", "Woody", "Oak", "Sap", "Twig", "Branch", "Maple", "Birch", "Elm", "Basswood", "Cottonwood", "Larch", "Aspen", "Ash", "Beech", "Buckeye", "Cedar", "Chestnut", "Cypress", "Fir", "Hawthorn", "Hazel", "Hickory", "Ironwood", "Juniper", "Leaf", "Mangrove", "Palm", "Pawpaw", "Pine", "Poplar", "Redwood", "Redbud", "Sassafras", "Spruce", "Sumac", "Trunk", "Walnut", "Yew") - human_surname_chance = 0 - special_name_chance = 100 - inherent_factions = list("plants", "vines") - -/datum/species/golem/wood/spec_life(mob/living/carbon/human/H) - if(H.stat == DEAD) - return - var/light_amount = 0 //how much light there is in the place, affects receiving nutrition and healing - if(isturf(H.loc)) //else, there's considered to be no light - var/turf/T = H.loc - light_amount = min(1,T.get_lumcount()) - 0.5 - H.adjust_nutrition(light_amount * 10) - if(H.nutrition > NUTRITION_LEVEL_ALMOST_FULL) - H.set_nutrition(NUTRITION_LEVEL_ALMOST_FULL) - if(light_amount > 0.2) //if there's enough light, heal - H.heal_overall_damage(1,1,0, BODYPART_ORGANIC) - H.adjustToxLoss(-1) - H.adjustOxyLoss(-1) - - if(H.nutrition < NUTRITION_LEVEL_STARVING + 50) - H.take_overall_damage(2,0) - -/datum/species/golem/wood/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H) - if(chem.type == /datum/reagent/toxin/plantbgone) - H.adjustToxLoss(3) - H.reagents.remove_reagent(chem.type, REAGENTS_METABOLISM) - return 1 - -//Radioactive -/datum/species/golem/uranium - name = "Uranium Golem" - id = "uranium golem" - fixed_mut_color = "7f0" - meat = /obj/item/stack/ore/uranium - info_text = "As an Uranium Golem, you emit radiation pulses every once in a while. It won't harm fellow golems, but organic lifeforms will be affected." - - var/last_event = 0 - var/active = null - prefix = "Uranium" - special_names = list("Oxide", "Rod", "Meltdown", "235") - -/datum/species/golem/uranium/spec_life(mob/living/carbon/human/H) - if(!active) - if(world.time > last_event+30) - active = 1 - radiation_pulse(H, 50) - last_event = world.time - active = null - ..() - -//Immune to physical bullets and resistant to brute, but very vulnerable to burn damage. Dusts on death. -/datum/species/golem/sand - name = "Sand Golem" - id = "sand golem" - fixed_mut_color = "ffdc8f" - meat = /obj/item/stack/ore/glass //this is sand - armor = 0 - burnmod = 3 //melts easily - brutemod = 0.25 - info_text = "As a Sand Golem, you are immune to physical bullets and take very little brute damage, but are extremely vulnerable to burn damage and energy weapons. You will also turn to sand when dying, preventing any form of recovery." - attack_sound = 'sound/blank.ogg' - prefix = "Sand" - special_names = list("Castle", "Bag", "Dune", "Worm", "Storm") - -/datum/species/golem/sand/spec_death(gibbed, mob/living/carbon/human/H) - H.visible_message("[H] turns into a pile of sand!") - for(var/obj/item/W in H) - H.dropItemToGround(W) - for(var/i=1, i <= rand(3,5), i++) - new /obj/item/stack/ore/glass(get_turf(H)) - qdel(H) - -/datum/species/golem/sand/bullet_act(obj/projectile/P, mob/living/carbon/human/H) - if(!(P.original == H && P.firer == H)) - if(P.flag == "bullet" || P.flag == "bomb") - playsound(H, 'sound/blank.ogg', 70, TRUE) - H.visible_message("The [P.name] sinks harmlessly in [H]'s sandy body!", \ - "The [P.name] sinks harmlessly in [H]'s sandy body!") - return BULLET_ACT_BLOCK - return ..() - -//Reflects lasers and resistant to burn damage, but very vulnerable to brute damage. Shatters on death. -/datum/species/golem/glass - name = "Glass Golem" - id = "glass golem" - fixed_mut_color = "5a96b4aa" //transparent body - meat = /obj/item/shard - armor = 0 - brutemod = 3 //very fragile - burnmod = 0.25 - info_text = "As a Glass Golem, you reflect lasers and energy weapons, and are very resistant to burn damage. However, you are extremely vulnerable to brute damage. On death, you'll shatter beyond any hope of recovery." - attack_sound = 'sound/blank.ogg' - prefix = "Glass" - special_names = list("Lens", "Prism", "Fiber", "Bead") - -/datum/species/golem/glass/spec_death(gibbed, mob/living/carbon/human/H) - playsound(H, "shatter", 70, TRUE) - H.visible_message("[H] shatters!") - for(var/obj/item/W in H) - H.dropItemToGround(W) - for(var/i=1, i <= rand(3,5), i++) - new /obj/item/shard(get_turf(H)) - qdel(H) - -/datum/species/golem/glass/bullet_act(obj/projectile/P, mob/living/carbon/human/H) - if(!(P.original == H && P.firer == H)) //self-shots don't reflect - if(P.flag == "laser" || P.flag == "energy") - H.visible_message("The [P.name] gets reflected by [H]'s glass skin!", \ - "The [P.name] gets reflected by [H]'s glass skin!") - if(P.starting) - var/new_x = P.starting.x + pick(0, 0, 0, 0, 0, -1, 1, -2, 2) - var/new_y = P.starting.y + pick(0, 0, 0, 0, 0, -1, 1, -2, 2) - // redirect the projectile - P.firer = H - P.preparePixelProjectile(locate(CLAMP(new_x, 1, world.maxx), CLAMP(new_y, 1, world.maxy), H.z), H) - return BULLET_ACT_FORCE_PIERCE - return ..() - -//Teleports when hit or when it wants to -/datum/species/golem/bluespace - name = "Bluespace Golem" - id = "bluespace golem" - fixed_mut_color = "33f" - meat = /obj/item/stack/ore/bluespace_crystal - info_text = "As a Bluespace Golem, you are spatially unstable: You will teleport when hit, and you can teleport manually at a long distance." - attack_verb = "bluespace punch" - attack_sound = 'sound/blank.ogg' - prefix = "Bluespace" - special_names = list("Crystal", "Polycrystal") - - var/datum/action/innate/unstable_teleport/unstable_teleport - var/teleport_cooldown = 100 - var/last_teleport = 0 - -/datum/species/golem/bluespace/proc/reactive_teleport(mob/living/carbon/human/H) - H.visible_message("[H] teleports!", "I destabilize and teleport!") - new /obj/effect/particle_effect/sparks(get_turf(H)) - playsound(get_turf(H), "sparks", 50, TRUE) - do_teleport(H, get_turf(H), 6, asoundin = 'sound/blank.ogg', channel = TELEPORT_CHANNEL_BLUESPACE) - last_teleport = world.time - -/datum/species/golem/bluespace/spec_hitby(atom/movable/AM, mob/living/carbon/human/H) - ..() - var/obj/item/I - if(istype(AM, /obj/item)) - I = AM - if(I.thrownby == H) //No throwing stuff at myself to trigger the teleport - return 0 - else - reactive_teleport(H) - -/datum/species/golem/bluespace/spec_attack_hand(mob/living/carbon/human/M, mob/living/carbon/human/H, datum/martial_art/attacker_style) - ..() - if(world.time > last_teleport + teleport_cooldown && M != H && M.used_intent.type != INTENT_HELP) - reactive_teleport(H) - -/datum/species/golem/bluespace/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, intent, mob/living/carbon/human/H) - ..() - if(world.time > last_teleport + teleport_cooldown && user != H) - reactive_teleport(H) - -/datum/species/golem/bluespace/on_hit(obj/projectile/P, mob/living/carbon/human/H) - ..() - if(world.time > last_teleport + teleport_cooldown) - reactive_teleport(H) - -/datum/species/golem/bluespace/on_species_gain(mob/living/carbon/C, datum/species/old_species) - ..() - if(ishuman(C)) - unstable_teleport = new - unstable_teleport.Grant(C) - last_teleport = world.time - -/datum/species/golem/bluespace/on_species_loss(mob/living/carbon/C) - if(unstable_teleport) - unstable_teleport.Remove(C) - ..() - -/datum/action/innate/unstable_teleport - name = "Unstable Teleport" - check_flags = AB_CHECK_CONSCIOUS - button_icon_state = "jaunt" - icon_icon = 'icons/mob/actions/actions_spells.dmi' - var/cooldown = 150 - var/last_teleport = 0 - -/datum/action/innate/unstable_teleport/IsAvailable() - if(..()) - if(world.time > last_teleport + cooldown) - return 1 - return 0 - -/datum/action/innate/unstable_teleport/Activate() - var/mob/living/carbon/human/H = owner - H.visible_message("[H] starts vibrating!", "I start charging my bluespace core...") - playsound(get_turf(H), 'sound/blank.ogg', 25, TRUE) - addtimer(CALLBACK(src, PROC_REF(teleport), H), 15) - -/datum/action/innate/unstable_teleport/proc/teleport(mob/living/carbon/human/H) - H.visible_message("[H] disappears in a shower of sparks!", "I teleport!") - var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread - spark_system.set_up(10, 0, src) - spark_system.attach(H) - spark_system.start() - do_teleport(H, get_turf(H), 12, asoundin = 'sound/blank.ogg', channel = TELEPORT_CHANNEL_BLUESPACE) - last_teleport = world.time - UpdateButtonIcon() //action icon looks unavailable - //action icon looks available again - addtimer(CALLBACK(src, PROC_REF(UpdateButtonIcon)), cooldown + 5) - - -//honk -/datum/species/golem/bananium - name = "Bananium Golem" - id = "bananium golem" - fixed_mut_color = "ff0" - say_mod = "honks" - punchdamagelow = 0 - punchdamagehigh = 1 - punchstunthreshold = 2 //Harmless and can't stun - meat = /obj/item/stack/ore/bananium - info_text = "As a Bananium Golem, you are made for pranking. Your body emits natural honks, and you can barely even hurt people when punching them. Your skin also bleeds banana peels when damaged." - attack_verb = "honk" - attack_sound = 'sound/blank.ogg' - prefix = "Bananium" - special_names = null - - var/last_honk = 0 - var/honkooldown = 0 - var/last_banana = 0 - var/banana_cooldown = 100 - var/active = null - -/datum/species/golem/bananium/on_species_gain(mob/living/carbon/C, datum/species/old_species) - ..() - last_banana = world.time - last_honk = world.time - RegisterSignal(C, COMSIG_MOB_SAY, PROC_REF(handle_speech)) - -/datum/species/golem/bananium/on_species_loss(mob/living/carbon/C) - . = ..() - UnregisterSignal(C, COMSIG_MOB_SAY) - -/datum/species/golem/bananium/random_name(gender,unique,lastname) - var/clown_name = pick(GLOB.clown_names) - var/golem_name = "[uppertext(clown_name)]" - return golem_name - -/datum/species/golem/bananium/spec_attack_hand(mob/living/carbon/human/M, mob/living/carbon/human/H, datum/martial_art/attacker_style) - ..() - if(world.time > last_banana + banana_cooldown && M != H && M.used_intent.type != INTENT_HELP) - new/obj/item/grown/bananapeel/specialpeel(get_turf(H)) - last_banana = world.time - -/datum/species/golem/bananium/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, intent, mob/living/carbon/human/H) - ..() - if(world.time > last_banana + banana_cooldown && user != H) - new/obj/item/grown/bananapeel/specialpeel(get_turf(H)) - last_banana = world.time - -/datum/species/golem/bananium/on_hit(obj/projectile/P, mob/living/carbon/human/H) - ..() - if(world.time > last_banana + banana_cooldown) - new/obj/item/grown/bananapeel/specialpeel(get_turf(H)) - last_banana = world.time - -/datum/species/golem/bananium/spec_hitby(atom/movable/AM, mob/living/carbon/human/H) - ..() - var/obj/item/I - if(istype(AM, /obj/item)) - I = AM - if(I.thrownby == H) //No throwing stuff at myself to make bananas - return 0 - else - new/obj/item/grown/bananapeel/specialpeel(get_turf(H)) - last_banana = world.time - -/datum/species/golem/bananium/spec_life(mob/living/carbon/human/H) - if(!active) - if(world.time > last_honk + honkooldown) - active = 1 - playsound(get_turf(H), 'sound/blank.ogg', 50, TRUE) - last_honk = world.time - honkooldown = rand(20, 80) - active = null - ..() - -/datum/species/golem/bananium/spec_death(gibbed, mob/living/carbon/human/H) - playsound(get_turf(H), 'sound/blank.ogg', 70, FALSE) - -/datum/species/golem/bananium/handle_speech(datum/source, list/speech_args) - speech_args[SPEECH_SPANS] |= SPAN_CLOWN - -/datum/species/golem/runic - name = "Runic Golem" - id = "runic golem" - limbs_id = "cultgolem" - sexes = FALSE - info_text = "As a Runic Golem, you possess eldritch powers granted by the Elder Goddess Nar'Sie." - species_traits = list(NOBLOOD,NO_UNDERWEAR,NOEYESPRITES) //no mutcolors - inherent_traits = list(TRAIT_NOFLASH,TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOFIRE,TRAIT_CHUNKYFINGERS,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER) - inherent_biotypes = MOB_HUMANOID|MOB_MINERAL - prefix = "Runic" - special_names = null - inherent_factions = list("cult") - - var/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift/golem/phase_shift - var/obj/effect/proc_holder/spell/targeted/abyssal_gaze/abyssal_gaze - var/obj/effect/proc_holder/spell/targeted/dominate/dominate - -/datum/species/golem/runic/random_name(gender,unique,lastname) - var/edgy_first_name = pick("Razor","Blood","Dark","Evil","Cold","Pale","Black","Silent","Chaos","Deadly","Coldsteel") - var/edgy_last_name = pick("Edge","Night","Death","Razor","Blade","Steel","Calamity","Twilight","Shadow","Nightmare") //dammit Razor Razor - var/golem_name = "[edgy_first_name] [edgy_last_name]" - return golem_name - -/datum/species/golem/runic/on_species_gain(mob/living/carbon/C, datum/species/old_species) - . = ..() - phase_shift = new - phase_shift.charge_counter = 0 - C.AddSpell(phase_shift) - abyssal_gaze = new - abyssal_gaze.charge_counter = 0 - C.AddSpell(abyssal_gaze) - dominate = new - dominate.charge_counter = 0 - C.AddSpell(dominate) - -/datum/species/golem/runic/on_species_loss(mob/living/carbon/C) - . = ..() - if(phase_shift) - C.RemoveSpell(phase_shift) - if(abyssal_gaze) - C.RemoveSpell(abyssal_gaze) - if(dominate) - C.RemoveSpell(dominate) - -/datum/species/golem/runic/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H) - if(istype(chem, /datum/reagent/water/holywater)) - H.adjustFireLoss(4) - H.reagents.remove_reagent(chem.type, REAGENTS_METABOLISM) - - if(chem.type == /datum/reagent/fuel/unholywater) - H.adjustBruteLoss(-4) - H.adjustFireLoss(-4) - H.reagents.remove_reagent(chem.type, REAGENTS_METABOLISM) - -/datum/species/golem/cloth - name = "Cloth Golem" - id = "cloth golem" - limbs_id = "clothgolem" - sexes = FALSE - info_text = "As a Cloth Golem, you are able to reform myself after death, provided my remains aren't burned or destroyed. You are, of course, very flammable. \ - Being made of cloth, my body is magic resistant and faster than that of other golems, but weaker and less resilient." - species_traits = list(NOBLOOD,NO_UNDERWEAR) //no mutcolors, and can burn - inherent_traits = list(TRAIT_RESISTCOLD,TRAIT_NOBREATH,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_CHUNKYFINGERS) - inherent_biotypes = MOB_UNDEAD|MOB_HUMANOID - armor = 15 //feels no pain, but not too resistant - burnmod = 2 // don't get burned - speedmod = 1 // not as heavy as stone - punchdamagelow = 4 - punchstunthreshold = 7 - punchdamagehigh = 8 // not as heavy as stone - prefix = "Cloth" - special_names = null - -/datum/species/golem/cloth/on_species_gain(mob/living/carbon/C, datum/species/old_species) - ..() - ADD_TRAIT(C, TRAIT_HOLY, SPECIES_TRAIT) - -/datum/species/golem/cloth/on_species_loss(mob/living/carbon/C) - REMOVE_TRAIT(C, TRAIT_HOLY, SPECIES_TRAIT) - ..() - -/datum/species/golem/cloth/check_roundstart_eligible() - if(SSevents.holidays && SSevents.holidays[HALLOWEEN]) - return TRUE - return ..() - -/datum/species/golem/cloth/random_name(gender,unique,lastname) - var/pharaoh_name = pick("Neferkare", "Hudjefa", "Khufu", "Mentuhotep", "Ahmose", "Amenhotep", "Thutmose", "Hatshepsut", "Tutankhamun", "Ramses", "Seti", \ - "Merenptah", "Djer", "Semerkhet", "Nynetjer", "Khafre", "Pepi", "Intef", "Ay") //yes, Ay was an actual pharaoh - var/golem_name = "[pharaoh_name] \Roman[rand(1,99)]" - return golem_name - -/datum/species/golem/cloth/spec_life(mob/living/carbon/human/H) - if(H.fire_stacks < 1) - H.adjust_fire_stacks(1) //always prone to burning - ..() - -/datum/species/golem/cloth/spec_death(gibbed, mob/living/carbon/human/H) - if(gibbed) - return - if(H.on_fire) - H.visible_message("[H] burns into ash!") - H.dust(just_ash = TRUE) - return - - H.visible_message("[H] falls apart into a pile of bandages!") - new /obj/structure/cloth_pile(get_turf(H), H) - ..() - -/obj/structure/cloth_pile - name = "pile of bandages" - desc = "" - max_integrity = 50 - armor = list("melee" = 90, "bullet" = 90, "laser" = 25, "energy" = 80, "bomb" = 50, "bio" = 100, "fire" = -50, "acid" = -50) - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "pile_bandages" - resistance_flags = FLAMMABLE - - var/revive_time = 900 - var/mob/living/carbon/human/cloth_golem - -/obj/structure/cloth_pile/Initialize(mapload, mob/living/carbon/human/H) - . = ..() - if(!QDELETED(H) && is_species(H, /datum/species/golem/cloth)) - H.unequip_everything() - H.forceMove(src) - cloth_golem = H - to_chat(cloth_golem, "I start gathering my life energy, preparing to rise again...") - addtimer(CALLBACK(src, PROC_REF(revive)), revive_time) - else - return INITIALIZE_HINT_QDEL - -/obj/structure/cloth_pile/Destroy() - if(cloth_golem) - QDEL_NULL(cloth_golem) - return ..() - -/obj/structure/cloth_pile/burn() - visible_message("[src] burns into ash!") - new /obj/item/ash(get_turf(src)) - ..() - -/obj/structure/cloth_pile/proc/revive(full_heal = FALSE, admin_revive = FALSE) - if(QDELETED(src) || QDELETED(cloth_golem)) //QDELETED also checks for null, so if no cloth golem is set this won't runtime - return - if(cloth_golem.suiciding || cloth_golem.hellbound) - QDEL_NULL(cloth_golem) - return - - invisibility = INVISIBILITY_MAXIMUM //disappear before the animation - new /obj/effect/temp_visual/mummy_animation(get_turf(src)) - if(cloth_golem.revive(full_heal = TRUE, admin_revive = TRUE)) - cloth_golem.grab_ghost() //won't pull if it's a suicide - sleep(20) - cloth_golem.forceMove(get_turf(src)) - cloth_golem.visible_message("[src] rises and reforms into [cloth_golem]!","I reform into yourself!") - cloth_golem = null - qdel(src) - -/obj/structure/cloth_pile/attackby(obj/item/P, mob/living/carbon/human/user, params) - . = ..() - - if(resistance_flags & ON_FIRE) - return - - if(P.get_temperature()) - visible_message("[src] bursts into flames!") - fire_act() - -/datum/species/golem/plastic - name = "Plastic Golem" - id = "plastic golem" - prefix = "Plastic" - special_names = list("Sheet", "Bag", "Bottle") - fixed_mut_color = "fffa" - info_text = "As a Plastic Golem, you are capable of ventcrawling and passing through plastic flaps as long as you are naked." - -/datum/species/golem/plastic/on_species_gain(mob/living/carbon/C, datum/species/old_species) - . = ..() - C.ventcrawler = VENTCRAWLER_NUDE - -/datum/species/golem/plastic/on_species_loss(mob/living/carbon/C) - . = ..() - C.ventcrawler = initial(C.ventcrawler) - -/datum/species/golem/bronze - name = "Bronze Golem" - id = "bronze golem" - prefix = "Bronze" - special_names = list("Bell") - fixed_mut_color = "cd7f32" - info_text = "As a Bronze Golem, you are very resistant to loud noises, and make loud noises if something hard hits you, however this ability does hurt my hearing." - mutantears = /obj/item/organ/ears/bronze - var/last_gong_time = 0 - var/gong_cooldown = 150 - -/datum/species/golem/bronze/bullet_act(obj/projectile/P, mob/living/carbon/human/H) - if(!(world.time > last_gong_time + gong_cooldown)) - return ..() - if(P.flag == "bullet" || P.flag == "bomb") - gong(H) - return ..() - -/datum/species/golem/bronze/spec_hitby(atom/movable/AM, mob/living/carbon/human/H) - ..() - if(world.time > last_gong_time + gong_cooldown) - gong(H) - -/datum/species/golem/bronze/spec_attack_hand(mob/living/carbon/human/M, mob/living/carbon/human/H, datum/martial_art/attacker_style) - ..() - if(world.time > last_gong_time + gong_cooldown && M.used_intent.type != INTENT_HELP) - gong(H) - -/datum/species/golem/bronze/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, intent, mob/living/carbon/human/H) - ..() - if(world.time > last_gong_time + gong_cooldown) - gong(H) - -/datum/species/golem/bronze/on_hit(obj/projectile/P, mob/living/carbon/human/H) - ..() - if(world.time > last_gong_time + gong_cooldown) - gong(H) - -/datum/species/golem/bronze/proc/gong(mob/living/carbon/human/H) - last_gong_time = world.time - for(var/mob/living/M in get_hearers_in_view(7,H)) - if(M.stat == DEAD) //F - return - if(M == H) - H.show_message("I cringe with pain as my body rings around you!", MSG_AUDIBLE) - H.playsound_local(H, 'sound/blank.ogg', 100, TRUE) - H.soundbang_act(2, 0, 100, 1) - H.jitteriness += 7 - var/distance = max(0,get_dist(get_turf(H),get_turf(M))) - switch(distance) - if(0 to 1) - M.show_message("GONG!", MSG_AUDIBLE) - M.playsound_local(H, 'sound/blank.ogg', 100, TRUE) - M.soundbang_act(1, 0, 30, 3) - M.confused += 10 - M.jitteriness += 4 - SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "gonged", /datum/mood_event/loud_gong) - if(2 to 3) - M.show_message("GONG!", MSG_AUDIBLE) - M.playsound_local(H, 'sound/blank.ogg', 75, TRUE) - M.soundbang_act(1, 0, 15, 2) - M.jitteriness += 3 - SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "gonged", /datum/mood_event/loud_gong) - else - M.show_message("GONG!", MSG_AUDIBLE) - M.playsound_local(H, 'sound/blank.ogg', 50, TRUE) - - -/datum/species/golem/cardboard //Faster but weaker, can also make new shells on its own - name = "Cardboard Golem" - id = "cardboard golem" - prefix = "Cardboard" - special_names = list("Box") - info_text = "As a Cardboard Golem, you aren't very strong, but you are a bit quicker and can easily create more brethren by using cardboard on myself." - species_traits = list(NOBLOOD,NO_UNDERWEAR,NOEYESPRITES) - inherent_traits = list(TRAIT_NOBREATH, TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_CHUNKYFINGERS,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER, TRAIT_NOFLASH) - limbs_id = "c_golem" //special sprites - attack_verb = "whips" - attack_sound = 'sound/blank.ogg' - miss_sound = 'sound/blank.ogg' - fixed_mut_color = null - armor = 25 - burnmod = 1.25 - heatmod = 2 - speedmod = 1.5 - punchdamagelow = 4 - punchstunthreshold = 7 - punchdamagehigh = 8 - var/last_creation = 0 - var/brother_creation_cooldown = 300 - -/datum/species/golem/cardboard/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, intent, mob/living/carbon/human/H) - . = ..() - if(user != H) - return FALSE //forced reproduction is rape. - if(istype(I, /obj/item/stack/sheet/cardboard)) - var/obj/item/stack/sheet/cardboard/C = I - if(last_creation + brother_creation_cooldown > world.time) //no cheesing dork - return - if(C.amount < 10) - to_chat(H, "I do not have enough cardboard!") - return FALSE - to_chat(H, "I attempt to create a new cardboard brother.") - if(do_after(user, 30, target = user)) - if(last_creation + brother_creation_cooldown > world.time) //no cheesing dork - return - if(!C.use(10)) - to_chat(H, "I do not have enough cardboard!") - return FALSE - to_chat(H, "I create a new cardboard golem shell.") - create_brother(H.loc) - -/datum/species/golem/cardboard/proc/create_brother(location) - new /obj/effect/mob_spawn/human/golem/servant(location, /datum/species/golem/cardboard, owner) - last_creation = world.time - -/datum/species/golem/leather - name = "Leather Golem" - id = "leather golem" - special_names = list("Face", "Man", "Belt") //Ah dude 4 strength 4 stam leather belt AHHH - inherent_traits = list(TRAIT_NOBREATH, TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_CHUNKYFINGERS,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER, TRAIT_STRONG_GRABBER) - prefix = "Leather" - fixed_mut_color = "624a2e" - info_text = "As a Leather Golem, you are flammable, but you can grab things with incredible ease, allowing all my grabs to start at a strong level." - grab_sound = 'sound/blank.ogg' - attack_sound = 'sound/blank.ogg' - -/datum/species/golem/durathread - name = "Durathread Golem" - id = "durathread golem" - prefix = "Durathread" - limbs_id = "d_golem" - special_names = list("Boll","Weave") - species_traits = list(NOBLOOD,NO_UNDERWEAR,NOEYESPRITES) - fixed_mut_color = null - inherent_traits = list(TRAIT_NOBREATH, TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_CHUNKYFINGERS,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER, TRAIT_NOFLASH) - info_text = "As a Durathread Golem, my strikes will cause those my targets to start choking, but my woven body won't withstand fire as well." - -/datum/species/golem/durathread/spec_unarmedattacked(mob/living/carbon/human/user, mob/living/carbon/human/target) - . = ..() - target.apply_status_effect(STATUS_EFFECT_CHOKINGSTRAND) - -/datum/species/golem/bone - name = "Bone Golem" - id = "bone golem" - say_mod = "rattles" - prefix = "Bone" - limbs_id = "b_golem" - special_names = list("Head", "Broth", "Fracture", "Rattler", "Appetit") - liked_food = GROSS | MEAT | RAW - toxic_food = null - species_traits = list(NOBLOOD,NO_UNDERWEAR,NOEYESPRITES) - inherent_biotypes = MOB_UNDEAD|MOB_HUMANOID - mutanttongue = /obj/item/organ/tongue/bone - sexes = FALSE - fixed_mut_color = null - inherent_traits = list(TRAIT_NOFLASH,TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOFIRE,TRAIT_CHUNKYFINGERS,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_FAKEDEATH) - info_text = "As a Bone Golem, You have a powerful spell that lets you chill my enemies with fear, and milk heals you! Just make sure to watch our for bone-hurting juice." - var/datum/action/innate/bonechill/bonechill - -/datum/species/golem/bone/on_species_gain(mob/living/carbon/C, datum/species/old_species) - ..() - if(ishuman(C)) - bonechill = new - bonechill.Grant(C) - -/datum/species/golem/bone/on_species_loss(mob/living/carbon/C) - if(bonechill) - bonechill.Remove(C) - ..() - -/datum/species/golem/bone/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H) - . = ..() - if(chem.type == /datum/reagent/consumable/milk) - if(chem.volume > 10) - H.reagents.remove_reagent(chem.type, chem.volume - 10) - to_chat(H, "The excess milk is dripping off my bones!") - H.heal_bodypart_damage(1.5,0, 0) - H.reagents.remove_reagent(chem.type, chem.metabolization_rate) - return TRUE - if(chem.type == /datum/reagent/toxin/bonehurtingjuice) - H.adjustStaminaLoss(7.5, 0) - H.adjustBruteLoss(0.5, 0) - if(prob(20)) - switch(rand(1, 3)) - if(1) - H.say(pick("oof.", "ouch.", "my bones.", "oof ouch.", "oof ouch my bones."), forced = /datum/reagent/toxin/bonehurtingjuice) - if(2) - H.emote("me", 1, pick("oofs silently.", "looks like their bones hurt.", "grimaces, as though their bones hurt.")) - if(3) - to_chat(H, "My bones hurt!") - if(chem.overdosed) - if(prob(4) && iscarbon(H)) //big oof - var/selected_part = pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) //God help you if the same limb gets picked twice quickly. - var/obj/item/bodypart/bp = H.get_bodypart(selected_part) //We're so sorry skeletons, you're so misunderstood - if(bp) - playsound(H, get_sfx("desceration"), 50, TRUE, -1) //You just want to socialize - H.visible_message("[H] rattles loudly and flails around!!", "My bones hurt so much that my missing muscles spasm!!") - H.say("OOF!!", forced=/datum/reagent/toxin/bonehurtingjuice) - bp.receive_damage(200, 0, 0) //But I don't think we should - else - to_chat(H, "My missing arm aches from wherever you left it.") - H.emote("sigh") - H.reagents.remove_reagent(chem.type, chem.metabolization_rate) - return TRUE - -/datum/action/innate/bonechill - name = "Bone Chill" - desc = "" - check_flags = AB_CHECK_CONSCIOUS - icon_icon = 'icons/mob/actions/actions_spells.dmi' - button_icon_state = "bonechill" - var/cooldown = 600 - var/last_use - var/snas_chance = 3 - -/datum/action/innate/bonechill/Activate() - if(world.time < last_use + cooldown) - to_chat(owner, "I'm not ready yet to rattle my bones again!") - return - owner.visible_message("[owner] rattles [owner.p_their()] bones harrowingly.", "I rattle my bones") - last_use = world.time - if(prob(snas_chance)) - playsound(get_turf(owner),'sound/blank.ogg', 100) - if(ishuman(owner)) - var/mob/living/carbon/human/H = owner - var/mutable_appearance/badtime = mutable_appearance('icons/mob/human_parts.dmi', "b_golem_eyes", -FIRE_LAYER-0.5) - badtime.appearance_flags = RESET_COLOR - H.overlays_standing[FIRE_LAYER+0.5] = badtime - H.apply_overlay(FIRE_LAYER+0.5) - addtimer(CALLBACK(H, TYPE_PROC_REF(/mob/living/carbon, remove_overlay), FIRE_LAYER+0.5), 25) - else - playsound(get_turf(owner),'sound/blank.ogg', 100) - for(var/mob/living/L in orange(7, get_turf(owner))) - if((L.mob_biotypes & MOB_UNDEAD) || isgolem(L) || HAS_TRAIT(L, TRAIT_RESISTCOLD)) - return //Do not affect our brothers - - to_chat(L, "A spine-chilling sound chills you to the bone!") - SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "spooked", /datum/mood_event/spooked) - -/datum/species/golem/snow - name = "Snow Golem" - id = "snow golem" - limbs_id = "sn_golem" - fixed_mut_color = "null" //custom sprites - armor = 45 //down from 55 - burnmod = 3 //melts easily - info_text = "As a Snow Golem, you are extremely vulnerable to burn damage, but you can generate snowballs and shoot cryokinetic beams. You will also turn to snow when dying, preventing any form of recovery." - prefix = "Snow" - special_names = list("Flake", "Blizzard", "Storm") - species_traits = list(NOBLOOD,NO_UNDERWEAR,NOEYESPRITES) //no mutcolors, no eye sprites - inherent_traits = list(TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOGUNS,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER) - - var/obj/effect/proc_holder/spell/targeted/conjure_item/snowball/ball - var/obj/effect/proc_holder/spell/aimed/cryo/cryo - -/datum/species/golem/snow/spec_death(gibbed, mob/living/carbon/human/H) - H.visible_message("[H] turns into a pile of snow!") - for(var/obj/item/W in H) - H.dropItemToGround(W) - for(var/i=1, i <= rand(3,5), i++) - new /obj/item/stack/sheet/mineral/snow(get_turf(H)) -// new /obj/item/reagent_containers/food/snacks/grown/carrot(get_turf(H)) - qdel(H) - -/datum/species/golem/snow/on_species_gain(mob/living/carbon/C, datum/species/old_species) - . = ..() - C.weather_immunities |= "snow" - ball = new - ball.charge_counter = 0 - C.AddSpell(ball) - cryo = new - cryo.charge_counter = 0 - C.AddSpell(cryo) - -/datum/species/golem/snow/on_species_loss(mob/living/carbon/C) - . = ..() - C.weather_immunities -= "snow" - if(ball) - C.RemoveSpell(ball) - if(cryo) - C.RemoveSpell(cryo) - -/obj/effect/proc_holder/spell/targeted/conjure_item/snowball - name = "Snowball" - desc = "" - item_type = /obj/item/toy/snowball - charge_max = 15 - action_icon = 'icons/obj/toy.dmi' - action_icon_state = "snowball" - -/datum/species/golem/capitalist - name = "Capitalist Golem" - id = "capitalist golem" - prefix = "Capitalist" - attack_verb = "monopoliz" - limbs_id = "ca_golem" - special_names = list("John D. Rockefeller","Rich Uncle Pennybags","Commodore Vanderbilt","Entrepreneur","Mr. Moneybags", "Adam Smith") - species_traits = list(NOBLOOD,NO_UNDERWEAR,NOEYESPRITES) - fixed_mut_color = null - inherent_traits = list(TRAIT_NOFLASH,TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOFIRE,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER) - info_text = "As a Capitalist Golem, my fist spreads the powerful industrializing light of capitalism." - changesource_flags = MIRROR_BADMIN - random_eligible = FALSE - - var/last_cash = 0 - var/cash_cooldown = 100 - -/datum/species/golem/capitalist/on_species_gain(mob/living/carbon/C, datum/species/old_species) - . = ..() - C.equip_to_slot_or_del(new /obj/item/clothing/head/that (), SLOT_HEAD) - C.equip_to_slot_or_del(new /obj/item/clothing/glasses/monocle (), SLOT_GLASSES) - C.revive(full_heal = TRUE, admin_revive = FALSE) - - SEND_SOUND(C, sound('sound/blank.ogg')) - C.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/knock ()) - RegisterSignal(C, COMSIG_MOB_SAY, PROC_REF(handle_speech)) - -/datum/species/golem/capitalist/on_species_loss(mob/living/carbon/C) - . = ..() - UnregisterSignal(C, COMSIG_MOB_SAY) - for(var/obj/effect/proc_holder/spell/aoe_turf/knock/spell in C.mob_spell_list) - C.RemoveSpell(spell) - -/datum/species/golem/capitalist/spec_unarmedattacked(mob/living/carbon/human/user, mob/living/carbon/human/target) - ..() - if(isgolem(target)) - return - if(target.nutrition >= NUTRITION_LEVEL_FAT) - target.set_species(/datum/species/golem/capitalist) - return - target.adjust_nutrition(40) - -/datum/species/golem/capitalist/handle_speech(datum/source, list/speech_args) - playsound(source, 'sound/blank.ogg', 25, FALSE) - speech_args[SPEECH_MESSAGE] = "Hello, I like money!" - -/datum/species/golem/soviet - name = "Soviet Golem" - id = "soviet golem" - prefix = "Comrade" - attack_verb = "nationaliz" - limbs_id = "s_golem" - special_names = list("Stalin","Lenin","Trotsky","Marx","Comrade") //comrade comrade - species_traits = list(NOBLOOD,NO_UNDERWEAR,NOEYESPRITES) - fixed_mut_color = null - inherent_traits = list(TRAIT_NOFLASH, TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOFIRE,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER) - info_text = "As a Soviet Golem, my fist spreads the bright soviet light of communism." - changesource_flags = MIRROR_BADMIN - random_eligible = FALSE - -/datum/species/golem/soviet/on_species_gain(mob/living/carbon/C, datum/species/old_species) - . = ..() - C.equip_to_slot_or_del(new /obj/item/clothing/head/ushanka (), SLOT_HEAD) - C.revive(full_heal = TRUE, admin_revive = FALSE) - - SEND_SOUND(C, sound('sound/blank.ogg')) - C.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/knock ()) - RegisterSignal(C, COMSIG_MOB_SAY, PROC_REF(handle_speech)) - -/datum/species/golem/soviet/on_species_loss(mob/living/carbon/C) - . = ..() - for(var/obj/effect/proc_holder/spell/aoe_turf/knock/spell in C.mob_spell_list) - C.RemoveSpell(spell) - UnregisterSignal(C, COMSIG_MOB_SAY, PROC_REF(handle_speech)) - -/datum/species/golem/soviet/spec_unarmedattacked(mob/living/carbon/human/user, mob/living/carbon/human/target) - ..() - if(isgolem(target)) - return - if(target.nutrition <= NUTRITION_LEVEL_STARVING) - target.set_species(/datum/species/golem/soviet) - return - target.adjust_nutrition(-40) - -/datum/species/golem/soviet/handle_speech(datum/source, list/speech_args) - playsound(source, 'sound/blank.ogg', 25, FALSE) - speech_args[SPEECH_MESSAGE] = "Cyka Blyat" diff --git a/code/modules/mob/living/carbon/human/species_types/mothmen.dm b/code/modules/mob/living/carbon/human/species_types/mothmen.dm deleted file mode 100644 index d9a564ab74..0000000000 --- a/code/modules/mob/living/carbon/human/species_types/mothmen.dm +++ /dev/null @@ -1,62 +0,0 @@ -/datum/species/moth - name = "Mothman" - id = "moth" - say_mod = "flutters" - default_color = "00FF00" - species_traits = list(LIPS, NOEYESPRITES) - inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_BUG - mutant_bodyparts = list("moth_wings", "moth_markings") - default_features = list("moth_wings" = "Plain", "moth_markings" = "None") - attack_verb = "slash" - attack_sound = 'sound/blank.ogg' - miss_sound = 'sound/blank.ogg' - meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/moth - liked_food = VEGETABLES | DAIRY | CLOTH - disliked_food = FRUIT | GROSS - toxic_food = MEAT | RAW - mutanteyes = /obj/item/organ/eyes/moth - changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | RACE_SWAP | SLIME_EXTRACT - -/datum/species/moth/regenerate_organs(mob/living/carbon/C,datum/species/old_species,replace_current=TRUE) - . = ..() - if(ishuman(C)) - var/mob/living/carbon/human/H = C - handle_mutant_bodyparts(H) - -/datum/species/moth/random_name(gender,unique,lastname) - if(unique) - return random_unique_moth_name() - - var/randname = moth_name() - - if(lastname) - randname += " [lastname]" - - return randname - -/datum/species/moth/handle_fire(mob/living/carbon/human/H, no_protection = FALSE) - . = ..() - if(.) //if the mob is immune to fire, don't burn wings off. - return - if(H.dna.features["moth_wings"] != "Burnt Off" && H.bodytemperature >= 800 && H.fire_stacks > 0) //do not go into the extremely hot light. you will not survive - to_chat(H, "My precious wings burn to a crisp!") - H.dna.features["moth_wings"] = "Burnt Off" - handle_mutant_bodyparts(H) - -/datum/species/moth/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H) - . = ..() - if(chem.type == /datum/reagent/toxin/pestkiller) - H.adjustToxLoss(3) - H.reagents.remove_reagent(chem.type, REAGENTS_METABOLISM) - -/datum/species/moth/check_species_weakness(obj/item/weapon, mob/living/attacker) - if(istype(weapon, /obj/item/melee/flyswatter)) - return 9 //flyswatters deal 10x damage to moths - return 0 - -/datum/species/moth/space_move(mob/living/carbon/human/H) - . = ..() - if(H.loc && !isspaceturf(H.loc) && H.dna.features["moth_wings"] != "Burnt Off") - var/datum/gas_mixture/current = H.loc.return_air() - if(current && (current.return_pressure() >= ONE_ATMOSPHERE*0.85)) //as long as there's reasonable pressure and no gravity, flight is possible - return TRUE diff --git a/code/modules/mob/living/carbon/human/species_types/mushpeople.dm b/code/modules/mob/living/carbon/human/species_types/mushpeople.dm deleted file mode 100644 index a1feb51546..0000000000 --- a/code/modules/mob/living/carbon/human/species_types/mushpeople.dm +++ /dev/null @@ -1,60 +0,0 @@ -/datum/species/mush //mush mush codecuck - name = "Mushroomperson" - id = "mush" - mutant_bodyparts = list("caps") - default_features = list("caps" = "Round") - changesource_flags = MIRROR_BADMIN | WABBAJACK - - fixed_mut_color = "DBBF92" - hair_color = "FF4B19" //cap color, spot color uses eye color - nojumpsuit = TRUE - - say_mod = "poofs" //what does a mushroom sound like - species_traits = list(MUTCOLORS, NOEYESPRITES, NO_UNDERWEAR) - inherent_traits = list(TRAIT_NOBREATH, TRAIT_NOFLASH) - inherent_factions = list("mushroom") - speedmod = 1.5 //faster than golems but not by much - - punchdamagelow = 6 - punchdamagehigh = 14 - punchstunthreshold = 14 //about 44% chance to stun - - no_equip = list(SLOT_WEAR_MASK, SLOT_ARMOR, SLOT_GLOVES, SLOT_SHOES, SLOT_PANTS) - - burnmod = 1.25 - heatmod = 1.5 - - mutanteyes = /obj/item/organ/eyes/night_vision/mushroom - use_skintones = FALSE - var/datum/martial_art/mushpunch/mush - -/datum/species/mush/check_roundstart_eligible() - return FALSE //hard locked out of roundstart on the order of design lead kor, this can be removed in the future when planetstation is here OR SOMETHING but right now we have a problem with races. - -/datum/species/mush/after_equip_job(datum/job/J, mob/living/carbon/human/H) - H.grant_language(/datum/language/mushroom) //pomf pomf - -/datum/species/mush/on_species_gain(mob/living/carbon/C, datum/species/old_species) - . = ..() - if(ishuman(C)) - var/mob/living/carbon/human/H = C - if(!H.dna.features["caps"]) - H.dna.features["caps"] = "Round" - handle_mutant_bodyparts(H) - mush = new(null) - mush.teach(H) - -/datum/species/mush/on_species_loss(mob/living/carbon/C) - . = ..() - mush.remove(C) - QDEL_NULL(mush) - -/datum/species/mush/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H) - if(chem.type == /datum/reagent/toxin/plantbgone/weedkiller) - H.adjustToxLoss(3) - H.reagents.remove_reagent(chem.type, REAGENTS_METABOLISM) - return TRUE - -/datum/species/mush/handle_mutant_bodyparts(mob/living/carbon/human/H, forced_colour) - forced_colour = FALSE - ..() diff --git a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm deleted file mode 100644 index c3c9a94f95..0000000000 --- a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm +++ /dev/null @@ -1,102 +0,0 @@ -/datum/species/plasmaman - name = "Plasmaman" - id = "plasmaman" - say_mod = "rattles" - sexes = 0 - meat = /obj/item/stack/sheet/mineral/plasma - species_traits = list(NOBLOOD,NOTRANSSTING) - inherent_traits = list(TRAIT_RESISTCOLD,TRAIT_RADIMMUNE,TRAIT_NOHUNGER,TRAIT_ALWAYS_CLEAN) - inherent_biotypes = MOB_HUMANOID|MOB_MINERAL - mutantlungs = /obj/item/organ/lungs/plasmaman - mutanttongue = /obj/item/organ/tongue/bone/plasmaman - mutantliver = /obj/item/organ/liver/plasmaman - mutantstomach = /obj/item/organ/stomach/plasmaman - burnmod = 1.5 - heatmod = 1.5 - brutemod = 1.5 - breathid = "tox" - damage_overlay_type = ""//let's not show bloody wounds or burns over bones. - var/internal_fire = FALSE //If the bones themselves are burning clothes won't help you much - disliked_food = FRUIT - liked_food = VEGETABLES - changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC - outfit_important_for_life = /datum/outfit/plasmaman - -/datum/species/plasmaman/spec_life(mob/living/carbon/human/H) - var/datum/gas_mixture/environment = H.loc.return_air() - var/atmos_sealed = FALSE - if (H.wear_armor && H.head && istype(H.wear_armor, /obj/item/clothing) && istype(H.head, /obj/item/clothing)) - var/obj/item/clothing/CS = H.wear_armor - var/obj/item/clothing/CH = H.head - if (CS.clothing_flags & CH.clothing_flags & STOPSPRESSUREDAMAGE) - atmos_sealed = TRUE - if((!istype(H.wear_pants, /obj/item/clothing/under/plasmaman) || !istype(H.head, /obj/item/clothing/head/helmet/space/plasmaman)) && !atmos_sealed) - if(environment) - if(environment.total_moles()) - if(environment.gases[/datum/gas/oxygen] && (environment.gases[/datum/gas/oxygen][MOLES]) >= 1) //Same threshhold that extinguishes fire - H.adjust_fire_stacks(0.5) - if(!H.on_fire && H.fire_stacks > 0) - H.visible_message("[H]'s body reacts with the atmosphere and bursts into flames!","My body reacts with the atmosphere and bursts into flame!") - H.IgniteMob() - internal_fire = TRUE - else - if(H.fire_stacks) - var/obj/item/clothing/under/plasmaman/P = H.wear_pants - if(istype(P)) - P.Extinguish(H) - internal_fire = FALSE - else - internal_fire = FALSE - H.update_fire() - -/datum/species/plasmaman/handle_fire(mob/living/carbon/human/H, no_protection) - if(internal_fire) - no_protection = TRUE - . = ..() - -/datum/species/plasmaman/random_name(gender,unique,lastname) - if(unique) - return random_unique_plasmaman_name() - - var/randname = plasmaman_name() - - if(lastname) - randname += " [lastname]" - - return randname - -/datum/species/plasmaman/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H) - . = ..() - if(chem.type == /datum/reagent/consumable/milk) - if(chem.volume > 10) - H.reagents.remove_reagent(chem.type, chem.volume - 10) - to_chat(H, "The excess milk is dripping off my bones!") - H.heal_bodypart_damage(1.5,0, 0) - H.reagents.remove_reagent(chem.type, chem.metabolization_rate) - return TRUE - if(chem.type == /datum/reagent/toxin/bonehurtingjuice) - H.adjustStaminaLoss(7.5, 0) - H.adjustBruteLoss(0.5, 0) - if(prob(20)) - switch(rand(1, 3)) - if(1) - H.say(pick("oof.", "ouch.", "my bones.", "oof ouch.", "oof ouch my bones."), forced = /datum/reagent/toxin/bonehurtingjuice) - if(2) - H.emote("me", 1, pick("oofs silently.", "looks like their bones hurt.", "grimaces, as though their bones hurt.")) - if(3) - to_chat(H, "My bones hurt!") - if(chem.overdosed) - if(prob(4) && iscarbon(H)) //big oof - var/selected_part = pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) //God help you if the same limb gets picked twice quickly. - var/obj/item/bodypart/bp = H.get_bodypart(selected_part) //We're so sorry skeletons, you're so misunderstood - if(bp) - playsound(H, get_sfx("desceration"), 50, TRUE, -1) //You just want to socialize - H.visible_message("[H] rattles loudly and flails around!!", "My bones hurt so much that my missing muscles spasm!!") - H.say("OOF!!", forced=/datum/reagent/toxin/bonehurtingjuice) - bp.receive_damage(200, 0, 0) //But I don't think we should - else - to_chat(H, "My missing arm aches from wherever you left it.") - H.emote("sigh") - H.reagents.remove_reagent(chem.type, chem.metabolization_rate) - return TRUE - diff --git a/code/modules/mob/living/carbon/human/species_types/podpeople.dm b/code/modules/mob/living/carbon/human/species_types/podpeople.dm deleted file mode 100644 index 0f073b1c1a..0000000000 --- a/code/modules/mob/living/carbon/human/species_types/podpeople.dm +++ /dev/null @@ -1,60 +0,0 @@ -/datum/species/pod - // A mutation caused by a human being ressurected in a revival pod. These regain health in light, and begin to wither in darkness. - name = "Podperson" - id = "pod" - default_color = "59CE00" - species_traits = list(MUTCOLORS,EYECOLOR) - inherent_traits = list(TRAIT_ALWAYS_CLEAN) - inherent_factions = list("plants", "vines") - attack_verb = "slash" - attack_sound = 'sound/blank.ogg' - miss_sound = 'sound/blank.ogg' - burnmod = 1.25 - heatmod = 1.5 - meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/plant - disliked_food = MEAT | DAIRY - liked_food = VEGETABLES | FRUIT | GRAIN - changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | RACE_SWAP | SLIME_EXTRACT - -/datum/species/pod/spec_life(mob/living/carbon/human/H) - if(H.stat == DEAD) - return - var/light_amount = 0 //how much light there is in the place, affects receiving nutrition and healing - if(isturf(H.loc)) //else, there's considered to be no light - var/turf/T = H.loc - light_amount = min(1,T.get_lumcount()) - 0.5 - H.adjust_nutrition(light_amount * 10) - if(H.nutrition > NUTRITION_LEVEL_ALMOST_FULL) - H.set_nutrition(NUTRITION_LEVEL_ALMOST_FULL) - if(light_amount > 0.2) //if there's enough light, heal - H.heal_overall_damage(1,1, 0, BODYPART_ORGANIC) - H.adjustToxLoss(-1) - H.adjustOxyLoss(-1) - - if(H.nutrition < NUTRITION_LEVEL_STARVING + 50) - H.take_overall_damage(2,0) - -/datum/species/pod/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H) - if(chem.type == /datum/reagent/toxin/plantbgone) - H.adjustToxLoss(3) - H.reagents.remove_reagent(chem.type, REAGENTS_METABOLISM) - return 1 - -/datum/species/pod/on_hit(obj/projectile/P, mob/living/carbon/human/H) - switch(P.type) - if(/obj/projectile/energy/floramut) - if(prob(15)) - H.rad_act(rand(30,80)) - H.Paralyze(100) - H.visible_message("[H] writhes in pain as [H.p_their()] vacuoles boil.", "I writhe in pain as your vacuoles boil!", "I hear the crunching of leaves.") - if(prob(80)) - H.easy_randmut(NEGATIVE+MINOR_NEGATIVE) - else - H.easy_randmut(POSITIVE) - H.randmuti() - H.domutcheck() - else - H.adjustFireLoss(rand(5,15)) - H.show_message("The radiation beam singes you!") - if(/obj/projectile/energy/florayield) - H.set_nutrition(min(H.nutrition+30, NUTRITION_LEVEL_FULL)) diff --git a/code/modules/mob/living/carbon/human/species_types/synths.dm b/code/modules/mob/living/carbon/human/species_types/synths.dm deleted file mode 100644 index 217a81f6cd..0000000000 --- a/code/modules/mob/living/carbon/human/species_types/synths.dm +++ /dev/null @@ -1,130 +0,0 @@ -/datum/species/synth - name = "Synth" //inherited from the real species, for health scanners and things - id = "synth" - say_mod = "beep boops" //inherited from a user's real species - sexes = 0 - species_traits = list(NOTRANSSTING) //all of these + whatever we inherit from the real species - inherent_traits = list(TRAIT_VIRUSIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOLIMBDISABLE,TRAIT_NOHUNGER,TRAIT_NOBREATH) - inherent_biotypes = MOB_ROBOTIC|MOB_HUMANOID - meat = null - damage_overlay_type = "synth" - limbs_id = "synth" - var/disguise_fail_health = 75 //When their health gets to this level their instabitaluri partially falls off - var/datum/species/fake_species //a species to do most of our work for us, unless we're damaged - var/list/initial_species_traits //for getting these values back for assume_disguise() - var/list/initial_inherent_traits - changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC - -/datum/species/synth/New() - initial_species_traits = species_traits.Copy() - initial_inherent_traits = inherent_traits.Copy() - ..() - -/datum/species/synth/military - name = "Military Synth" - id = "military_synth" - armor = 25 - punchdamagelow = 10 - punchdamagehigh = 19 - punchstunthreshold = 14 //about 50% chance to stun - disguise_fail_health = 50 - changesource_flags = MIRROR_BADMIN | WABBAJACK - -/datum/species/synth/on_species_gain(mob/living/carbon/human/H, datum/species/old_species) - ..() - assume_disguise(old_species, H) - RegisterSignal(H, COMSIG_MOB_SAY, PROC_REF(handle_speech)) - -/datum/species/synth/on_species_loss(mob/living/carbon/human/H) - . = ..() - UnregisterSignal(H, COMSIG_MOB_SAY) - -/datum/species/synth/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H) - if(chem.type == /datum/reagent/medicine/C2/instabitaluri) - chem.reaction_mob(H, TOUCH, 2 ,0) //heal a little - H.reagents.remove_reagent(chem.type, REAGENTS_METABOLISM) - return 1 - else - return ..() - - -/datum/species/synth/proc/assume_disguise(datum/species/S, mob/living/carbon/human/H) - if(S && !istype(S, type)) - name = S.name - say_mod = S.say_mod - sexes = S.sexes - species_traits = initial_species_traits.Copy() - inherent_traits = initial_inherent_traits.Copy() - species_traits |= S.species_traits - inherent_traits |= S.inherent_traits - attack_verb = S.attack_verb - attack_sound = S.attack_sound - miss_sound = S.miss_sound - meat = S.meat - mutant_bodyparts = S.mutant_bodyparts.Copy() - mutant_organs = S.mutant_organs.Copy() - default_features = S.default_features.Copy() - nojumpsuit = S.nojumpsuit - no_equip = S.no_equip.Copy() - limbs_id = S.limbs_id - use_skintones = S.use_skintones - fixed_mut_color = S.fixed_mut_color - hair_color = S.hair_color - fake_species = new S.type - else - name = initial(name) - say_mod = initial(say_mod) - species_traits = initial_species_traits.Copy() - inherent_traits = initial_inherent_traits.Copy() - attack_verb = initial(attack_verb) - attack_sound = initial(attack_sound) - miss_sound = initial(miss_sound) - mutant_bodyparts = list() - default_features = list() - nojumpsuit = initial(nojumpsuit) - no_equip = list() - qdel(fake_species) - fake_species = null - meat = initial(meat) - limbs_id = "synth" - use_skintones = 0 - sexes = 0 - fixed_mut_color = "" - hair_color = "" - - for(var/X in H.bodyparts) //propagates the damage_overlay changes - var/obj/item/bodypart/BP = X - BP.update_limb() - H.update_body_parts() //to update limb icon cache with the new damage overlays - -//Proc redirects: -//Passing procs onto the fake_species, to ensure we look as much like them as possible - -/datum/species/synth/handle_hair(mob/living/carbon/human/H, forced_colour) - if(fake_species) - fake_species.handle_hair(H, forced_colour) - else - return ..() - - -/datum/species/synth/handle_body(mob/living/carbon/human/H) - if(fake_species) - fake_species.handle_body(H) - else - return ..() - - -/datum/species/synth/handle_mutant_bodyparts(mob/living/carbon/human/H, forced_colour) - if(fake_species) - fake_species.handle_body(H,forced_colour) - else - return ..() - - -/datum/species/synth/handle_speech(datum/source, list/speech_args) - if (isliving(source)) // yeah it's gonna be living but just to be clean - var/mob/living/L = source - if(fake_species && L.health > disguise_fail_health) - switch(fake_species.type) - if (/datum/species/golem/bananium) - speech_args[SPEECH_SPANS] |= SPAN_CLOWN diff --git a/code/modules/mob/living/carbon/human/species_types/vampire.dm b/code/modules/mob/living/carbon/human/species_types/vampire.dm index 7409fc6d14..cca3feb93c 100644 --- a/code/modules/mob/living/carbon/human/species_types/vampire.dm +++ b/code/modules/mob/living/carbon/human/species_types/vampire.dm @@ -12,7 +12,6 @@ mutant_heart = /obj/item/organ/heart/vampire mutanttongue = /obj/item/organ/tongue/vampire limbs_id = "human" - skinned_type = /obj/item/stack/sheet/animalhide/human var/info_text = "You are a Vampire. You will slowly but constantly lose blood if outside of a coffin. If inside a coffin, you will slowly heal. You may gain more blood by grabbing a live victim and using your drain ability." var/obj/effect/proc_holder/spell/targeted/shapeshift/bat/batform //attached to the datum itself to avoid cloning memes, and other duplicates @@ -52,11 +51,6 @@ H.shape.dust() //make sure we're killing the bat if you are out of blood, if you don't it creates weird situations where the bat is alive but the caster is dusted. C.dust() -/datum/species/vampire/check_species_weakness(obj/item/weapon, mob/living/attacker) - if(istype(weapon, /obj/item/nullrod/whip)) - return 1 //Whips deal 2x damage to vampires. Vampire killer. - return 0 - /obj/item/organ/tongue/vampire name = "vampire tongue" actions_types = list(/datum/action/item_action/organ_action/vampire) diff --git a/code/modules/mob/living/carbon/human/topic.dm b/code/modules/mob/living/carbon/human/topic.dm index 1cf7d70f14..078e0a871a 100644 --- a/code/modules/mob/living/carbon/human/topic.dm +++ b/code/modules/mob/living/carbon/human/topic.dm @@ -233,125 +233,4 @@ GLOBAL_VAR_INIT(year_integer, text2num(year)) // = 2013??? return return //Medical HUD ends here. - if(href_list["hud"] == "s") - if(!HAS_TRAIT(H, TRAIT_SECURITY_HUD)) - return - if(usr.stat || usr == src) //|| !usr.canmove || usr.restrained()) Fluff: Sechuds have eye-tracking technology and sets 'arrest' to people that the wearer looks and blinks at. - return //Non-fluff: This allows sec to set people to arrest as they get disarmed or beaten - // Checks the user has security clearence before allowing them to change arrest status via hud, comment out to enable all access - var/allowed_access = null - var/obj/item/clothing/glasses/hud/security/G = H.glasses - if(istype(G) && (G.obj_flags & EMAGGED)) - allowed_access = "@%&ERROR_%$*" - else //Implant and standard glasses check access - if(H.wear_ring) - var/list/access = H.wear_ring.GetAccess() - if(ACCESS_SEC_DOORS in access) - allowed_access = H.get_authentification_name() - - if(!allowed_access) - to_chat(H, "ERROR: Invalid access.") - return - - if(!perpname) - to_chat(H, "ERROR: Can not identify target.") - return - R = find_record("name", perpname, GLOB.data_core.security) - if(!R) - to_chat(usr, "ERROR: Unable to locate data core entry for target.") - return - if(href_list["status"]) - var/setcriminal = input(usr, "Specify a new criminal status for this person.", "Security HUD", R.fields["criminal"]) in list("None", "*Arrest*", "Incarcerated", "Paroled", "Discharged", "Cancel") - if(setcriminal != "Cancel") - if(!R) - return - if(!H.canUseHUD()) - return - if(!HAS_TRAIT(H, TRAIT_SECURITY_HUD)) - return - investigate_log("[key_name(src)] has been set from [R.fields["criminal"]] to [setcriminal] by [key_name(usr)].", INVESTIGATE_RECORDS) - R.fields["criminal"] = setcriminal - sec_hud_set_security_status() - return - - if(href_list["view"]) - if(!H.canUseHUD()) - return - if(!HAS_TRAIT(H, TRAIT_SECURITY_HUD)) - return - to_chat(usr, "Name: [R.fields["name"]] Criminal Status: [R.fields["criminal"]]") - to_chat(usr, "Minor Crimes:") - for(var/datum/data/crime/c in R.fields["mi_crim"]) - to_chat(usr, "Crime: [c.crimeName]") - to_chat(usr, "Details: [c.crimeDetails]") - to_chat(usr, "Added by [c.author] at [c.time]") - to_chat(usr, "----------") - to_chat(usr, "Major Crimes:") - for(var/datum/data/crime/c in R.fields["ma_crim"]) - to_chat(usr, "Crime: [c.crimeName]") - to_chat(usr, "Details: [c.crimeDetails]") - to_chat(usr, "Added by [c.author] at [c.time]") - to_chat(usr, "----------") - to_chat(usr, "Notes: [R.fields["notes"]]") - return - - if(href_list["add_crime"]) - switch(alert("What crime would you like to add?","Security HUD","Minor Crime","Major Crime","Cancel")) - if("Minor Crime") - var/t1 = stripped_input("Please input minor crime names:", "Security HUD", "", null) - var/t2 = stripped_multiline_input("Please input minor crime details:", "Security HUD", "", null) - if(!R || !t1 || !t2 || !allowed_access) - return - if(!H.canUseHUD()) - return - if(!HAS_TRAIT(H, TRAIT_SECURITY_HUD)) - return - var/crime = GLOB.data_core.createCrimeEntry(t1, t2, allowed_access, station_time_timestamp()) - GLOB.data_core.addMinorCrime(R.fields["id"], crime) - investigate_log("New Minor Crime: [t1]: [t2] | Added to [R.fields["name"]] by [key_name(usr)]", INVESTIGATE_RECORDS) - to_chat(usr, "Successfully added a minor crime.") - return - if("Major Crime") - var/t1 = stripped_input("Please input major crime names:", "Security HUD", "", null) - var/t2 = stripped_multiline_input("Please input major crime details:", "Security HUD", "", null) - if(!R || !t1 || !t2 || !allowed_access) - return - if(!H.canUseHUD()) - return - if(!HAS_TRAIT(H, TRAIT_SECURITY_HUD)) - return - var/crime = GLOB.data_core.createCrimeEntry(t1, t2, allowed_access, station_time_timestamp()) - GLOB.data_core.addMajorCrime(R.fields["id"], crime) - investigate_log("New Major Crime: [t1]: [t2] | Added to [R.fields["name"]] by [key_name(usr)]", INVESTIGATE_RECORDS) - to_chat(usr, "Successfully added a major crime.") - return - - if(href_list["view_comment"]) - if(!H.canUseHUD()) - return - if(!HAS_TRAIT(H, TRAIT_SECURITY_HUD)) - return - to_chat(usr, "Comments/Log:") - var/counter = 1 - while(R.fields[text("com_[]", counter)]) - to_chat(usr, R.fields[text("com_[]", counter)]) - to_chat(usr, "----------") - counter++ - return - - if(href_list["add_comment"]) - var/t1 = stripped_multiline_input("Add Comment:", "Secure. records", null, null) - if (!R || !t1 || !allowed_access) - return - if(!H.canUseHUD()) - return - if(!HAS_TRAIT(H, TRAIT_SECURITY_HUD)) - return - var/counter = 1 - while(R.fields[text("com_[]", counter)]) - counter++ - R.fields[text("com_[]", counter)] = text("Made by [] on [] [], []
[]", allowed_access, station_time_timestamp(), time2text(world.realtime, "MMM DD"), GLOB.year_integer+540, t1) - to_chat(usr, "Successfully added comment.") - return - return ..() //end of this massive fucking chain. TODO: make the hud chain not spooky. - Yeah, great job doing that. diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 44c4c971e5..2c87ed9bdb 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -237,265 +237,12 @@ //Start of a breath chain, calls breathe() /mob/living/carbon/handle_breathing(times_fired) return -/* var/next_breath = 4 - var/obj/item/organ/lungs/L = getorganslot(ORGAN_SLOT_LUNGS) - var/obj/item/organ/heart/H = getorganslot(ORGAN_SLOT_HEART) - if(L) - if(L.damage > L.high_threshold) - next_breath-- - if(H) - if(H.damage > H.high_threshold) - next_breath-- - - if((times_fired % next_breath) == 0 || failed_last_breath) - breathe() //Breathe per 4 ticks if healthy, down to 2 if our lungs or heart are damaged, unless suffocating - if(failed_last_breath) - SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "suffocation", /datum/mood_event/suffocation) - else - SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "suffocation") - else - if(istype(loc, /obj/)) - var/obj/location_as_object = loc - location_as_object.handle_internal_lifeform(src,0) */ - -//Second link in a breath chain, calls check_breath() -/mob/living/carbon/proc/breathe() - var/obj/item/organ/lungs = getorganslot(ORGAN_SLOT_LUNGS) - if(reagents.has_reagent(/datum/reagent/toxin/lexorin, needs_metabolizing = TRUE)) - return - - var/datum/gas_mixture/environment - if(loc) - environment = loc.return_air() - - var/datum/gas_mixture/breath - - if(!getorganslot(ORGAN_SLOT_BREATHING_TUBE)) - if(health <= HEALTH_THRESHOLD_FULLCRIT || (pulledby && pulledby.grab_state >= GRAB_KILL) || HAS_TRAIT(src, TRAIT_MAGIC_CHOKE) || (lungs && lungs.organ_flags & ORGAN_FAILING)) - losebreath++ //You can't breath at all when in critical or when being choked, so you're going to miss a breath - - else if(health <= crit_threshold) - losebreath += 0.25 //You're having trouble breathing in soft crit, so you'll miss a breath one in four times - - //Suffocate - if(losebreath >= 1) //You've missed a breath, take oxy damage - losebreath-- - if(prob(10)) - emote("gasp") - if(istype(loc, /obj/)) - var/obj/loc_as_obj = loc - loc_as_obj.handle_internal_lifeform(src,0) - else - //Breathe from internal - breath = get_breath_from_internal(BREATH_VOLUME) - - if(isnull(breath)) //in case of 0 pressure internals - - if(isobj(loc)) //Breathe from loc as object - var/obj/loc_as_obj = loc - breath = loc_as_obj.handle_internal_lifeform(src, BREATH_VOLUME) - - else if(isturf(loc)) //Breathe from loc as turf - var/breath_moles = 0 - if(environment) - breath_moles = environment.total_moles()*BREATH_PERCENTAGE - - breath = loc.remove_air(breath_moles) - else //Breathe from loc as obj again - if(istype(loc, /obj/)) - var/obj/loc_as_obj = loc - loc_as_obj.handle_internal_lifeform(src,0) - - check_breath(breath) - - if(breath) - loc.assume_air(breath) - air_update_turf() /mob/living/carbon/proc/has_smoke_protection() if(HAS_TRAIT(src, TRAIT_NOBREATH)) return TRUE return FALSE - -//Third link in a breath chain, calls handle_breath_temperature() -/mob/living/carbon/proc/check_breath(datum/gas_mixture/breath) - if(status_flags & GODMODE) - return - if(HAS_TRAIT(src, TRAIT_NOBREATH)) - return - - var/obj/item/organ/lungs = getorganslot(ORGAN_SLOT_LUNGS) - if(!lungs) - adjustOxyLoss(2) - - //CRIT - if(!breath || (breath.total_moles() == 0) || !lungs) - if(reagents.has_reagent(/datum/reagent/medicine/epinephrine, needs_metabolizing = TRUE) && lungs) - return - adjustOxyLoss(1) - - failed_last_breath = 1 - throw_alert("not_enough_oxy", /atom/movable/screen/alert/not_enough_oxy) - return 0 - - var/safe_oxy_min = 16 - var/safe_co2_max = 10 - var/safe_tox_max = 0.05 - var/SA_para_min = 1 - var/SA_sleep_min = 5 - var/oxygen_used = 0 - var/breath_pressure = (breath.total_moles()*R_IDEAL_GAS_EQUATION*breath.temperature)/BREATH_VOLUME - - var/list/breath_gases = breath.gases - breath.assert_gases(/datum/gas/oxygen, /datum/gas/plasma, /datum/gas/carbon_dioxide, /datum/gas/nitrous_oxide, /datum/gas/bz) - var/O2_partialpressure = (breath_gases[/datum/gas/oxygen][MOLES]/breath.total_moles())*breath_pressure - var/Toxins_partialpressure = (breath_gases[/datum/gas/plasma][MOLES]/breath.total_moles())*breath_pressure - var/CO2_partialpressure = (breath_gases[/datum/gas/carbon_dioxide][MOLES]/breath.total_moles())*breath_pressure - - - //OXYGEN - if(O2_partialpressure < safe_oxy_min) //Not enough oxygen - if(prob(20)) - emote("gasp") - if(O2_partialpressure > 0) - var/ratio = 1 - O2_partialpressure/safe_oxy_min - adjustOxyLoss(min(5*ratio, 3)) - failed_last_breath = 1 - oxygen_used = breath_gases[/datum/gas/oxygen][MOLES]*ratio - else - adjustOxyLoss(3) - failed_last_breath = 1 - throw_alert("not_enough_oxy", /atom/movable/screen/alert/not_enough_oxy) - - else //Enough oxygen - failed_last_breath = 0 - if(health >= crit_threshold) - adjustOxyLoss(-5) - oxygen_used = breath_gases[/datum/gas/oxygen][MOLES] - clear_alert("not_enough_oxy") - - breath_gases[/datum/gas/oxygen][MOLES] -= oxygen_used - breath_gases[/datum/gas/carbon_dioxide][MOLES] += oxygen_used - - //CARBON DIOXIDE - if(CO2_partialpressure > safe_co2_max) - if(!co2overloadtime) - co2overloadtime = world.time - else if(world.time - co2overloadtime > 120) - Unconscious(60) - adjustOxyLoss(3) - if(world.time - co2overloadtime > 300) - adjustOxyLoss(8) - if(prob(20)) - emote("cough") - - else - co2overloadtime = 0 - - //TOXINS/PLASMA - if(Toxins_partialpressure > safe_tox_max) - var/ratio = (breath_gases[/datum/gas/plasma][MOLES]/safe_tox_max) * 10 - adjustToxLoss(CLAMP(ratio, MIN_TOXIC_GAS_DAMAGE, MAX_TOXIC_GAS_DAMAGE)) - throw_alert("too_much_tox", /atom/movable/screen/alert/too_much_tox) - else - clear_alert("too_much_tox") - - //NITROUS OXIDE - if(breath_gases[/datum/gas/nitrous_oxide]) - var/SA_partialpressure = (breath_gases[/datum/gas/nitrous_oxide][MOLES]/breath.total_moles())*breath_pressure - if(SA_partialpressure > SA_para_min) - Unconscious(60) - if(SA_partialpressure > SA_sleep_min) - Sleeping(max(AmountSleeping() + 40, 200)) - else if(SA_partialpressure > 0.01) - if(prob(20)) - emote(pick("giggle","laugh")) - SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "chemical_euphoria", /datum/mood_event/chemical_euphoria) - else - SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "chemical_euphoria") - - //BZ (Facepunch port of their Agent B) - if(breath_gases[/datum/gas/bz]) - var/bz_partialpressure = (breath_gases[/datum/gas/bz][MOLES]/breath.total_moles())*breath_pressure - if(bz_partialpressure > 1) - hallucination += 10 - else if(bz_partialpressure > 0.01) - hallucination += 5 - - //TRITIUM - if(breath_gases[/datum/gas/tritium]) - var/tritium_partialpressure = (breath_gases[/datum/gas/tritium][MOLES]/breath.total_moles())*breath_pressure - radiation += tritium_partialpressure/10 - - //NITRYL - if(breath_gases[/datum/gas/nitryl]) - var/nitryl_partialpressure = (breath_gases[/datum/gas/nitryl][MOLES]/breath.total_moles())*breath_pressure - adjustFireLoss(nitryl_partialpressure/4) - - //MIASMA - if(breath_gases[/datum/gas/miasma]) - var/miasma_partialpressure = (breath_gases[/datum/gas/miasma][MOLES]/breath.total_moles())*breath_pressure - //Miasma side effects - switch(miasma_partialpressure) - if(0.25 to 5) - // At lower pp, give out a little warning - SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "smell") - if(prob(5)) - to_chat(src, "There is an unpleasant smell in the air.") - if(5 to 20) - //At somewhat higher pp, warning becomes more obvious - if(prob(15)) - to_chat(src, "I smell something horribly decayed inside this room.") - SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "smell", /datum/mood_event/disgust/bad_smell) - if(15 to 30) - //Small chance to vomit. By now, people have internals on anyway - if(prob(5)) - to_chat(src, "The stench of rotting carcasses is unbearable!") - SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "smell", /datum/mood_event/disgust/nauseating_stench) - vomit() - if(30 to INFINITY) - //Higher chance to vomit. Let the horror start - if(prob(25)) - to_chat(src, "The stench of rotting carcasses is unbearable!") - SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "smell", /datum/mood_event/disgust/nauseating_stench) - vomit() - else - SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "smell") - - - //Clear all moods if no miasma at all - else - SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "smell") - - - - - breath.garbage_collect() - - //BREATH TEMPERATURE - handle_breath_temperature(breath) - - return 1 - -//Fourth and final link in a breath chain -/mob/living/carbon/proc/handle_breath_temperature(datum/gas_mixture/breath) - return - -/mob/living/carbon/proc/get_breath_from_internal(volume_needed) - if(internal) - if(internal.loc != src) - internal = null - update_internals_hud_icon(0) - else if ((!wear_mask || !(wear_mask.clothing_flags & MASKINTERNALS)) && !getorganslot(ORGAN_SLOT_BREATHING_TUBE)) - internal = null - update_internals_hud_icon(0) - else - update_internals_hud_icon(1) - . = internal.remove_air_volume(volume_needed) - if(!.) - return FALSE //to differentiate between no internals and active, but empty internals - /mob/living/carbon/proc/handle_bodyparts() var/stam_regen = FALSE if(stam_regen_start_time <= world.time) diff --git a/code/modules/mob/living/carbon/monkey/life.dm b/code/modules/mob/living/carbon/monkey/life.dm index 0ca9b7af63..8ed85d1d04 100644 --- a/code/modules/mob/living/carbon/monkey/life.dm +++ b/code/modules/mob/living/carbon/monkey/life.dm @@ -49,22 +49,6 @@ vomit(10, TRUE) return ..() -/mob/living/carbon/monkey/handle_breath_temperature(datum/gas_mixture/breath) - if(abs(BODYTEMP_NORMAL - breath.temperature) > 50) - switch(breath.temperature) - if(-INFINITY to 120) - adjustFireLoss(3) - if(120 to 200) - adjustFireLoss(1.5) - if(200 to 260) - adjustFireLoss(0.5) - if(360 to 400) - adjustFireLoss(2) - if(400 to 1000) - adjustFireLoss(3) - if(1000 to INFINITY) - adjustFireLoss(8) - /mob/living/carbon/monkey/handle_environment(datum/gas_mixture/environment) if(!environment) return diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index 4be1cd9bc9..e3888ebf39 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -8,7 +8,7 @@ pass_flags = PASSTABLE ventcrawler = VENTCRAWLER_NUDE mob_biotypes = MOB_ORGANIC|MOB_HUMANOID - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/monkey = 5, /obj/item/stack/sheet/animalhide/monkey = 1) + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/monkey = 5) type_of_meat = /obj/item/reagent_containers/food/snacks/meat/slab/monkey gib_type = /obj/effect/decal/cleanable/blood/gibs unique_name = TRUE @@ -91,14 +91,6 @@ stat(null, "Move Mode: [m_intent]") return - -/mob/living/carbon/monkey/verb/removeinternal() - set name = "Remove Internals" - set category = "IC" - internal = null - return - - /mob/living/carbon/monkey/IsAdvancedToolUser()//Unless its monkey mode monkeys can't use advanced tools if(mind) return TRUE @@ -123,10 +115,3 @@ /mob/living/carbon/monkey/angry aggressive = TRUE - -/mob/living/carbon/monkey/angry/Initialize() - . = ..() - if(prob(10)) - var/obj/item/clothing/head/helmet/justice/escape/helmet = new(src) - equip_to_slot_or_del(helmet,SLOT_HEAD) - helmet.attack_self(src) // todo encapsulate toggle diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index 3bb2e5941c..b9ea0090ac 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -8,9 +8,6 @@ if (client) var/turf/T = get_turf(src) if(!T) - for(var/obj/effect/landmark/error/E in GLOB.landmarks_list) - forceMove(E.loc) - break var/msg = "[ADMIN_LOOKUPFLW(src)] was found to have no .loc with an attached client, if the cause is unknown it would be wise to ask how this was accomplished." message_admins(msg) send2irc_adminless_only("Mob", msg, R_ADMIN) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index a9911be6a9..f8593ef7a1 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -290,14 +290,7 @@ if((AM.anchored && !push_anchored) || (force < (AM.move_resist * MOVE_FORCE_PUSH_RATIO))) now_pushing = FALSE return - if (istype(AM, /obj/structure/window)) - var/obj/structure/window/W = AM - if(W.fulltile) - for(var/obj/structure/window/win in get_step(W,t)) - now_pushing = FALSE - return -// if(pulling == AM) -// stop_pulling() + var/current_dir if(isliving(AM)) current_dir = AM.dir @@ -380,18 +373,6 @@ changeNext_move(CLICK_CD_GRABBING) -// if(AM.pulledby && AM.pulledby != src) -// if(AM == src) -// to_chat(src, "I'm being grabbed by something!") -// return FALSE -// else -// if(!supress_message) -// AM.visible_message("[src] has pulled [AM] from [AM.pulledby]'s grip.", "[src] has pulled me from [AM.pulledby]'s grip.", null, null, src) -// -// to_chat(src, "I pull [AM] from [AM.pulledby]'s grip!") -// log_combat(AM, AM.pulledby, "pulled from", src) -// AM.pulledby.stop_pulling() //an object can't be pulled by two mobs at once. - if(AM != src) pulling = AM AM.pulledby = src @@ -473,40 +454,6 @@ /mob/living/proc/set_pull_offsets(mob/living/M, grab_state = GRAB_PASSIVE) return //rtd fix not updating because no dirchange -/* if(M == src) - return - if(M.wallpressed) - return - if(M.buckled) - return //don't make them change direction or offset them if they're buckled into something. - var/offset = 0 - switch(grab_state) - if(GRAB_PASSIVE) - offset = GRAB_PIXEL_SHIFT_PASSIVE - if(GRAB_AGGRESSIVE) - offset = GRAB_PIXEL_SHIFT_AGGRESSIVE - if(GRAB_NECK) - offset = GRAB_PIXEL_SHIFT_NECK - if(GRAB_KILL) - offset = GRAB_PIXEL_SHIFT_NECK - M.setDir(get_dir(M, src)) - switch(M.dir) - if(NORTH) - M.set_mob_offsets("pulledby", _x = 0, _y = offset) - if(SOUTH) - M.set_mob_offsets("pulledby", _x = 0, _y = -offset) - if(EAST) - if(M.lying == 270) //update the dragged dude's direction if we've turned - M.lying = 90 - M.update_transform() //force a transformation update, otherwise it'll take a few ticks for update_mobility() to do so - M.lying_prev = M.lying - M.set_mob_offsets("pulledby", _x = offset, _y = 0) - if(WEST) - if(M.lying == 90) - M.lying = 270 - M.update_transform() - M.lying_prev = M.lying - M.set_mob_offsets("pulledby", _x = offset, _y = 0) */ /mob/living var/list/mob_offsets = list() @@ -516,16 +463,11 @@ if(mob_offsets[index]) reset_offsets(index) mob_offsets[index] = list("x" = _x, "y" = _y) -// pixel_x = pixel_x + mob_offsets[index]["x"] -// pixel_y = pixel_y + mob_offsets[index]["y"] update_transform() /mob/living/proc/reset_offsets(index) if(index) if(mob_offsets[index]) -// animate(src, pixel_x = pixel_x - mob_offsets[index]["x"], pixel_y = pixel_y - mob_offsets[index]["y"], 1) -// pixel_x = pixel_x - mob_offsets[index]["x"] -// pixel_y = pixel_y - mob_offsets[index]["y"] mob_offsets[index] = null update_transform() @@ -723,8 +665,6 @@ for(var/i in ret.Copy()) //iterate storage objects var/atom/A = i SEND_SIGNAL(A, COMSIG_TRY_STORAGE_RETURN_INVENTORY, ret) - for(var/obj/item/folder/F in ret.Copy()) //very snowflakey-ly iterate folders - ret |= F.contents return ret // Living mobs use can_inject() to make sure that the mob is not syringe-proof in general. @@ -1289,9 +1229,6 @@ var/obj_temp = oloc.return_temperature() if(obj_temp != null) loc_temp = obj_temp - else if(isspaceturf(get_turf(src))) - var/turf/heat_turf = get_turf(src) - loc_temp = heat_turf.temperature return loc_temp /mob/living/proc/get_standard_pixel_x_offset(lying = 0) diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm deleted file mode 100644 index 1ce943c490..0000000000 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ /dev/null @@ -1,435 +0,0 @@ -/mob/living/simple_animal/hostile/construct - name = "Construct" - real_name = "Construct" - desc = "" - gender = NEUTER - mob_biotypes = NONE - speak_emote = list("hisses") - response_help_continuous = "thinks better of touching" - response_help_simple = "think better of touching" - response_disarm_continuous = "flails at" - response_disarm_simple = "flail at" - response_harm_continuous = "punches" - response_harm_simple = "punch" - speak_chance = 1 - icon = 'icons/mob/mob.dmi' - speed = 0 - spacewalk = TRUE - a_intent = INTENT_HARM - stop_automated_movement = 1 - status_flags = CANPUSH - attack_sound = 'sound/blank.ogg' - see_in_dark = 7 - lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE - damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 - maxbodytemp = INFINITY - healable = 0 - faction = list("cult") - movement_type = FLYING - pressure_resistance = 100 - unique_name = 1 - AIStatus = AI_OFF //normal constructs don't have AI - loot = list(/obj/item/ectoplasm) - del_on_death = TRUE - initial_language_holder = /datum/language_holder/construct - deathmessage = "collapses in a shattered heap." - hud_type = /datum/hud/constructs - var/list/construct_spells = list() - var/playstyle_string = "I are a generic construct! Your job is to not exist, and you should probably adminhelp this." - var/master = null - var/seeking = FALSE - var/can_repair_constructs = FALSE - var/can_repair_self = FALSE - var/runetype - var/holy = FALSE - -/mob/living/simple_animal/hostile/construct/Initialize() - . = ..() - update_health_hud() - var/spellnum = 1 - for(var/spell in construct_spells) - var/the_spell = new spell(null) - AddSpell(the_spell) - var/obj/effect/proc_holder/spell/S = mob_spell_list[spellnum] - var/pos = 2+spellnum*31 - if(construct_spells.len >= 4) - pos -= 31*(construct_spells.len - 4) - S.action.button.screen_loc = "6:[pos],4:-2" - S.action.button.moved = "6:[pos],4:-2" - spellnum++ - -/mob/living/simple_animal/hostile/construct/Login() - ..() - to_chat(src, playstyle_string) - -/mob/living/simple_animal/hostile/construct/examine(mob/user) - var/t_He = p_they(TRUE) - var/t_s = p_s() - . = list("*---------*\nThis is [icon2html(src, user)] \a [src]!\n[desc]") - if(health < maxHealth) - if(health >= maxHealth/2) - . += "[t_He] look[t_s] slightly dented." - else - . += "[t_He] look[t_s] severely dented!" - . += "*---------*" - -/mob/living/simple_animal/hostile/construct/attack_animal(mob/living/simple_animal/M) - if(isconstruct(M)) //is it a construct? - var/mob/living/simple_animal/hostile/construct/C = M - if(!C.can_repair_constructs || (C == src && !C.can_repair_self)) - return ..() - if(holy != C.holy) - return ..() - if(health < maxHealth) - adjustHealth(-5) - if(src != M) - Beam(M,icon_state="sendbeam",time=4) - M.visible_message("[M] repairs some of \the [src]'s dents.", \ - "I repair some of [src]'s dents, leaving [src] at [health]/[maxHealth] health.") - else - M.visible_message("[M] repairs some of [p_their()] own dents.", \ - "I repair some of your own dents, leaving you at [M.health]/[M.maxHealth] health.") - else - if(src != M) - to_chat(M, "I cannot repair [src]'s dents, as [p_they()] [p_have()] none!") - else - to_chat(M, "I cannot repair your own dents, as you have none!") - else if(src != M) - return ..() - -/mob/living/simple_animal/hostile/construct/narsie_act() - return - -/mob/living/simple_animal/hostile/construct/electrocute_act(shock_damage, source, siemens_coeff = 1, flags = NONE) - return 0 - -/mob/living/simple_animal/hostile/construct/adjustHealth(amount, updating_health = TRUE, forced = FALSE) - . = ..() - if(updating_health) - update_health_hud() - -/////////////////Juggernaut/////////////// -/mob/living/simple_animal/hostile/construct/armored - name = "Juggernaut" - real_name = "Juggernaut" - desc = "" - icon_state = "behemoth" - icon_living = "behemoth" - maxHealth = 150 - health = 150 - response_harm_continuous = "harmlessly punches" - response_harm_simple = "harmlessly punch" - harm_intent_damage = 0 - obj_damage = 90 - melee_damage_lower = 25 - melee_damage_upper = 25 - attack_verb_continuous = "smashes their armored gauntlet into" - attack_verb_simple = "smash your armored gauntlet into" - speed = 2.5 - environment_smash = ENVIRONMENT_SMASH_WALLS - attack_sound = 'sound/blank.ogg' - status_flags = 0 - mob_size = MOB_SIZE_LARGE - force_threshold = 10 - construct_spells = list(/obj/effect/proc_holder/spell/targeted/forcewall/cult, - /obj/effect/proc_holder/spell/targeted/projectile/dumbfire/juggernaut) - playstyle_string = "I are a Juggernaut. Though slow, your shell can withstand heavy punishment, \ - create shield walls, rip apart enemies and walls alike, and even deflect energy weapons." - -/mob/living/simple_animal/hostile/construct/armored/hostile //actually hostile, will move around, hit things - AIStatus = AI_ON - environment_smash = ENVIRONMENT_SMASH_STRUCTURES //only token destruction, don't smash the cult wall NO STOP - -/mob/living/simple_animal/hostile/construct/armored/bullet_act(obj/projectile/P) - if(istype(P, /obj/projectile/energy) || istype(P, /obj/projectile/beam)) - var/reflectchance = 40 - round(P.damage/3) - if(prob(reflectchance)) - apply_damage(P.damage * 0.5, P.damage_type) - visible_message("The [P.name] is reflected by [src]'s armored shell!", \ - "The [P.name] is reflected by your armored shell!") - - // Find a turf near or on the original location to bounce to - if(P.starting) - var/new_x = P.starting.x + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3) - var/new_y = P.starting.y + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3) - var/turf/curloc = get_turf(src) - - // redirect the projectile - P.original = locate(new_x, new_y, P.z) - P.starting = curloc - P.firer = src - P.yo = new_y - curloc.y - P.xo = new_x - curloc.x - var/new_angle_s = P.Angle + rand(120,240) - while(new_angle_s > 180) // Translate to regular projectile degrees - new_angle_s -= 360 - P.setAngle(new_angle_s) - - return BULLET_ACT_FORCE_PIERCE // complete projectile permutation - - return ..() - -//////////////////////////Angelic-Juggernaut//////////////////////////// -/mob/living/simple_animal/hostile/construct/armored/angelic - icon_state = "behemoth_angelic" - icon_living = "behemoth_angelic" - holy = TRUE - loot = list(/obj/item/ectoplasm/angelic) - -/mob/living/simple_animal/hostile/construct/armored/noncult - -////////////////////////Wraith///////////////////////////////////////////// -/mob/living/simple_animal/hostile/construct/wraith - name = "Wraith" - real_name = "Wraith" - desc = "" - icon_state = "floating" - icon_living = "floating" - maxHealth = 65 - health = 65 - melee_damage_lower = 20 - melee_damage_upper = 20 - retreat_distance = 2 //AI wraiths will move in and out of combat - attack_verb_continuous = "slashes" - attack_verb_simple = "slash" - attack_sound = 'sound/blank.ogg' - construct_spells = list(/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift) - playstyle_string = "I are a Wraith. Though relatively fragile, you are fast, deadly, can phase through walls, and your attacks will lower the cooldown on phasing." - - var/attack_refund = 10 //1 second per attack - var/crit_refund = 50 //5 seconds when putting a target into critical - var/kill_refund = 250 //full refund on kills - -/mob/living/simple_animal/hostile/construct/wraith/AttackingTarget() //refund jaunt cooldown when attacking living targets - var/prev_stat - if(isliving(target)) - var/mob/living/L = target - prev_stat = L.stat - - . = ..() - - if(. && isnum(prev_stat)) - var/mob/living/L = target - var/refund = 0 - if(QDELETED(L) || (L.stat == DEAD && prev_stat != DEAD)) //they're dead, you killed them - refund += kill_refund - else if(L.InCritical() && prev_stat == CONSCIOUS) //you knocked them into critical - refund += crit_refund - if(L.stat != DEAD && prev_stat != DEAD) - refund += attack_refund - for(var/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift/S in mob_spell_list) - S.charge_counter = min(S.charge_counter + refund, S.charge_max) - -/mob/living/simple_animal/hostile/construct/wraith/hostile //actually hostile, will move around, hit things - AIStatus = AI_ON - -//////////////////////////Angelic-Wraith//////////////////////////// -/mob/living/simple_animal/hostile/construct/wraith/angelic - icon_state = "floating_angelic" - icon_living = "floating_angelic" - holy = TRUE - loot = list(/obj/item/ectoplasm/angelic) - -/mob/living/simple_animal/hostile/construct/wraith/noncult - -/////////////////////////////Artificer///////////////////////// -/mob/living/simple_animal/hostile/construct/builder - name = "Artificer" - real_name = "Artificer" - desc = "" - icon_state = "artificer" - icon_living = "artificer" - maxHealth = 50 - health = 50 - response_harm_continuous = "viciously beats" - response_harm_simple = "viciously beat" - harm_intent_damage = 5 - obj_damage = 60 - melee_damage_lower = 5 - melee_damage_upper = 5 - retreat_distance = 10 - minimum_distance = 10 //AI artificers will flee like fuck - attack_verb_continuous = "rams" - attack_verb_simple = "ram" - environment_smash = ENVIRONMENT_SMASH_WALLS - attack_sound = 'sound/blank.ogg' - construct_spells = list(/obj/effect/proc_holder/spell/aoe_turf/conjure/wall, - /obj/effect/proc_holder/spell/aoe_turf/conjure/soulstone, - /obj/effect/proc_holder/spell/aoe_turf/conjure/construct/lesser, - /obj/effect/proc_holder/spell/targeted/projectile/magic_missile/lesser) - playstyle_string = "I are an Artificer. You are incredibly weak and fragile, but you are able to construct fortifications, \ - - use magic missile, repair allied constructs, shades, and myself (by clicking on them), \ - and, most important of all, create new constructs by producing soulstones to capture souls, \ - and shells to place those soulstones into." - can_repair_constructs = TRUE - can_repair_self = TRUE - -/mob/living/simple_animal/hostile/construct/builder/Found(atom/A) //what have we found here? - if(isconstruct(A)) //is it a construct? - var/mob/living/simple_animal/hostile/construct/C = A - if(C.health < C.maxHealth) //is it hurt? let's go heal it if it is - return 1 - else - return 0 - else - return 0 - -/mob/living/simple_animal/hostile/construct/builder/CanAttack(atom/the_target) - if(see_invisible < the_target.invisibility)//Target's invisible to us, forget it - return 0 - if(Found(the_target) || ..()) //If we Found it or Can_Attack it normally, we Can_Attack it as long as it wasn't invisible - return 1 //as a note this shouldn't be added to base hostile mobs because it'll mess up retaliate hostile mobs - -/mob/living/simple_animal/hostile/construct/builder/MoveToTarget(list/possible_targets) - ..() - if(isliving(target)) - var/mob/living/L = target - if(isconstruct(L) && L.health >= L.maxHealth) //is this target an unhurt construct? stop trying to heal it - LoseTarget() - return 0 - if(L.health <= melee_damage_lower+melee_damage_upper) //ey bucko you're hurt as fuck let's go hit you - retreat_distance = null - minimum_distance = 1 - -/mob/living/simple_animal/hostile/construct/builder/Aggro() - ..() - if(isconstruct(target)) //oh the target is a construct no need to flee - retreat_distance = null - minimum_distance = 1 - -/mob/living/simple_animal/hostile/construct/builder/LoseAggro() - ..() - retreat_distance = initial(retreat_distance) - minimum_distance = initial(minimum_distance) - -/mob/living/simple_animal/hostile/construct/builder/hostile //actually hostile, will move around, hit things, heal other constructs - AIStatus = AI_ON - environment_smash = ENVIRONMENT_SMASH_STRUCTURES //only token destruction, don't smash the cult wall NO STOP - -/////////////////////////////Angelic Artificer///////////////////////// -/mob/living/simple_animal/hostile/construct/builder/angelic - desc = "" - icon_state = "artificer_angelic" - icon_living = "artificer_angelic" - holy = TRUE - loot = list(/obj/item/ectoplasm/angelic) - construct_spells = list(/obj/effect/proc_holder/spell/aoe_turf/conjure/soulstone/noncult/purified, - /obj/effect/proc_holder/spell/aoe_turf/conjure/construct/lesser, - /obj/effect/proc_holder/spell/targeted/projectile/magic_missile/lesser) - -/mob/living/simple_animal/hostile/construct/builder/noncult - construct_spells = list(/obj/effect/proc_holder/spell/aoe_turf/conjure/wall, - /obj/effect/proc_holder/spell/aoe_turf/conjure/soulstone/noncult, - /obj/effect/proc_holder/spell/aoe_turf/conjure/construct/lesser, - /obj/effect/proc_holder/spell/targeted/projectile/magic_missile/lesser) - -/////////////////////////////Harvester///////////////////////// -/mob/living/simple_animal/hostile/construct/harvester - name = "Harvester" - real_name = "Harvester" - desc = "" - icon_state = "chosen" - icon_living = "chosen" - maxHealth = 40 - health = 40 - sight = SEE_MOBS - melee_damage_lower = 15 - melee_damage_upper = 20 - attack_verb_continuous = "butchers" - attack_verb_simple = "butcher" - attack_sound = 'sound/blank.ogg' - construct_spells = list(/obj/effect/proc_holder/spell/aoe_turf/area_conversion, - /obj/effect/proc_holder/spell/targeted/forcewall/cult) - playstyle_string = "I are a Harvester. You are incapable of directly killing humans, but your attacks will remove their limbs: \ - Bring those who still cling to this world of illusion back to the Geometer so they may know Truth. Your form and any you are pulling can pass through runed walls effortlessly." - can_repair_constructs = TRUE - - -/mob/living/simple_animal/hostile/construct/harvester/Bump(atom/AM) - . = ..() - if(istype(AM, /turf/closed/wall/mineral/cult) && AM != loc) //we can go through cult walls - var/atom/movable/stored_pulling = pulling - if(stored_pulling) - stored_pulling.setDir(get_dir(stored_pulling.loc, loc)) - stored_pulling.forceMove(loc) - forceMove(AM) - if(stored_pulling) - start_pulling(stored_pulling, supress_message = TRUE) //drag anything we're pulling through the wall with us by magic - -/mob/living/simple_animal/hostile/construct/harvester/AttackingTarget() - if(iscarbon(target)) - var/mob/living/carbon/C = target - if(HAS_TRAIT(C, TRAIT_NODISMEMBER)) - return ..() //ATTACK! - var/list/parts = list() - var/undismembermerable_limbs = 0 - for(var/X in C.bodyparts) - var/obj/item/bodypart/BP = X - if(BP.body_part != HEAD && BP.body_part != CHEST) - if(BP.dismemberable) - parts += BP - else - undismembermerable_limbs++ - if(!LAZYLEN(parts)) - if(undismembermerable_limbs) //they have limbs we can't remove, and no parts we can, attack! - return ..() - C.Paralyze(60) - visible_message("[src] knocks [C] down!") - to_chat(src, "\"Bring [C.p_them()] to me.\"") - return FALSE - do_attack_animation(C) - var/obj/item/bodypart/BP = pick(parts) - BP.dismember() - return FALSE - . = ..() - -///////////////////////Master-Tracker/////////////////////// - -/datum/action/innate/seek_master - name = "Seek your Master" - desc = "" - background_icon_state = "bg_demon" - buttontooltipstyle = "cult" - button_icon_state = "cult_mark" - var/tracking = FALSE - var/mob/living/simple_animal/hostile/construct/the_construct - - -/datum/action/innate/seek_master/Grant(mob/living/C) - the_construct = C - ..() - - -/datum/action/innate/seek_prey - name = "Seek the Harvest" - desc = "" - icon_icon = 'icons/mob/actions/actions_cult.dmi' - background_icon_state = "bg_demon" - buttontooltipstyle = "cult" - button_icon_state = "cult_mark" - var/mob/living/simple_animal/hostile/construct/harvester/the_construct - -/datum/action/innate/seek_prey/Grant(mob/living/C) - the_construct = C - ..() - - -/////////////////////////////ui stuff///////////////////////////// - -/mob/living/simple_animal/hostile/construct/update_health_hud() - if(hud_used) - if(health >= maxHealth) - hud_used.healths.icon_state = "[icon_state]_health0" - else if(health > maxHealth*0.8) - hud_used.healths.icon_state = "[icon_state]_health2" - else if(health > maxHealth*0.6) - hud_used.healths.icon_state = "[icon_state]_health3" - else if(health > maxHealth*0.4) - hud_used.healths.icon_state = "[icon_state]_health4" - else if(health > maxHealth*0.2) - hud_used.healths.icon_state = "[icon_state]_health5" - else - hud_used.healths.icon_state = "[icon_state]_health6" diff --git a/code/modules/mob/living/simple_animal/corpse.dm b/code/modules/mob/living/simple_animal/corpse.dm deleted file mode 100644 index e116b4446c..0000000000 --- a/code/modules/mob/living/simple_animal/corpse.dm +++ /dev/null @@ -1,188 +0,0 @@ -//Meant for simple animals to drop lootable human bodies. - -//If someone can do this in a neater way, be my guest-Kor - -//This has to be separate from the Away Mission corpses, because New() doesn't work for those, and initialize() doesn't work for these. - -//To do: Allow corpses to appear mangled, bloody, etc. Allow customizing the bodies appearance (they're all bald and white right now). - -//List of different corpse types - -/obj/effect/mob_spawn/human/corpse/syndicatesoldier - name = "Syndicate Operative" - id_job = "Operative" - hairstyle = "Bald" - facial_hairstyle = "Shaved" - outfit = /datum/outfit/syndicatesoldiercorpse - -/datum/outfit/syndicatesoldiercorpse - name = "Syndicate Operative Corpse" - uniform = /obj/item/clothing/under/syndicate - suit = /obj/item/clothing/suit/armor/vest - shoes = /obj/item/clothing/shoes/combat - gloves = /obj/item/clothing/gloves/combat - mask = /obj/item/clothing/mask/gas - head = /obj/item/clothing/head/helmet/swat - back = /obj/item/storage/backpack - -/obj/effect/mob_spawn/human/corpse/syndicatecommando - name = "Syndicate Commando" - id_job = "Operative" - hairstyle = "Bald" - facial_hairstyle = "Shaved" - outfit = /datum/outfit/syndicatecommandocorpse - -/datum/outfit/syndicatecommandocorpse - name = "Syndicate Commando Corpse" - uniform = /obj/item/clothing/under/syndicate - shoes = /obj/item/clothing/shoes/combat - gloves = /obj/item/clothing/gloves/combat - mask = /obj/item/clothing/mask/gas/syndicate - r_pocket = /obj/item/tank/internals/emergency_oxygen - - -/obj/effect/mob_spawn/human/corpse/syndicatestormtrooper - name = "Syndicate Stormtrooper" - id_job = "Operative" - hairstyle = "Bald" - facial_hairstyle = "Shaved" - outfit = /datum/outfit/syndicatestormtroopercorpse - -/datum/outfit/syndicatestormtroopercorpse - name = "Syndicate Stormtrooper Corpse" - uniform = /obj/item/clothing/under/syndicate - shoes = /obj/item/clothing/shoes/combat - gloves = /obj/item/clothing/gloves/combat - mask = /obj/item/clothing/mask/gas/syndicate - - -/obj/effect/mob_spawn/human/clown/corpse - roundstart = FALSE - instant = TRUE - skin_tone = "fcccb3" - hairstyle = "Bald" - facial_hairstyle = "Shaved" - -/obj/effect/mob_spawn/human/corpse/pirate - name = "Pirate" - skin_tone = "fcccb3" //all pirates are white because it's easier that way - outfit = /datum/outfit/piratecorpse - hairstyle = "Bald" - facial_hairstyle = "Shaved" - -/datum/outfit/piratecorpse - name = "Pirate Corpse" - uniform = /obj/item/clothing/under/costume/pirate - shoes = /obj/item/clothing/shoes/jackboots - glasses = /obj/item/clothing/glasses/eyepatch - head = /obj/item/clothing/head/bandana - - -/obj/effect/mob_spawn/human/corpse/pirate/ranged - name = "Pirate Gunner" - outfit = /datum/outfit/piratecorpse/ranged - -/datum/outfit/piratecorpse/ranged - name = "Pirate Gunner Corpse" - suit = /obj/item/clothing/suit/pirate - head = /obj/item/clothing/head/pirate - - -/obj/effect/mob_spawn/human/corpse/russian - name = "Russian" - outfit = /datum/outfit/russiancorpse - hairstyle = "Bald" - facial_hairstyle = "Shaved" - -/datum/outfit/russiancorpse - name = "Russian Corpse" - uniform = /obj/item/clothing/under/costume/soviet - shoes = /obj/item/clothing/shoes/jackboots - head = /obj/item/clothing/head/bearpelt - gloves = /obj/item/clothing/gloves/color/black - mask = /obj/item/clothing/mask/gas - - - -/obj/effect/mob_spawn/human/corpse/russian/ranged - outfit = /datum/outfit/russiancorpse/ranged - -/datum/outfit/russiancorpse/ranged - name = "Ranged Russian Corpse" - head = /obj/item/clothing/head/ushanka - - -/obj/effect/mob_spawn/human/corpse/russian/ranged/trooper - outfit = /datum/outfit/russiancorpse/ranged/trooper - -/datum/outfit/russiancorpse/ranged/trooper - name = "Ranged Russian Trooper Corpse" - uniform = /obj/item/clothing/under/syndicate/camo - suit = /obj/item/clothing/suit/armor/bulletproof - shoes = /obj/item/clothing/shoes/combat - gloves = /obj/item/clothing/gloves/combat - head = /obj/item/clothing/head/helmet/alt - mask = /obj/item/clothing/mask/balaclava - - -/obj/effect/mob_spawn/human/corpse/russian/ranged/officer - name = "Russian Officer" - outfit = /datum/outfit/russiancorpse/officer - -/datum/outfit/russiancorpse/officer - name = "Russian Officer Corpse" - uniform = /obj/item/clothing/under/costume/russian_officer - suit = /obj/item/clothing/suit/security/officer/russian - shoes = /obj/item/clothing/shoes/combat - head = /obj/item/clothing/head/ushanka - - -/obj/effect/mob_spawn/human/corpse/wizard - name = "Space Wizard Corpse" - outfit = /datum/outfit/wizardcorpse - hairstyle = "Bald" - facial_hairstyle = "Long Beard" - skin_tone = "caucasian1" - -/datum/outfit/wizardcorpse - name = "Space Wizard Corpse" - uniform = /obj/item/clothing/under/color/lightpurple - suit = /obj/item/clothing/suit/wizrobe - shoes = /obj/item/clothing/shoes/sandal/magic - head = /obj/item/clothing/head/wizard - - -/obj/effect/mob_spawn/human/corpse/nanotrasensoldier - name = "Nanotrasen Private Security Officer" - id_job = "Private Security Force" - id_access = "Security Officer" - outfit = /datum/outfit/nanotrasensoldiercorpse2 - hairstyle = "Bald" - facial_hairstyle = "Shaved" - -/datum/outfit/nanotrasensoldiercorpse2 - name = "NT Private Security Officer Corpse" - uniform = /obj/item/clothing/under/rank/security/officer - suit = /obj/item/clothing/suit/armor/vest - shoes = /obj/item/clothing/shoes/combat - gloves = /obj/item/clothing/gloves/combat - mask = /obj/item/clothing/mask/gas/sechailer/swat - head = /obj/item/clothing/head/helmet/swat/nanotrasen - back = /obj/item/storage/backpack/security - -/obj/effect/mob_spawn/human/corpse/cat_butcher - name = "The Cat Surgeon" - id_job = "Cat Surgeon" - id_access_list = list(ACCESS_AWAY_GENERAL, ACCESS_AWAY_MAINT) - hairstyle = "Cut Hair" - facial_hairstyle = "Watson Mustache" - skin_tone = "caucasian1" - outfit = /datum/outfit/cat_butcher - -/datum/outfit/cat_butcher - name = "Cat Butcher Uniform" - uniform = /obj/item/clothing/under/rank/medical/doctor/green - shoes = /obj/item/clothing/shoes/sneakers/white - gloves = /obj/item/clothing/gloves/color/latex/nitrile - back = /obj/item/storage/backpack/satchel/med - glasses = /obj/item/clothing/glasses/hud/health diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm index 7348f3a7be..beef7a4575 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -73,7 +73,7 @@ if(locate(/mob/living/carbon) in get_turf(src)) sleep(1) dir = pick(GLOB.alldirs) - step(src, dir) + step(src, dir) personal_space() else return @@ -84,10 +84,10 @@ STASPD = 5 var/isracist = TRUE // Hisses at dark elves if they try to pet it botched_butcher_results = list(/obj/item/reagent_containers/food/snacks/rogue/meat/steak = 1) - butcher_results = list(/obj/item/reagent_containers/food/snacks/rogue/meat/steak = 1, + butcher_results = list(/obj/item/reagent_containers/food/snacks/rogue/meat/steak = 1, /obj/item/alch/sinew = 1, /obj/item/alch/bone = 1) - perfect_butcher_results = list(/obj/item/reagent_containers/food/snacks/rogue/meat/steak = 1, + perfect_butcher_results = list(/obj/item/reagent_containers/food/snacks/rogue/meat/steak = 1, /obj/item/alch/sinew = 2, /obj/item/alch/bone = 1) @@ -110,10 +110,10 @@ emote_see = list("brings their ears alert.", "scratches their ear with a hindleg.") childtype = list() // TODO: puppy cabbits =:3 botched_butcher_results = list(/obj/item/reagent_containers/food/snacks/rogue/meat/steak = 1) - butcher_results = list(/obj/item/reagent_containers/food/snacks/rogue/meat/steak = 1, + butcher_results = list(/obj/item/reagent_containers/food/snacks/rogue/meat/steak = 1, /obj/item/alch/sinew = 1, /obj/item/alch/bone = 1) - perfect_butcher_results = list(/obj/item/reagent_containers/food/snacks/rogue/meat/steak = 1, + perfect_butcher_results = list(/obj/item/reagent_containers/food/snacks/rogue/meat/steak = 1, /obj/item/alch/sinew = 2, /obj/item/alch/bone = 1, /obj/item/natural/fur/cabbit = 1) @@ -266,11 +266,6 @@ movement_target = null stop_automated_movement = 0 break - for(var/obj/item/toy/cattoy/T in view(1,src)) - if (T.cooldown < (world.time - 400)) - emote("me", 1, "bats \the [T] around with its paw!") - T.cooldown = world.time - ..() make_babies() @@ -311,7 +306,7 @@ stop_automated_movement = 0 break - + diff --git a/code/modules/mob/living/simple_animal/friendly/crab.dm b/code/modules/mob/living/simple_animal/friendly/crab.dm deleted file mode 100644 index 109fa74673..0000000000 --- a/code/modules/mob/living/simple_animal/friendly/crab.dm +++ /dev/null @@ -1,73 +0,0 @@ -//Look Sir, free crabs! -/mob/living/simple_animal/crab - name = "crab" - desc = "" - icon_state = "crab" - icon_living = "crab" - icon_dead = "crab_dead" - speak_emote = list("clicks") - emote_hear = list("clicks.") - emote_see = list("clacks.") - speak_chance = 1 - turns_per_move = 5 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/rawcrab = 2) - response_help_continuous = "pets" - response_help_simple = "pet" - response_disarm_continuous = "gently pushes aside" - response_disarm_simple = "gently push aside" - response_harm_continuous = "stomps" - response_harm_simple = "stomp" - stop_automated_movement = 1 - friendly_verb_continuous = "pinches" - friendly_verb_simple = "pinch" - ventcrawler = VENTCRAWLER_ALWAYS - var/obj/item/inventory_head - var/obj/item/inventory_mask - gold_core_spawnable = FRIENDLY_SPAWN - -/mob/living/simple_animal/crab/Life() - ..() - //CRAB movement - if(!ckey && !stat) - if(isturf(loc) && !resting && !buckled) //This is so it only moves if it's not inside a closet, gentics machine, etc. - turns_since_move++ - if(turns_since_move >= turns_per_move) - var/east_vs_west = pick(4,8) - if(Process_Spacemove(east_vs_west)) - Move(get_step(src,east_vs_west), east_vs_west) - turns_since_move = 0 - regenerate_icons() - -//COFFEE! SQUEEEEEEEEE! -/mob/living/simple_animal/crab/Coffee - name = "Coffee" - real_name = "Coffee" - desc = "" - gender = FEMALE - gold_core_spawnable = NO_SPAWN - -/mob/living/simple_animal/crab/evil - name = "Evil Crab" - real_name = "Evil Crab" - desc = "" - icon_state = "evilcrab" - icon_living = "evilcrab" - icon_dead = "evilcrab_dead" - gold_core_spawnable = HOSTILE_SPAWN - -/mob/living/simple_animal/crab/kreb - name = "Kreb" - desc = "" - real_name = "Kreb" - icon_state = "kreb" - icon_living = "kreb" - icon_dead = "kreb_dead" - gold_core_spawnable = NO_SPAWN - -/mob/living/simple_animal/crab/evil/kreb - name = "Evil Kreb" - real_name = "Evil Kreb" - icon_state = "evilkreb" - icon_living = "evilkreb" - icon_dead = "evilkreb_dead" - gold_core_spawnable = NO_SPAWN diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm index a3b93c1cf7..1e7a4b82ff 100644 --- a/code/modules/mob/living/simple_animal/friendly/dog.dm +++ b/code/modules/mob/living/simple_animal/friendly/dog.dm @@ -81,7 +81,7 @@ icon_state = "corgi" icon_living = "corgi" icon_dead = "corgi_dead" - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/corgi = 3, /obj/item/stack/sheet/animalhide/corgi = 1) + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/corgi = 3) childtype = list(/mob/living/simple_animal/pet/dog/corgi/puppy = 95, /mob/living/simple_animal/pet/dog/corgi/puppy/void = 5) animal_species = /mob/living/simple_animal/pet/dog gold_core_spawnable = FRIENDLY_SPAWN diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm deleted file mode 100644 index af75efc8b7..0000000000 --- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm +++ /dev/null @@ -1,378 +0,0 @@ -// This whole file is mostly obsolete stuff, some bits like chicken still in sue -// //goat -/mob/living/simple_animal/hostile/retaliate/goat - name = "goat" - desc = "" - icon_state = "goat" - icon_living = "goat" - icon_dead = "goat_dead" - speak = list("EHEHEHEHEH","eh?") - speak_emote = list("brays") - emote_hear = list("brays.") - emote_see = list("shakes its head.", "stamps a foot.", "glares around.") - speak_chance = 1 - turns_per_move = 5 - see_in_dark = 6 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 4) - response_help_continuous = "pets" - response_help_simple = "pet" - response_disarm_continuous = "gently pushes aside" - response_disarm_simple = "gently push aside" - response_harm_continuous = "kicks" - response_harm_simple = "kick" - faction = list("neutral") - mob_biotypes = MOB_ORGANIC|MOB_BEAST - attack_same = 0 - attack_verb_continuous = "kicks" - attack_verb_simple = "kick" - attack_sound = 'sound/blank.ogg' - health = 40 - maxHealth = 40 - minbodytemp = 180 - melee_damage_lower = 1 - melee_damage_upper = 2 - environment_smash = ENVIRONMENT_SMASH_NONE - stop_automated_movement_when_pulled = 1 - blood_volume = BLOOD_VOLUME_NORMAL - food_type = list(/obj/item/reagent_containers/food/snacks/grown) -// var/obj/item/udder/udder = null - - footstep_type = FOOTSTEP_MOB_SHOE - -/mob/living/simple_animal/hostile/retaliate/goat/Initialize() - udder = new() - . = ..() - -/mob/living/simple_animal/hostile/retaliate/goat/Destroy() - qdel(udder) - udder = null - return ..() - -/mob/living/simple_animal/hostile/retaliate/goat/Life() - . = ..() - if(.) - //chance to go crazy and start wacking stuff - if(!enemies.len && prob(1)) - Retaliate() - - if(enemies.len && prob(10)) - enemies = list() - LoseTarget() - src.visible_message("[src] calms down.") - if(stat == CONSCIOUS) - udder.generateMilk() - eat_plants() - if(!pulledby) - for(var/direction in shuffle(list(1,2,4,8,5,6,9,10))) - var/step = get_step(src, direction) - if(step) - if(locate(/obj/structure/spacevine) in step || locate(/obj/structure/kneestingers) in step) - Move(step, get_dir(src, step)) - -/mob/living/simple_animal/hostile/retaliate/goat/Retaliate() - ..() - src.visible_message("[src] gets an evil-looking gleam in [p_their()] eye.") - -/mob/living/simple_animal/hostile/retaliate/goat/attackby(obj/item/O, mob/user, params) - if(stat == CONSCIOUS && istype(O, /obj/item/reagent_containers/glass)) - udder.milkAnimal(O, user) - return 1 - else - return ..() - - -/mob/living/simple_animal/hostile/retaliate/goat/AttackingTarget() - . = ..() - if(. && ishuman(target)) - var/mob/living/carbon/human/H = target - if(istype(H.dna.species, /datum/species/pod)) - var/obj/item/bodypart/NB = pick(H.bodyparts) - H.visible_message("[src] takes a big chomp out of [H]!", \ - "[src] takes a big chomp out of your [NB]!") - NB.dismember() -//cow -/mob/living/simple_animal/cow - name = "cow" - desc = "" - icon_state = "cow" - icon_living = "cow" - icon_dead = "cow_dead" - icon_gib = "cow_gib" - gender = FEMALE - mob_biotypes = MOB_ORGANIC|MOB_BEAST - speak = list("moo?","moo","MOOOOOO") - speak_emote = list("moos") - emote_hear = list("chews.") - emote_see = list("shakes her head.", "chews her cud.") - speak_chance = 1 - turns_per_move = 5 - see_in_dark = 6 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 6) - response_help_continuous = "pets" - response_help_simple = "pet" - response_disarm_continuous = "gently pushes aside" - response_disarm_simple = "gently push aside" - response_harm_continuous = "kicks" - response_harm_simple = "kick" - attack_verb_continuous = "kicks" - attack_verb_simple = "kick" - attack_sound = 'sound/blank.ogg' - health = 100 - maxHealth = 100 -// var/obj/item/udder/udder = null - gold_core_spawnable = FRIENDLY_SPAWN - blood_volume = BLOOD_VOLUME_NORMAL - food_type = list(/obj/item/reagent_containers/food/snacks/produce/wheat, /obj/item/reagent_containers/food/snacks/produce/oat) - tame_chance = 25 - bonus_tame_chance = 15 - footstep_type = FOOTSTEP_MOB_SHOE - pooptype = /obj/item/natural/poo/cow - -/mob/living/simple_animal/cow/Initialize() - if(gender == FEMALE) - udder = new() - . = ..() - -/mob/living/simple_animal/cow/Destroy() - if(udder) - qdel(udder) - udder = null - return ..() - -/mob/living/simple_animal/cow/attackby(obj/item/O, mob/user, params) - if(gender == FEMALE && stat == CONSCIOUS && istype(O, /obj/item/reagent_containers/glass)) - udder.milkAnimal(O, user) - return 1 - else - return ..() - -/mob/living/simple_animal/cow/tamed(mob/user) - . = ..() - can_buckle = TRUE - buckle_lying = FALSE - var/datum/component/riding/D = LoadComponent(/datum/component/riding) - D.set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0, 8), TEXT_SOUTH = list(0, 8), TEXT_EAST = list(-2, 8), TEXT_WEST = list(2, 8))) - D.set_vehicle_dir_layer(SOUTH, ABOVE_MOB_LAYER) - D.set_vehicle_dir_layer(NORTH, OBJ_LAYER) - D.set_vehicle_dir_layer(EAST, OBJ_LAYER) - D.set_vehicle_dir_layer(WEST, OBJ_LAYER) - -/mob/living/simple_animal/cow/Life() - . = ..() - if(stat == CONSCIOUS && gender == FEMALE) - udder.generateMilk() - -/mob/living/simple_animal/cow/attack_hand(mob/living/carbon/M) - if(gender == FEMALE && !stat && M.used_intent.type == INTENT_DISARM && icon_state != "[initial(icon_state)]_tip") - M.visible_message("[M] tips over [src].", - "I tip over [src].") - to_chat(src, "I am tipped over by [M]!") - Paralyze(60, ignore_canstun = TRUE) - icon_state = "[initial(icon_state)]_tip" - spawn(rand(20,50)) - if(!stat && M) - icon_state = icon_living - var/external - var/internal - switch(pick(1,2,3,4)) - if(1,2,3) - var/text = pick("imploringly.", "pleadingly.", - "with a resigned expression.") - external = "[src] looks at [M] [text]" - internal = "You look at [M] [text]" - if(4) - external = "[src] seems resigned to its fate." - internal = "You resign myself to your fate." - visible_message("[external]", - "[internal]") - else - ..() - -/mob/living/simple_animal/chick - name = "\improper chick" - desc = "" - icon_state = "chick" - icon_living = "chick" - icon_dead = "chick_dead" - icon_gib = "chick_gib" - gender = FEMALE - mob_biotypes = MOB_ORGANIC|MOB_BEAST - speak = list("Cherp.","Cherp?","Chirrup.","Cheep!") - speak_emote = list("cheeps") - emote_hear = list("cheeps.") - emote_see = list("pecks at the ground.","flaps its tiny wings.") - density = FALSE - speak_chance = 2 - turns_per_move = 2 - butcher_results = list(/obj/item/reagent_containers/food/snacks/fat = 1) - response_help_continuous = "pets" - response_help_simple = "pet" - response_disarm_continuous = "gently pushes aside" - response_disarm_simple = "gently push aside" - response_harm_continuous = "kicks" - response_harm_simple = "kick" - attack_verb_continuous = "kicks" - attack_verb_simple = "kick" - food_type = list(/obj/item/reagent_containers/food/snacks/produce/wheat) - health = 3 - maxHealth = 3 - ventcrawler = VENTCRAWLER_ALWAYS - var/amount_grown = 0 - pass_flags = PASSTABLE | PASSGRILLE | PASSMOB - mob_size = MOB_SIZE_TINY - gold_core_spawnable = FRIENDLY_SPAWN - - footstep_type = FOOTSTEP_MOB_CLAW - -/mob/living/simple_animal/chick/Initialize() - . = ..() - pixel_x = rand(-6, 6) - pixel_y = rand(0, 10) - -/mob/living/simple_animal/chick/Life() - . =..() - if(!.) - return - if(!stat && !ckey) - amount_grown += rand(1,2) - if(amount_grown >= 100) - new /mob/living/simple_animal/hostile/retaliate/rogue/chicken(src.loc) - qdel(src) - -/mob/living/simple_animal/chick/holo/Life() - ..() - amount_grown = 0 - -/mob/living/simple_animal/chicken - name = "\improper chicken" - desc = "" - gender = FEMALE - mob_biotypes = MOB_ORGANIC|MOB_BEAST - icon_state = "chicken_brown" - icon_living = "chicken_brown" - icon_dead = "chicken_brown_dead" - speak = list("Cluck!","BWAAAAARK BWAK BWAK BWAK!","Bwaak bwak.") - speak_emote = list("clucks","croons") - emote_hear = list("clucks.") - emote_see = list("pecks at the ground.","flaps its wings viciously.") - density = FALSE - speak_chance = 2 - turns_per_move = 3 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 1) - var/egg_type = /obj/item/reagent_containers/food/snacks/egg - food_type = list(/obj/item/reagent_containers/food/snacks/produce/wheat, /obj/item/reagent_containers/food/snacks/produce/oat) - response_help_continuous = "pets" - response_help_simple = "pet" - response_disarm_continuous = "gently pushes aside" - response_disarm_simple = "gently push aside" - response_harm_continuous = "kicks" - response_harm_simple = "kick" - attack_verb_continuous = "kicks" - attack_verb_simple = "kick" - health = 15 - maxHealth = 15 - ventcrawler = VENTCRAWLER_ALWAYS - var/eggsleft = 0 - var/eggsFertile = TRUE - var/body_color - var/icon_prefix = "chicken" - pass_flags = PASSTABLE | PASSMOB - mob_size = MOB_SIZE_SMALL - var/list/feedMessages = list("It clucks happily.","It clucks happily.") - var/list/layMessage = EGG_LAYING_MESSAGES - var/list/validColors = list("brown","black","white") - gold_core_spawnable = FRIENDLY_SPAWN - var/static/chicken_count = 0 - - footstep_type = FOOTSTEP_MOB_CLAW - -/mob/living/simple_animal/chicken/Initialize() - . = ..() - if(!body_color) - body_color = pick(validColors) - icon_state = "[icon_prefix]_[body_color]" - icon_living = "[icon_prefix]_[body_color]" - icon_dead = "[icon_prefix]_[body_color]_dead" - pixel_x = rand(-6, 6) - pixel_y = rand(0, 10) - ++chicken_count - -/mob/living/simple_animal/chicken/Destroy() - --chicken_count - return ..() - -/mob/living/simple_animal/chicken/attackby(obj/item/O, mob/user, params) - if(is_type_in_list(O, food_type)) //feedin' dem chickens - if(!stat && eggsleft < 8) - var/feedmsg = "[user] feeds [O] to [name]! [pick(feedMessages)]" - user.visible_message(feedmsg) - qdel(O) - eggsleft += rand(1, 4) - else - to_chat(user, span_warning("[name] doesn't seem hungry!")) - else - ..() - -/mob/living/simple_animal/chicken/Life() - . =..() - if(!.) - return - if((!stat && prob(3) && eggsleft > 0) && egg_type) - visible_message("[src] [pick(layMessage)]") - eggsleft-- - var/obj/item/E = new egg_type(get_turf(src)) - E.pixel_x = rand(-6,6) - E.pixel_y = rand(-6,6) - if(eggsFertile) - if(chicken_count < MAX_CHICKENS && prob(25)) - START_PROCESSING(SSobj, E) - -/obj/item/reagent_containers/food/snacks/egg/var/amount_grown = 0 -/obj/item/reagent_containers/food/snacks/egg/process() - ..() - if(fertile) - if(isturf(loc)) - amount_grown += rand(1,2) - if(amount_grown >= 100) - visible_message(span_notice("[src] hatches with a quiet cracking sound.")) - new /mob/living/simple_animal/chick(get_turf(src)) - STOP_PROCESSING(SSobj, src) - qdel(src) - - - -//grenchensnacker - -/mob/living/simple_animal/grenchensnacker - name = "grenchensnacker" - desc = "Why is it smiling like that" - icon_state = "grenchen" - icon_living = "grenchen" - icon_dead = "grenchen_dead" - gender = MALE - mob_biotypes = MOB_ORGANIC|MOB_BEAST - speak = list("GRA","AH!","HEEHEHE") - speak_emote = list("squeeks") - emote_hear = list("chops.") - emote_see = list("dances.", "stares.") - speak_chance = 1 - turns_per_move = 5 - see_in_dark = 6 - butcher_results = list(/obj/item/roguekey/porta = 1) - response_help_continuous = "pets" - response_help_simple = "pet" - response_disarm_continuous = "gently pushes aside" - response_disarm_simple = "gently push aside" - response_harm_continuous = "kicks" - response_harm_simple = "kick" - attack_verb_continuous = "kicks" - attack_verb_simple = "kick" - attack_sound = 'sound/blank.ogg' - health = 100 - maxHealth = 100 - gold_core_spawnable = FRIENDLY_SPAWN - blood_volume = BLOOD_VOLUME_NORMAL - food_type = list(/obj/item/rogueore/gold, /obj/item/rogueore/silver) - tame_chance = 25 - bonus_tame_chance = 15 - footstep_type = FOOTSTEP_MOB_SHOE diff --git a/code/modules/mob/living/simple_animal/friendly/gondola.dm b/code/modules/mob/living/simple_animal/friendly/gondola.dm deleted file mode 100644 index 0b4fc18e69..0000000000 --- a/code/modules/mob/living/simple_animal/friendly/gondola.dm +++ /dev/null @@ -1,68 +0,0 @@ -#define GONDOLA_HEIGHT pick("gondola_body_long", "gondola_body_medium", "gondola_body_short") -#define GONDOLA_COLOR pick("A87855", "915E48", "683E2C") -#define GONDOLA_MOUSTACHE pick("gondola_moustache_large", "gondola_moustache_small") -#define GONDOLA_EYES pick("gondola_eyes_close", "gondola_eyes_far") - -//Gondolas - -/mob/living/simple_animal/pet/gondola - name = "gondola" - real_name = "gondola" - desc = "" - response_help_continuous = "pets" - response_help_simple = "pet" - response_disarm_continuous = "bops" - response_disarm_simple = "bop" - response_harm_continuous = "kicks" - response_harm_simple = "kick" - faction = list("gondola") - turns_per_move = 10 - icon = 'icons/mob/gondolas.dmi' - icon_state = "gondola" - icon_living = "gondola" - loot = list(/obj/effect/decal/cleanable/blood/gibs, /obj/item/stack/sheet/animalhide/gondola = 1, /obj/item/reagent_containers/food/snacks/meat/slab/gondola = 1) - //Gondolas aren't affected by cold. - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 - maxbodytemp = 1500 - maxHealth = 200 - health = 200 - del_on_death = TRUE - - //Gondolas don't make footstep sounds - -/mob/living/simple_animal/pet/gondola/Initialize() - . = ..() - if (!(istype(src, /mob/living/simple_animal/pet/gondola/gondolapod))) - CreateGondola() - -/mob/living/simple_animal/pet/gondola/proc/CreateGondola() - icon_state = null - icon_living = null - var/height = GONDOLA_HEIGHT - var/mutable_appearance/body_overlay = mutable_appearance(icon, height) - var/mutable_appearance/eyes_overlay = mutable_appearance(icon, GONDOLA_EYES) - var/mutable_appearance/moustache_overlay = mutable_appearance(icon, GONDOLA_MOUSTACHE) - body_overlay.color = ("#[GONDOLA_COLOR]") - - //Offset the face to match the Gondola's height. - switch(height) - if("gondola_body_medium") - eyes_overlay.pixel_y = -4 - moustache_overlay.pixel_y = -4 - if("gondola_body_short") - eyes_overlay.pixel_y = -8 - moustache_overlay.pixel_y = -8 - - cut_overlays(TRUE) - add_overlay(body_overlay) - add_overlay(eyes_overlay) - add_overlay(moustache_overlay) - -/mob/living/simple_animal/pet/gondola/IsVocal() //Gondolas are the silent walker. - return FALSE - -#undef GONDOLA_HEIGHT -#undef GONDOLA_COLOR -#undef GONDOLA_MOUSTACHE -#undef GONDOLA_EYES diff --git a/code/modules/mob/living/simple_animal/friendly/grensch.dm b/code/modules/mob/living/simple_animal/friendly/grensch.dm new file mode 100644 index 0000000000..9809421451 --- /dev/null +++ b/code/modules/mob/living/simple_animal/friendly/grensch.dm @@ -0,0 +1,34 @@ + +/mob/living/simple_animal/grenchensnacker + name = "grenchensnacker" + desc = "Why is it smiling like that" + icon_state = "grenchen" + icon_living = "grenchen" + icon_dead = "grenchen_dead" + gender = MALE + mob_biotypes = MOB_ORGANIC|MOB_BEAST + speak = list("GRA","AH!","HEEHEHE") + speak_emote = list("squeeks") + emote_hear = list("chops.") + emote_see = list("dances.", "stares.") + speak_chance = 1 + turns_per_move = 5 + see_in_dark = 6 + butcher_results = list(/obj/item/roguekey/porta = 1) + response_help_continuous = "pets" + response_help_simple = "pet" + response_disarm_continuous = "gently pushes aside" + response_disarm_simple = "gently push aside" + response_harm_continuous = "kicks" + response_harm_simple = "kick" + attack_verb_continuous = "kicks" + attack_verb_simple = "kick" + attack_sound = 'sound/blank.ogg' + health = 100 + maxHealth = 100 + gold_core_spawnable = FRIENDLY_SPAWN + blood_volume = BLOOD_VOLUME_NORMAL + food_type = list(/obj/item/rogueore/gold, /obj/item/rogueore/silver) + tame_chance = 25 + bonus_tame_chance = 15 + footstep_type = FOOTSTEP_MOB_SHOE diff --git a/code/modules/mob/living/simple_animal/friendly/penguin.dm b/code/modules/mob/living/simple_animal/friendly/penguin.dm deleted file mode 100644 index 232b844cc2..0000000000 --- a/code/modules/mob/living/simple_animal/friendly/penguin.dm +++ /dev/null @@ -1,57 +0,0 @@ -//Penguins - -/mob/living/simple_animal/pet/penguin - response_help_continuous = "pets" - response_help_simple = "pet" - response_disarm_continuous = "bops" - response_disarm_simple = "bop" - response_harm_continuous = "kicks" - response_harm_simple = "kick" - speak = list("Gah Gah!", "NOOT NOOT!", "NOOT!", "Noot", "noot", "Prah!", "Grah!") - speak_emote = list("squawks", "gakkers") - emote_hear = list("squawk!", "gakkers!", "noots.","NOOTS!") - emote_see = list("shakes its beak.", "flaps it's wings.","preens itself.") - faction = list("penguin") - minbodytemp = 0 - see_in_dark = 5 - speak_chance = 1 - turns_per_move = 10 - icon = 'icons/mob/penguins.dmi' - butcher_results = list(/obj/item/organ/ears/penguin = 1, /obj/item/reagent_containers/food/snacks/meat/slab/penguin = 3) - - footstep_type = FOOTSTEP_MOB_BAREFOOT - -/mob/living/simple_animal/pet/penguin/Initialize() - . = ..() - AddComponent(/datum/component/waddling) - -/mob/living/simple_animal/pet/penguin/emperor - name = "Emperor penguin" - real_name = "penguin" - desc = "" - icon_state = "penguin" - icon_living = "penguin" - icon_dead = "penguin_dead" - gold_core_spawnable = FRIENDLY_SPAWN - butcher_results = list(/obj/item/organ/ears/penguin = 1, /obj/item/reagent_containers/food/snacks/meat/slab/penguin = 3) - -/mob/living/simple_animal/pet/penguin/emperor/shamebrero - name = "Shamebrero penguin" - desc = "" - icon_state = "penguin_shamebrero" - icon_living = "penguin_shamebrero" - gold_core_spawnable = NO_SPAWN - unique_pet = TRUE - -/mob/living/simple_animal/pet/penguin/baby - speak = list("gah", "noot noot", "noot!", "noot", "squeee!", "noo!") - name = "Penguin chick" - real_name = "penguin" - desc = "" - icon_state = "penguin_baby" - icon_living = "penguin_baby" - icon_dead = "penguin_baby_dead" - density = FALSE - pass_flags = PASSMOB - mob_size = MOB_SIZE_SMALL - butcher_results = list(/obj/item/organ/ears/penguin = 1, /obj/item/reagent_containers/food/snacks/meat/slab/penguin = 1) diff --git a/code/modules/mob/living/simple_animal/friendly/sloth.dm b/code/modules/mob/living/simple_animal/friendly/sloth.dm deleted file mode 100644 index e7860da452..0000000000 --- a/code/modules/mob/living/simple_animal/friendly/sloth.dm +++ /dev/null @@ -1,48 +0,0 @@ -/mob/living/simple_animal/sloth - name = "sloth" - desc = "" - icon = 'icons/mob/pets.dmi' - icon_state = "sloth" - icon_living = "sloth" - icon_dead = "sloth_dead" - speak_emote = list("yawns") - emote_hear = list("snores.","yawns.") - emote_see = list("dozes off.", "looks around sleepily.") - speak_chance = 1 - turns_per_move = 5 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 3) - response_help_continuous = "pets" - response_help_simple = "pet" - response_disarm_continuous = "gently pushes aside" - response_disarm_simple = "gently push aside" - response_harm_continuous = "kicks" - response_harm_simple = "kick" - mob_biotypes = MOB_ORGANIC|MOB_BEAST - gold_core_spawnable = FRIENDLY_SPAWN - melee_damage_lower = 18 - melee_damage_upper = 18 - health = 50 - maxHealth = 50 - speed = 10 -// glide_size = 2 - - footstep_type = FOOTSTEP_MOB_CLAW - - -//Cargo Sloth -/mob/living/simple_animal/sloth/paperwork - name = "Paperwork" - desc = "" - gold_core_spawnable = NO_SPAWN - -//Cargo Sloth 2 - -/mob/living/simple_animal/sloth/citrus - name = "Citrus" - desc = "" - icon_state = "cool_sloth" - icon_living = "cool_sloth" - icon_dead = "cool_sloth_dead" - gender = FEMALE - butcher_results = list(/obj/item/toy/spinningtoy = 1) - gold_core_spawnable = NO_SPAWN diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm deleted file mode 100644 index 934d721cf9..0000000000 --- a/code/modules/mob/living/simple_animal/hostile/bear.dm +++ /dev/null @@ -1,156 +0,0 @@ -//Space bears! -/mob/living/simple_animal/hostile/bear - name = "space bear" - desc = "" - icon_state = "bear" - icon_living = "bear" - icon_dead = "bear_dead" - icon_gib = "bear_gib" - mob_biotypes = MOB_ORGANIC|MOB_BEAST - speak = list("RAWR!","Rawr!","GRR!","Growl!") - speak_emote = list("growls", "roars") - emote_hear = list("rawrs.","grumbles.","grawls.") - emote_taunt = list("stares ferociously", "stomps") - speak_chance = 1 - taunt_chance = 25 - turns_per_move = 5 - see_in_dark = 6 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/bear = 5, /obj/item/clothing/head/bearpelt = 1) - response_help_continuous = "pets" - response_help_simple = "pet" - response_disarm_continuous = "gently pushes aside" - response_disarm_simple = "gently push aside" - maxHealth = 60 - health = 60 - spacewalk = TRUE - var/armored = FALSE - - obj_damage = 60 - melee_damage_lower = 20 - melee_damage_upper = 30 - attack_verb_continuous = "claws" - attack_verb_simple = "claw" - attack_sound = 'sound/blank.ogg' - friendly_verb_continuous = "bear hugs" - friendly_verb_simple = "bear hug" - - //Space bears aren't affected by cold. - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 - maxbodytemp = 1500 - - faction = list("russian") - gold_core_spawnable = HOSTILE_SPAWN - - footstep_type = FOOTSTEP_MOB_CLAW - -//SPACE BEARS! SQUEEEEEEEE~ OW! FUCK! IT BIT MY HAND OFF!! -/mob/living/simple_animal/hostile/bear/Hudson - name = "Hudson" - gender = MALE - desc = "" //I'm sorry... - -/mob/living/simple_animal/hostile/bear/snow - name = "space polar bear" - icon_state = "snowbear" - icon_living = "snowbear" - icon_dead = "snowbear_dead" - desc = "" - weather_immunities = list("snow") - -/mob/living/simple_animal/hostile/bear/russian - name = "combat bear" - desc = "" - icon_state = "combatbear" - icon_living = "combatbear" - icon_dead = "combatbear_dead" - faction = list("russian") - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/bear = 5, /obj/item/clothing/head/bearpelt = 1, /obj/item/bear_armor = 1) - melee_damage_lower = 25 - melee_damage_upper = 35 - armor_penetration = 20 - health = 120 - maxHealth = 120 - armored = TRUE - -/mob/living/simple_animal/hostile/bear/update_icons() - ..() - if(armored) - add_overlay("armor_bear") - -/obj/item/bear_armor - name = "pile of bear armor" - desc = "A scattered pile of various shaped armor pieces fitted for a bear, some duct tape, and a nail filer. Crude instructions \ - are written on the back of one of the plates in russian. This seems like an awful idea." - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "bear_armor_upgrade" - -/obj/item/bear_armor/afterattack(atom/target, mob/user, proximity_flag) - . = ..() - if(istype(target, /mob/living/simple_animal/hostile/bear) && proximity_flag) - var/mob/living/simple_animal/hostile/bear/A = target - if(A.armored) - to_chat(user, "[A] has already been armored up!") - return - A.armored = TRUE - A.maxHealth += 60 - A.health += 60 - A.armor_penetration += 20 - A.melee_damage_lower += 5 - A.melee_damage_upper += 5 - A.update_icons() - to_chat(user, "I strap the armor plating to [A] and sharpen [A.p_their()] claws with the nail filer. This was a great idea.") - qdel(src) - -/mob/living/simple_animal/hostile/bear/butter //The mighty companion to Cak. Several functions used from it. - name = "Terrygold" - icon_state = "butterbear" - icon_living = "butterbear" - icon_dead = "butterbear_dead" - desc = "" - faction = list("neutral", "russian") - obj_damage = 11 - melee_damage_lower = 1 - melee_damage_upper = 1 - armor_penetration = 0 - response_harm_continuous = "takes a bite out of" - response_harm_simple = "take a bite out of" - attacked_sound = 'sound/blank.ogg' - deathmessage = "loses its false life and collapses!" - butcher_results = list(/obj/item/reagent_containers/food/snacks/butter = 6, /obj/item/reagent_containers/food/snacks/meat/slab = 3, /obj/item/organ/brain = 1, /obj/item/organ/heart = 1) - attack_sound = 'sound/blank.ogg' - attack_verb_continuous = "slaps" - -/mob/living/simple_animal/hostile/bear/butter/Life() //Heals butter bear really fast when he takes damage. - if(stat) - return - if(health < maxHealth) - heal_overall_damage(10) //Fast life regen, makes it hard for you to get eaten to death. - -/mob/living/simple_animal/hostile/bear/butter/attack_hand(mob/living/L) //Borrowed code from Cak, feeds people if they hit you. More nutriment but less vitamin to represent BUTTER. - ..() - if(L.used_intent.type == INTENT_HARM && L.reagents && !stat) - L.reagents.add_reagent(/datum/reagent/consumable/nutriment, 1) - L.reagents.add_reagent(/datum/reagent/consumable/nutriment/vitamin, 0.1) - -/mob/living/simple_animal/hostile/bear/butter/CheckParts(list/parts) //Borrowed code from Cak, allows the brain used to actually control the bear. - ..() - var/obj/item/organ/brain/B = locate(/obj/item/organ/brain) in contents - if(!B || !B.brainmob || !B.brainmob.mind) - return - B.brainmob.mind.transfer_to(src) - to_chat(src, "I are a butter bear! You're a mostly harmless bear/butter hybrid that everyone loves. People can take bites out of you if they're hungry, but you regenerate health \ - so quickly that it generally doesn't matter. You're remarkably resilient to any damage besides this and it's hard for you to really die at all. You should go around and bring happiness and \ - free butter to the station!") - var/new_name = stripped_input(src, "Enter my name, or press \"Cancel\" to stick with Terrygold.", "Name Change") - if(new_name) - to_chat(src, "My name is now \"new_name\"!") - name = new_name - -/mob/living/simple_animal/hostile/bear/butter/AttackingTarget() //Makes some attacks by the butter bear slip those who dare cross its path. - if(isliving(target)) - var/mob/living/L = target - if((L.mobility_flags & MOBILITY_STAND)) - L.Knockdown(20) - playsound(loc, 'sound/blank.ogg', 15) - L.visible_message("[L] slips on butter!") diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm deleted file mode 100644 index 0438f32b5c..0000000000 --- a/code/modules/mob/living/simple_animal/hostile/carp.dm +++ /dev/null @@ -1,177 +0,0 @@ -#define REGENERATION_DELAY 60 // After taking damage, how long it takes for automatic regeneration to begin for megacarps (ty robustin!) - -/mob/living/simple_animal/hostile/carp - name = "space carp" - desc = "" - icon = 'icons/mob/carp.dmi' - icon_state = "base" - icon_living = "base" - icon_dead = "base_dead" - icon_gib = "carp_gib" - mob_biotypes = MOB_ORGANIC|MOB_BEAST - speak_chance = 0 - turns_per_move = 5 - butcher_results = list(/obj/item/reagent_containers/food/snacks/carpmeat = 2) - response_help_continuous = "pets" - response_help_simple = "pet" - response_disarm_continuous = "gently pushes aside" - response_disarm_simple = "gently push aside" - emote_taunt = list("gnashes") - taunt_chance = 30 - speed = 0 - maxHealth = 25 - health = 25 - spacewalk = TRUE - - harm_intent_damage = 8 - obj_damage = 50 - melee_damage_lower = 20 - melee_damage_upper = 20 - attack_verb_continuous = "bites" - attack_verb_simple = "bite" - attack_sound = 'sound/blank.ogg' - speak_emote = list("gnashes") - - //Space carp aren't affected by cold. - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 - maxbodytemp = 1500 - faction = list("carp") - movement_type = FLYING - pressure_resistance = 200 - gold_core_spawnable = HOSTILE_SPAWN - - var/random_color = TRUE //if the carp uses random coloring - var/rarechance = 1 //chance for rare color variant - - var/static/list/carp_colors = list(\ - "lightpurple" = "#c3b9f1", \ - "lightpink" = "#da77a8", \ - "green" = "#70ff25", \ - "grape" = "#df0afb", \ - "swamp" = "#e5e75a", \ - "turquoise" = "#04e1ed", \ - "brown" = "#ca805a", \ - "teal" = "#20e28e", \ - "lightblue" = "#4d88cc", \ - "rusty" = "#dd5f34", \ - "beige" = "#bbaeaf", \ - "yellow" = "#f3ca4a", \ - "blue" = "#09bae1", \ - "palegreen" = "#7ef099", \ - ) - var/static/list/carp_colors_rare = list(\ - "silver" = "#fdfbf3", \ - ) - -/mob/living/simple_animal/hostile/carp/Initialize(mapload) - . = ..() - carp_randomify(rarechance) - update_icons() - -/mob/living/simple_animal/hostile/carp/proc/carp_randomify(rarechance) - if(random_color) - var/our_color - if(prob(rarechance)) - our_color = pick(carp_colors_rare) - add_atom_colour(carp_colors_rare[our_color], FIXED_COLOUR_PRIORITY) - else - our_color = pick(carp_colors) - add_atom_colour(carp_colors[our_color], FIXED_COLOUR_PRIORITY) - add_carp_overlay() - -/mob/living/simple_animal/hostile/carp/proc/add_carp_overlay() - if(!random_color) - return - cut_overlays() - var/mutable_appearance/base_overlay = mutable_appearance(icon, "base_mouth") - base_overlay.appearance_flags = RESET_COLOR - add_overlay(base_overlay) - -/mob/living/simple_animal/hostile/carp/proc/add_dead_carp_overlay() - if(!random_color) - return - cut_overlays() - var/mutable_appearance/base_dead_overlay = mutable_appearance(icon, "base_dead_mouth") - base_dead_overlay.appearance_flags = RESET_COLOR - add_overlay(base_dead_overlay) - -/mob/living/simple_animal/hostile/carp/death(gibbed) - . = ..() - cut_overlays() - if(!random_color || gibbed) - return - add_dead_carp_overlay() - -/mob/living/simple_animal/hostile/carp/revive(full_heal = FALSE, admin_revive = FALSE) - . = ..() - if(.) - regenerate_icons() - -/mob/living/simple_animal/hostile/carp/regenerate_icons() - cut_overlays() - if(!random_color) - return - if(stat != DEAD) - add_carp_overlay() - else - add_dead_carp_overlay() - ..() - -/mob/living/simple_animal/hostile/carp/holocarp - icon_state = "holocarp" - icon_living = "holocarp" - maxbodytemp = INFINITY - gold_core_spawnable = NO_SPAWN - del_on_death = 1 - random_color = FALSE - -/mob/living/simple_animal/hostile/carp/megacarp - icon = 'icons/mob/broadMobs.dmi' - name = "Mega Space Carp" - desc = "" - icon_state = "megacarp" - icon_living = "megacarp" - icon_dead = "megacarp_dead" - icon_gib = "megacarp_gib" - maxHealth = 20 - health = 20 - pixel_x = -16 - mob_size = MOB_SIZE_LARGE - random_color = FALSE - - obj_damage = 80 - melee_damage_lower = 20 - melee_damage_upper = 20 - - var/regen_cooldown = 0 - -/mob/living/simple_animal/hostile/carp/megacarp/Initialize() - . = ..() - name = "[pick(GLOB.megacarp_first_names)] [pick(GLOB.megacarp_last_names)]" - melee_damage_lower += rand(2, 10) - melee_damage_upper += rand(10,20) - maxHealth += rand(30,60) - move_to_delay = rand(3,7) - -/mob/living/simple_animal/hostile/carp/megacarp/adjustHealth(amount, updating_health = TRUE, forced = FALSE) - . = ..() - if(.) - regen_cooldown = world.time + REGENERATION_DELAY - -/mob/living/simple_animal/hostile/carp/megacarp/Life() - . = ..() - if(regen_cooldown < world.time) - heal_overall_damage(4) - -/mob/living/simple_animal/hostile/carp/cayenne - name = "Cayenne" - desc = "" - gender = FEMALE - speak_emote = list("squeaks") - gold_core_spawnable = NO_SPAWN - faction = list(ROLE_SYNDICATE) - AIStatus = AI_OFF - rarechance = 10 - -#undef REGENERATION_DELAY diff --git a/code/modules/mob/living/simple_animal/hostile/eyeballs.dm b/code/modules/mob/living/simple_animal/hostile/eyeballs.dm deleted file mode 100644 index 11437bcd2a..0000000000 --- a/code/modules/mob/living/simple_animal/hostile/eyeballs.dm +++ /dev/null @@ -1,30 +0,0 @@ -/mob/living/simple_animal/hostile/carp/eyeball - name = "eyeball" - desc = "" - icon_state = "eyeball" - icon_living = "eyeball" - icon_gib = "" - gender = NEUTER - mob_biotypes = MOB_ORGANIC - response_help_continuous = "pets" - response_help_simple = "pet" - response_disarm_continuous = "gently pushes aside" - response_disarm_simple = "gently push aside" - emote_taunt = list("glares") - taunt_chance = 25 - maxHealth = 45 - health = 45 - speak_emote = list("telepathically cries") - - harm_intent_damage = 15 - obj_damage = 60 - melee_damage_lower = 20 - melee_damage_upper = 25 - attack_verb_continuous = "blinks at" - attack_verb_simple = "blink at" - attack_sound = 'sound/blank.ogg' - movement_type = FLYING - - faction = list("spooky") - del_on_death = 1 - random_color = FALSE diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index 2a3616b0cb..1c5560c72f 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -394,7 +394,6 @@ ..(gibbed) /mob/living/simple_animal/hostile/proc/summon_backup(distance, exact_faction_match) - do_alert_animation(src) playsound(loc, 'sound/blank.ogg', 50, TRUE, -1) for(var/mob/living/simple_animal/hostile/M in oview(distance, targets_from)) if(faction_check_mob(M, TRUE)) diff --git a/code/modules/mob/living/simple_animal/hostile/killertomato.dm b/code/modules/mob/living/simple_animal/hostile/killertomato.dm deleted file mode 100644 index 3a4d380dfc..0000000000 --- a/code/modules/mob/living/simple_animal/hostile/killertomato.dm +++ /dev/null @@ -1,31 +0,0 @@ -/mob/living/simple_animal/hostile/killertomato - name = "Killer Tomato" - desc = "" - icon_state = "tomato" - icon_living = "tomato" - icon_dead = "tomato_dead" - gender = NEUTER - speak_chance = 0 - turns_per_move = 5 - maxHealth = 30 - health = 30 - see_in_dark = 3 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/killertomato = 2) - response_help_continuous = "prods" - response_help_simple = "prod" - response_disarm_continuous = "pushes aside" - response_disarm_simple = "push aside" - response_harm_continuous = "smacks" - response_harm_simple = "smack" - melee_damage_lower = 8 - melee_damage_upper = 12 - attack_verb_continuous = "slams" - attack_verb_simple = "slam" - attack_sound = 'sound/blank.ogg' - ventcrawler = VENTCRAWLER_ALWAYS - faction = list("plants") - - atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 150 - maxbodytemp = 500 - gold_core_spawnable = HOSTILE_SPAWN diff --git a/code/modules/mob/living/simple_animal/hostile/mushroom.dm b/code/modules/mob/living/simple_animal/hostile/mushroom.dm deleted file mode 100644 index 8e7de20c8b..0000000000 --- a/code/modules/mob/living/simple_animal/hostile/mushroom.dm +++ /dev/null @@ -1,195 +0,0 @@ -/mob/living/simple_animal/hostile/mushroom - name = "walking mushroom" - desc = "" - icon_state = "mushroom_color" - icon_living = "mushroom_color" - icon_dead = "mushroom_dead" - speak_chance = 0 - turns_per_move = 1 - maxHealth = 10 - health = 10 - butcher_results = list(/obj/item/reagent_containers/food/snacks/hugemushroomslice = 1) - response_help_continuous = "pets" - response_help_simple = "pet" - response_disarm_continuous = "gently pushes aside" - response_disarm_simple = "gently push aside" - response_harm_continuous = "whacks" - response_harm_simple = "whack" - harm_intent_damage = 5 - obj_damage = 0 - melee_damage_lower = 1 - melee_damage_upper = 1 - attack_same = 2 - attack_verb_continuous = "chomps" - attack_verb_simple = "chomp" - attack_sound = 'sound/blank.ogg' - faction = list("mushroom") - environment_smash = ENVIRONMENT_SMASH_NONE - stat_attack = DEAD - mouse_opacity = MOUSE_OPACITY_ICON - speed = 1 - ventcrawler = VENTCRAWLER_ALWAYS - robust_searching = 1 - unique_name = 1 - speak_emote = list("squeaks") - deathmessage = "fainted." - var/cap_color = "#ffffff" - var/powerlevel = 0 //Tracks our general strength level gained from eating other shrooms - var/bruised = 0 //If someone tries to cheat the system by attacking a shroom to lower its health, punish them so that it wont award levels to shrooms that eat it - var/recovery_cooldown = 0 //So you can't repeatedly revive it during a fight - var/faint_ticker = 0 //If we hit three, another mushroom's gonna eat us - var/static/mutable_appearance/cap_living //Where we store our cap icons so we dont generate them constantly to update our icon - var/static/mutable_appearance/cap_dead - -/mob/living/simple_animal/hostile/mushroom/examine(mob/user) - . = ..() - if(health >= maxHealth) - . += "It looks healthy." - else - . += "It looks like it's been roughed up." - -/mob/living/simple_animal/hostile/mushroom/Life() - ..() - if(!stat)//Mushrooms slowly regenerate if conscious, for people who want to save them from being eaten - adjustBruteLoss(-2) - -/mob/living/simple_animal/hostile/mushroom/Initialize()//Makes every shroom a little unique - melee_damage_lower += rand(3, 5) - melee_damage_upper += rand(10,20) - maxHealth += rand(40,60) - move_to_delay = rand(3,11) - cap_living = cap_living || mutable_appearance(icon, "mushroom_cap") - cap_dead = cap_dead || mutable_appearance(icon, "mushroom_cap_dead") - - cap_color = rgb(rand(0, 255), rand(0, 255), rand(0, 255)) - UpdateMushroomCap() - health = maxHealth - . = ..() - -/mob/living/simple_animal/hostile/mushroom/CanAttack(atom/the_target) // Mushroom-specific version of CanAttack to handle stupid attack_same = 2 crap so we don't have to do it for literally every single simple_animal/hostile because this shit never gets spawned - if(!the_target || isturf(the_target) || istype(the_target, /atom/movable/lighting_object)) - return FALSE - - if(see_invisible < the_target.invisibility)//Target's invisible to us, forget it - return FALSE - - if(isliving(the_target)) - var/mob/living/L = the_target - - if (!faction_check_mob(L) && attack_same == 2) - return FALSE - if(L.stat > stat_attack) - return FALSE - - return TRUE - - return FALSE - -/mob/living/simple_animal/hostile/mushroom/adjustHealth(amount, updating_health = TRUE, forced = FALSE) //Possibility to flee from a fight just to make it more visually interesting - if(!retreat_distance && prob(33)) - retreat_distance = 5 - addtimer(CALLBACK(src, PROC_REF(stop_retreat)), 30) - . = ..() - -/mob/living/simple_animal/hostile/mushroom/proc/stop_retreat() - retreat_distance = null - -/mob/living/simple_animal/hostile/mushroom/attack_animal(mob/living/L) - if(istype(L, /mob/living/simple_animal/hostile/mushroom) && stat == DEAD) - var/mob/living/simple_animal/hostile/mushroom/M = L - if(faint_ticker < 2) - M.visible_message("[M] chews a bit on [src].") - faint_ticker++ - return TRUE - M.visible_message("[M] devours [src]!") - var/level_gain = (powerlevel - M.powerlevel) - if(level_gain >= -1 && !bruised && !M.ckey)//Player shrooms can't level up to become robust gods. - if(level_gain < 1)//So we still gain a level if two mushrooms were the same level - level_gain = 1 - M.LevelUp(level_gain) - M.adjustBruteLoss(-M.maxHealth) - qdel(src) - return TRUE - return ..() - -/mob/living/simple_animal/hostile/mushroom/revive(full_heal = FALSE, admin_revive = FALSE) - if(..()) - icon_state = "mushroom_color" - UpdateMushroomCap() - . = 1 - -/mob/living/simple_animal/hostile/mushroom/death(gibbed) - ..(gibbed) - UpdateMushroomCap() - -/mob/living/simple_animal/hostile/mushroom/proc/UpdateMushroomCap() - cut_overlays() - cap_living.color = cap_color - cap_dead.color = cap_color - if(health == 0) - add_overlay(cap_dead) - else - add_overlay(cap_living) - -/mob/living/simple_animal/hostile/mushroom/proc/Recover() - visible_message("[src] slowly begins to recover.") - faint_ticker = 0 - revive(full_heal = TRUE, admin_revive = FALSE) - UpdateMushroomCap() - recovery_cooldown = 1 - addtimer(CALLBACK(src, PROC_REF(recovery_recharge)), 300) - -/mob/living/simple_animal/hostile/mushroom/proc/recovery_recharge() - recovery_cooldown = 0 - -/mob/living/simple_animal/hostile/mushroom/proc/LevelUp(level_gain) - if(powerlevel <= 9) - powerlevel += level_gain - if(prob(25)) - melee_damage_lower += (level_gain * rand(1,5)) - else - melee_damage_upper += (level_gain * rand(1,5)) - maxHealth += (level_gain * rand(1,5)) - adjustBruteLoss(-maxHealth) //They'll always heal, even if they don't gain a level, in case you want to keep this shroom around instead of harvesting it - -/mob/living/simple_animal/hostile/mushroom/proc/Bruise() - if(!bruised && !stat) - src.visible_message("The [src.name] was bruised!") - bruised = 1 - -/mob/living/simple_animal/hostile/mushroom/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/reagent_containers/food/snacks/grown/mushroom)) - if(stat == DEAD && !recovery_cooldown) - Recover() - qdel(I) - else - to_chat(user, "[src] won't eat it!") - return - if(I.force) - Bruise() - ..() - -/mob/living/simple_animal/hostile/mushroom/attack_hand(mob/living/carbon/human/M) - ..() - if(M.used_intent.type == INTENT_HARM) - Bruise() - -/mob/living/simple_animal/hostile/mushroom/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum) - ..() - if(istype(AM, /obj/item)) - var/obj/item/T = AM - if(T.throwforce) - Bruise() - -/mob/living/simple_animal/hostile/mushroom/bullet_act(obj/projectile/P) - . = ..() - if(P.nodamage) - Bruise() - -/mob/living/simple_animal/hostile/mushroom/harvest() - var/counter - for(counter=0, counter<=powerlevel, counter++) - var/obj/item/reagent_containers/food/snacks/hugemushroomslice/S = new /obj/item/reagent_containers/food/snacks/hugemushroomslice(src.loc) - S.reagents.add_reagent(/datum/reagent/drug/mushroomhallucinogen, powerlevel) - S.reagents.add_reagent(/datum/reagent/medicine/omnizine, powerlevel) - S.reagents.add_reagent(/datum/reagent/medicine/synaptizine, powerlevel) diff --git a/code/modules/mob/living/simple_animal/hostile/pirate.dm b/code/modules/mob/living/simple_animal/hostile/pirate.dm deleted file mode 100644 index a111d7d79b..0000000000 --- a/code/modules/mob/living/simple_animal/hostile/pirate.dm +++ /dev/null @@ -1,90 +0,0 @@ -/mob/living/simple_animal/hostile/pirate - name = "Pirate" - desc = "" - icon = 'icons/mob/simple_human.dmi' - icon_state = "piratemelee" - icon_living = "piratemelee" - icon_dead = "pirate_dead" - mob_biotypes = MOB_ORGANIC|MOB_HUMANOID - speak_chance = 0 - turns_per_move = 5 - response_help_continuous = "pushes" - response_help_simple = "push" - speed = 0 - maxHealth = 100 - health = 100 - harm_intent_damage = 5 - melee_damage_lower = 10 - melee_damage_upper = 10 - attack_verb_continuous = "punches" - attack_verb_simple = "punch" - attack_sound = 'sound/blank.ogg' - a_intent = INTENT_HARM - atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) - unsuitable_atmos_damage = 15 - speak_emote = list("yarrs") - loot = list(/obj/effect/mob_spawn/human/corpse/pirate) - del_on_death = 1 - faction = list("pirate") - - -/mob/living/simple_animal/hostile/pirate/melee - name = "Pirate Swashbuckler" - icon_state = "piratemelee" - icon_living = "piratemelee" - icon_dead = "piratemelee_dead" - melee_damage_lower = 30 - melee_damage_upper = 30 - armor_penetration = 35 - attack_verb_continuous = "slashes" - attack_verb_simple = "slash" - attack_sound = 'sound/blank.ogg' - var/obj/effect/light_emitter/red_energy_sword/sord - - footstep_type = FOOTSTEP_MOB_SHOE - -/mob/living/simple_animal/hostile/pirate/melee/space - name = "Space Pirate Swashbuckler" - icon_state = "piratespace" - icon_living = "piratespace" - icon_dead = "piratespace_dead" - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 - speed = 1 - spacewalk = TRUE - -/mob/living/simple_animal/hostile/pirate/melee/Initialize() - . = ..() - sord = new(src) - -/mob/living/simple_animal/hostile/pirate/melee/Destroy() - QDEL_NULL(sord) - return ..() - -/mob/living/simple_animal/hostile/pirate/melee/Initialize() - . = ..() - set_light(2) - -/mob/living/simple_animal/hostile/pirate/ranged - name = "Pirate Gunner" - icon_state = "pirateranged" - icon_living = "pirateranged" - icon_dead = "pirateranged_dead" - projectilesound = 'sound/blank.ogg' - ranged = 1 - rapid = 2 - rapid_fire_delay = 6 - retreat_distance = 5 - minimum_distance = 5 - projectiletype = /obj/projectile/beam/laser - loot = list(/obj/effect/mob_spawn/human/corpse/pirate/ranged) - -/mob/living/simple_animal/hostile/pirate/ranged/space - name = "Space Pirate Gunner" - icon_state = "piratespaceranged" - icon_living = "piratespaceranged" - icon_dead = "piratespaceranged_dead" - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 - speed = 1 - spacewalk = TRUE diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm deleted file mode 100644 index b14fb709c7..0000000000 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm +++ /dev/null @@ -1,303 +0,0 @@ -/mob/living/simple_animal/hostile/retaliate/clown - name = "Clown" - desc = "" - icon = 'icons/mob/clown_mobs.dmi' - icon_state = "clown" - icon_living = "clown" - icon_dead = "clown_dead" - icon_gib = "clown_gib" - mob_biotypes = MOB_ORGANIC|MOB_HUMANOID - turns_per_move = 5 - response_disarm_continuous = "gently pushes aside" - response_disarm_simple = "gently push aside" - response_harm_continuous = "robusts" - response_harm_simple = "robust" - speak = list("HONK", "Honk!", "Welcome to clown planet!") - emote_see = list("honks", "squeaks") - speak_chance = 1 - a_intent = INTENT_HARM - maxHealth = 75 - health = 75 - speed = 1 - harm_intent_damage = 8 - melee_damage_lower = 10 - melee_damage_upper = 10 - attack_sound = 'sound/blank.ogg' - obj_damage = 0 - environment_smash = ENVIRONMENT_SMASH_NONE - del_on_death = 1 - loot = list(/obj/effect/mob_spawn/human/clown/corpse) - - atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 270 - maxbodytemp = 370 - unsuitable_atmos_damage = 10 - footstep_type = FOOTSTEP_MOB_SHOE - var/banana_time = 0 // If there's no time set it won't spawn. - var/banana_type = /obj/item/grown/bananapeel - var/attack_reagent - -/mob/living/simple_animal/hostile/retaliate/clown/handle_temperature_damage() - if(bodytemperature < minbodytemp) - adjustBruteLoss(10) - else if(bodytemperature > maxbodytemp) - adjustBruteLoss(15) - -/mob/living/simple_animal/hostile/retaliate/clown/attack_hand(mob/living/carbon/human/M) - ..() - playsound(src.loc, 'sound/blank.ogg', 50, TRUE) - -/mob/living/simple_animal/hostile/retaliate/clown/Life() - . = ..() - if(banana_time && banana_time < world.time) - var/turf/T = get_turf(src) - var/list/adjacent = T.GetAtmosAdjacentTurfs(1) - new banana_type(pick(adjacent)) - banana_time = world.time + rand(30,60) - -/mob/living/simple_animal/hostile/retaliate/clown/AttackingTarget() - . = ..() - if(attack_reagent && . && isliving(target)) - var/mob/living/L = target - if(L.reagents) - L.reagents.add_reagent(attack_reagent, rand(1,5)) - -/mob/living/simple_animal/hostile/retaliate/clown/lube - name = "Living Lube" - desc = "" - icon_state = "lube" - icon_living = "lube" - turns_per_move = 1 - response_help_continuous = "dips a finger into" - response_help_simple = "dip a finger into" - response_disarm_continuous = "gently scoops and pours aside" - response_disarm_simple = "gently scoop and pour aside" - emote_see = list("bubbles", "oozes") - loot = list(/obj/item/clothing/mask/gas/clown_hat, /obj/effect/particle_effect/foam) - -/mob/living/simple_animal/hostile/retaliate/clown/lube/Initialize() - . = ..() - AddElement(/datum/element/snailcrawl) - -/mob/living/simple_animal/hostile/retaliate/clown/banana - name = "Clownana" - desc = "" - icon_state = "banana tree" - icon_living = "banana tree" - response_disarm_continuous = "peels" - response_disarm_simple = "peel" - response_harm_continuous = "peels" - response_harm_simple = "peel" - turns_per_move = 1 - speak = list("HONK", "Honk!", "YA-HONK!!!") - emote_see = list("honks", "bites into the banana", "plucks a banana off its head", "photosynthesizes") - maxHealth = 120 - health = 120 - speed = -10 - loot = list(/obj/item/clothing/mask/gas/clown_hat, /obj/effect/gibspawner/human, /obj/item/soap, /obj/item/seeds/banana) - banana_time = 20 - -/mob/living/simple_animal/hostile/retaliate/clown/honkling - name = "Honkling" - desc = "" - icon_state = "honkling" - icon_living = "honkling" - turns_per_move = 1 - speed = -10 - harm_intent_damage = 1 - melee_damage_lower = 1 - melee_damage_upper = 1 - attack_verb_continuous = "cheers up" - attack_verb_simple = "cheer up" - loot = list(/obj/item/clothing/mask/gas/clown_hat, /obj/effect/gibspawner/human, /obj/item/soap, /obj/item/seeds/banana/bluespace) - banana_type = /obj/item/grown/bananapeel - attack_reagent = /datum/reagent/consumable/laughter - -/mob/living/simple_animal/hostile/retaliate/clown/fleshclown - name = "Fleshclown" - desc = "" - icon_state = "fleshclown" - icon_living = "fleshclown" - response_help_continuous = "reluctantly pokes" - response_help_simple = "reluctantly poke" - response_disarm_continuous = "sinks his hands into the spongy flesh of" - response_disarm_simple = "sink your hands into the spongy flesh of" - response_harm_continuous = "cleanses the world of" - response_harm_simple = "cleanse the world of" - speak = list("HONK", "Honk!", "I didn't ask for this", "I feel constant and horrible pain", "YA-HONK!!!", "this body is a merciless and unforgiving prison", "I was born out of mirthful pranking but I live in suffering") - emote_see = list("honks", "sweats", "jiggles", "contemplates its existence") - speak_chance = 5 - dextrous = TRUE - ventcrawler = VENTCRAWLER_ALWAYS - maxHealth = 140 - health = 140 - speed = -5 - melee_damage_upper = 15 - attack_verb_continuous = "limply slaps" - attack_verb_simple = "limply slap" - obj_damage = 5 - loot = list(/obj/item/clothing/suit/hooded/bloated_human, /obj/item/clothing/mask/gas/clown_hat, /obj/effect/gibspawner/human, /obj/item/soap) - -/mob/living/simple_animal/hostile/retaliate/clown/longface - name = "Longface" - desc = "" - icon_state = "long face" - icon_living = "long face" - move_resist = INFINITY - turns_per_move = 10 - response_help_continuous = "tries to awkwardly hug" - response_help_simple = "try to awkwardly hug" - response_disarm_continuous = "pushes the unwieldy frame of" - response_disarm_simple = "push the unwieldy frame of" - response_harm_continuous = "tries to shut up" - response_harm_simple = "try to shut up" - speak = list("YA-HONK!!!") - emote_see = list("honks", "squeaks") - speak_chance = 60 - maxHealth = 150 - health = 150 - pixel_x = -16 - speed = 10 - harm_intent_damage = 5 - melee_damage_lower = 5 - attack_verb_continuous = "YA-HONKs" - attack_verb_simple = "YA-HONK" - loot = list(/obj/item/clothing/mask/gas/clown_hat, /obj/effect/gibspawner/human, /obj/item/soap) - -/mob/living/simple_animal/hostile/retaliate/clown/clownhulk - name = "Honk Hulk" - desc = "" - icon_state = "honkhulk" - icon_living = "honkhulk" - move_resist = INFINITY - response_help_continuous = "tries desperately to appease" - response_help_simple = "try desperately to appease" - response_disarm_continuous = "foolishly pushes" - response_disarm_simple = "foolishly push" - response_harm_continuous = "angers" - response_harm_simple = "anger" - speak = list("HONK", "Honk!", "HAUAUANK!!!", "GUUURRRRAAAHHH!!!") - emote_see = list("honks", "sweats", "grunts") - speak_chance = 5 - maxHealth = 400 - health = 400 - pixel_x = -16 - speed = 2 - harm_intent_damage = 15 - melee_damage_lower = 15 - melee_damage_upper = 20 - attack_verb_continuous = "pummels" - attack_verb_simple = "pummel" - obj_damage = 30 - environment_smash = ENVIRONMENT_SMASH_WALLS - loot = list(/obj/item/clothing/mask/gas/clown_hat, /obj/effect/gibspawner/human, /obj/item/soap) - -/mob/living/simple_animal/hostile/retaliate/clown/clownhulk/chlown - name = "Chlown" - desc = "" - icon_state = "chlown" - icon_living = "chlown" - response_help_continuous = "submits to" - response_help_simple = "submit to" - response_disarm_continuous = "tries to assert dominance over" - response_disarm_simple = "try to assert dominance over" - response_harm_continuous = "makes a weak beta attack at" - response_harm_simple = "make a weak beta attack at" - speak = list("HONK", "Honk!", "Bruh", "cheeaaaahhh?") - emote_see = list("asserts his dominance", "emasculates everyone implicitly") - maxHealth = 500 - health = 500 - speed = -2 - armor_penetration = 20 - attack_verb_continuous = "steals the girlfriend of" - attack_verb_simple = "steal the girlfriend of" - attack_sound = 'sound/blank.ogg' - loot = list(/obj/item/clothing/mask/gas/clown_hat, /obj/effect/gibspawner/human, /obj/effect/particle_effect/foam, /obj/item/soap) - -/mob/living/simple_animal/hostile/retaliate/clown/clownhulk/honcmunculus - name = "Honkmunculus" - desc = "" - icon_state = "honkmunculus" - icon_living = "honkmunculus" - response_help_continuous = "skeptically pokes" - response_help_simple = "skeptically poke" - response_disarm_continuous = "pushes the unwieldy frame of" - response_disarm_simple = "push the unwieldy frame of" - speak = list("honk") - emote_see = list("squirms", "writhes") - speak_chance = 1 - maxHealth = 200 - health = 200 - speed = -5 - harm_intent_damage = 5 - melee_damage_lower = 5 - melee_damage_upper = 10 - attack_verb_continuous = "ferociously mauls" - attack_verb_simple = "ferociously maul" - environment_smash = ENVIRONMENT_SMASH_NONE - loot = list(/obj/item/clothing/mask/gas/clown_hat, /obj/effect/particle_effect/foam, /obj/item/soap) - attack_reagent = /datum/reagent/peaceborg/confuse - -/mob/living/simple_animal/hostile/retaliate/clown/clownhulk/destroyer - name = "The Destroyer" - desc = "" - icon_state = "destroyer" - icon_living = "destroyer" - response_disarm_continuous = "bounces off of" - response_harm_continuous = "bounces off of" - speak = list("HONK!!!", "The Honkmother is merciful, so I must act out her wrath.", "parce mihi ad beatus honkmother placet mihi ut peccata committere,", "DIE!!!") - maxHealth = 400 - health = 400 - speed = 5 - harm_intent_damage = 30 - melee_damage_lower = 20 - melee_damage_upper = 40 - armor_penetration = 30 - stat_attack = UNCONSCIOUS - attack_verb_continuous = "acts out divine vengeance on" - attack_verb_simple = "act out divine vengeance on" - obj_damage = 50 - environment_smash = ENVIRONMENT_SMASH_RWALLS - loot = list(/obj/item/clothing/mask/gas/clown_hat, /obj/effect/gibspawner/human, /obj/effect/particle_effect/foam, /obj/item/soap) - -/mob/living/simple_animal/hostile/retaliate/clown/mutant - name = "Unknown" - desc = "" - icon_state = "mutant" - icon_living = "mutant" - move_resist = INFINITY - turns_per_move = 10 - response_help_continuous = "reluctantly sinks a finger into" - response_help_simple = "reluctantly sink a finger into" - response_disarm_continuous = "squishes into" - response_disarm_simple = "squish into" - response_harm_continuous = "squishes into" - response_harm_simple = "squish into" - speak = list("aaaaaahhhhuuhhhuhhhaaaaa", "AAAaaauuuaaAAAaauuhhh", "huuuuuh... hhhhuuuooooonnnnkk", "HuaUAAAnKKKK") - emote_see = list("squirms", "writhes", "pulsates", "froths", "oozes") - speak_chance = 10 - maxHealth = 130 - health = 130 - pixel_x = -16 - speed = -5 - harm_intent_damage = 10 - melee_damage_lower = 10 - melee_damage_upper = 20 - attack_verb_continuous = "awkwardly flails at" - attack_verb_simple = "awkwardly flail at" - loot = list(/obj/item/clothing/mask/gas/clown_hat, /obj/item/soap, /obj/effect/gibspawner/generic, /obj/effect/gibspawner/generic/animal, /obj/effect/gibspawner/human/bodypartless, /obj/effect/gibspawner/human) - -/mob/living/simple_animal/hostile/retaliate/clown/mutant/blob - name = "Something that was once a clown" - desc = "" - icon_state = "blob" - icon_living = "blob" - speak = list("hey, buddy", "HONK!!!", "H-h-h-H-HOOOOONK!!!!", "HONKHONKHONK!!!", "HEY, BUCKO, GET BACK HERE!!!", "HOOOOOOOONK!!!") - emote_see = list("jiggles", "wobbles") - health = 130 - mob_size = MOB_SIZE_LARGE - speed = 20 - attack_verb_continuous = "bounces off of" - attack_verb_simple = "bounce off of" - loot = list(/obj/item/clothing/mask/gas/clown_hat, /obj/effect/particle_effect/foam, /obj/item/soap, /obj/effect/gibspawner/generic, /obj/effect/gibspawner/generic/animal, /obj/effect/gibspawner/human/bodypartless, /obj/effect/gibspawner/human) - attack_reagent = /datum/reagent/toxin/mindbreaker diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm deleted file mode 100644 index 315a9a56ac..0000000000 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm +++ /dev/null @@ -1,131 +0,0 @@ -/mob/living/simple_animal/hostile/retaliate/ghost - name = "ghost" - desc = "" - icon = 'icons/mob/mob.dmi' - icon_state = "ghost" - icon_living = "ghost" - mob_biotypes = MOB_SPIRIT - speak_chance = 0 - turns_per_move = 5 - response_help_continuous = "passes through" - response_help_simple = "pass through" - a_intent = INTENT_HARM - healable = 0 - speed = 0 - maxHealth = 40 - health = 40 - harm_intent_damage = 10 - melee_damage_lower = 15 - melee_damage_upper = 15 - del_on_death = 1 - emote_see = list("weeps silently", "groans", "mumbles") - attack_verb_continuous = "grips" - attack_verb_simple = "grip" - attack_sound = 'sound/blank.ogg' - speak_emote = list("weeps") - deathmessage = "wails, disintegrating into a pile of ectoplasm!" - loot = list(/obj/item/ectoplasm) - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 - maxbodytemp = 1500 - movement_type = FLYING - pressure_resistance = 300 - gold_core_spawnable = NO_SPAWN //too spooky for science - var/ghost_hairstyle - var/ghost_hair_color - var/mutable_appearance/ghost_hair - var/ghost_facial_hairstyle - var/ghost_facial_hair_color - var/mutable_appearance/ghost_facial_hair - var/random = TRUE //if you want random names for ghosts or not - -/mob/living/simple_animal/hostile/retaliate/ghost/Initialize() - . = ..() - give_hair() - set_light(1, 1, 2) // same glowing as visible player ghosts - if(random) - switch(rand(0,1)) - if(0) - name = "ghost of [pick(GLOB.first_names_male)] [pick(GLOB.last_names)]" - if(1) - name = "ghost of [pick(GLOB.first_names_female)] [pick(GLOB.last_names)]" - - -/mob/living/simple_animal/hostile/retaliate/ghost/proc/give_hair() - if(ghost_hairstyle != null) - ghost_hair = mutable_appearance('icons/mob/human_face.dmi', "hair_[ghost_hairstyle]", -HAIR_LAYER) - ghost_hair.alpha = 200 - ghost_hair.color = ghost_hair_color - add_overlay(ghost_hair) - if(ghost_facial_hairstyle != null) - ghost_facial_hair = mutable_appearance('icons/mob/human_face.dmi', "facial_[ghost_facial_hairstyle]", -HAIR_LAYER) - ghost_facial_hair.alpha = 200 - ghost_facial_hair.color = ghost_facial_hair_color - add_overlay(ghost_facial_hair) - -/mob/living/simple_animal/hostile/retaliate/gaseousform - name = "gaseous mist" - desc = "" - icon = 'icons/mob/mob.dmi' - icon_state = "mist" - icon_living = "mist" - mob_biotypes = MOB_SPIRIT - speak_chance = 0 - turns_per_move = 5 - response_help_continuous = "passes through" - response_help_simple = "pass through" - a_intent = INTENT_HARM - healable = 0 - speed = 0 - maxHealth = 40 - health = 40 - harm_intent_damage = 10 - melee_damage_lower = 15 - melee_damage_upper = 15 - del_on_death = 1 - emote_see = list("blows") - attack_verb_continuous = "grips" - attack_verb_simple = "grip" - attack_sound = 'sound/blank.ogg' - speak_emote = list("wails") - deathmessage = "wails, disintegrating into a pile of ectoplasm!" - loot = list(/obj/item/ectoplasm) - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 - maxbodytemp = 1500 - movement_type = FLYING - pressure_resistance = 300 - gold_core_spawnable = NO_SPAWN //too spooky for science - var/random = TRUE //if you want random names for ghosts or not - -/mob/living/simple_animal/hostile/retaliate/gaseousform/Initialize() - . = ..() - set_light(1, 1, 2) - addtimer(CALLBACK(src, TYPE_PROC_REF(/mob/living/simple_animal/hostile/retaliate/gaseousform, revert), "VAMPIRE LORD"), 10 SECONDS) - -/mob/living/simple_animal/hostile/retaliate/gaseousform/proc/revert() - qdel() - -/mob/living/simple_animal/hostile/retaliate/gaseousform/Move(NewLoc, direct) - var/oldloc = loc - - if(NewLoc) - var/NewLocTurf = get_turf(NewLoc) - if(istype(NewLocTurf, /turf/closed/mineral/rogue/bedrock)) // prevent going out of bounds. - return - if(istype(NewLocTurf, /turf/closed/wall)) // gas can go through doors/windows but not walls - return - forceMove(NewLoc) - update_parallax_contents() - else - forceMove(get_turf(src)) //Get out of closets and such as a ghost - if((direct & NORTH) && y < world.maxy) - y++ - else if((direct & SOUTH) && y > 1) - y-- - if((direct & EAST) && x < world.maxx) - x++ - else if((direct & WEST) && x > 1) - x-- - - Moved(oldloc, direct) diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/spaceman.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/spaceman.dm deleted file mode 100644 index 10334cc251..0000000000 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/spaceman.dm +++ /dev/null @@ -1,75 +0,0 @@ -/mob/living/simple_animal/hostile/retaliate/spaceman - name = "Spaceman" - desc = "" - icon_state = "old" - icon_living = "old" - icon_dead = "old_dead" - icon_gib = "clown_gib" - mob_biotypes = MOB_ORGANIC|MOB_HUMANOID - gender = MALE - turns_per_move = 5 - response_disarm_continuous = "gently pushes aside" - response_disarm_simple = "gently push aside" - response_harm_continuous = "punches" - response_harm_simple = "punch" - a_intent = INTENT_HARM - maxHealth = 100 - health = 100 - speed = 0 - harm_intent_damage = 8 - melee_damage_lower = 10 - melee_damage_upper = 10 - attack_verb_continuous = "hits" - attack_verb_simple = "hit" - attack_sound = 'sound/blank.ogg' - obj_damage = 0 - environment_smash = ENVIRONMENT_SMASH_NONE - del_on_death = 0 - footstep_type = FOOTSTEP_MOB_SHOE - -/mob/living/simple_animal/hostile/retaliate/nanotrasenpeace //this should be in a different file - name = "Nanotrasen Private Security Officer" - desc = "" - icon = 'icons/mob/simple_human.dmi' - icon_state = "nanotrasen" - icon_living = "nanotrasen" - icon_dead = null - icon_gib = "syndicate_gib" - turns_per_move = 5 - speed = 0 - stat_attack = UNCONSCIOUS - robust_searching = 1 - vision_range = 3 - maxHealth = 100 - health = 100 - harm_intent_damage = 5 - melee_damage_lower = 10 - melee_damage_upper = 15 - attack_verb_continuous = "punches" - attack_verb_simple = "punch" - attack_sound = 'sound/blank.ogg' - faction = list("nanotrasenprivate") - a_intent = INTENT_HARM - loot = list(/obj/effect/mob_spawn/human/corpse/nanotrasensoldier) - atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) - unsuitable_atmos_damage = 15 - status_flags = CANPUSH - search_objects = 1 - -/mob/living/simple_animal/hostile/retaliate/nanotrasenpeace/Aggro() - ..() - summon_backup(15) - say("411 in progress, requesting backup!") - -/mob/living/simple_animal/hostile/retaliate/nanotrasenpeace/ranged - icon_state = "nanotrasenrangedsmg" - icon_living = "nanotrasenrangedsmg" - vision_range = 9 - rapid = 3 - ranged = 1 - retreat_distance = 3 - minimum_distance = 5 - casingtype = /obj/item/ammo_casing/c46x30mm - projectilesound = 'sound/blank.ogg' - loot = list(/obj/item/gun/ballistic/automatic/wt550, - /obj/effect/mob_spawn/human/corpse/nanotrasensoldier) diff --git a/code/modules/mob/living/simple_animal/hostile/skeleton.dm b/code/modules/mob/living/simple_animal/hostile/skeleton.dm deleted file mode 100644 index 84a89b5531..0000000000 --- a/code/modules/mob/living/simple_animal/hostile/skeleton.dm +++ /dev/null @@ -1,127 +0,0 @@ -/mob/living/simple_animal/hostile/skeleton - name = "skeleton" - desc = "" - icon = 'icons/mob/simple_human.dmi' - icon_state = "skeleton" - icon_living = "skeleton" - icon_dead = "skeleton" - gender = NEUTER - mob_biotypes = MOB_UNDEAD|MOB_HUMANOID - turns_per_move = 5 - speak_emote = list("rattles") - emote_see = list("rattles") - a_intent = INTENT_HARM - maxHealth = 40 - health = 40 - speed = 1 - harm_intent_damage = 5 - melee_damage_lower = 15 - melee_damage_upper = 15 - minbodytemp = 0 - maxbodytemp = 1500 - healable = 0 //they're skeletons how would bruise packs help them?? - attack_verb_continuous = "slashes" - attack_verb_simple = "slash" - attack_sound = 'sound/blank.ogg' - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - unsuitable_atmos_damage = 10 - robust_searching = 1 - stat_attack = UNCONSCIOUS - gold_core_spawnable = HOSTILE_SPAWN - faction = list("skeleton") - see_in_dark = 8 - lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE - deathmessage = "collapses into a pile of bones!" - del_on_death = 1 - loot = list(/obj/effect/decal/remains/human) - - footstep_type = FOOTSTEP_MOB_SHOE - -/mob/living/simple_animal/hostile/skeleton/eskimo - name = "undead eskimo" - desc = "" - icon_state = "eskimo" - icon_living = "eskimo" - icon_dead = "eskimo_dead" - maxHealth = 55 - health = 55 - weather_immunities = list("snow") - gold_core_spawnable = NO_SPAWN - melee_damage_lower = 17 - 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/clothing/shoes/winterboots, - /obj/item/clothing/suit/hooded/wintercoat) - - -/mob/living/simple_animal/hostile/skeleton/templar - name = "undead templar" - desc = "" - icon_state = "templar" - icon_living = "templar" - icon_dead = "templar_dead" - maxHealth = 150 - health = 150 - weather_immunities = list("snow") - speed = 2 - gold_core_spawnable = NO_SPAWN - speak_chance = 1 - speak = list("THE GODS WILL IT!","DEUS VULT!","REMOVE KABAB!") - force_threshold = 10 //trying to simulate actually having armor - obj_damage = 50 - melee_damage_lower = 25 - melee_damage_upper = 30 - deathmessage = "collapses into a pile of bones, its gear clanging as it hits the ground!" - loot = list(/obj/effect/decal/remains/human, - /obj/item/clothing/suit/armor/riot/chaplain, - /obj/item/clothing/head/helmet/chaplain, - /obj/item/claymore/weak{name = "holy sword"}) - -/mob/living/simple_animal/hostile/skeleton/ice - name = "ice skeleton" - desc = "" - speed = 5 - maxHealth = 75 - health = 75 - weather_immunities = list("snow") - color = rgb(114,228,250) - loot = list(/obj/effect/decal/remains/human{color = rgb(114,228,250)}) - -/mob/living/simple_animal/hostile/skeleton/plasmaminer - name = "shambling miner" - desc = "" - icon_state = "plasma_miner" - icon_living = "plasma_miner" - icon_dead = "plasma_miner" - maxHealth = 150 - health = 150 - harm_intent_damage = 10 - melee_damage_lower = 15 - melee_damage_upper = 20 - light_color = LIGHT_COLOR_PURPLE - attack_verb_continuous = "slashes" - attack_verb_simple = "slash" - attack_sound = 'sound/blank.ogg' - deathmessage = "collapses into a pile of bones, their suit dissolving among the plasma!" - loot = list(/obj/effect/decal/remains/plasma) - -/mob/living/simple_animal/hostile/skeleton/plasmaminer/jackhammer - desc = "" - icon_state = "plasma_miner_tool" - icon_living = "plasma_miner_tool" - icon_dead = "plasma_miner_tool" - maxHealth = 185 - health = 185 - harm_intent_damage = 15 - melee_damage_lower = 20 - melee_damage_upper = 25 - attack_verb_continuous = "blasts" - attack_verb_simple = "blast" - attack_sound = 'sound/blank.ogg' - loot = list(/obj/effect/decal/remains/plasma) - -/mob/living/simple_animal/hostile/skeleton/plasmaminer/Initialize() - . = ..() - set_light(2) diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm deleted file mode 100644 index 7b5ff3c41c..0000000000 --- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm +++ /dev/null @@ -1,314 +0,0 @@ -/* - CONTENTS - LINE 10 - BASE MOB - LINE 52 - SWORD AND SHIELD - LINE 164 - GUNS - LINE 267 - MISC -*/ - - -///////////////Base mob//////////// -/obj/effect/light_emitter/red_energy_sword //used so there's a combination of both their head light and light coming off the energy sword - light_color = LIGHT_COLOR_RED - - -/mob/living/simple_animal/hostile/syndicate - name = "Syndicate Operative" - desc = "" - icon = 'icons/mob/simple_human.dmi' - icon_state = "syndicate" - icon_living = "syndicate" - icon_dead = "syndicate_dead" - icon_gib = "syndicate_gib" - mob_biotypes = MOB_ORGANIC|MOB_HUMANOID - speak_chance = 0 - turns_per_move = 5 - speed = 0 - stat_attack = UNCONSCIOUS - robust_searching = 1 - maxHealth = 100 - health = 100 - harm_intent_damage = 5 - melee_damage_lower = 10 - melee_damage_upper = 10 - attack_verb_continuous = "punches" - attack_verb_simple = "punch" - attack_sound = 'sound/blank.ogg' - a_intent = INTENT_HARM - loot = list(/obj/effect/mob_spawn/human/corpse/syndicatesoldier) - atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) - unsuitable_atmos_damage = 15 - faction = list(ROLE_SYNDICATE) - check_friendly_fire = 1 - status_flags = CANPUSH - del_on_death = 1 - dodging = TRUE - rapid_melee = 2 - footstep_type = FOOTSTEP_MOB_SHOE - -///////////////Melee//////////// - -/mob/living/simple_animal/hostile/syndicate/space - icon_state = "syndicate_space" - icon_living = "syndicate_space" - name = "Syndicate Commando" - maxHealth = 170 - health = 170 - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 - speed = 1 - spacewalk = TRUE - -/mob/living/simple_animal/hostile/syndicate/space/Initialize() - . = ..() - set_light(4) - -/mob/living/simple_animal/hostile/syndicate/space/stormtrooper - icon_state = "syndicate_stormtrooper" - icon_living = "syndicate_stormtrooper" - name = "Syndicate Stormtrooper" - maxHealth = 250 - health = 250 - -/mob/living/simple_animal/hostile/syndicate/melee //dude with a knife and no shields - melee_damage_lower = 15 - melee_damage_upper = 15 - icon_state = "syndicate_knife" - icon_living = "syndicate_knife" - loot = list(/obj/effect/gibspawner/human) - attack_verb_continuous = "slashes" - attack_verb_simple = "slash" - attack_sound = 'sound/blank.ogg' - status_flags = 0 - var/projectile_deflect_chance = 0 - -/mob/living/simple_animal/hostile/syndicate/melee/space - icon_state = "syndicate_space_knife" - icon_living = "syndicate_space_knife" - name = "Syndicate Commando" - maxHealth = 170 - health = 170 - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 - speed = 1 - spacewalk = TRUE - projectile_deflect_chance = 50 - -/mob/living/simple_animal/hostile/syndicate/melee/space/Initialize() - . = ..() - set_light(4) - -/mob/living/simple_animal/hostile/syndicate/melee/space/stormtrooper - icon_state = "syndicate_stormtrooper_knife" - icon_living = "syndicate_stormtrooper_knife" - name = "Syndicate Stormtrooper" - maxHealth = 250 - health = 250 - projectile_deflect_chance = 50 - -/mob/living/simple_animal/hostile/syndicate/melee/sword - melee_damage_lower = 30 - melee_damage_upper = 30 - icon_state = "syndicate_sword" - icon_living = "syndicate_sword" - attack_verb_continuous = "slashes" - attack_verb_simple = "slash" - attack_sound = 'sound/blank.ogg' - armor_penetration = 35 - light_color = LIGHT_COLOR_RED - status_flags = 0 - var/obj/effect/light_emitter/red_energy_sword/sord - projectile_deflect_chance = 50 - -/mob/living/simple_animal/hostile/syndicate/melee/sword/Initialize() - . = ..() - set_light(2) - -/mob/living/simple_animal/hostile/syndicate/melee/sword/Destroy() - QDEL_NULL(sord) - return ..() - -/mob/living/simple_animal/hostile/syndicate/melee/bullet_act(obj/projectile/Proj) - if(prob(projectile_deflect_chance)) - visible_message("[src] blocks [Proj] with its shield!") - return BULLET_ACT_BLOCK - return ..() - -/mob/living/simple_animal/hostile/syndicate/melee/sword/space - icon_state = "syndicate_space_sword" - icon_living = "syndicate_space_sword" - name = "Syndicate Commando" - maxHealth = 170 - health = 170 - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 - speed = 1 - spacewalk = TRUE - projectile_deflect_chance = 50 - -/mob/living/simple_animal/hostile/syndicate/melee/sword/space/Initialize() - . = ..() - sord = new(src) - set_light(4) - -/mob/living/simple_animal/hostile/syndicate/melee/sword/space/Destroy() - QDEL_NULL(sord) - return ..() - -/mob/living/simple_animal/hostile/syndicate/melee/sword/space/stormtrooper - icon_state = "syndicate_stormtrooper_sword" - icon_living = "syndicate_stormtrooper_sword" - name = "Syndicate Stormtrooper" - maxHealth = 250 - health = 250 - projectile_deflect_chance = 50 - -///////////////Guns//////////// - -/mob/living/simple_animal/hostile/syndicate/ranged - ranged = 1 - retreat_distance = 5 - minimum_distance = 5 - icon_state = "syndicate_pistol" - icon_living = "syndicate_pistol" - casingtype = /obj/item/ammo_casing/c10mm - projectilesound = 'sound/blank.ogg' - loot = list(/obj/effect/gibspawner/human) - dodging = FALSE - rapid_melee = 1 - -/mob/living/simple_animal/hostile/syndicate/ranged/infiltrator //shuttle loan event - projectilesound = 'sound/blank.ogg' - loot = list(/obj/effect/mob_spawn/human/corpse/syndicatesoldier) - -/mob/living/simple_animal/hostile/syndicate/ranged/space - icon_state = "syndicate_space_pistol" - icon_living = "syndicate_space_pistol" - name = "Syndicate Commando" - maxHealth = 170 - health = 170 - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 - speed = 1 - spacewalk = TRUE - -/mob/living/simple_animal/hostile/syndicate/ranged/space/Initialize() - . = ..() - set_light(4) - -/mob/living/simple_animal/hostile/syndicate/ranged/space/stormtrooper - icon_state = "syndicate_stormtrooper_pistol" - icon_living = "syndicate_stormtrooper_pistol" - name = "Syndicate Stormtrooper" - maxHealth = 250 - health = 250 - -/mob/living/simple_animal/hostile/syndicate/ranged/smg - rapid = 2 - icon_state = "syndicate_smg" - icon_living = "syndicate_smg" - casingtype = /obj/item/ammo_casing/c45 - projectilesound = 'sound/blank.ogg' - -/mob/living/simple_animal/hostile/syndicate/ranged/smg/pilot //caravan ambush ruin - name = "Syndicate Salvage Pilot" - loot = list(/obj/effect/mob_spawn/human/corpse/syndicatesoldier) - -/mob/living/simple_animal/hostile/syndicate/ranged/smg/space - icon_state = "syndicate_space_smg" - icon_living = "syndicate_space_smg" - name = "Syndicate Commando" - maxHealth = 170 - health = 170 - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 - speed = 1 - spacewalk = TRUE - -/mob/living/simple_animal/hostile/syndicate/ranged/smg/space/Initialize() - . = ..() - set_light(4) - -/mob/living/simple_animal/hostile/syndicate/ranged/smg/space/stormtrooper - icon_state = "syndicate_stormtrooper_smg" - icon_living = "syndicate_stormtrooper_smg" - name = "Syndicate Stormtrooper" - maxHealth = 250 - health = 250 - -/mob/living/simple_animal/hostile/syndicate/ranged/shotgun - rapid = 2 - rapid_fire_delay = 6 - minimum_distance = 3 - icon_state = "syndicate_shotgun" - icon_living = "syndicate_shotgun" - casingtype = /obj/item/ammo_casing/shotgun/buckshot //buckshot (up to 72.5 brute) fired in a two-round burst - -/mob/living/simple_animal/hostile/syndicate/ranged/shotgun/space - icon_state = "syndicate_space_shotgun" - icon_living = "syndicate_space_shotgun" - name = "Syndicate Commando" - maxHealth = 170 - health = 170 - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 - speed = 1 - spacewalk = TRUE - -/mob/living/simple_animal/hostile/syndicate/ranged/shotgun/space/Initialize() - . = ..() - set_light(4) - -/mob/living/simple_animal/hostile/syndicate/ranged/shotgun/space/stormtrooper - icon_state = "syndicate_stormtrooper_shotgun" - icon_living = "syndicate_stormtrooper_shotgun" - name = "Syndicate Stormtrooper" - maxHealth = 250 - health = 250 - -///////////////Misc//////////// - -/mob/living/simple_animal/hostile/syndicate/civilian - minimum_distance = 10 - retreat_distance = 10 - obj_damage = 0 - environment_smash = ENVIRONMENT_SMASH_NONE - -/mob/living/simple_animal/hostile/syndicate/civilian/Aggro() - ..() - summon_backup(15) - say("GUARDS!!") - - -/mob/living/simple_animal/hostile/viscerator - name = "viscerator" - desc = "" - icon_state = "viscerator_attack" - icon_living = "viscerator_attack" - pass_flags = PASSTABLE | PASSMOB - a_intent = INTENT_HARM - mob_biotypes = MOB_ROBOTIC - health = 25 - maxHealth = 25 - melee_damage_lower = 15 - melee_damage_upper = 15 - obj_damage = 0 - environment_smash = ENVIRONMENT_SMASH_NONE - attack_verb_continuous = "cuts" - attack_verb_simple = "cut" - attack_sound = 'sound/blank.ogg' - faction = list(ROLE_SYNDICATE) - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 - mob_size = MOB_SIZE_TINY - movement_type = FLYING - limb_destroyer = 1 - speak_emote = list("states") - bubble_icon = "syndibot" - gold_core_spawnable = HOSTILE_SPAWN - del_on_death = 1 - deathmessage = "is smashed into pieces!" - -/mob/living/simple_animal/hostile/viscerator/Initialize() - . = ..() - AddComponent(/datum/component/swarming) diff --git a/code/modules/mob/living/simple_animal/hostile/tree.dm b/code/modules/mob/living/simple_animal/hostile/tree.dm deleted file mode 100644 index b047869449..0000000000 --- a/code/modules/mob/living/simple_animal/hostile/tree.dm +++ /dev/null @@ -1,74 +0,0 @@ -/mob/living/simple_animal/hostile/tree - name = "pine tree" - desc = "" - icon = 'icons/obj/flora/pinetrees.dmi' - icon_state = "pine_1" - icon_living = "pine_1" - icon_dead = "pine_1" - icon_gib = "pine_1" - gender = NEUTER - speak_chance = 0 - turns_per_move = 5 - response_help_continuous = "brushes" - response_help_simple = "brush" - response_disarm_continuous = "pushes" - response_disarm_simple = "push" - faction = list("hostile") - speed = 1 - maxHealth = 250 - health = 250 - mob_size = MOB_SIZE_LARGE - - pixel_x = -16 - - harm_intent_damage = 5 - melee_damage_lower = 8 - melee_damage_upper = 12 - attack_verb_continuous = "bites" - attack_verb_simple = "bite" - attack_sound = 'sound/blank.ogg' - speak_emote = list("pines") - emote_taunt = list("growls") - taunt_chance = 20 - - atmos_requirements = list("min_oxy" = 2, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - unsuitable_atmos_damage = 5 - minbodytemp = 0 - maxbodytemp = 1200 - - deathmessage = "is hacked into pieces!" - loot = list(/obj/item/stack/sheet/mineral/wood) - gold_core_spawnable = HOSTILE_SPAWN - del_on_death = 1 - -/mob/living/simple_animal/hostile/tree/Life() - ..() - if(isopenturf(loc)) - var/turf/open/T = src.loc - if(T.air && T.air.gases[/datum/gas/carbon_dioxide]) - var/co2 = T.air.gases[/datum/gas/carbon_dioxide][MOLES] - if(co2 > 0) - if(prob(25)) - var/amt = min(co2, 9) - T.air.gases[/datum/gas/carbon_dioxide][MOLES] -= amt - T.atmos_spawn_air("o2=[amt]") - -/mob/living/simple_animal/hostile/tree/AttackingTarget() - . = ..() - if(iscarbon(target)) - var/mob/living/carbon/C = target - if(prob(15)) - C.Paralyze(60) - C.visible_message("\The [src] knocks down \the [C]!", \ - "\The [src] knocks you down!") - -/mob/living/simple_animal/hostile/tree/festivus - name = "festivus pole" - desc = "" - icon_state = "festivus_pole" - icon_living = "festivus_pole" - icon_dead = "festivus_pole" - icon_gib = "festivus_pole" - loot = list(/obj/item/stack/rods) - speak_emote = list("polls") - faction = list() diff --git a/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm b/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm deleted file mode 100644 index f16c57ed2e..0000000000 --- a/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm +++ /dev/null @@ -1,136 +0,0 @@ - - -/obj/structure/alien/resin/flower_bud_enemy //inheriting basic attack/damage stuff from alien structures - name = "flower bud" - desc = "" - icon = 'icons/effects/spacevines.dmi' - icon_state = "flower_bud" - layer = SPACEVINE_MOB_LAYER - opacity = 0 - canSmoothWith = list() - smooth = SMOOTH_FALSE - var/growth_time = 1200 - - -/obj/structure/alien/resin/flower_bud_enemy/Initialize() - . = ..() - var/list/anchors = list() - anchors += locate(x-2,y+2,z) - anchors += locate(x+2,y+2,z) - anchors += locate(x-2,y-2,z) - anchors += locate(x+2,y-2,z) - - for(var/turf/T in anchors) - var/datum/beam/B = Beam(T, "vine", time=INFINITY, maxdistance=5, beam_type=/obj/effect/ebeam/vine) - B.sleep_time = 10 //these shouldn't move, so let's slow down updates to 1 second (any slower and the deletion of the vines would be too slow) - addtimer(CALLBACK(src, PROC_REF(bear_fruit)), growth_time) - -/obj/structure/alien/resin/flower_bud_enemy/proc/bear_fruit() - visible_message("the plant has borne fruit!") - new /mob/living/simple_animal/hostile/venus_human_trap(get_turf(src)) - qdel(src) - - -/obj/effect/ebeam/vine - name = "thick vine" - mouse_opacity = MOUSE_OPACITY_ICON - desc = "" - - -/obj/effect/ebeam/vine/Crossed(atom/movable/AM) - if(isliving(AM)) - var/mob/living/L = AM - if(!("vines" in L.faction)) - L.adjustBruteLoss(5) - to_chat(L, "I cut myself on the thorny vines.") - - - -/mob/living/simple_animal/hostile/venus_human_trap - name = "venus human trap" - desc = "" - icon_state = "venus_human_trap" - layer = SPACEVINE_MOB_LAYER - health = 50 - maxHealth = 50 - ranged = 1 - harm_intent_damage = 5 - obj_damage = 60 - melee_damage_lower = 25 - melee_damage_upper = 25 - a_intent = INTENT_HARM - attack_sound = 'sound/blank.ogg' - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - unsuitable_atmos_damage = 0 - faction = list("hostile","vines","plants") - var/list/grasping = list() - var/list/tethers = list() - var/max_grasps = 4 - var/grasp_chance = 20 - var/grasp_pull_chance = 85 - var/grasp_range = 4 - del_on_death = 1 - -/mob/living/simple_animal/hostile/venus_human_trap/Destroy() - for(var/L in grasping) - var/datum/beam/B = grasping[L] - if(B) - qdel(B) - for(var/datum/component/tether in tethers) - tether.RemoveComponent() - grasping = null - return ..() - -/mob/living/simple_animal/hostile/venus_human_trap/handle_automated_action() - if(..()) - for(var/mob/living/L in grasping) - if(L.stat == DEAD) - var/datum/beam/B = grasping[L] - if(B) - B.End() - grasping -= L - - //Can attack+pull multiple times per cycle - if(L.Adjacent(src)) - L.attack_animal(src) - else - if(prob(grasp_pull_chance)) - setDir(get_dir(src,L) )//staaaare - step(L,get_dir(L,src)) //reel them in - L.Paralyze(60) //you can't get away now~ - - if(length(grasping) < max_grasps) - grasping: - for(var/mob/living/L in view(grasp_range, src)) - if(L == src || faction_check_mob(L) || (L in grasping) || L == target) - continue - for(var/turf/T in getline(src,L)) - if (T.density) - continue grasping - for(var/obj/O in T) - if(O.density) - continue grasping - if(prob(grasp_chance)) - to_chat(L, "\The [src] has you entangled!") - grasping[L] = Beam(L, "vine", time=INFINITY, maxdistance=5, beam_type=/obj/effect/ebeam/vine) - tethers += list(L.AddComponent(/datum/component/tether, src, grasp_range+1, /obj/effect/ebeam/vine), AddComponent(/datum/component/tether, L, grasp_range+1, /obj/effect/ebeam/vine)) - break //only take 1 new victim per cycle - - -/mob/living/simple_animal/hostile/venus_human_trap/OpenFire(atom/the_target) - for(var/turf/T in getline(src,target)) - if (T.density) - return - for(var/obj/O in T) - if(O.density) - return - var/dist = get_dist(src,the_target) - Beam(the_target, "vine", time=dist*2, maxdistance=dist+2, beam_type=/obj/effect/ebeam/vine) - the_target.attack_animal(src) - - -/mob/living/simple_animal/hostile/venus_human_trap/CanAttack(atom/the_target) - . = ..() - if(.) - if(the_target in grasping) - return 0 diff --git a/code/modules/mob/living/simple_animal/hostile/wizard.dm b/code/modules/mob/living/simple_animal/hostile/wizard.dm deleted file mode 100644 index cd2dea75de..0000000000 --- a/code/modules/mob/living/simple_animal/hostile/wizard.dm +++ /dev/null @@ -1,77 +0,0 @@ -/mob/living/simple_animal/hostile/wizard - name = "Space Wizard" - desc = "" - icon = 'icons/mob/simple_human.dmi' - icon_state = "wizard" - icon_living = "wizard" - icon_dead = "wizard_dead" - mob_biotypes = MOB_ORGANIC|MOB_HUMANOID - speak_chance = 0 - turns_per_move = 3 - speed = 0 - maxHealth = 100 - health = 100 - harm_intent_damage = 5 - melee_damage_lower = 5 - melee_damage_upper = 5 - attack_verb_continuous = "punches" - attack_verb_simple = "punch" - attack_sound = 'sound/blank.ogg' - a_intent = INTENT_HARM - atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) - unsuitable_atmos_damage = 15 - faction = list(ROLE_WIZARD) - status_flags = CANPUSH - - retreat_distance = 3 //out of fireball range - minimum_distance = 3 - del_on_death = 1 - loot = list(/obj/effect/mob_spawn/human/corpse/wizard, - /obj/item/staff) - - var/obj/effect/proc_holder/spell/aimed/fireball/fireball = null - var/obj/effect/proc_holder/spell/targeted/turf_teleport/blink/blink = null - var/obj/effect/proc_holder/spell/targeted/projectile/magic_missile/mm = null - - var/next_cast = 0 - - footstep_type = FOOTSTEP_MOB_SHOE - -/mob/living/simple_animal/hostile/wizard/Initialize() - . = ..() - fireball = new /obj/effect/proc_holder/spell/aimed/fireball - fireball.clothes_req = 0 - fireball.human_req = 0 - fireball.player_lock = 0 - AddSpell(fireball) - implants += new /obj/item/implant/exile(src) - - mm = new /obj/effect/proc_holder/spell/targeted/projectile/magic_missile - mm.clothes_req = 0 - mm.human_req = 0 - mm.player_lock = 0 - AddSpell(mm) - - blink = new /obj/effect/proc_holder/spell/targeted/turf_teleport/blink - blink.clothes_req = 0 - blink.human_req = 0 - blink.player_lock = 0 - blink.outer_tele_radius = 3 - AddSpell(blink) - -/mob/living/simple_animal/hostile/wizard/handle_automated_action() - . = ..() - if(target && next_cast < world.time) - if((get_dir(src,target) in list(SOUTH,EAST,WEST,NORTH)) && fireball.cast_check(0,src)) //Lined up for fireball - src.setDir(get_dir(src,target)) - fireball.perform(list(target), user = src) - next_cast = world.time + 10 //One spell per second - return . - if(mm.cast_check(0,src)) - mm.choose_targets(src) - next_cast = world.time + 10 - return . - if(blink.cast_check(0,src)) //Spam Blink when you can - blink.choose_targets(src) - next_cast = world.time + 10 - return . diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index ac05ef7f0b..bd654f49c1 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -643,16 +643,6 @@ emote("me", 1, "[src] eagerly downs the cracker.") return 1 - - if(!drop_gently) - if(istype(held_item, /obj/item/grenade)) - var/obj/item/grenade/G = held_item - G.forceMove(drop_location()) - G.prime() - to_chat(src, "I let go of [held_item]!") - held_item = null - return 1 - to_chat(src, "I drop [held_item].") held_item.forceMove(drop_location()) @@ -842,7 +832,6 @@ speak_chance = 20 status_flags = GODMODE incorporeal_move = INCORPOREAL_MOVE_BASIC - butcher_results = list(/obj/item/ectoplasm = 1) /mob/living/simple_animal/parrot/Poly/ghost/Initialize() memory_saved = TRUE //At this point nothing is saved diff --git a/code/modules/mob/living/simple_animal/shade.dm b/code/modules/mob/living/simple_animal/shade.dm deleted file mode 100644 index 2ccf7ac9a0..0000000000 --- a/code/modules/mob/living/simple_animal/shade.dm +++ /dev/null @@ -1,67 +0,0 @@ -/mob/living/simple_animal/shade - name = "Shade" - real_name = "Shade" - desc = "" - gender = PLURAL - icon = 'icons/mob/mob.dmi' - icon_state = "shade" - icon_living = "shade" - mob_biotypes = MOB_SPIRIT - maxHealth = 40 - health = 40 - spacewalk = TRUE - healable = 0 - speak_emote = list("hisses") - emote_hear = list("wails.","screeches.") - response_help_continuous = "puts their hand through" - response_help_simple = "put your hand through" - response_disarm_continuous = "flails at" - response_disarm_simple = "flail at" - response_harm_continuous = "punches" - response_harm_simple = "punch" - speak_chance = 1 - melee_damage_lower = 5 - melee_damage_upper = 12 - attack_verb_continuous = "metaphysically strikes" - attack_verb_simple = "metaphysically strike" - minbodytemp = 0 - maxbodytemp = INFINITY - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - stop_automated_movement = 1 - faction = list("cult") - status_flags = CANPUSH - movement_type = FLYING - loot = list(/obj/item/ectoplasm) - del_on_death = TRUE - initial_language_holder = /datum/language_holder/construct - -/mob/living/simple_animal/shade/death() - deathmessage = "lets out a contented sigh as [p_their()] form unwinds." - ..() - -/mob/living/simple_animal/shade/canSuicide() - if(istype(loc, /obj/item/soulstone)) //do not suicide inside the soulstone - return 0 - return ..() - -/mob/living/simple_animal/shade/attack_animal(mob/living/simple_animal/M) - if(isconstruct(M)) - var/mob/living/simple_animal/hostile/construct/C = M - if(!C.can_repair_constructs) - return - if(health < maxHealth) - adjustHealth(-25) - Beam(M,icon_state="sendbeam",time=4) - M.visible_message("[M] heals \the [src].", \ - "I heal [src], leaving [src] at [health]/[maxHealth] health.") - else - to_chat(M, "I cannot heal [src], as [p_theyre()] unharmed!") - else if(src != M) - return ..() - -/mob/living/simple_animal/shade/attackby(obj/item/O, mob/user, params) //Marker -Agouri - if(istype(O, /obj/item/soulstone)) - var/obj/item/soulstone/SS = O - SS.transfer_soul("SHADE", src, user) - else - . = ..() diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 3a42fd5968..3f784462e8 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -722,13 +722,6 @@ GLOBAL_VAR_INIT(farm_animals, FALSE) return ..() if(!hand_index) hand_index = (active_hand_index % held_items.len)+1 - var/obj/item/held_item = get_active_held_item() - if(held_item) - if(istype(held_item, /obj/item/twohanded)) - var/obj/item/twohanded/T = held_item - if(T.wielded == 1) - to_chat(usr, "My other hand is too busy holding [T].") - return FALSE var/oindex = active_hand_index active_hand_index = hand_index if(hud_used) diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index a2e3e4827e..6521909a2a 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -338,8 +338,6 @@ continue else if(isturf(A)) var/turf/turf = A - if(isspaceturf(turf)) - continue if(!turf.density && !mob_negates_gravity()) continue return A diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index ace23bd768..7dfc5aef39 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -3,16 +3,8 @@ return //Handle items on mob - //first implants & organs - var/list/stored_implants = list() var/list/int_organs = list() - if (tr_flags & TR_KEEPIMPLANTS) - for(var/X in implants) - var/obj/item/implant/IMP = X - stored_implants += IMP - IMP.removed(src, 1, 1) - var/list/missing_bodyparts_zones = get_missing_limbs() var/obj/item/cavity_object @@ -69,12 +61,6 @@ O.updatehealth() O.radiation = radiation - //re-add implants to new mob - if (tr_flags & TR_KEEPIMPLANTS) - for(var/Y in implants) - var/obj/item/implant/IMP = Y - IMP.implant(O, null, 1) - //re-add organs to new mob. this order prevents moving the mind to a brain at any point if(tr_flags & TR_KEEPORGANS) for(var/X in O.internal_organs) @@ -147,16 +133,8 @@ return //Handle items on mob - //first implants & organs - var/list/stored_implants = list() var/list/int_organs = list() - if (tr_flags & TR_KEEPIMPLANTS) - for(var/X in implants) - var/obj/item/implant/IMP = X - stored_implants += IMP - IMP.removed(src, 1, 1) - var/list/missing_bodyparts_zones = get_missing_limbs() var/obj/item/cavity_object @@ -224,12 +202,6 @@ O.updatehealth() O.radiation = radiation - //re-add implants to new mob - if (tr_flags & TR_KEEPIMPLANTS) - for(var/Y in implants) - var/obj/item/implant/IMP = Y - IMP.implant(O, null, 1) - if(tr_flags & TR_KEEPORGANS) for(var/X in O.internal_organs) var/obj/item/organ/I = X @@ -402,28 +374,13 @@ if(!MP) return 0 //Sanity, this should never happen. - if(ispath(MP, /mob/living/simple_animal/hostile/construct)) - return 0 //Verbs do not appear for players. - //Good mobs! if(ispath(MP, /mob/living/simple_animal/pet/cat)) return 1 if(ispath(MP, /mob/living/simple_animal/pet/dog/corgi)) return 1 - if(ispath(MP, /mob/living/simple_animal/crab)) - return 1 - if(ispath(MP, /mob/living/simple_animal/hostile/carp)) - return 1 - if(ispath(MP, /mob/living/simple_animal/hostile/mushroom)) - return 1 - if(ispath(MP, /mob/living/simple_animal/shade)) - return 1 - if(ispath(MP, /mob/living/simple_animal/hostile/killertomato)) - return 1 if(ispath(MP, /mob/living/simple_animal/mouse)) return 1 //It is impossible to pull up the player panel for mice (Fixed! - Nodrak) - if(ispath(MP, /mob/living/simple_animal/hostile/bear)) - return 1 //Bears will auto-attack mobs, even if they're player controlled (Fixed! - Nodrak) if(ispath(MP, /mob/living/simple_animal/parrot)) return 1 //Parrots are no longer unfinished! -Nodrak diff --git a/code/modules/paperwork/carbonpaper.dm b/code/modules/paperwork/carbonpaper.dm deleted file mode 100644 index 9fd997d252..0000000000 --- a/code/modules/paperwork/carbonpaper.dm +++ /dev/null @@ -1,45 +0,0 @@ -/obj/item/paper/carbon - name = "sheet of carbon" - icon_state = "paper_stack" - item_state = "paper" - var/copied = FALSE - var/iscopy = FALSE - -/obj/item/paper/carbon/update_icon_state() - if(iscopy) - icon_state = "cpaper" - else if(copied) - icon_state = "paper" - else - icon_state = "paper_stack" - if(info) - icon_state = "[icon_state]_words" - -/obj/item/paper/carbon/proc/removecopy(mob/living/user) - if(!copied) - var/obj/item/paper/carbon/C = src - var/copycontents = C.info - var/obj/item/paper/carbon/Copy = new /obj/item/paper/carbon(user.loc) - - if(info) - copycontents = replacetext(copycontents, "" - Copy.name = "Copy - [C.name]" - Copy.fields = C.fields - Copy.updateinfolinks() - to_chat(user, "I tear off the carbon-copy!") - C.copied = TRUE - Copy.iscopy = TRUE - Copy.update_icon_state() - C.update_icon_state() - user.put_in_hands(Copy) - else - to_chat(user, "There are no more carbon copies attached to this paper!") - -/obj/item/paper/carbon/attack_hand(mob/living/user) - if(loc == user && user.is_holding(src)) - removecopy(user) - return - return ..() diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm deleted file mode 100644 index 9c7605407e..0000000000 --- a/code/modules/paperwork/clipboard.dm +++ /dev/null @@ -1,128 +0,0 @@ -/obj/item/clipboard - name = "clipboard" - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "clipboard" - item_state = "clipboard" - throwforce = 0 - w_class = WEIGHT_CLASS_SMALL - throw_speed = 3 - throw_range = 7 - var/obj/item/pen/haspen //The stored pen. - var/obj/item/paper/toppaper //The topmost piece of paper. - slot_flags = ITEM_SLOT_BELT - resistance_flags = FLAMMABLE - -/obj/item/clipboard/suicide_act(mob/living/carbon/user) - user.visible_message("[user] begins putting [user.p_their()] head into the clip of \the [src]! It looks like [user.p_theyre()] trying to commit suicide!") - return BRUTELOSS//the clipboard's clip is very strong. industrial duty. can kill a man easily. - -/obj/item/clipboard/Initialize() - update_icon() - . = ..() - -/obj/item/clipboard/Destroy() - QDEL_NULL(haspen) - QDEL_NULL(toppaper) //let movable/Destroy handle the rest - return ..() - -/obj/item/clipboard/update_icon() - cut_overlays() - var/list/dat = list() - if(toppaper) - dat += toppaper.icon_state - dat += toppaper.overlays.Copy() - if(haspen) - dat += "clipboard_pen" - dat += "clipboard_over" - add_overlay(dat) - - -/obj/item/clipboard/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/paper)) - if(!user.transferItemToLoc(W, src)) - return - toppaper = W - to_chat(user, "I clip the paper onto \the [src].") - update_icon() - else if(toppaper) - toppaper.attackby(user.get_active_held_item(), user) - update_icon() - - -/obj/item/clipboard/attack_self(mob/user) - var/dat = "Clipboard" - if(haspen) - dat += "Remove Pen

" - else - dat += "Add Pen

" - - //The topmost paper. You can't organise contents directly in byond, so this is what we're stuck with. -Pete - if(toppaper) - var/obj/item/paper/P = toppaper - dat += "Write Remove - [P.name]

" - - for(P in src) - if(P == toppaper) - continue - dat += "Write Remove Move to top - [P.name]
" - user << browse(dat, "window=clipboard") - onclose(user, "clipboard") - add_fingerprint(usr) - - -/obj/item/clipboard/Topic(href, href_list) - ..() - if(usr.stat || usr.restrained()) - return - - if(usr.contents.Find(src)) - - if(href_list["pen"]) - if(haspen) - haspen.forceMove(usr.loc) - usr.put_in_hands(haspen) - haspen = null - - if(href_list["addpen"]) - if(!haspen) - var/obj/item/held = usr.get_active_held_item() - if(istype(held, /obj/item/pen)) - var/obj/item/pen/W = held - if(!usr.transferItemToLoc(W, src)) - return - haspen = W - to_chat(usr, "I slot [W] into [src].") - - if(href_list["write"]) - var/obj/item/P = locate(href_list["write"]) in src - if(istype(P)) - if(usr.get_active_held_item()) - P.attackby(usr.get_active_held_item(), usr) - - if(href_list["remove"]) - var/obj/item/P = locate(href_list["remove"]) in src - if(istype(P)) - P.forceMove(usr.loc) - usr.put_in_hands(P) - if(P == toppaper) - toppaper = null - var/obj/item/paper/newtop = locate(/obj/item/paper) in src - if(newtop && (newtop != P)) - toppaper = newtop - else - toppaper = null - - if(href_list["read"]) - var/obj/item/paper/P = locate(href_list["read"]) in src - if(istype(P)) - usr.examinate(P) - - if(href_list["top"]) - var/obj/item/P = locate(href_list["top"]) in src - if(istype(P)) - toppaper = P - to_chat(usr, "I move [P.name] to the top.") - - //Update everything - attack_self(usr) - update_icon() diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm deleted file mode 100644 index 9308c8f348..0000000000 --- a/code/modules/paperwork/filingcabinet.dm +++ /dev/null @@ -1,223 +0,0 @@ -/* Filing cabinets! - * Contains: - * Filing Cabinets - * Security Record Cabinets - * Medical Record Cabinets - * Employment Contract Cabinets - */ - - -/* - * Filing Cabinets - */ -/obj/structure/filingcabinet - name = "filing cabinet" - desc = "" - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "filingcabinet" - density = TRUE - anchored = TRUE - -/obj/structure/filingcabinet/chestdrawer - name = "chest drawer" - icon_state = "chestdrawer" - -/obj/structure/filingcabinet/chestdrawer/wheeled - name = "rolling chest drawer" - desc = "" - anchored = FALSE - -/obj/structure/filingcabinet/filingcabinet //not changing the path to avoid unnecessary map issues, but please don't name stuff like this in the future -Pete - icon_state = "tallcabinet" - - -/obj/structure/filingcabinet/Initialize(mapload) - . = ..() - if(mapload) - for(var/obj/item/I in loc) - if(istype(I, /obj/item/paper) || istype(I, /obj/item/folder) || istype(I, /obj/item/photo)) - I.forceMove(src) - -/obj/structure/filingcabinet/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) - new /obj/item/stack/sheet/metal(loc, 2) - for(var/obj/item/I in src) - I.forceMove(loc) - qdel(src) - -/obj/structure/filingcabinet/attackby(obj/item/P, mob/user, params) - if(istype(P, /obj/item/paper) || istype(P, /obj/item/folder) || istype(P, /obj/item/photo) || istype(P, /obj/item/documents)) - if(!user.transferItemToLoc(P, src)) - return - to_chat(user, "I put [P] in [src].") - icon_state = "[initial(icon_state)]-open" - sleep(5) - icon_state = initial(icon_state) - updateUsrDialog() - else if(P.tool_behaviour == TOOL_WRENCH) - to_chat(user, "I begin to [anchored ? "unwrench" : "wrench"] [src].") - if(P.use_tool(src, user, 20, volume=50)) - to_chat(user, "I successfully [anchored ? "unwrench" : "wrench"] [src].") - anchored = !anchored - else if(user.used_intent.type != INTENT_HARM) - to_chat(user, "I can't put [P] in [src]!") - else - return ..() - - -/obj/structure/filingcabinet/ui_interact(mob/user) - . = ..() - if(contents.len <= 0) - to_chat(user, "[src] is empty.") - return - - var/dat = "
" - var/i - for(i=contents.len, i>=1, i--) - var/obj/item/P = contents[i] - dat += "" - dat += "
[P.name]
" - user << browse("[name][dat]", "window=filingcabinet;size=350x300") - -/obj/structure/filingcabinet/attack_tk(mob/user) - if(anchored) - attack_self_tk(user) - else - ..() - -/obj/structure/filingcabinet/attack_self_tk(mob/user) - if(contents.len) - if(prob(40 + contents.len * 5)) - var/obj/item/I = pick(contents) - I.forceMove(loc) - if(prob(25)) - step_rand(I) - to_chat(user, "I pull \a [I] out of [src] at random.") - return - to_chat(user, "I find nothing in [src].") - -/obj/structure/filingcabinet/Topic(href, href_list) - if(!usr.canUseTopic(src, BE_CLOSE, ismonkey(usr))) - return - if(href_list["retrieve"]) - usr << browse("", "window=filingcabinet") // Close the menu - - var/obj/item/P = locate(href_list["retrieve"]) in src //contents[retrieveindex] - if(istype(P) && in_range(src, usr)) - usr.put_in_hands(P) - updateUsrDialog() - icon_state = "[initial(icon_state)]-open" - addtimer(VARSET_CALLBACK(src, icon_state, initial(icon_state)), 5) - - -/* - * Security Record Cabinets - */ -/obj/structure/filingcabinet/security - var/virgin = 1 - -/obj/structure/filingcabinet/security/proc/populate() - if(virgin) - for(var/datum/data/record/G in GLOB.data_core.general) - var/datum/data/record/S = find_record("name", G.fields["name"], GLOB.data_core.security) - if(!S) - continue - var/obj/item/paper/P = new /obj/item/paper(src) - P.info = "
Security Record

" - P.info += "Name: [G.fields["name"]] ID: [G.fields["id"]]
\nGender: [G.fields["gender"]]
\nAge: [G.fields["age"]]
\nFingerprint: [G.fields["fingerprint"]]
\nPhysical Status: [G.fields["p_stat"]]
\nMental Status: [G.fields["m_stat"]]
" - P.info += "
\n
Security Data

\nCriminal Status: [S.fields["criminal"]]
\n
\nMinor Crimes: [S.fields["mi_crim"]]
\nDetails: [S.fields["mi_crim_d"]]
\n
\nMajor Crimes: [S.fields["ma_crim"]]
\nDetails: [S.fields["ma_crim_d"]]
\n
\nImportant Notes:
\n\t[S.fields["notes"]]
\n
\n
Comments/Log

" - var/counter = 1 - while(S.fields["com_[counter]"]) - P.info += "[S.fields["com_[counter]"]]
" - counter++ - P.info += "" - P.name = "paper - '[G.fields["name"]]'" - virgin = 0 //tabbing here is correct- it's possible for people to try and use it - //before the records have been generated, so we do this inside the loop. - -/obj/structure/filingcabinet/security/attack_hand() - populate() - . = ..() - -/obj/structure/filingcabinet/security/attack_tk() - populate() - ..() - -/* - * Medical Record Cabinets - */ -/obj/structure/filingcabinet/medical - var/virgin = 1 - -/obj/structure/filingcabinet/medical/proc/populate() - if(virgin) - for(var/datum/data/record/G in GLOB.data_core.general) - var/datum/data/record/M = find_record("name", G.fields["name"], GLOB.data_core.medical) - if(!M) - continue - var/obj/item/paper/P = new /obj/item/paper(src) - P.info = "
Medical Record

" - P.info += "Name: [G.fields["name"]] ID: [G.fields["id"]]
\nGender: [G.fields["gender"]]
\nAge: [G.fields["age"]]
\nFingerprint: [G.fields["fingerprint"]]
\nPhysical Status: [G.fields["p_stat"]]
\nMental Status: [G.fields["m_stat"]]
" - P.info += "
\n
Medical Data

\nBlood Type: [M.fields["blood_type"]]
\nDNA: [M.fields["b_dna"]]
\n
\nMinor Disabilities: [M.fields["mi_dis"]]
\nDetails: [M.fields["mi_dis_d"]]
\n
\nMajor Disabilities: [M.fields["ma_dis"]]
\nDetails: [M.fields["ma_dis_d"]]
\n
\nAllergies: [M.fields["alg"]]
\nDetails: [M.fields["alg_d"]]
\n
\nCurrent Diseases: [M.fields["cdi"]] (per disease info placed in log/comment section)
\nDetails: [M.fields["cdi_d"]]
\n
\nImportant Notes:
\n\t[M.fields["notes"]]
\n
\n
Comments/Log

" - var/counter = 1 - while(M.fields["com_[counter]"]) - P.info += "[M.fields["com_[counter]"]]
" - counter++ - P.info += "" - P.name = "paper - '[G.fields["name"]]'" - virgin = 0 //tabbing here is correct- it's possible for people to try and use it - //before the records have been generated, so we do this inside the loop. - -//ATTACK HAND IGNORING PARENT RETURN VALUE -/obj/structure/filingcabinet/medical/attack_hand() - populate() - . = ..() - -/obj/structure/filingcabinet/medical/attack_tk() - populate() - ..() - -/* - * Employment contract Cabinets - */ - -GLOBAL_LIST_EMPTY(employmentCabinets) - -/obj/structure/filingcabinet/employment - var/cooldown = 0 - icon_state = "employmentcabinet" - var/virgin = 1 - -/obj/structure/filingcabinet/employment/Initialize() - . = ..() - GLOB.employmentCabinets += src - -/obj/structure/filingcabinet/employment/Destroy() - GLOB.employmentCabinets -= src - return ..() - -/obj/structure/filingcabinet/employment/proc/fillCurrent() - //This proc fills the cabinet with the current crew. - for(var/record in GLOB.data_core.locked) - var/datum/data/record/G = record - if(!G) - continue - var/datum/mind/M = G.fields["mindref"] - if(M && ishuman(M.current)) - addFile(M.current) - - -/obj/structure/filingcabinet/employment/proc/addFile(mob/living/carbon/human/employee) - new /obj/item/paper/contract/employment(src, employee) - -/obj/structure/filingcabinet/employment/interact(mob/user) - if(!cooldown) - if(virgin) - fillCurrent() - virgin = 0 - cooldown = TRUE - // prevents the devil from just instantly emptying the cabinet, ensuring an easy win. - addtimer(VARSET_CALLBACK(src, cooldown, FALSE), 10 SECONDS) - else - to_chat(user, "[src] is jammed, give it a few seconds.") - ..() diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm deleted file mode 100644 index 4917eb8ab7..0000000000 --- a/code/modules/paperwork/folders.dm +++ /dev/null @@ -1,124 +0,0 @@ -/obj/item/folder - name = "folder" - desc = "" - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "folder" - w_class = WEIGHT_CLASS_SMALL - pressure_resistance = 2 - resistance_flags = FLAMMABLE - -/obj/item/folder/suicide_act(mob/living/user) - user.visible_message("[user] begins filing an imaginary death warrant! It looks like [user.p_theyre()] trying to commit suicide!") - return OXYLOSS - -/obj/item/folder/blue - desc = "" - icon_state = "folder_blue" - -/obj/item/folder/red - desc = "" - icon_state = "folder_red" - -/obj/item/folder/yellow - desc = "" - icon_state = "folder_yellow" - -/obj/item/folder/white - desc = "" - icon_state = "folder_white" - - -/obj/item/folder/update_icon() - cut_overlays() - if(contents.len) - add_overlay("folder_paper") - - -/obj/item/folder/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/paper) || istype(W, /obj/item/photo) || istype(W, /obj/item/documents)) - if(!user.transferItemToLoc(W, src)) - return - to_chat(user, "I put [W] into [src].") - update_icon() - else if(istype(W, /obj/item/pen)) - if(!user.is_literate()) - to_chat(user, "I scribble illegibly on the cover of [src]!") - return - - var/inputvalue = input(user, "What would you like to label the folder?", "Folder Labelling", null) as text|null - - if (isnull(inputvalue)) - return - - var/n_name = copytext(sanitize(inputvalue), 1, MAX_NAME_LEN) - - if(user.canUseTopic(src, BE_CLOSE)) - name = "folder[(n_name ? " - '[n_name]'" : null)]" - - -/obj/item/folder/attack_self(mob/user) - var/dat = "[name]" - - for(var/obj/item/I in src) - dat += "Remove - [I.name]
" - user << browse(dat, "window=folder") - onclose(user, "folder") - add_fingerprint(usr) - - -/obj/item/folder/Topic(href, href_list) - ..() - if(usr.stat || usr.restrained()) - return - - if(usr.contents.Find(src)) - - if(href_list["remove"]) - var/obj/item/I = locate(href_list["remove"]) in src - if(istype(I)) - I.forceMove(usr.loc) - usr.put_in_hands(I) - - if(href_list["read"]) - var/obj/item/I = locate(href_list["read"]) in src - if(istype(I)) - usr.examinate(I) - - //Update everything - attack_self(usr) - update_icon() - -/obj/item/folder/documents - name = "folder- 'TOP SECRET'" - desc = "" - -/obj/item/folder/documents/Initialize() - . = ..() - new /obj/item/documents/nanotrasen(src) - update_icon() - -/obj/item/folder/syndicate - icon_state = "folder_syndie" - name = "folder- 'TOP SECRET'" - desc = "" - -/obj/item/folder/syndicate/red - icon_state = "folder_sred" - -/obj/item/folder/syndicate/red/Initialize() - . = ..() - new /obj/item/documents/syndicate/red(src) - update_icon() - -/obj/item/folder/syndicate/blue - icon_state = "folder_sblue" - -/obj/item/folder/syndicate/blue/Initialize() - . = ..() - new /obj/item/documents/syndicate/blue(src) - update_icon() - -/obj/item/folder/syndicate/mining/Initialize() - . = ..() - new /obj/item/documents/syndicate/mining(src) - update_icon() diff --git a/code/modules/paperwork/handlabeler.dm b/code/modules/paperwork/handlabeler.dm deleted file mode 100644 index 296d23b612..0000000000 --- a/code/modules/paperwork/handlabeler.dm +++ /dev/null @@ -1,84 +0,0 @@ -/obj/item/hand_labeler - name = "hand labeler" - desc = "" - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "labeler0" - item_state = "flight" - var/label = null - var/labels_left = 30 - var/mode = 0 - -/obj/item/hand_labeler/suicide_act(mob/user) - user.visible_message("[user] is pointing [src] at [user.p_them()]self. [user.p_theyre(TRUE)] going to label [user.p_them()]self as a suicide!") - labels_left = max(labels_left - 1, 0) - user.real_name += " (suicide)" - - // NOT EVEN DEATH WILL TAKE AWAY THE STAIN - user.mind.name += " (suicide)" - - mode = 1 - icon_state = "labeler[mode]" - label = "suicide" - - return OXYLOSS - -/obj/item/hand_labeler/afterattack(atom/A, mob/user,proximity) - . = ..() - if(!proximity) - return - if(!mode) //if it's off, give up. - return - - if(!labels_left) - to_chat(user, "No labels left!") - return - if(!label || !length(label)) - to_chat(user, "No text set!") - return - if(length(A.name) + length(label) > 64) - to_chat(user, "Label too big!") - return - if(ismob(A)) - to_chat(user, "I can't label creatures!") // use a collar - return - - user.visible_message("[user] labels [A] as [label].", \ - "I label [A] as [label].") - A.name = "[A.name] ([label])" - labels_left-- - - -/obj/item/hand_labeler/attack_self(mob/user) - if(!user.IsAdvancedToolUser()) - to_chat(user, "I don't have the dexterity to use [src]!") - return - mode = !mode - icon_state = "labeler[mode]" - if(mode) - to_chat(user, "I turn on [src].") - //Now let them chose the text. - var/str = copytext(reject_bad_text(input(user,"Label text?","Set label","")),1,MAX_NAME_LEN) - if(!str || !length(str)) - to_chat(user, "Invalid text!") - return - label = str - to_chat(user, "I set the text to '[str]'.") - else - to_chat(user, "I turn off [src].") - -/obj/item/hand_labeler/attackby(obj/item/I, mob/user, params) - ..() - if(istype(I, /obj/item/hand_labeler_refill)) - to_chat(user, "I insert [I] into [src].") - qdel(I) - labels_left = initial(labels_left) //Yes, it's capped at its initial value - -/obj/item/hand_labeler_refill - name = "hand labeler paper roll" - icon = 'icons/obj/bureaucracy.dmi' - desc = "" - icon_state = "labeler_refill" - item_state = "electropack" - lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - w_class = WEIGHT_CLASS_TINY diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index e73e6f8a4c..90f6855b32 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -280,18 +280,10 @@ t = parsemarkdown(t, user, iscrayon) - if(!iscrayon) - if(istype(P, /obj/item/pen)) - var/obj/item/pen/J = P - t = "[t]" - else if(istype(P, /obj/item/natural/thorn)) - t = "[t]" - else if(istype(P, /obj/item/natural/feather)) - t = "[t]" - - else - var/obj/item/toy/crayon/C = P - t = "[t]" + if(istype(P, /obj/item/natural/thorn)) + t = "[t]" + else if(istype(P, /obj/item/natural/feather)) + t = "[t]" // Count the fields var/laststart = 1 @@ -365,20 +357,15 @@ if(!t || !usr.canUseTopic(src, BE_CLOSE, literate)) return var/obj/item/i = usr.get_active_held_item() //Check to see if he still got that darn pen, also check if he's using a crayon or pen. - var/iscrayon = 0 - if(!istype(i, /obj/item/pen)) - if(istype(i, /obj/item/toy/crayon)) - iscrayon = 1 - else - if(!istype(i, /obj/item/natural/thorn)) - if(!istype(i, /obj/item/natural/feather)) - return + if(!istype(i, /obj/item/natural/thorn)) + if(!istype(i, /obj/item/natural/feather)) + return - if(!in_range(src, usr) && loc != usr && !istype(loc, /obj/item/clipboard) && loc.loc != usr && usr.get_active_held_item() != i) //Some check to see if he's allowed to write + if(!in_range(src, usr) && loc != usr && loc.loc != usr && usr.get_active_held_item() != i) //Some check to see if he's allowed to write return log_paper("[key_name(usr)] writing to paper [t]") - t = parsepencode(t, i, usr, iscrayon) // Encode everything from pencode to html + t = parsepencode(t, i, usr, FALSE) // Encode everything from pencode to html if(t != null) //No input from the user means nothing needs to be added if((length(info) + length(t)) > maxlen) @@ -415,7 +402,7 @@ if(is_blind(user)) return ..() - if(istype(P, /obj/item/pen) || istype(P, /obj/item/natural/thorn)|| istype(P, /obj/item/natural/feather)) + if(istype(P, /obj/item/natural/thorn)|| istype(P, /obj/item/natural/feather)) if(length(info) > maxlen) to_chat(user, "[src] is full of verba.") return diff --git a/code/modules/paperwork/paperbin.dm b/code/modules/paperwork/paperbin.dm deleted file mode 100644 index 0124f98b41..0000000000 --- a/code/modules/paperwork/paperbin.dm +++ /dev/null @@ -1,180 +0,0 @@ -/obj/item/paper_bin - name = "paper bin" - desc = "" - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "paper_bin1" - item_state = "sheet-metal" - lefthand_file = 'icons/mob/inhands/misc/sheets_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/sheets_righthand.dmi' - throwforce = 0 - w_class = WEIGHT_CLASS_NORMAL - throw_speed = 3 - throw_range = 7 - pressure_resistance = 8 - var/papertype = /obj/item/paper - var/total_paper = 30 - var/list/papers = list() - var/obj/item/pen/bin_pen - -/obj/item/paper_bin/Initialize(mapload) - . = ..() - interaction_flags_item &= ~INTERACT_ITEM_ATTACK_HAND_PICKUP - if(!mapload) - return - var/obj/item/pen/P = locate(/obj/item/pen) in src.loc - if(P && !bin_pen) - P.forceMove(src) - bin_pen = P - update_icon() - -/obj/item/paper_bin/Destroy() - if(papers) - for(var/i in papers) - qdel(i) - papers = null - . = ..() - -/obj/item/paper_bin/fire_act(added, maxstacks) - if(total_paper) - total_paper = 0 - update_icon() - ..() - -/obj/item/paper_bin/MouseDrop(atom/over_object) - . = ..() - var/mob/living/M = usr - if(!istype(M) || M.incapacitated() || !Adjacent(M)) - return - - if(over_object == M) - M.put_in_hands(src) - - else if(istype(over_object, /atom/movable/screen/inventory/hand)) - var/atom/movable/screen/inventory/hand/H = over_object - M.putItemFromInventoryInHandIfPossible(src, H.held_index) - - add_fingerprint(M) - -/obj/item/paper_bin/attack_paw(mob/user) - return attack_hand(user) - -//ATTACK HAND IGNORING PARENT RETURN VALUE -/obj/item/paper_bin/attack_hand(mob/user) - if(isliving(user)) - var/mob/living/L = user - if(!(L.mobility_flags & MOBILITY_PICKUP)) - return - user.changeNext_move(CLICK_CD_MELEE) - if(bin_pen) - var/obj/item/pen/P = bin_pen - P.add_fingerprint(user) - P.forceMove(user.loc) - user.put_in_hands(P) - to_chat(user, "I take [P] out of \the [src].") - bin_pen = null - update_icon() - else if(total_paper >= 1) - total_paper-- - update_icon() - // If there's any custom paper on the stack, use that instead of creating a new paper. - var/obj/item/paper/P - if(papers.len > 0) - P = papers[papers.len] - papers.Remove(P) - else - P = new papertype(src) - if(SSevents.holidays && SSevents.holidays[APRIL_FOOLS]) - if(prob(30)) - P.info = "HONK HONK HONK HONK HONK HONK HONK
HOOOOOOOOOOOOOOOOOOOOOONK
APRIL FOOLS
" - P.rigged = 1 - P.updateinfolinks() - - P.add_fingerprint(user) - P.forceMove(user.loc) - user.put_in_hands(P) - to_chat(user, "I take [P] out of \the [src].") - else - to_chat(user, "[src] is empty!") - add_fingerprint(user) - return ..() - -/obj/item/paper_bin/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/paper)) - var/obj/item/paper/P = I - if(!user.transferItemToLoc(P, src)) - return - to_chat(user, "I put [P] in [src].") - papers.Add(P) - total_paper++ - update_icon() - else if(istype(I, /obj/item/pen) && !bin_pen) - var/obj/item/pen/P = I - if(!user.transferItemToLoc(P, src)) - return - to_chat(user, "I put [P] in [src].") - bin_pen = P - update_icon() - else - return ..() - -/obj/item/paper_bin/examine(mob/user) - . = ..() - if(total_paper) - . += "It contains [total_paper > 1 ? "[total_paper] papers" : " one paper"]." - else - . += "It doesn't contain anything." - - -/obj/item/paper_bin/update_icon() - if(total_paper < 1) - icon_state = "paper_bin0" - else - icon_state = "[initial(icon_state)]" - cut_overlays() - if(bin_pen) - add_overlay(mutable_appearance(bin_pen.icon, bin_pen.icon_state)) - -/obj/item/paper_bin/construction - name = "construction paper bin" - desc = "" - icon_state = "paper_binc" - papertype = /obj/item/paper/construction - -/obj/item/paper_bin/bundlenatural - name = "natural paper bundle" - desc = "" - icon_state = "paper_bundle" - papertype = /obj/item/paper/natural - resistance_flags = FLAMMABLE - -/obj/item/paper_bin/bundlenatural/attack_hand(mob/user) - ..() - if(total_paper < 1) - qdel(src) - -/obj/item/paper_bin/bundlenatural/fire_act(added, maxstacks) - qdel(src) - -/obj/item/paper_bin/bundlenatural/attackby(obj/item/W, mob/user) - if(W.get_sharpness()) - to_chat(user, "I snip \the [src], spilling paper everywhere.") - var/turf/T = get_turf(src.loc) - while(total_paper > 0) - total_paper-- - var/obj/item/paper/P - if(papers.len > 0) - P = papers[papers.len] - papers -= P - else - P = new papertype() - P.forceMove(T) - CHECK_TICK - qdel(src) - else - ..() - -/obj/item/paper_bin/carbon - name = "carbon paper bin" - desc = "" - icon_state = "paper_bin_carbon" - papertype = /obj/item/paper/carbon diff --git a/code/modules/paperwork/paperplane.dm b/code/modules/paperwork/paperplane.dm deleted file mode 100644 index 6ea3aa689f..0000000000 --- a/code/modules/paperwork/paperplane.dm +++ /dev/null @@ -1,150 +0,0 @@ -/obj/item/paperplane - name = "paper plane" - desc = "" - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "paperplane" - throw_range = 7 - throw_speed = 1 - throwforce = 0 - w_class = WEIGHT_CLASS_TINY - resistance_flags = FLAMMABLE - max_integrity = 50 - - var/hit_probability = 2 //% - var/obj/item/paper/internalPaper - -/obj/item/paperplane/syndicate - desc = "" - throwforce = 20 //same as throwing stars, but no chance of embedding. - hit_probability = 100 //guaranteed to cause eye damage when it hits a mob. - -/obj/item/paperplane/Initialize(mapload, obj/item/paper/newPaper) - . = ..() - pixel_y = rand(-8, 8) - pixel_x = rand(-9, 9) - if(newPaper) - internalPaper = newPaper - flags_1 = newPaper.flags_1 - color = newPaper.color - newPaper.forceMove(src) - else - internalPaper = new(src) - update_icon() - -/obj/item/paperplane/handle_atom_del(atom/A) - if(A == internalPaper) - internalPaper = null - if(!QDELETED(src)) - qdel(src) - return ..() - -/obj/item/paperplane/Exited(atom/movable/AM, atom/newLoc) - . = ..() - if (AM == internalPaper) - internalPaper = null - if(!QDELETED(src)) - qdel(src) - -/obj/item/paperplane/Destroy() - internalPaper = null - return ..() - -/obj/item/paperplane/suicide_act(mob/living/user) - var/obj/item/organ/eyes/eyes = user.getorganslot(ORGAN_SLOT_EYES) - user.Stun(200) - user.visible_message("[user] jams [src] in [user.p_their()] nose. It looks like [user.p_theyre()] trying to commit suicide!") - user.adjust_blurriness(6) - if(eyes) - eyes.applyOrganDamage(rand(6,8)) - sleep(10) - return (BRUTELOSS) - -/obj/item/paperplane/update_icon() - cut_overlays() - var/list/stamped = internalPaper.stamped - if(stamped) - for(var/S in stamped) - add_overlay("paperplane_[S]") - -/obj/item/paperplane/attack_self(mob/user) - to_chat(user, "I unfold [src].") - var/obj/item/paper/internal_paper_tmp = internalPaper - internal_paper_tmp.forceMove(loc) - internalPaper = null - qdel(src) - user.put_in_hands(internal_paper_tmp) - -/obj/item/paperplane/attackby(obj/item/P, mob/living/carbon/human/user, params) - ..() - if(istype(P, /obj/item/pen) || istype(P, /obj/item/toy/crayon)) - to_chat(user, "I should unfold [src] before changing it!") - return - - else if(istype(P, /obj/item/stamp)) //we don't randomize stamps on a paperplane - internalPaper.attackby(P, user) //spoofed attack to update internal paper. - update_icon() - - else if(P.get_temperature()) - if(HAS_TRAIT(user, TRAIT_CLUMSY) && prob(10)) - user.visible_message("[user] accidentally ignites [user.p_them()]self!", \ - "I miss [src] and accidentally light myself on fire!") - user.dropItemToGround(P) - user.adjust_fire_stacks(1) - user.IgniteMob() - return - - if(!(in_range(user, src))) //to prevent issues as a result of telepathically lighting a paper - return - user.dropItemToGround(src) - user.visible_message("[user] lights [src] ablaze with [P]!", "I light [src] on fire!") - fire_act() - - add_fingerprint(user) - - -/obj/item/paperplane/throw_at(atom/target, range, speed, mob/thrower, spin=FALSE, diagonals_first = FALSE, datum/callback/callback) - . = ..(target, range, speed, thrower, FALSE, diagonals_first, callback) - -/obj/item/paperplane/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) - if(iscarbon(hit_atom)) - var/mob/living/carbon/C = hit_atom - if(C.can_catch_item(TRUE)) - var/datum/action/innate/origami/origami_action = locate() in C.actions - if(origami_action?.active) //if they're a master of origami and have the ability turned on, force throwmode on so they'll automatically catch the plane. - C.throw_mode_on() - - if(..() || !ishuman(hit_atom))//if the plane is caught or it hits a nonhuman - return - var/mob/living/carbon/human/H = hit_atom - var/obj/item/organ/eyes/eyes = H.getorganslot(ORGAN_SLOT_EYES) - if(prob(hit_probability)) - if(H.is_eyes_covered()) - return - visible_message("\The [src] hits [H] in the eye[eyes ? "" : " socket"]!") - H.adjust_blurriness(6) - eyes?.applyOrganDamage(rand(6,8)) - H.Paralyze(40) - H.emote("scream") -/* -/obj/item/paper/examine(mob/user) - . = ..() -// . += "Alt-click [src] to fold it into a paper plane." - -/obj/item/paper/AltClick(mob/living/carbon/user, obj/item/I) - if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) - return - if(istype(src, /obj/item/paper/carbon)) - var/obj/item/paper/carbon/Carbon = src - if(!Carbon.iscopy && !Carbon.copied) - to_chat(user, "Take off the carbon copy first.") - return - to_chat(user, "I fold [src] into the shape of a plane!") - user.temporarilyRemoveItemFromInventory(src) - var/obj/item/paperplane/plane_type = /obj/item/paperplane - //Origami Master - var/datum/action/innate/origami/origami_action = locate() in user.actions - if(origami_action?.active) - plane_type = /obj/item/paperplane/syndicate - - I = new plane_type(user, src) - user.put_in_hands(I)*/ diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm deleted file mode 100644 index f2b92a6df4..0000000000 --- a/code/modules/paperwork/pen.dm +++ /dev/null @@ -1,231 +0,0 @@ -/* Pens! - * Contains: - * Pens - * Sleepy Pens - * Parapens - * Edaggers - */ - - -/* - * Pens - */ -/obj/item/pen - desc = "" - name = "pen" - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "pen" - item_state = "pen" - slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_HEAD - throwforce = 0 - w_class = WEIGHT_CLASS_TINY - throw_speed = 3 - throw_range = 7 - custom_materials = list(/datum/material/iron=10) - pressure_resistance = 2 - grind_results = list(/datum/reagent/iron = 2, /datum/reagent/iodine = 1) - var/colour = "black" //what colour the ink is! - var/degrees = 0 - var/font = PEN_FONT - -/obj/item/pen/suicide_act(mob/user) - user.visible_message("[user] is scribbling numbers all over [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to commit sudoku...") - return(BRUTELOSS) - -/obj/item/pen/blue - desc = "" - icon_state = "pen_blue" - colour = "blue" - -/obj/item/pen/red - desc = "" - icon_state = "pen_red" - colour = "red" - -/obj/item/pen/invisible - desc = "" - icon_state = "pen" - colour = "white" - -/obj/item/pen/fourcolor - desc = "" - name = "four-color pen" - colour = "black" - -/obj/item/pen/fourcolor/attack_self(mob/living/carbon/user) - switch(colour) - if("black") - colour = "red" - if("red") - colour = "green" - if("green") - colour = "blue" - else - colour = "black" - to_chat(user, "\The [src] will now write in [colour].") - desc = "" - -/obj/item/pen/fountain - name = "fountain pen" - desc = "" - icon_state = "pen-fountain" - font = FOUNTAIN_PEN_FONT - -/obj/item/pen/fountain/captain - name = "captain's fountain pen" - desc = "" - icon_state = "pen-fountain-o" - force = 5 - throwforce = 5 - throw_speed = 4 - colour = "crimson" - custom_materials = list(/datum/material/gold = 750) - sharpness = IS_SHARP - resistance_flags = FIRE_PROOF - unique_reskin = list("Oak" = "pen-fountain-o", - "Gold" = "pen-fountain-g", - "Rosewood" = "pen-fountain-r", - "Black and Silver" = "pen-fountain-b", - "Command Blue" = "pen-fountain-cb" - ) - -/obj/item/pen/fountain/captain/Initialize() - . = ..() - AddComponent(/datum/component/butchering, 200, 115) //the pen is mightier than the sword - -/obj/item/pen/fountain/captain/reskin_obj(mob/M) - ..() - if(current_skin) - desc = "" - -/obj/item/pen/attack_self(mob/living/carbon/user) -// var/deg = input(user, "What angle would you like to rotate the pen head to? (1-360)", "Rotate Pen Head") as null|num -// if(deg && (deg > 0 && deg <= 360)) -// degrees = deg -// to_chat(user, "I rotate the top of the pen to [degrees] degrees.") -// SEND_SIGNAL(src, COMSIG_PEN_ROTATED, deg, user) - return - -/obj/item/pen/attack(mob/living/M, mob/user,stealth) - if(!istype(M)) - return - - if(!force) - if(M.can_inject(user, 1)) - to_chat(user, "I stab [M] with the pen.") - if(!stealth) - to_chat(M, "I feel a tiny prick!") - . = 1 - - log_combat(user, M, "stabbed", src) - - else - . = ..() - -/obj/item/pen/afterattack(obj/O, mob/living/user, proximity) - . = ..() - //Changing Name/Description of items. Only works if they have the 'unique_rename' flag set - if(isobj(O) && proximity && (O.obj_flags & UNIQUE_RENAME)) - var/penchoice = input(user, "What would you like to edit?", "Rename or change description?") as null|anything in list("Rename","Change description") - if(QDELETED(O) || !user.canUseTopic(O, BE_CLOSE)) - return - if(penchoice == "Rename") - var/input = stripped_input(user,"What do you want to name \the [O.name]?", ,"", MAX_NAME_LEN) - var/oldname = O.name - if(QDELETED(O) || !user.canUseTopic(O, BE_CLOSE)) - return - if(oldname == input) - to_chat(user, "I changed \the [O.name] to... well... \the [O.name].") - else - O.name = input - to_chat(user, "\The [oldname] has been successfully been renamed to \the [input].") - O.renamedByPlayer = TRUE - - if(penchoice == "Change description") - var/input = stripped_input(user,"Describe \the [O.name] here", ,"", 100) - if(QDELETED(O) || !user.canUseTopic(O, BE_CLOSE)) - return - O.desc = input - to_chat(user, "I have successfully changed \the [O.name]'s description.") - -/* - * Sleepypens - */ - -/obj/item/pen/sleepy/attack(mob/living/M, mob/user) - if(!istype(M)) - return - - if(..()) - if(reagents.total_volume) - if(M.reagents) - reagents.reaction(M, INJECT, reagents.total_volume) - reagents.trans_to(M, reagents.total_volume, transfered_by = user) - - -/obj/item/pen/sleepy/Initialize() - . = ..() - create_reagents(45, OPENCONTAINER) - reagents.add_reagent(/datum/reagent/toxin/chloralhydrate, 20) - reagents.add_reagent(/datum/reagent/toxin/mutetoxin, 15) - reagents.add_reagent(/datum/reagent/toxin/staminatoxin, 10) - -/* - * (Alan) Edaggers - */ -/obj/item/pen/edagger - attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") //these wont show up if the pen is off - sharpness = IS_SHARP - var/on = FALSE - -/obj/item/pen/edagger/Initialize() - . = ..() - AddComponent(/datum/component/butchering, 60, 100, 0, 'sound/blank.ogg') - -/obj/item/pen/edagger/get_sharpness() - return on * sharpness - -/obj/item/pen/edagger/suicide_act(mob/user) - . = BRUTELOSS - if(on) - user.visible_message("[user] forcefully rams the pen into their mouth!") - else - user.visible_message("[user] is holding a pen up to their mouth! It looks like [user.p_theyre()] trying to commit suicide!") - attack_self(user) - -/obj/item/pen/edagger/attack_self(mob/living/user) - if(on) - on = FALSE - force = initial(force) - throw_speed = initial(throw_speed) - w_class = initial(w_class) - name = initial(name) - hitsound = initial(hitsound) - embedding = embedding.setRating(embed_chance = EMBED_CHANCE) - throwforce = initial(throwforce) - playsound(user, 'sound/blank.ogg', 5, TRUE) - to_chat(user, "[src] can now be concealed.") - else - on = TRUE - force = 18 - throw_speed = 4 - w_class = WEIGHT_CLASS_NORMAL - name = "energy dagger" - hitsound = 'sound/blank.ogg' - embedding = embedding.setRating(embed_chance = 100) //rule of cool - throwforce = 35 - playsound(user, 'sound/blank.ogg', 5, TRUE) - to_chat(user, "[src] is now active.") - update_icon() - -/obj/item/pen/edagger/update_icon() - if(on) - icon_state = "edagger" - item_state = "edagger" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - else - icon_state = initial(icon_state) //looks like a normal pen when off. - item_state = initial(item_state) - lefthand_file = initial(lefthand_file) - righthand_file = initial(righthand_file) diff --git a/code/modules/paperwork/rogue.dm b/code/modules/paperwork/rogue.dm index 4349edfb89..f8812c259f 100644 --- a/code/modules/paperwork/rogue.dm +++ b/code/modules/paperwork/rogue.dm @@ -12,7 +12,7 @@ /obj/item/paper/scroll/attackby(obj/item/P, mob/living/carbon/human/user, params) - if(istype(P, /obj/item/pen) || istype(P, /obj/item/natural/thorn) || istype(P, /obj/item/natural/feather)) + if(istype(P, /obj/item/natural/thorn) || istype(P, /obj/item/natural/feather)) if(!open) to_chat(user, "Open me.") return @@ -201,7 +201,7 @@ to_chat(user, "The paper resists my attempts to write upon it!") return -/obj/item/paper/confession/update_icon_state() +/obj/item/paper/confession/update_icon_state() if(mailer) icon_state = "paper_prep" name = "letter" @@ -271,7 +271,7 @@ var/signed = 0 /obj/item/merctoken/attackby(obj/item/P, mob/living/carbon/human/user, params) - if(istype(P, /obj/item/pen) || istype(P, /obj/item/natural/thorn) || istype(P, /obj/item/natural/feather)) + if(istype(P, /obj/item/natural/thorn) || istype(P, /obj/item/natural/feather)) if(!user.can_read(src)) to_chat(user, "Even a reader would find these verba incomprehensible.") return diff --git a/code/modules/paperwork/stamps.dm b/code/modules/paperwork/stamps.dm deleted file mode 100644 index 1526e89c67..0000000000 --- a/code/modules/paperwork/stamps.dm +++ /dev/null @@ -1,70 +0,0 @@ -/obj/item/stamp - name = "\improper GRANTED rubber stamp" - desc = "" - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "stamp-ok" - item_state = "stamp" - throwforce = 0 - w_class = WEIGHT_CLASS_TINY - throw_speed = 3 - throw_range = 7 - custom_materials = list(/datum/material/iron=60) - pressure_resistance = 2 - attack_verb = list("stamped") - -/obj/item/stamp/suicide_act(mob/user) - user.visible_message("[user] stamps 'VOID' on [user.p_their()] forehead, then promptly falls over, dead.") - return (OXYLOSS) - -/obj/item/stamp/qm - name = "quartermaster's rubber stamp" - icon_state = "stamp-qm" - dye_color = DYE_QM - -/obj/item/stamp/law - name = "law office's rubber stamp" - icon_state = "stamp-law" - dye_color = DYE_LAW - -/obj/item/stamp/captain - name = "captain's rubber stamp" - icon_state = "stamp-cap" - dye_color = DYE_CAPTAIN - -/obj/item/stamp/hop - name = "head of personnel's rubber stamp" - icon_state = "stamp-hop" - dye_color = DYE_HOP - -/obj/item/stamp/hos - name = "head of security's rubber stamp" - icon_state = "stamp-hos" - dye_color = DYE_HOS - -/obj/item/stamp/ce - name = "chief engineer's rubber stamp" - icon_state = "stamp-ce" - dye_color = DYE_CE - -/obj/item/stamp/rd - name = "research director's rubber stamp" - icon_state = "stamp-rd" - dye_color = DYE_RD - -/obj/item/stamp/cmo - name = "chief medical officer's rubber stamp" - icon_state = "stamp-cmo" - dye_color = DYE_CMO - -/obj/item/stamp/denied - name = "\improper DENIED rubber stamp" - icon_state = "stamp-deny" - dye_color = DYE_REDCOAT - -/obj/item/stamp/clown - name = "clown's rubber stamp" - icon_state = "stamp-clown" - dye_color = DYE_CLOWN - -/obj/item/stamp/attack_paw(mob/user) - return attack_hand(user) diff --git a/code/modules/photography/photos/frame.dm b/code/modules/photography/photos/frame.dm index f407ac9efc..b842b1d9c2 100644 --- a/code/modules/photography/photos/frame.dm +++ b/code/modules/photography/photos/frame.dm @@ -1,7 +1,6 @@ // Picture frames /obj/item/wallframe icon = 'icons/obj/wallframe.dmi' - custom_materials = list(/datum/material/iron=MINERAL_MATERIAL_AMOUNT*2) flags_1 = CONDUCT_1 item_state = "syringe_kit" lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' @@ -55,25 +54,6 @@ /obj/item/wallframe/proc/after_attach(obj/O) transfer_fingerprints_to(O) -/obj/item/wallframe/attackby(obj/item/W, mob/user, params) - ..() - if(W.tool_behaviour == TOOL_SCREWDRIVER) - // For camera-building borgs - var/turf/T = get_step(get_turf(user), user.dir) - if(iswallturf(T)) - T.attackby(src, user, params) - - var/metal_amt = round(custom_materials[getmaterialref(/datum/material/iron)]/MINERAL_MATERIAL_AMOUNT) //Replace this shit later - var/glass_amt = round(custom_materials[getmaterialref(/datum/material/glass)]/MINERAL_MATERIAL_AMOUNT) //Replace this shit later - - if(W.tool_behaviour == TOOL_WRENCH && (metal_amt || glass_amt)) - to_chat(user, "I dismantle [src].") - if(metal_amt) - new /obj/item/stack/sheet/metal(get_turf(src), metal_amt) - if(glass_amt) - new /obj/item/stack/sheet/glass(get_turf(src), glass_amt) - qdel(src) - /obj/item/wallframe/picture name = "picture frame" desc = "" diff --git a/code/modules/photography/photos/photo.dm b/code/modules/photography/photos/photo.dm index 05abccfae9..bc0c975e41 100644 --- a/code/modules/photography/photos/photo.dm +++ b/code/modules/photography/photos/photo.dm @@ -50,17 +50,6 @@ /obj/item/photo/attack_self(mob/user) user.examinate(src) -/obj/item/photo/attackby(obj/item/P, mob/user, params) - if(istype(P, /obj/item/pen) || istype(P, /obj/item/toy/crayon)) - if(!user.is_literate()) - to_chat(user, "I scribble illegibly on [src]!") - return - var/txt = sanitize(input(user, "What would you like to write on the back?", "Photo Writing", null) as text) - txt = copytext(txt, 1, 128) - if(user.canUseTopic(src, BE_CLOSE)) - scribble = txt - ..() - /obj/item/photo/examine(mob/user) . = ..() diff --git a/code/modules/procedural_mapping/mapGenerator.dm b/code/modules/procedural_mapping/mapGenerator.dm index b2c73cc2f7..f50e3c5397 100644 --- a/code/modules/procedural_mapping/mapGenerator.dm +++ b/code/modules/procedural_mapping/mapGenerator.dm @@ -137,73 +137,3 @@ /datum/mapGenerator/proc/syncModules() for(var/datum/mapGeneratorModule/mod in modules) mod.sync(src) - - - -/////////////////////////// -// HERE BE DEBUG DRAGONS // -/////////////////////////// - -/client/proc/debugNatureMapGenerator() - set name = "Test Nature Map Generator" - set category = "Debug" - - var/datum/mapGenerator/nature/N = new() - var/startInput = input(usr,"Start turf of Map, (X;Y;Z)", "Map Gen Settings", "1;1;1") as text|null - - if (isnull(startInput)) - return - - var/endInput = input(usr,"End turf of Map (X;Y;Z)", "Map Gen Settings", "[world.maxx];[world.maxy];[mob ? mob.z : 1]") as text|null - - if (isnull(endInput)) - return - - //maxx maxy and current z so that if you fuck up, you only fuck up one entire z level instead of the entire universe - if(!startInput || !endInput) - to_chat(src, "Missing Input") - return - - var/list/startCoords = splittext(startInput, ";") - var/list/endCoords = splittext(endInput, ";") - if(!startCoords || !endCoords) - to_chat(src, "Invalid Coords") - to_chat(src, "Start Input: [startInput]") - to_chat(src, "End Input: [endInput]") - return - - var/turf/Start = locate(text2num(startCoords[1]),text2num(startCoords[2]),text2num(startCoords[3])) - var/turf/End = locate(text2num(endCoords[1]),text2num(endCoords[2]),text2num(endCoords[3])) - if(!Start || !End) - to_chat(src, "Invalid Turfs") - to_chat(src, "Start Coords: [startCoords[1]] - [startCoords[2]] - [startCoords[3]]") - to_chat(src, "End Coords: [endCoords[1]] - [endCoords[2]] - [endCoords[3]]") - return - - var/list/clusters = list("None"=CLUSTER_CHECK_NONE,"All"=CLUSTER_CHECK_ALL,"Sames"=CLUSTER_CHECK_SAMES,"Differents"=CLUSTER_CHECK_DIFFERENTS, \ - "Same turfs"=CLUSTER_CHECK_SAME_TURFS, "Same atoms"=CLUSTER_CHECK_SAME_ATOMS, "Different turfs"=CLUSTER_CHECK_DIFFERENT_TURFS, \ - "Different atoms"=CLUSTER_CHECK_DIFFERENT_ATOMS, "All turfs"=CLUSTER_CHECK_ALL_TURFS,"All atoms"=CLUSTER_CHECK_ALL_ATOMS) - - var/moduleClusters = input("Cluster Flags (Cancel to leave unchanged from defaults)","Map Gen Settings") as null|anything in clusters - //null for default - - var/theCluster = 0 - if(moduleClusters != "None") - if(!clusters[moduleClusters]) - to_chat(src, "Invalid Cluster Flags") - return - theCluster = clusters[moduleClusters] - else - theCluster = CLUSTER_CHECK_NONE - - if(theCluster) - for(var/datum/mapGeneratorModule/M in N.modules) - M.clusterCheckFlags = theCluster - - - to_chat(src, "Defining Region") - N.defineRegion(Start, End) - to_chat(src, "Region Defined") - to_chat(src, "Generating Region") - N.generate() - to_chat(src, "Generated Region") diff --git a/code/modules/procedural_mapping/mapGeneratorModule.dm b/code/modules/procedural_mapping/mapGeneratorModule.dm index 69aa5a3e80..7924e63bc7 100644 --- a/code/modules/procedural_mapping/mapGeneratorModule.dm +++ b/code/modules/procedural_mapping/mapGeneratorModule.dm @@ -6,7 +6,6 @@ var/clusterMax = 5 var/clusterMin = 1 var/clusterCheckFlags = CLUSTER_CHECK_SAME_ATOMS - var/allowAtomsOnSpace = FALSE var/checkdensity = TRUE var/list/excluded_turfs = list() var/list/allowed_turfs = list() @@ -140,8 +139,6 @@ if(A.density) . = 0 break - if(!allowAtomsOnSpace && (isspaceturf(T))) - . = 0 /////////////////////////////////////////////////////////// diff --git a/code/modules/procedural_mapping/mapGeneratorModules/nature.dm b/code/modules/procedural_mapping/mapGeneratorModules/nature.dm deleted file mode 100644 index d0589b909d..0000000000 --- a/code/modules/procedural_mapping/mapGeneratorModules/nature.dm +++ /dev/null @@ -1,37 +0,0 @@ - -//Contents exist primarily for the nature generator test type. - - -//Pine Trees -/datum/mapGeneratorModule/pineTrees - spawnableAtoms = list(/obj/structure/flora/tree/pine = 30) - -//Dead Trees -/datum/mapGeneratorModule/deadTrees - spawnableAtoms = list(/obj/structure/flora/tree/dead = 10) - -//Random assortment of bushes -/datum/mapGeneratorModule/randBushes - spawnableAtoms = list() - -/datum/mapGeneratorModule/randBushes/New() - ..() - spawnableAtoms = typesof(/obj/structure/flora/ausbushes) - for(var/i in spawnableAtoms) - spawnableAtoms[i] = 20 - - -//Random assortment of rocks and rockpiles -/datum/mapGeneratorModule/randRocks - spawnableAtoms = list(/obj/structure/flora/rock = 40, /obj/structure/flora/rock/pile = 20) - - -//Grass turfs -/datum/mapGeneratorModule/bottomLayer/grassTurfs - spawnableTurfs = list(/turf/open/floor/grass = 100) - - -//Grass tufts with a high spawn chance -/datum/mapGeneratorModule/denseLayer/grassTufts - spawnableTurfs = list() - spawnableAtoms = list(/obj/structure/flora/ausbushes/grassybush = 75) diff --git a/code/modules/procedural_mapping/mapGeneratorObj.dm b/code/modules/procedural_mapping/mapGeneratorObj.dm index d52403df03..8528c9916a 100644 --- a/code/modules/procedural_mapping/mapGeneratorObj.dm +++ b/code/modules/procedural_mapping/mapGeneratorObj.dm @@ -5,7 +5,7 @@ var/endTurfX = 0 var/endTurfY = 0 var/endTurfZ = -1 - var/mapGeneratorType = /datum/mapGenerator/nature + var/mapGeneratorType = /datum/mapGenerator/beach var/datum/mapGenerator/mapGenerator /obj/effect/landmark/mapGenerator/Initialize(mapload) diff --git a/code/modules/procedural_mapping/mapGenerators/cellular.dm b/code/modules/procedural_mapping/mapGenerators/cellular.dm index 5fc1344dc4..b914f51307 100644 --- a/code/modules/procedural_mapping/mapGenerators/cellular.dm +++ b/code/modules/procedural_mapping/mapGenerators/cellular.dm @@ -12,7 +12,7 @@ var/list/current_state var/width = 10 var/height = 10 - var/list/type_map = list(/turf/open/floor/plating, /turf/closed/wall) + var/list/type_map = list(/turf/open/floor/rogue/blocks, /turf/closed/wall) var/turf/start = null /datum/mapGenerator/ca/defineRegion(turf/Start, turf/End, replace = 0) @@ -83,12 +83,6 @@ return old_state[i][j] return 0 -/datum/mapGenerator/ca/caves - b_rule = list(5,6,7,8) - s_rule = list(4) - type_map = list(/turf/open/floor/plating/asteroid/basalt, /turf/closed/mineral/volcanic) - iterations = 5 - /datum/mapGenerator/ca/maze b_rule = list(3) s_rule = list(1,2,3,4,5) diff --git a/code/modules/procedural_mapping/mapGenerators/nature.dm b/code/modules/procedural_mapping/mapGenerators/nature.dm deleted file mode 100644 index abb4e7ed10..0000000000 --- a/code/modules/procedural_mapping/mapGenerators/nature.dm +++ /dev/null @@ -1,11 +0,0 @@ - -//Exists primarily as a test type. - -/datum/mapGenerator/nature - modules = list(/datum/mapGeneratorModule/bottomLayer/grassTurfs, \ - /datum/mapGeneratorModule/pineTrees, \ - /datum/mapGeneratorModule/deadTrees, \ - /datum/mapGeneratorModule/randBushes, \ - /datum/mapGeneratorModule/randRocks, \ - /datum/mapGeneratorModule/denseLayer/grassTufts) - buildmode_name = "Pattern: Nature" diff --git a/code/modules/procedural_mapping/mapGenerators/repair.dm b/code/modules/procedural_mapping/mapGenerators/repair.dm deleted file mode 100644 index e0dc7aa745..0000000000 --- a/code/modules/procedural_mapping/mapGenerators/repair.dm +++ /dev/null @@ -1,102 +0,0 @@ -/datum/mapGeneratorModule/bottomLayer/repairFloorPlasteel - spawnableTurfs = list(/turf/open/floor/plasteel = 100) - var/ignore_wall = FALSE - allowAtomsOnSpace = TRUE - -/datum/mapGeneratorModule/bottomLayer/repairFloorPlasteel/place(turf/T) - if(isclosedturf(T) && !ignore_wall) - return FALSE - return ..() - -/datum/mapGeneratorModule/bottomLayer/repairFloorPlasteel/flatten - ignore_wall = TRUE - -/datum/mapGeneratorModule/border/normalWalls - spawnableAtoms = list() - spawnableTurfs = list(/turf/closed/wall = 100) - allowAtomsOnSpace = TRUE - -/datum/mapGeneratorModule/reload_station_map/generate() - if(!istype(mother, /datum/mapGenerator/repair/reload_station_map)) - return - var/datum/mapGenerator/repair/reload_station_map/mother1 = mother - GLOB.reloading_map = TRUE - // This is kind of finicky on multi-Z maps but the reader would need to be - // changed to allow Z cropping and that's a mess - var/z_offset = SSmapping.station_start - var/list/bounds - for (var/path in SSmapping.config.GetFullMapPaths()) - var/datum/parsed_map/parsed = load_map(file(path), 1, 1, z_offset, measureOnly = FALSE, no_changeturf = FALSE, cropMap=TRUE, x_lower = mother1.x_low, y_lower = mother1.y_low, x_upper = mother1.x_high, y_upper = mother1.y_high) - bounds = parsed?.bounds - z_offset += bounds[MAP_MAXZ] - bounds[MAP_MINZ] + 1 - - var/list/atom/atoms = list() - - repopulate_sorted_areas() - - for(var/L in block(locate(bounds[MAP_MINX], bounds[MAP_MINY], SSmapping.station_start), - locate(bounds[MAP_MAXX], bounds[MAP_MAXY], z_offset - 1))) - set waitfor = FALSE - var/turf/B = L - atoms += B - for(var/A in B) - atoms += A - - SSatoms.InitializeAtoms(atoms) - GLOB.reloading_map = FALSE - -/datum/mapGenerator/repair - modules = list(/datum/mapGeneratorModule/bottomLayer/repairFloorPlasteel, - /datum/mapGeneratorModule/bottomLayer/repressurize) - buildmode_name = "Repair: Floor" - -/datum/mapGenerator/repair/delete_walls - modules = list(/datum/mapGeneratorModule/bottomLayer/repairFloorPlasteel/flatten, - /datum/mapGeneratorModule/bottomLayer/repressurize) - buildmode_name = "Repair: Floor: Flatten Walls" - -/datum/mapGenerator/repair/enclose_room - modules = list(/datum/mapGeneratorModule/bottomLayer/repairFloorPlasteel/flatten, - /datum/mapGeneratorModule/border/normalWalls, - /datum/mapGeneratorModule/bottomLayer/repressurize) - buildmode_name = "Repair: Generate Aired Room" - -/datum/mapGenerator/repair/reload_station_map - modules = list(/datum/mapGeneratorModule/bottomLayer/massdelete/no_delete_mobs) - var/x_low = 0 - var/x_high = 0 - var/y_low = 0 - var/y_high = 0 - var/z = 0 - var/cleanload = FALSE - var/datum/mapGeneratorModule/reload_station_map/loader - buildmode_name = "Repair: Reload Block \[DO NOT USE\]" - -/datum/mapGenerator/repair/reload_station_map/clean - buildmode_name = "Repair: Reload Block - Mass Delete" - cleanload = TRUE - -/datum/mapGenerator/repair/reload_station_map/clean/in_place - modules = list(/datum/mapGeneratorModule/bottomLayer/massdelete/regeneration_delete) - buildmode_name = "Repair: Reload Block - Mass Delete - In Place" - -/datum/mapGenerator/repair/reload_station_map/defineRegion(turf/start, turf/end) - . = ..() - if(!is_station_level(start.z) || !is_station_level(end.z)) - return - x_low = min(start.x, end.x) - y_low = min(start.y, end.y) - x_high = max(start.x, end.x) - y_high = max(start.y, end.y) - z = SSmapping.station_start - -GLOBAL_VAR_INIT(reloading_map, FALSE) - -/datum/mapGenerator/repair/reload_station_map/generate(clean = cleanload) - if(!loader) - loader = new - if(cleanload) - ..() //Trigger mass deletion. - modules |= loader - syncModules() - loader.generate() diff --git a/code/modules/procedural_mapping/mapGenerators/shuttle.dm b/code/modules/procedural_mapping/mapGenerators/shuttle.dm deleted file mode 100644 index ba877eeabb..0000000000 --- a/code/modules/procedural_mapping/mapGenerators/shuttle.dm +++ /dev/null @@ -1,17 +0,0 @@ -/datum/mapGeneratorModule/bottomLayer/shuttleFloor - spawnableTurfs = list(/turf/open/floor/plasteel/shuttle = 100) - -/datum/mapGeneratorModule/border/shuttleWalls - spawnableAtoms = list() - spawnableTurfs = list(/turf/closed/wall/mineral/titanium = 100) -// Generators - -/datum/mapGenerator/shuttle/full - modules = list(/datum/mapGeneratorModule/bottomLayer/shuttleFloor, \ - /datum/mapGeneratorModule/border/shuttleWalls,\ - /datum/mapGeneratorModule/bottomLayer/repressurize) - buildmode_name = "Pattern: Shuttle Room" - -/datum/mapGenerator/shuttle/floor - modules = list(/datum/mapGeneratorModule/bottomLayer/shuttleFloor) - buildmode_name = "Block: Shuttle Floor" diff --git a/code/modules/procedural_mapping/mapGenerators/syndicate.dm b/code/modules/procedural_mapping/mapGenerators/syndicate.dm deleted file mode 100644 index 1852c0a4f0..0000000000 --- a/code/modules/procedural_mapping/mapGenerators/syndicate.dm +++ /dev/null @@ -1,56 +0,0 @@ - -// Modules - -/turf/open/floor/plasteel/shuttle/red/syndicate - name = "floor" //Not Brig Floor - -/datum/mapGeneratorModule/bottomLayer/syndieFloor - spawnableTurfs = list(/turf/open/floor/plasteel/shuttle/red/syndicate = 100) - -/datum/mapGeneratorModule/border/syndieWalls - spawnableAtoms = list() - spawnableTurfs = list(/turf/closed/wall/r_wall = 100) - - -/datum/mapGeneratorModule/syndieFurniture - clusterCheckFlags = CLUSTER_CHECK_ALL - spawnableTurfs = list() - spawnableAtoms = list(/obj/structure/table = 20,/obj/structure/chair = 15,/obj/structure/chair/stool = 10, \ - /obj/item/storage/toolbox/syndicate = 15) - -/datum/mapGeneratorModule/splatterLayer/syndieMobs - spawnableAtoms = list(/mob/living/simple_animal/hostile/syndicate = 30, \ - /mob/living/simple_animal/hostile/syndicate/melee = 20, \ - /mob/living/simple_animal/hostile/syndicate/ranged = 20, \ - /mob/living/simple_animal/hostile/viscerator = 30) - spawnableTurfs = list() - -// Generators - -/datum/mapGenerator/syndicate/empty //walls and floor only - modules = list(/datum/mapGeneratorModule/bottomLayer/syndieFloor, \ - /datum/mapGeneratorModule/border/syndieWalls,\ - /datum/mapGeneratorModule/bottomLayer/repressurize) - buildmode_name = "Pattern: Shuttle Room: Syndicate" - -/datum/mapGenerator/syndicate/mobsonly - modules = list(/datum/mapGeneratorModule/bottomLayer/syndieFloor, \ - /datum/mapGeneratorModule/border/syndieWalls,\ - /datum/mapGeneratorModule/splatterLayer/syndieMobs, \ - /datum/mapGeneratorModule/bottomLayer/repressurize) - buildmode_name = "Pattern: Shuttle Room: Syndicate: Mobs" - -/datum/mapGenerator/syndicate/furniture - modules = list(/datum/mapGeneratorModule/bottomLayer/syndieFloor, \ - /datum/mapGeneratorModule/border/syndieWalls,\ - /datum/mapGeneratorModule/syndieFurniture, \ - /datum/mapGeneratorModule/bottomLayer/repressurize) - buildmode_name = "Pattern: Shuttle Room: Syndicate: Furniture" - -/datum/mapGenerator/syndicate/full - modules = list(/datum/mapGeneratorModule/bottomLayer/syndieFloor, \ - /datum/mapGeneratorModule/border/syndieWalls,\ - /datum/mapGeneratorModule/syndieFurniture, \ - /datum/mapGeneratorModule/splatterLayer/syndieMobs, \ - /datum/mapGeneratorModule/bottomLayer/repressurize) - buildmode_name = "Pattern: Shuttle Room: Syndicate: All" diff --git a/code/modules/projectiles/ammunition/_ammunition.dm b/code/modules/projectiles/ammunition/_ammunition.dm index 38d02e853b..cb6a36186f 100644 --- a/code/modules/projectiles/ammunition/_ammunition.dm +++ b/code/modules/projectiles/ammunition/_ammunition.dm @@ -7,7 +7,7 @@ slot_flags = ITEM_SLOT_BELT throwforce = 0 w_class = WEIGHT_CLASS_TINY - custom_materials = list(/datum/material/iron = 500) + var/fire_sound = null //What sound should play when this ammo is fired var/caliber = null //Which kind of guns it can be loaded into var/projectile_type = null //The bullet type to create when New() is called diff --git a/code/modules/projectiles/ammunition/ballistic/lmg.dm b/code/modules/projectiles/ammunition/ballistic/lmg.dm deleted file mode 100644 index 68f9a0b932..0000000000 --- a/code/modules/projectiles/ammunition/ballistic/lmg.dm +++ /dev/null @@ -1,23 +0,0 @@ -// 7.12x82mm (SAW) - -/obj/item/ammo_casing/mm712x82 - name = "7.12x82mm bullet casing" - desc = "" - icon_state = "762-casing" - caliber = "mm71282" - projectile_type = /obj/projectile/bullet/mm712x82 - -/obj/item/ammo_casing/mm712x82/ap - name = "7.12x82mm armor-piercing bullet casing" - desc = "" - projectile_type = /obj/projectile/bullet/mm712x82_ap - -/obj/item/ammo_casing/mm712x82/hollow - name = "7.12x82mm hollow-point bullet casing" - desc = "" - projectile_type = /obj/projectile/bullet/mm712x82_hp - -/obj/item/ammo_casing/mm712x82/incen - name = "7.12x82mm incendiary bullet casing" - desc = "" - projectile_type = /obj/projectile/bullet/incendiary/mm712x82 diff --git a/code/modules/projectiles/ammunition/ballistic/pistol.dm b/code/modules/projectiles/ammunition/ballistic/pistol.dm deleted file mode 100644 index 1d182e2b18..0000000000 --- a/code/modules/projectiles/ammunition/ballistic/pistol.dm +++ /dev/null @@ -1,50 +0,0 @@ -// 10mm (Stechkin) - -/obj/item/ammo_casing/c10mm - name = "10mm bullet casing" - desc = "" - caliber = "10mm" - projectile_type = /obj/projectile/bullet/c10mm - -/obj/item/ammo_casing/c10mm/ap - name = "10mm armor-piercing bullet casing" - desc = "" - projectile_type = /obj/projectile/bullet/c10mm_ap - -/obj/item/ammo_casing/c10mm/hp - name = "10mm hollow-point bullet casing" - desc = "" - projectile_type = /obj/projectile/bullet/c10mm_hp - -/obj/item/ammo_casing/c10mm/fire - name = "10mm incendiary bullet casing" - desc = "" - projectile_type = /obj/projectile/bullet/incendiary/c10mm - -// 9mm (Stechkin APS) - -/obj/item/ammo_casing/c9mm - name = "9mm bullet casing" - desc = "" - caliber = "9mm" - projectile_type = /obj/projectile/bullet/c9mm - -/obj/item/ammo_casing/c9mm/ap - name = "9mm armor-piercing bullet casing" - desc = "" - projectile_type =/obj/projectile/bullet/c9mm_ap - -/obj/item/ammo_casing/c9mm/inc - name = "9mm incendiary bullet casing" - desc = "" - projectile_type = /obj/projectile/bullet/incendiary/c9mm - - -// .50AE (Desert Eagle) - -/obj/item/ammo_casing/a50AE - name = ".50AE bullet casing" - desc = "" - caliber = ".50" - projectile_type = /obj/projectile/bullet/a50AE - diff --git a/code/modules/projectiles/ammunition/ballistic/revolver.dm b/code/modules/projectiles/ammunition/ballistic/revolver.dm deleted file mode 100644 index 9e4a0197e7..0000000000 --- a/code/modules/projectiles/ammunition/ballistic/revolver.dm +++ /dev/null @@ -1,40 +0,0 @@ -// .357 (Syndie Revolver) - -/obj/item/ammo_casing/a357 - name = ".357 bullet casing" - desc = "" - caliber = "357" - projectile_type = /obj/projectile/bullet/a357 - -// 7.62x38mmR (Nagant Revolver) - -/obj/item/ammo_casing/n762 - name = "7.62x38mmR bullet casing" - desc = "" - caliber = "n762" - projectile_type = /obj/projectile/bullet/n762 - -// .38 (Detective's Gun) - -/obj/item/ammo_casing/c38 - name = ".38 bullet casing" - desc = "" - caliber = "38" - projectile_type = /obj/projectile/bullet/c38 - -/obj/item/ammo_casing/c38/trac - name = ".38 TRAC bullet casing" - desc = "" - projectile_type = /obj/projectile/bullet/c38/trac - -/obj/item/ammo_casing/c38/hotshot - name = ".38 Hot Shot bullet casing" - desc = "" - caliber = "38" - projectile_type = /obj/projectile/bullet/c38/hotshot - -/obj/item/ammo_casing/c38/iceblox - name = ".38 Iceblox bullet casing" - desc = "" - caliber = "38" - projectile_type = /obj/projectile/bullet/c38/iceblox diff --git a/code/modules/projectiles/ammunition/ballistic/rifle.dm b/code/modules/projectiles/ammunition/ballistic/rifle.dm deleted file mode 100644 index 27a5a0180b..0000000000 --- a/code/modules/projectiles/ammunition/ballistic/rifle.dm +++ /dev/null @@ -1,28 +0,0 @@ -// 7.62 (Nagant Rifle) - -/obj/item/ammo_casing/a762 - name = "7.62 bullet casing" - desc = "" - icon_state = "762-casing" - caliber = "a762" - projectile_type = /obj/projectile/bullet/a762 - -/obj/item/ammo_casing/a762/enchanted - projectile_type = /obj/projectile/bullet/a762_enchanted - -// 5.56mm (M-90gl Carbine) - -/obj/item/ammo_casing/a556 - name = "5.56mm bullet casing" - desc = "" - caliber = "a556" - projectile_type = /obj/projectile/bullet/a556 - -// 40mm (Grenade Launcher) - -/obj/item/ammo_casing/a40mm - name = "40mm HE shell" - desc = "" - caliber = "40mm" - icon_state = "40mmHE" - projectile_type = /obj/projectile/bullet/a40mm diff --git a/code/modules/projectiles/ammunition/ballistic/shotgun.dm b/code/modules/projectiles/ammunition/ballistic/shotgun.dm deleted file mode 100644 index 0b53c40ede..0000000000 --- a/code/modules/projectiles/ammunition/ballistic/shotgun.dm +++ /dev/null @@ -1,150 +0,0 @@ -// Shotgun - -/obj/item/ammo_casing/shotgun - name = "shotgun slug" - desc = "" - icon_state = "blshell" - caliber = "shotgun" - custom_materials = list(/datum/material/iron=4000) - projectile_type = /obj/projectile/bullet/shotgun_slug - -/obj/item/ammo_casing/shotgun/beanbag - name = "beanbag slug" - desc = "" - icon_state = "bshell" - custom_materials = list(/datum/material/iron=250) - projectile_type = /obj/projectile/bullet/shotgun_beanbag - -/obj/item/ammo_casing/shotgun/incendiary - name = "incendiary slug" - desc = "" - icon_state = "ishell" - projectile_type = /obj/projectile/bullet/incendiary/shotgun - -/obj/item/ammo_casing/shotgun/dragonsbreath - name = "dragonsbreath shell" - desc = "" - icon_state = "ishell2" - projectile_type = /obj/projectile/bullet/incendiary/shotgun/dragonsbreath - pellets = 4 - variance = 35 - -/obj/item/ammo_casing/shotgun/stunslug - name = "taser slug" - desc = "" - icon_state = "stunshell" - projectile_type = /obj/projectile/bullet/shotgun_stunslug - custom_materials = list(/datum/material/iron=250) - -/obj/item/ammo_casing/shotgun/meteorslug - name = "meteorslug shell" - desc = "" - icon_state = "mshell" - projectile_type = /obj/projectile/bullet/shotgun_meteorslug - -/obj/item/ammo_casing/shotgun/pulseslug - name = "pulse slug" - desc = "A delicate device which can be loaded into a shotgun. The primer acts as a button which triggers the gain medium and fires a powerful \ - energy blast. While the heat and power drain limit it to one use, it can still allow an operator to engage targets that ballistic ammunition \ - would have difficulty with." - icon_state = "pshell" - projectile_type = /obj/projectile/beam/pulse/shotgun - -/obj/item/ammo_casing/shotgun/frag12 - name = "FRAG-12 slug" - desc = "" - icon_state = "heshell" - projectile_type = /obj/projectile/bullet/shotgun_frag12 - -/obj/item/ammo_casing/shotgun/buckshot - name = "buckshot shell" - desc = "" - icon_state = "gshell" - projectile_type = /obj/projectile/bullet/pellet/shotgun_buckshot - pellets = 6 - variance = 25 - -/obj/item/ammo_casing/shotgun/rubbershot - name = "rubber shot" - desc = "" - icon_state = "bshell" - projectile_type = /obj/projectile/bullet/pellet/shotgun_rubbershot - pellets = 6 - variance = 25 - custom_materials = list(/datum/material/iron=4000) - -/obj/item/ammo_casing/shotgun/incapacitate - name = "custom incapacitating shot" - desc = "" - icon_state = "bountyshell" - projectile_type = /obj/projectile/bullet/pellet/shotgun_incapacitate - pellets = 12//double the pellets, but half the stun power of each, which makes this best for just dumping right in someone's face. - variance = 25 - custom_materials = list(/datum/material/iron=4000) - -/obj/item/ammo_casing/shotgun/improvised - name = "improvised shell" - desc = "" - icon_state = "improvshell" - projectile_type = /obj/projectile/bullet/pellet/shotgun_improvised - custom_materials = list(/datum/material/iron=250) - pellets = 10 - variance = 25 - -/obj/item/ammo_casing/shotgun/ion - name = "ion shell" - desc = "An advanced shotgun shell which uses a subspace ansible crystal to produce an effect similar to a standard ion rifle. \ - The unique properties of the crystal split the pulse into a spread of individually weaker bolts." - icon_state = "ionshell" - projectile_type = /obj/projectile/ion/weak - pellets = 4 - variance = 35 - -/obj/item/ammo_casing/shotgun/laserslug - name = "scatter laser shell" - desc = "" - icon_state = "lshell" - projectile_type = /obj/projectile/beam/weak - pellets = 6 - variance = 35 - -/obj/item/ammo_casing/shotgun/techshell - name = "unloaded technological shell" - desc = "" - icon_state = "cshell" - projectile_type = null - -/obj/item/ammo_casing/shotgun/dart - name = "shotgun dart" - desc = "" - icon_state = "cshell" - projectile_type = /obj/projectile/bullet/dart - var/reagent_amount = 30 - -/obj/item/ammo_casing/shotgun/dart/Initialize() - . = ..() - create_reagents(reagent_amount, OPENCONTAINER) - -/obj/item/ammo_casing/shotgun/dart/attackby() - return - -/obj/item/ammo_casing/shotgun/dart/noreact - name = "cryostasis shotgun dart" - desc = "" - icon_state = "cnrshell" - reagent_amount = 10 - -/obj/item/ammo_casing/shotgun/dart/noreact/Initialize() - . = ..() - ENABLE_BITFIELD(reagents.flags, NO_REACT) - -/obj/item/ammo_casing/shotgun/dart/bioterror - desc = "" - -/obj/item/ammo_casing/shotgun/dart/bioterror/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/consumable/ethanol/neurotoxin, 6) - reagents.add_reagent(/datum/reagent/toxin/spore, 6) - reagents.add_reagent(/datum/reagent/toxin/mutetoxin, 6) //;HELP OPS IN MAINT - reagents.add_reagent(/datum/reagent/toxin/coniine, 6) - reagents.add_reagent(/datum/reagent/toxin/sodium_thiopental, 6) diff --git a/code/modules/projectiles/ammunition/ballistic/smg.dm b/code/modules/projectiles/ammunition/ballistic/smg.dm deleted file mode 100644 index 84d945e15e..0000000000 --- a/code/modules/projectiles/ammunition/ballistic/smg.dm +++ /dev/null @@ -1,25 +0,0 @@ -// 4.6x30mm (Autorifles) - -/obj/item/ammo_casing/c46x30mm - name = "4.6x30mm bullet casing" - desc = "" - caliber = "4.6x30mm" - projectile_type = /obj/projectile/bullet/c46x30mm - -/obj/item/ammo_casing/c46x30mm/ap - name = "4.6x30mm armor-piercing bullet casing" - desc = "" - projectile_type = /obj/projectile/bullet/c46x30mm_ap - -/obj/item/ammo_casing/c46x30mm/inc - name = "4.6x30mm incendiary bullet casing" - desc = "" - projectile_type = /obj/projectile/bullet/incendiary/c46x30mm - -// .45 (M1911 + C20r) - -/obj/item/ammo_casing/c45 - name = ".45 bullet casing" - desc = "" - caliber = ".45" - projectile_type = /obj/projectile/bullet/c45 diff --git a/code/modules/projectiles/ammunition/ballistic/sniper.dm b/code/modules/projectiles/ammunition/ballistic/sniper.dm deleted file mode 100644 index 75fb7d7193..0000000000 --- a/code/modules/projectiles/ammunition/ballistic/sniper.dm +++ /dev/null @@ -1,20 +0,0 @@ -// .50 (Sniper) - -/obj/item/ammo_casing/p50 - name = ".50 bullet casing" - desc = "" - caliber = ".50" - projectile_type = /obj/projectile/bullet/p50 - icon_state = ".50" - -/obj/item/ammo_casing/p50/soporific - name = ".50 soporific bullet casing" - desc = "" - projectile_type = /obj/projectile/bullet/p50/soporific - icon_state = "sleeper" - harmful = FALSE - -/obj/item/ammo_casing/p50/penetrator - name = ".50 penetrator round bullet casing" - desc = "" - projectile_type = /obj/projectile/bullet/p50/penetrator diff --git a/code/modules/projectiles/ammunition/caseless/_caseless.dm b/code/modules/projectiles/ammunition/caseless/_caseless.dm deleted file mode 100644 index fe804f351c..0000000000 --- a/code/modules/projectiles/ammunition/caseless/_caseless.dm +++ /dev/null @@ -1,17 +0,0 @@ -/obj/item/ammo_casing/caseless - desc = "" - firing_effect_type = null - heavy_metal = FALSE - -/obj/item/ammo_casing/caseless/fire_casing(atom/target, mob/living/user, params, distro, quiet, zone_override, spread, atom/fired_from) - if (..()) //successfully firing -// moveToNullspace() - testing("qdelling caseless bolt") - qdel(src) - return TRUE - else - return FALSE - -/obj/item/ammo_casing/caseless/update_icon() - ..() - icon_state = "[initial(icon_state)]" diff --git a/code/modules/projectiles/ammunition/caseless/foam.dm b/code/modules/projectiles/ammunition/caseless/foam.dm deleted file mode 100644 index c9182edaab..0000000000 --- a/code/modules/projectiles/ammunition/caseless/foam.dm +++ /dev/null @@ -1,65 +0,0 @@ -/obj/item/ammo_casing/caseless/foam_dart - name = "foam dart" - desc = "" - projectile_type = /obj/projectile/bullet/reusable/foam_dart - caliber = "foam_force" - icon = 'icons/obj/guns/toy.dmi' - icon_state = "foamdart" - custom_materials = list(/datum/material/iron = 11.25) - harmful = FALSE - var/modified = FALSE - -/obj/item/ammo_casing/caseless/foam_dart/update_icon() - ..() - if (modified) - icon_state = "foamdart_empty" - desc = "" - if(BB) - BB.icon_state = "foamdart_empty" - else - icon_state = initial(icon_state) - desc = "" - if(BB) - BB.icon_state = initial(BB.icon_state) - - -/obj/item/ammo_casing/caseless/foam_dart/attackby(obj/item/A, mob/user, params) - var/obj/projectile/bullet/reusable/foam_dart/FD = BB - if (A.tool_behaviour == TOOL_SCREWDRIVER && !modified) - modified = TRUE - FD.modified = TRUE - FD.damage_type = BRUTE - to_chat(user, "I pop the safety cap off [src].") - update_icon() - else if (istype(A, /obj/item/pen)) - if(modified) - if(!FD.pen) - harmful = TRUE - if(!user.transferItemToLoc(A, FD)) - return - FD.pen = A - FD.damage = 5 - FD.nodamage = FALSE - to_chat(user, "I insert [A] into [src].") - else - to_chat(user, "There's already something in [src].") - else - to_chat(user, "The safety cap prevents you from inserting [A] into [src].") - else - return ..() - -/obj/item/ammo_casing/caseless/foam_dart/attack_self(mob/living/user) - var/obj/projectile/bullet/reusable/foam_dart/FD = BB - if(FD.pen) - FD.damage = initial(FD.damage) - FD.nodamage = initial(FD.nodamage) - user.put_in_hands(FD.pen) - to_chat(user, "I remove [FD.pen] from [src].") - FD.pen = null - -/obj/item/ammo_casing/caseless/foam_dart/riot - name = "riot foam dart" - desc = "" - projectile_type = /obj/projectile/bullet/reusable/foam_dart/riot - icon_state = "foamdart_riot" - custom_materials = list(/datum/material/iron = 1125) diff --git a/code/modules/projectiles/ammunition/caseless/misc.dm b/code/modules/projectiles/ammunition/caseless/misc.dm deleted file mode 100644 index 29738b3aed..0000000000 --- a/code/modules/projectiles/ammunition/caseless/misc.dm +++ /dev/null @@ -1,13 +0,0 @@ -/obj/item/ammo_casing/caseless/laser - name = "laser casing" - desc = "" - caliber = "laser" - icon_state = "s-casing-live" - projectile_type = /obj/projectile/beam - fire_sound = 'sound/blank.ogg' - firing_effect_type = /obj/effect/temp_visual/dir_setting/firing_effect/energy - -/obj/item/ammo_casing/caseless/laser/gatling - projectile_type = /obj/projectile/beam/weak/penetrator - variance = 0.8 - click_cooldown_override = 1 diff --git a/code/modules/projectiles/ammunition/caseless/rocket.dm b/code/modules/projectiles/ammunition/caseless/rocket.dm deleted file mode 100644 index a438ce09ec..0000000000 --- a/code/modules/projectiles/ammunition/caseless/rocket.dm +++ /dev/null @@ -1,19 +0,0 @@ -/obj/item/ammo_casing/caseless/rocket - name = "\improper PM-9HE" - desc = "" - caliber = "84mm" - icon_state = "srm-8" - projectile_type = /obj/projectile/bullet/a84mm_he - -/obj/item/ammo_casing/caseless/rocket/hedp - name = "\improper PM-9HEDP" - desc = "" - caliber = "84mm" - icon_state = "84mm-hedp" - projectile_type = /obj/projectile/bullet/a84mm - -/obj/item/ammo_casing/caseless/a75 - desc = "" - caliber = "75" - icon_state = "s-casing-live" - projectile_type = /obj/projectile/bullet/gyro diff --git a/code/modules/projectiles/ammunition/energy/_energy.dm b/code/modules/projectiles/ammunition/energy/_energy.dm deleted file mode 100644 index a18c713f60..0000000000 --- a/code/modules/projectiles/ammunition/energy/_energy.dm +++ /dev/null @@ -1,10 +0,0 @@ -/obj/item/ammo_casing/energy - name = "energy weapon lens" - desc = "" - caliber = "energy" - projectile_type = /obj/projectile/energy - var/e_cost = 100 //The amount of energy a cell needs to expend to create this shot. - var/select_name = "energy" - fire_sound = 'sound/blank.ogg' - firing_effect_type = /obj/effect/temp_visual/dir_setting/firing_effect/energy - heavy_metal = FALSE diff --git a/code/modules/projectiles/ammunition/energy/ebow.dm b/code/modules/projectiles/ammunition/energy/ebow.dm deleted file mode 100644 index 8618f1c5dc..0000000000 --- a/code/modules/projectiles/ammunition/energy/ebow.dm +++ /dev/null @@ -1,12 +0,0 @@ -/obj/item/ammo_casing/energy/bolt - projectile_type = /obj/projectile/energy/bolt - select_name = "bolt" - e_cost = 500 - fire_sound = 'sound/blank.ogg' - -/obj/item/ammo_casing/energy/bolt/halloween - projectile_type = /obj/projectile/energy/bolt/halloween - -/obj/item/ammo_casing/energy/bolt/large - projectile_type = /obj/projectile/energy/bolt/large - select_name = "heavy bolt" diff --git a/code/modules/projectiles/ammunition/energy/laser.dm b/code/modules/projectiles/ammunition/energy/laser.dm deleted file mode 100644 index 1d0344eed7..0000000000 --- a/code/modules/projectiles/ammunition/energy/laser.dm +++ /dev/null @@ -1,54 +0,0 @@ -/obj/item/ammo_casing/energy/laser - projectile_type = /obj/projectile/beam/laser - select_name = "kill" - -/obj/item/ammo_casing/energy/lasergun - projectile_type = /obj/projectile/beam/laser - e_cost = 83 - select_name = "kill" - -/obj/item/ammo_casing/energy/lasergun/old - projectile_type = /obj/projectile/beam/laser - e_cost = 200 - select_name = "kill" - -/obj/item/ammo_casing/energy/laser/hos - e_cost = 120 - -/obj/item/ammo_casing/energy/laser/practice - projectile_type = /obj/projectile/beam/practice - select_name = "practice" - harmful = FALSE - -/obj/item/ammo_casing/energy/laser/scatter - projectile_type = /obj/projectile/beam/scatter - pellets = 5 - variance = 25 - select_name = "scatter" - -/obj/item/ammo_casing/energy/laser/scatter/disabler - projectile_type = /obj/projectile/beam/disabler - pellets = 3 - variance = 15 - harmful = FALSE - -/obj/item/ammo_casing/energy/laser/heavy - projectile_type = /obj/projectile/beam/laser/heavylaser - select_name = "anti-vehicle" - fire_sound = 'sound/blank.ogg' - -/obj/item/ammo_casing/energy/laser/pulse - projectile_type = /obj/projectile/beam/pulse - e_cost = 200 - select_name = "DESTROY" - fire_sound = 'sound/blank.ogg' - -/obj/item/ammo_casing/energy/xray - projectile_type = /obj/projectile/beam/xray - e_cost = 50 - fire_sound = 'sound/blank.ogg' - -/obj/item/ammo_casing/energy/mindflayer - projectile_type = /obj/projectile/beam/mindflayer - select_name = "MINDFUCK" - fire_sound = 'sound/blank.ogg' diff --git a/code/modules/projectiles/ammunition/energy/lmg.dm b/code/modules/projectiles/ammunition/energy/lmg.dm deleted file mode 100644 index bd83197f0c..0000000000 --- a/code/modules/projectiles/ammunition/energy/lmg.dm +++ /dev/null @@ -1,6 +0,0 @@ -/obj/item/ammo_casing/energy/c3dbullet - projectile_type = /obj/projectile/bullet/c3d - select_name = "spraydown" - fire_sound = 'sound/blank.ogg' - e_cost = 20 - firing_effect_type = /obj/effect/temp_visual/dir_setting/firing_effect diff --git a/code/modules/projectiles/ammunition/energy/plasma.dm b/code/modules/projectiles/ammunition/energy/plasma.dm deleted file mode 100644 index f860c05130..0000000000 --- a/code/modules/projectiles/ammunition/energy/plasma.dm +++ /dev/null @@ -1,11 +0,0 @@ -/obj/item/ammo_casing/energy/plasma - projectile_type = /obj/projectile/plasma - select_name = "plasma burst" - fire_sound = 'sound/blank.ogg' - delay = 15 - e_cost = 25 - -/obj/item/ammo_casing/energy/plasma/adv - projectile_type = /obj/projectile/plasma/adv - delay = 10 - e_cost = 10 diff --git a/code/modules/projectiles/ammunition/energy/special.dm b/code/modules/projectiles/ammunition/energy/special.dm deleted file mode 100644 index 67cf4daa0d..0000000000 --- a/code/modules/projectiles/ammunition/energy/special.dm +++ /dev/null @@ -1,64 +0,0 @@ -/obj/item/ammo_casing/energy/ion - projectile_type = /obj/projectile/ion - select_name = "ion" - fire_sound = 'sound/blank.ogg' - -/obj/item/ammo_casing/energy/ion/hos - projectile_type = /obj/projectile/ion/weak - e_cost = 300 - -/obj/item/ammo_casing/energy/declone - projectile_type = /obj/projectile/energy/declone - select_name = "declone" - fire_sound = 'sound/blank.ogg' - -/obj/item/ammo_casing/energy/declone/weak - projectile_type = /obj/projectile/energy/declone/weak - -/obj/item/ammo_casing/energy/flora - fire_sound = 'sound/blank.ogg' - harmful = FALSE - -/obj/item/ammo_casing/energy/flora/yield - projectile_type = /obj/projectile/energy/florayield - select_name = "yield" - -/obj/item/ammo_casing/energy/flora/mut - projectile_type = /obj/projectile/energy/floramut - select_name = "mutation" - -/obj/item/ammo_casing/energy/temp - projectile_type = /obj/projectile/temp - select_name = "freeze" - e_cost = 250 - fire_sound = 'sound/blank.ogg' - -/obj/item/ammo_casing/energy/temp/hot - projectile_type = /obj/projectile/temp/hot - select_name = "bake" - -/obj/item/ammo_casing/energy/meteor - projectile_type = /obj/projectile/meteor - select_name = "goddamn meteor" - -/obj/item/ammo_casing/energy/trap - projectile_type = /obj/projectile/energy/trap - select_name = "snare" - harmful = FALSE - -/obj/item/ammo_casing/energy/instakill - projectile_type = /obj/projectile/beam/instakill - e_cost = 0 - select_name = "DESTROY" - -/obj/item/ammo_casing/energy/instakill/blue - projectile_type = /obj/projectile/beam/instakill/blue - -/obj/item/ammo_casing/energy/instakill/red - projectile_type = /obj/projectile/beam/instakill/red - - -/obj/item/ammo_casing/energy/shrink - projectile_type = /obj/projectile/beam/shrink - select_name = "shrink ray" - e_cost = 200 diff --git a/code/modules/projectiles/ammunition/energy/stun.dm b/code/modules/projectiles/ammunition/energy/stun.dm deleted file mode 100644 index 9e23ed0a52..0000000000 --- a/code/modules/projectiles/ammunition/energy/stun.dm +++ /dev/null @@ -1,26 +0,0 @@ -/obj/item/ammo_casing/energy/electrode - projectile_type = /obj/projectile/energy/electrode - select_name = "stun" - fire_sound = 'sound/blank.ogg' - e_cost = 200 - harmful = FALSE - -/obj/item/ammo_casing/energy/electrode/spec - e_cost = 100 - -/obj/item/ammo_casing/energy/electrode/gun - fire_sound = 'sound/blank.ogg' - e_cost = 100 - -/obj/item/ammo_casing/energy/electrode/old - e_cost = 1000 - -/obj/item/ammo_casing/energy/disabler - projectile_type = /obj/projectile/beam/disabler - select_name = "disable" - e_cost = 50 - fire_sound = 'sound/blank.ogg' - harmful = FALSE - -/obj/item/ammo_casing/energy/disabler/hos - e_cost = 60 diff --git a/code/modules/projectiles/ammunition/special/magic.dm b/code/modules/projectiles/ammunition/special/magic.dm deleted file mode 100644 index b445196352..0000000000 --- a/code/modules/projectiles/ammunition/special/magic.dm +++ /dev/null @@ -1,60 +0,0 @@ -/obj/item/ammo_casing/magic - name = "magic casing" - desc = "" - projectile_type = /obj/projectile/magic - firing_effect_type = /obj/effect/temp_visual/dir_setting/firing_effect/magic - heavy_metal = FALSE - -/obj/item/ammo_casing/magic/change - projectile_type = /obj/projectile/magic/change - -/obj/item/ammo_casing/magic/heal - projectile_type = /obj/projectile/magic/resurrection - harmful = FALSE - -/obj/item/ammo_casing/magic/death - projectile_type = /obj/projectile/magic/death - -/obj/item/ammo_casing/magic/teleport - projectile_type = /obj/projectile/magic/teleport - harmful = FALSE - -/obj/item/ammo_casing/magic/safety - projectile_type = /obj/projectile/magic/safety - harmful = FALSE - -/obj/item/ammo_casing/magic/fireball - projectile_type = /obj/projectile/magic/aoe/fireball - -/obj/item/ammo_casing/magic/chaos - projectile_type = /obj/projectile/magic - -/obj/item/ammo_casing/magic/spellblade - projectile_type = /obj/projectile/magic/spellblade - -/obj/item/ammo_casing/magic/arcane_barrage - projectile_type = /obj/projectile/magic/arcane_barrage - -/obj/item/ammo_casing/magic/honk - projectile_type = /obj/projectile/bullet/honker - -/obj/item/ammo_casing/magic/locker - projectile_type = /obj/projectile/magic/locker - -/obj/item/ammo_casing/magic/flying - projectile_type = /obj/projectile/magic/flying - -/obj/item/ammo_casing/magic/bounty - projectile_type = /obj/projectile/magic/bounty - -/obj/item/ammo_casing/magic/antimagic - projectile_type = /obj/projectile/magic/antimagic - -/obj/item/ammo_casing/magic/sapping - projectile_type = /obj/projectile/magic/sapping - -/obj/item/ammo_casing/magic/necropotence - projectile_type = /obj/projectile/magic/necropotence - -/obj/item/ammo_casing/magic/wipe - projectile_type = /obj/projectile/magic/wipe diff --git a/code/modules/projectiles/ammunition/special/syringe.dm b/code/modules/projectiles/ammunition/special/syringe.dm deleted file mode 100644 index 925fb0a6b1..0000000000 --- a/code/modules/projectiles/ammunition/special/syringe.dm +++ /dev/null @@ -1,61 +0,0 @@ -/obj/item/ammo_casing/syringegun - name = "syringe gun spring" - desc = "" - projectile_type = /obj/projectile/bullet/dart/syringe - firing_effect_type = null - -/obj/item/ammo_casing/syringegun/ready_proj(atom/target, mob/living/user, quiet, zone_override = "") - if(!BB) - return - if(istype(loc, /obj/item/gun/syringe)) - var/obj/item/gun/syringe/SG = loc - if(!SG.syringes.len) - return - - var/obj/item/reagent_containers/syringe/S = SG.syringes[1] - - S.reagents.trans_to(BB, S.reagents.total_volume, transfered_by = user) - BB.name = S.name - var/obj/projectile/bullet/dart/D = BB - D.piercing = S.proj_piercing - SG.syringes.Remove(S) - qdel(S) - ..() - -/obj/item/ammo_casing/chemgun - name = "dart synthesiser" - desc = "" - projectile_type = /obj/projectile/bullet/dart - firing_effect_type = null - -/obj/item/ammo_casing/chemgun/ready_proj(atom/target, mob/living/user, quiet, zone_override = "") - if(!BB) - return - if(istype(loc, /obj/item/gun/chem)) - var/obj/item/gun/chem/CG = loc - if(CG.syringes_left <= 0) - return - CG.reagents.trans_to(BB, 15, transfered_by = user) - BB.name = "chemical dart" - CG.syringes_left-- - ..() - -/obj/item/ammo_casing/dnainjector - name = "rigged syringe gun spring" - desc = "" - projectile_type = /obj/projectile/bullet/dnainjector - firing_effect_type = null - -/obj/item/ammo_casing/dnainjector/ready_proj(atom/target, mob/living/user, quiet, zone_override = "") - if(!BB) - return - if(istype(loc, /obj/item/gun/syringe/dna)) - var/obj/item/gun/syringe/dna/SG = loc - if(!SG.syringes.len) - return - - var/obj/item/dnainjector/S = popleft(SG.syringes) - var/obj/projectile/bullet/dnainjector/D = BB - S.forceMove(D) - D.injector = S - ..() diff --git a/code/modules/projectiles/boxes_magazines/_box_magazine.dm b/code/modules/projectiles/boxes_magazines/_ammo_box.dm similarity index 99% rename from code/modules/projectiles/boxes_magazines/_box_magazine.dm rename to code/modules/projectiles/boxes_magazines/_ammo_box.dm index 3e3b91747a..be0a747445 100644 --- a/code/modules/projectiles/boxes_magazines/_box_magazine.dm +++ b/code/modules/projectiles/boxes_magazines/_ammo_box.dm @@ -8,7 +8,6 @@ item_state = "syringe_kit" lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' - custom_materials = list(/datum/material/iron = 30000) throwforce = 2 w_class = WEIGHT_CLASS_TINY throw_speed = 1 diff --git a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm deleted file mode 100644 index 384def2110..0000000000 --- a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm +++ /dev/null @@ -1,84 +0,0 @@ -/obj/item/ammo_box/a357 - name = "speed loader (.357)" - desc = "" - icon_state = "357" - ammo_type = /obj/item/ammo_casing/a357 - max_ammo = 7 - multiple_sprites = AMMO_BOX_PER_BULLET - item_flags = NO_MAT_REDEMPTION - -/obj/item/ammo_box/c38 - name = "speed loader (.38)" - desc = "" - icon_state = "38" - ammo_type = /obj/item/ammo_casing/c38 - max_ammo = 6 - multiple_sprites = AMMO_BOX_PER_BULLET - custom_materials = list(/datum/material/iron = 20000) - -/obj/item/ammo_box/c38/trac - name = "speed loader (.38 TRAC)" - desc = "" - ammo_type = /obj/item/ammo_casing/c38/trac - -/obj/item/ammo_box/c38/hotshot - name = "speed loader (.38 Hot Shot)" - desc = "" - ammo_type = /obj/item/ammo_casing/c38/hotshot - -/obj/item/ammo_box/c38/iceblox - name = "speed loader (.38 Iceblox)" - desc = "" - ammo_type = /obj/item/ammo_casing/c38/iceblox - -/obj/item/ammo_box/c9mm - name = "ammo box (9mm)" - icon_state = "9mmbox" - ammo_type = /obj/item/ammo_casing/c9mm - max_ammo = 30 - -/obj/item/ammo_box/c10mm - name = "ammo box (10mm)" - icon_state = "10mmbox" - ammo_type = /obj/item/ammo_casing/c10mm - max_ammo = 20 - -/obj/item/ammo_box/c45 - name = "ammo box (.45)" - icon_state = "45box" - ammo_type = /obj/item/ammo_casing/c45 - max_ammo = 20 - -/obj/item/ammo_box/a40mm - name = "ammo box (40mm grenades)" - icon_state = "40mm" - ammo_type = /obj/item/ammo_casing/a40mm - max_ammo = 4 - multiple_sprites = AMMO_BOX_PER_BULLET - -/obj/item/ammo_box/a762 - name = "stripper clip (7.62mm)" - desc = "" - icon_state = "762" - ammo_type = /obj/item/ammo_casing/a762 - max_ammo = 5 - multiple_sprites = AMMO_BOX_PER_BULLET - -/obj/item/ammo_box/n762 - name = "ammo box (7.62x38mmR)" - icon_state = "10mmbox" - ammo_type = /obj/item/ammo_casing/n762 - max_ammo = 14 - -/obj/item/ammo_box/foambox - name = "ammo box (Foam Darts)" - icon = 'icons/obj/guns/toy.dmi' - icon_state = "foambox" - ammo_type = /obj/item/ammo_casing/caseless/foam_dart - max_ammo = 40 - custom_materials = list(/datum/material/iron = 500) - -/obj/item/ammo_box/foambox/riot - icon_state = "foambox_riot" - ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot - custom_materials = list(/datum/material/iron = 50000) diff --git a/code/modules/projectiles/boxes_magazines/external/grenade.dm b/code/modules/projectiles/boxes_magazines/external/grenade.dm deleted file mode 100644 index 69e56bc649..0000000000 --- a/code/modules/projectiles/boxes_magazines/external/grenade.dm +++ /dev/null @@ -1,8 +0,0 @@ -/obj/item/ammo_box/magazine/m75 - name = "specialized magazine (.75)" - icon_state = "75" - ammo_type = /obj/item/ammo_casing/caseless/a75 - caliber = "75" - multiple_sprites = AMMO_BOX_FULL_EMPTY - max_ammo = 8 - diff --git a/code/modules/projectiles/boxes_magazines/external/lmg.dm b/code/modules/projectiles/boxes_magazines/external/lmg.dm deleted file mode 100644 index 2b192f598c..0000000000 --- a/code/modules/projectiles/boxes_magazines/external/lmg.dm +++ /dev/null @@ -1,22 +0,0 @@ -/obj/item/ammo_box/magazine/mm712x82 - name = "box magazine (7.12x82mm)" - icon_state = "a762-50" - ammo_type = /obj/item/ammo_casing/mm712x82 - caliber = "mm71282" - max_ammo = 50 - -/obj/item/ammo_box/magazine/mm712x82/hollow - name = "box magazine (Hollow-Point 7.12x82mm)" - ammo_type = /obj/item/ammo_casing/mm712x82/hollow - -/obj/item/ammo_box/magazine/mm712x82/ap - name = "box magazine (Armor Penetrating 7.12x82mm)" - ammo_type = /obj/item/ammo_casing/mm712x82/ap - -/obj/item/ammo_box/magazine/mm712x82/incen - name = "box magazine (Incendiary 7.12x82mm)" - ammo_type = /obj/item/ammo_casing/mm712x82/incen - -/obj/item/ammo_box/magazine/mm712x82/update_icon() - ..() - icon_state = "a762-[round(ammo_count(),10)]" diff --git a/code/modules/projectiles/boxes_magazines/external/pistol.dm b/code/modules/projectiles/boxes_magazines/external/pistol.dm deleted file mode 100644 index f6077a037e..0000000000 --- a/code/modules/projectiles/boxes_magazines/external/pistol.dm +++ /dev/null @@ -1,59 +0,0 @@ -/obj/item/ammo_box/magazine/m10mm - name = "pistol magazine (10mm)" - desc = "" - icon_state = "9x19p" - ammo_type = /obj/item/ammo_casing/c10mm - caliber = "10mm" - max_ammo = 8 - multiple_sprites = AMMO_BOX_FULL_EMPTY - -/obj/item/ammo_box/magazine/m10mm/fire - name = "pistol magazine (10mm incendiary)" - icon_state = "9x19pI" - desc = "" - ammo_type = /obj/item/ammo_casing/c10mm/fire - -/obj/item/ammo_box/magazine/m10mm/hp - name = "pistol magazine (10mm HP)" - icon_state = "9x19pH" - desc= "A gun magazine. Loaded with hollow-point rounds, extremely effective against unarmored targets, but nearly useless against protective clothing." - ammo_type = /obj/item/ammo_casing/c10mm/hp - -/obj/item/ammo_box/magazine/m10mm/ap - name = "pistol magazine (10mm AP)" - icon_state = "9x19pA" - desc= "A gun magazine. Loaded with rounds which penetrate armour, but are less effective against normal targets." - ammo_type = /obj/item/ammo_casing/c10mm/ap - -/obj/item/ammo_box/magazine/m45 - name = "handgun magazine (.45)" - icon_state = "45-8" - ammo_type = /obj/item/ammo_casing/c45 - caliber = ".45" - max_ammo = 8 - -/obj/item/ammo_box/magazine/m45/update_icon() - ..() - if (ammo_count() >= 8) - icon_state = "45-8" - else - icon_state = "45-[ammo_count()]" - -/obj/item/ammo_box/magazine/pistolm9mm - name = "pistol magazine (9mm)" - icon_state = "9x19p-8" - ammo_type = /obj/item/ammo_casing/c9mm - caliber = "9mm" - max_ammo = 15 - -/obj/item/ammo_box/magazine/pistolm9mm/update_icon() - ..() - icon_state = "9x19p-[ammo_count() ? "8" : "0"]" - -/obj/item/ammo_box/magazine/m50 - name = "handgun magazine (.50ae)" - icon_state = "50ae" - ammo_type = /obj/item/ammo_casing/a50AE - caliber = ".50" - max_ammo = 7 - multiple_sprites = AMMO_BOX_PER_BULLET diff --git a/code/modules/projectiles/boxes_magazines/external/rechargable.dm b/code/modules/projectiles/boxes_magazines/external/rechargable.dm deleted file mode 100644 index 18e4bda4cb..0000000000 --- a/code/modules/projectiles/boxes_magazines/external/rechargable.dm +++ /dev/null @@ -1,14 +0,0 @@ -/obj/item/ammo_box/magazine/recharge - name = "power pack" - desc = "" - icon_state = "oldrifle-20" - ammo_type = /obj/item/ammo_casing/caseless/laser - caliber = "laser" - max_ammo = 20 - -/obj/item/ammo_box/magazine/recharge/update_icon() - desc = "" - icon_state = "oldrifle-[round(ammo_count(),4)]" - -/obj/item/ammo_box/magazine/recharge/attack_self() //No popping out the "bullets" - return diff --git a/code/modules/projectiles/boxes_magazines/external/rifle.dm b/code/modules/projectiles/boxes_magazines/external/rifle.dm deleted file mode 100644 index ec1d1e0472..0000000000 --- a/code/modules/projectiles/boxes_magazines/external/rifle.dm +++ /dev/null @@ -1,22 +0,0 @@ -/obj/item/ammo_box/magazine/m10mm/rifle - name = "rifle magazine (10mm)" - desc = "" - icon_state = "75-8" - ammo_type = /obj/item/ammo_casing/c10mm - caliber = "10mm" - max_ammo = 10 - -/obj/item/ammo_box/magazine/m10mm/rifle/update_icon() - ..() - if(ammo_count()) - icon_state = "75-8" - else - icon_state = "75-0" - -/obj/item/ammo_box/magazine/m556 - name = "toploader magazine (5.56mm)" - icon_state = "5.56m" - ammo_type = /obj/item/ammo_casing/a556 - caliber = "a556" - max_ammo = 30 - multiple_sprites = AMMO_BOX_FULL_EMPTY diff --git a/code/modules/projectiles/boxes_magazines/external/shotgun.dm b/code/modules/projectiles/boxes_magazines/external/shotgun.dm deleted file mode 100644 index 9865f5b0c1..0000000000 --- a/code/modules/projectiles/boxes_magazines/external/shotgun.dm +++ /dev/null @@ -1,36 +0,0 @@ -/obj/item/ammo_box/magazine/m12g - name = "shotgun magazine (12g buckshot slugs)" - desc = "" - icon_state = "m12gb" - ammo_type = /obj/item/ammo_casing/shotgun/buckshot - caliber = "shotgun" - max_ammo = 8 - -/obj/item/ammo_box/magazine/m12g/update_icon() - ..() - icon_state = "[initial(icon_state)]-[CEILING(ammo_count(FALSE)/8, 1)*8]" - -/obj/item/ammo_box/magazine/m12g/stun - name = "shotgun magazine (12g taser slugs)" - icon_state = "m12gs" - ammo_type = /obj/item/ammo_casing/shotgun/stunslug - -/obj/item/ammo_box/magazine/m12g/slug - name = "shotgun magazine (12g slugs)" - icon_state = "m12gb" //this may need an unique sprite - ammo_type = /obj/item/ammo_casing/shotgun - -/obj/item/ammo_box/magazine/m12g/dragon - name = "shotgun magazine (12g dragon's breath)" - icon_state = "m12gf" - ammo_type = /obj/item/ammo_casing/shotgun/dragonsbreath - -/obj/item/ammo_box/magazine/m12g/bioterror - name = "shotgun magazine (12g bioterror)" - icon_state = "m12gt" - ammo_type = /obj/item/ammo_casing/shotgun/dart/bioterror - -/obj/item/ammo_box/magazine/m12g/meteor - name = "shotgun magazine (12g meteor slugs)" - icon_state = "m12gbc" - ammo_type = /obj/item/ammo_casing/shotgun/meteorslug diff --git a/code/modules/projectiles/boxes_magazines/external/smg.dm b/code/modules/projectiles/boxes_magazines/external/smg.dm deleted file mode 100644 index 291ec47fa8..0000000000 --- a/code/modules/projectiles/boxes_magazines/external/smg.dm +++ /dev/null @@ -1,76 +0,0 @@ -/obj/item/ammo_box/magazine/wt550m9 - name = "wt550 magazine (4.6x30mm)" - icon_state = "46x30mmt-20" - ammo_type = /obj/item/ammo_casing/c46x30mm - caliber = "4.6x30mm" - max_ammo = 20 - -/obj/item/ammo_box/magazine/wt550m9/update_icon() - ..() - icon_state = "46x30mmt-[round(ammo_count(),4)]" - -/obj/item/ammo_box/magazine/wt550m9/wtap - name = "wt550 magazine (Armour Piercing 4.6x30mm)" - icon_state = "46x30mmtA-20" - ammo_type = /obj/item/ammo_casing/c46x30mm/ap - -/obj/item/ammo_box/magazine/wt550m9/wtap/update_icon() - ..() - icon_state = "46x30mmtA-[round(ammo_count(),4)]" - -/obj/item/ammo_box/magazine/wt550m9/wtic - name = "wt550 magazine (Incendiary 4.6x30mm)" - icon_state = "46x30mmtI-20" - ammo_type = /obj/item/ammo_casing/c46x30mm/inc - -/obj/item/ammo_box/magazine/wt550m9/wtic/update_icon() - ..() - icon_state = "46x30mmtI-[round(ammo_count(),4)]" - -/obj/item/ammo_box/magazine/uzim9mm - name = "uzi magazine (9mm)" - icon_state = "uzi9mm-32" - ammo_type = /obj/item/ammo_casing/c9mm - caliber = "9mm" - max_ammo = 32 - -/obj/item/ammo_box/magazine/uzim9mm/update_icon() - ..() - icon_state = "uzi9mm-[round(ammo_count(),4)]" - -/obj/item/ammo_box/magazine/smgm9mm - name = "SMG magazine (9mm)" - icon_state = "smg9mm-42" - ammo_type = /obj/item/ammo_casing/c9mm - caliber = "9mm" - max_ammo = 21 - -/obj/item/ammo_box/magazine/smgm9mm/update_icon() - ..() - icon_state = "smg9mm-[ammo_count() ? "42" : "0"]" - -/obj/item/ammo_box/magazine/smgm9mm/ap - name = "SMG magazine (Armour Piercing 9mm)" - ammo_type = /obj/item/ammo_casing/c9mm/ap - -/obj/item/ammo_box/magazine/smgm9mm/fire - name = "SMG Magazine (Incendiary 9mm)" - ammo_type = /obj/item/ammo_casing/c9mm/inc - -/obj/item/ammo_box/magazine/smgm45 - name = "SMG magazine (.45)" - icon_state = "c20r45-24" - ammo_type = /obj/item/ammo_casing/c45 - caliber = ".45" - max_ammo = 24 - -/obj/item/ammo_box/magazine/smgm45/update_icon() - ..() - icon_state = "c20r45-[round(ammo_count(),2)]" - -/obj/item/ammo_box/magazine/tommygunm45 - name = "drum magazine (.45)" - icon_state = "drum45" - ammo_type = /obj/item/ammo_casing/c45 - caliber = ".45" - max_ammo = 50 diff --git a/code/modules/projectiles/boxes_magazines/external/sniper.dm b/code/modules/projectiles/boxes_magazines/external/sniper.dm deleted file mode 100644 index 15bf5cb1c6..0000000000 --- a/code/modules/projectiles/boxes_magazines/external/sniper.dm +++ /dev/null @@ -1,27 +0,0 @@ -/obj/item/ammo_box/magazine/sniper_rounds - name = "sniper rounds (.50)" - icon_state = ".50mag" - ammo_type = /obj/item/ammo_casing/p50 - max_ammo = 6 - caliber = ".50" - -/obj/item/ammo_box/magazine/sniper_rounds/update_icon() - ..() - if(ammo_count()) - icon_state = "[initial(icon_state)]-ammo" - else - icon_state = "[initial(icon_state)]" - -/obj/item/ammo_box/magazine/sniper_rounds/soporific - name = "sniper rounds (Zzzzz)" - desc = "" - icon_state = "soporific" - ammo_type = /obj/item/ammo_casing/p50/soporific - max_ammo = 3 - caliber = ".50" - -/obj/item/ammo_box/magazine/sniper_rounds/penetrator - name = "sniper rounds (penetrator)" - desc = "" - ammo_type = /obj/item/ammo_casing/p50/penetrator - max_ammo = 5 diff --git a/code/modules/projectiles/boxes_magazines/external/toy.dm b/code/modules/projectiles/boxes_magazines/external/toy.dm deleted file mode 100644 index 2369bc6ce3..0000000000 --- a/code/modules/projectiles/boxes_magazines/external/toy.dm +++ /dev/null @@ -1,59 +0,0 @@ -/obj/item/ammo_box/magazine/toy - name = "foam force META magazine" - ammo_type = /obj/item/ammo_casing/caseless/foam_dart - caliber = "foam_force" - -/obj/item/ammo_box/magazine/toy/smg - name = "foam force SMG magazine" - icon_state = "smg9mm-42" - ammo_type = /obj/item/ammo_casing/caseless/foam_dart - max_ammo = 20 - -/obj/item/ammo_box/magazine/toy/smg/update_icon() - ..() - if(ammo_count()) - icon_state = "smg9mm-42" - else - icon_state = "smg9mm-0" - -/obj/item/ammo_box/magazine/toy/smg/riot - ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot - -/obj/item/ammo_box/magazine/toy/pistol - name = "foam force pistol magazine" - icon_state = "9x19p" - max_ammo = 8 - multiple_sprites = AMMO_BOX_FULL_EMPTY - -/obj/item/ammo_box/magazine/toy/pistol/riot - ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot - -/obj/item/ammo_box/magazine/toy/smgm45 - name = "donksoft SMG magazine" - icon_state = "c20r45-toy" - caliber = "foam_force" - ammo_type = /obj/item/ammo_casing/caseless/foam_dart - max_ammo = 20 - -/obj/item/ammo_box/magazine/toy/smgm45/update_icon() - ..() - icon_state = "c20r45-[round(ammo_count(),2)]" - -/obj/item/ammo_box/magazine/toy/smgm45/riot - icon_state = "c20r45-riot" - ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot - -/obj/item/ammo_box/magazine/toy/m762 - name = "donksoft box magazine" - icon_state = "a762-toy" - caliber = "foam_force" - ammo_type = /obj/item/ammo_casing/caseless/foam_dart - max_ammo = 50 - -/obj/item/ammo_box/magazine/toy/m762/update_icon() - ..() - icon_state = "a762-[round(ammo_count(),10)]" - -/obj/item/ammo_box/magazine/toy/m762/riot - icon_state = "a762-riot" - ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot diff --git a/code/modules/projectiles/boxes_magazines/internal/_cylinder.dm b/code/modules/projectiles/boxes_magazines/internal/_cylinder.dm deleted file mode 100644 index 9af0b0e087..0000000000 --- a/code/modules/projectiles/boxes_magazines/internal/_cylinder.dm +++ /dev/null @@ -1,49 +0,0 @@ -/obj/item/ammo_box/magazine/internal/cylinder - name = "revolver cylinder" - ammo_type = /obj/item/ammo_casing/a357 - caliber = "357" - max_ammo = 7 - -/obj/item/ammo_box/magazine/internal/cylinder/get_round(keep = 0) - rotate() - - var/b = stored_ammo[1] - if(!keep) - stored_ammo[1] = null - - return b - -/obj/item/ammo_box/magazine/internal/cylinder/proc/rotate() - var/b = stored_ammo[1] - stored_ammo.Cut(1,2) - stored_ammo.Insert(0, b) - -/obj/item/ammo_box/magazine/internal/cylinder/proc/spin() - for(var/i in 1 to rand(0, max_ammo*2)) - rotate() - -/obj/item/ammo_box/magazine/internal/cylinder/ammo_list(drop_list = FALSE) - var/list/L = list() - for(var/i=1 to stored_ammo.len) - var/obj/item/ammo_casing/bullet = stored_ammo[i] - if(bullet) - L.Add(bullet) - if(drop_list)//We have to maintain the list size, to emulate a cylinder - stored_ammo[i] = null - return L - -/obj/item/ammo_box/magazine/internal/cylinder/give_round(obj/item/ammo_casing/R, replace_spent = 0) - if(!R || (caliber && R.caliber != caliber) || (!caliber && R.type != ammo_type)) - return FALSE - - for(var/i in 1 to stored_ammo.len) - var/obj/item/ammo_casing/bullet = stored_ammo[i] - if(!bullet || !bullet.BB) // found a spent ammo - stored_ammo[i] = R - R.forceMove(src) - - if(bullet) - bullet.forceMove(drop_location()) - return TRUE - - return FALSE diff --git a/code/modules/projectiles/boxes_magazines/internal/grenade.dm b/code/modules/projectiles/boxes_magazines/internal/grenade.dm deleted file mode 100644 index 8b2ec9fca3..0000000000 --- a/code/modules/projectiles/boxes_magazines/internal/grenade.dm +++ /dev/null @@ -1,17 +0,0 @@ -/obj/item/ammo_box/magazine/internal/cylinder/grenademulti - name = "grenade launcher internal magazine" - ammo_type = /obj/item/ammo_casing/a40mm - caliber = "40mm" - max_ammo = 6 - -/obj/item/ammo_box/magazine/internal/grenadelauncher - name = "grenade launcher internal magazine" - ammo_type = /obj/item/ammo_casing/a40mm - caliber = "40mm" - max_ammo = 1 - -/obj/item/ammo_box/magazine/internal/rocketlauncher - name = "rocket launcher internal magazine" - ammo_type = /obj/item/ammo_casing/caseless/rocket - caliber = "84mm" - max_ammo = 1 diff --git a/code/modules/projectiles/boxes_magazines/internal/misc.dm b/code/modules/projectiles/boxes_magazines/internal/misc.dm deleted file mode 100644 index 4b405c0996..0000000000 --- a/code/modules/projectiles/boxes_magazines/internal/misc.dm +++ /dev/null @@ -1,5 +0,0 @@ -/obj/item/ammo_box/magazine/internal/minigun - name = "gatling gun fusion core" - ammo_type = /obj/item/ammo_casing/caseless/laser/gatling - caliber = "gatling" - max_ammo = 5000 diff --git a/code/modules/projectiles/boxes_magazines/internal/revolver.dm b/code/modules/projectiles/boxes_magazines/internal/revolver.dm deleted file mode 100644 index 982d22493f..0000000000 --- a/code/modules/projectiles/boxes_magazines/internal/revolver.dm +++ /dev/null @@ -1,22 +0,0 @@ -/obj/item/ammo_box/magazine/internal/cylinder/rev38 - name = "detective revolver cylinder" - ammo_type = /obj/item/ammo_casing/c38 - caliber = "38" - max_ammo = 6 - -/obj/item/ammo_box/magazine/internal/cylinder/rev762 - name = "\improper Nagant revolver cylinder" - ammo_type = /obj/item/ammo_casing/n762 - caliber = "n762" - max_ammo = 7 - -/obj/item/ammo_box/magazine/internal/cylinder/rus357 - name = "\improper Russian revolver cylinder" - ammo_type = /obj/item/ammo_casing/a357 - caliber = "357" - max_ammo = 6 - multiload = 0 - -/obj/item/ammo_box/magazine/internal/rus357/Initialize() - stored_ammo += new ammo_type(src) - . = ..() diff --git a/code/modules/projectiles/boxes_magazines/internal/rifle.dm b/code/modules/projectiles/boxes_magazines/internal/rifle.dm deleted file mode 100644 index 1cd31c0f12..0000000000 --- a/code/modules/projectiles/boxes_magazines/internal/rifle.dm +++ /dev/null @@ -1,15 +0,0 @@ -/obj/item/ammo_box/magazine/internal/boltaction - name = "bolt action rifle internal magazine" - desc = "" - ammo_type = /obj/item/ammo_casing/a762 - caliber = "a762" - max_ammo = 5 - multiload = 1 - -/obj/item/ammo_box/magazine/internal/boltaction/enchanted - max_ammo = 1 - ammo_type = /obj/item/ammo_casing/a762/enchanted - -/obj/item/ammo_box/magazine/internal/boltaction/enchanted/arcane_barrage - ammo_type = /obj/item/ammo_casing/magic/arcane_barrage - diff --git a/code/modules/projectiles/boxes_magazines/internal/shotgun.dm b/code/modules/projectiles/boxes_magazines/internal/shotgun.dm deleted file mode 100644 index 1fa3e6fffb..0000000000 --- a/code/modules/projectiles/boxes_magazines/internal/shotgun.dm +++ /dev/null @@ -1,43 +0,0 @@ -/obj/item/ammo_box/magazine/internal/shot - name = "shotgun internal magazine" - ammo_type = /obj/item/ammo_casing/shotgun/beanbag - caliber = "shotgun" - max_ammo = 4 - multiload = 0 - -/obj/item/ammo_box/magazine/internal/shot/tube - name = "dual feed shotgun internal tube" - ammo_type = /obj/item/ammo_casing/shotgun/rubbershot - max_ammo = 4 - -/obj/item/ammo_box/magazine/internal/shot/lethal - ammo_type = /obj/item/ammo_casing/shotgun/buckshot - -/obj/item/ammo_box/magazine/internal/shot/com - name = "combat shotgun internal magazine" - ammo_type = /obj/item/ammo_casing/shotgun/buckshot - max_ammo = 6 - -/obj/item/ammo_box/magazine/internal/shot/com/compact - name = "compact combat shotgun internal magazine" - ammo_type = /obj/item/ammo_casing/shotgun/buckshot - max_ammo = 4 - -/obj/item/ammo_box/magazine/internal/shot/dual - name = "double-barrel shotgun internal magazine" - max_ammo = 2 - -/obj/item/ammo_box/magazine/internal/shot/improvised - name = "improvised shotgun internal magazine" - ammo_type = /obj/item/ammo_casing/shotgun/improvised - max_ammo = 1 - -/obj/item/ammo_box/magazine/internal/shot/riot - name = "riot shotgun internal magazine" - ammo_type = /obj/item/ammo_casing/shotgun/rubbershot - max_ammo = 6 - -/obj/item/ammo_box/magazine/internal/shot/bounty - name = "triple-barrel shotgun internal magazine" - ammo_type = /obj/item/ammo_casing/shotgun/incapacitate - max_ammo = 3 diff --git a/code/modules/projectiles/boxes_magazines/internal/toy.dm b/code/modules/projectiles/boxes_magazines/internal/toy.dm deleted file mode 100644 index 7a520c6a1f..0000000000 --- a/code/modules/projectiles/boxes_magazines/internal/toy.dm +++ /dev/null @@ -1,7 +0,0 @@ -/obj/item/ammo_box/magazine/internal/shot/toy - ammo_type = /obj/item/ammo_casing/caseless/foam_dart - caliber = "foam_force" - max_ammo = 4 - -/obj/item/ammo_box/magazine/internal/shot/toy/crossbow - max_ammo = 5 diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index f5b987d72c..c882f3a45d 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -9,7 +9,6 @@ item_state = "gun" flags_1 = CONDUCT_1 slot_flags = ITEM_SLOT_BELT - custom_materials = list(/datum/material/iron=2000) w_class = WEIGHT_CLASS_NORMAL possible_item_intents = list(INTENT_GENERIC, RANGED_FIRE) throwforce = 5 @@ -23,126 +22,36 @@ var/vary_fire_sound = TRUE var/fire_sound_volume = 50 var/dry_fire_sound = 'sound/blank.ogg' - var/suppressed = null //whether or not a message is displayed when fired - var/can_suppress = FALSE - var/suppressed_sound = 'sound/blank.ogg' - var/suppressed_volume = 60 - var/can_unsuppress = TRUE var/recoil = 0 //boom boom shake the room var/clumsy_check = TRUE var/obj/item/ammo_casing/chambered = null trigger_guard = TRIGGER_GUARD_NORMAL //trigger guard on the weapon, hulks can't fire them with their big meaty fingers - var/sawn_desc = null //description change if weapon is sawn-off - var/sawn_off = FALSE - var/burst_size = 1 //how large a burst is - var/fire_delay = 0 //rate of fire for burst firing and semi auto - var/firing_burst = 0 //Prevent the weapon from firing again while already firing - var/semicd = 0 //cooldown handler - var/weapon_weight = WEAPON_LIGHT - var/dual_wield_spread = 24 //additional spread when dual wielding + var/spread = 0 //Spread induced by the gun itself. var/randomspread = 1 //Set to 0 for shotguns. This is used for weapons that don't fire all their bullets at once. lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi' - var/obj/item/firing_pin/pin = /obj/item/firing_pin //standard firing pin for most guns - - var/can_flashlight = FALSE //if a flashlight can be added or removed if it already has one. - var/obj/item/flashlight/seclite/gun_light - var/mutable_appearance/flashlight_overlay - var/datum/action/item_action/toggle_gunlight/alight - var/gunlight_state = "flight" - - var/can_bayonet = FALSE //if a bayonet can be added or removed if it already has one. - var/obj/item/kitchen/knife/bayonet - var/mutable_appearance/knife_overlay - var/knife_x_offset = 0 - var/knife_y_offset = 0 - var/ammo_x_offset = 0 //used for positioning ammo count overlay on sprite var/ammo_y_offset = 0 var/flight_x_offset = 0 var/flight_y_offset = 0 - //Zooming - var/zoomable = FALSE //whether the gun generates a Zoom action on creation - var/zoomed = FALSE //Zoom toggle - var/zoom_amt = 3 //Distance in TURFs to move the user's screen forward (the "zoom" effect) - var/zoom_out_amt = 0 - var/datum/action/toggle_scope_zoom/azoom - var/automatic = 0 //can gun use it, 0 is no, anything above 0 is the delay between clicks in ds var/pb_knockback = 0 -/obj/item/gun/Initialize() - . = ..() - if(pin) - pin = new pin(src) - if(gun_light) - alight = new(src) - build_zooming() - /obj/item/gun/Destroy() - if(isobj(pin)) //Can still be the initial path, then we skip - QDEL_NULL(pin) - if(gun_light) - QDEL_NULL(gun_light) - if(bayonet) - QDEL_NULL(bayonet) if(chambered) //Not all guns are chambered (EMP'ed energy guns etc) QDEL_NULL(chambered) - if(azoom) - QDEL_NULL(azoom) return ..() /obj/item/gun/handle_atom_del(atom/A) - if(A == pin) - pin = null if(A == chambered) chambered = null update_icon() - if(A == bayonet) - clear_bayonet() - if(A == gun_light) - clear_gunlight() return ..() -/obj/item/gun/CheckParts(list/parts_list) - ..() - var/obj/item/gun/G = locate(/obj/item/gun) in contents - if(G) - G.forceMove(loc) - QDEL_NULL(G.pin) - visible_message("[G] can now fit a new pin, but the old one was destroyed in the process.", null, null, 3) - qdel(src) - -/obj/item/gun/examine(mob/user) - . = ..() -// if(pin) -// . += "It has \a [pin] installed." -// else -// . += "It doesn't have a firing pin installed, and won't fire." - -// if(gun_light) -// . += "It has \a [gun_light] [can_flashlight ? "" : "permanently "]mounted on it." -// if(can_flashlight) //if it has a light and this is false, the light is permanent. -// . += "[gun_light] looks like it can be unscrewed from [src]." -// else if(can_flashlight) -// . += "It has a mounting point for a seclite." - -// if(bayonet) -// . += "It has \a [bayonet] [can_bayonet ? "" : "permanently "]affixed to it." -// if(can_bayonet) //if it has a bayonet and this is false, the bayonet is permanent. -// . += "[bayonet] looks like it can be unscrewed from [src]." -// else if(can_bayonet) -// . += "It has a bayonet lug on it." - -/obj/item/gun/equipped(mob/living/user, slot) - . = ..() - if(zoomed && user.get_active_held_item() != src) - zoom(user, FALSE) //we can only stay zoomed in if it's in our hands //yeah and we only unzoom if we're actually zoomed using the gun!! - //called after the gun has successfully fired its chambered ammo. /obj/item/gun/proc/process_chamber() return FALSE @@ -161,24 +70,11 @@ if(recoil) shake_camera(user, recoil + 1, recoil) - if(suppressed) - playsound(user, suppressed_sound, suppressed_volume, vary_fire_sound, ignore_walls = FALSE) - else - playsound(user, fire_sound, fire_sound_volume, vary_fire_sound) - if(message) -/* if(pointblank) - user.visible_message("[user] shoots [src] point blank at [pbtarget]!", \ - "I shoot [src] point blank at [pbtarget]!", \ - COMBAT_MESSAGE_RANGE, pbtarget) - to_chat(pbtarget, "[user] shoots [src] point blank at me!") - if(pb_knockback > 0) - var/atom/throw_target = get_edge_target_turf(pbtarget, user.dir) - pbtarget.throw_at(throw_target, pb_knockback, 2) - - else*/ - user.visible_message("[user] shoots [src]!", \ - "I shoot [src]!", \ - COMBAT_MESSAGE_RANGE) + playsound(user, fire_sound, fire_sound_volume, vary_fire_sound) + if(message) + user.visible_message("[user] shoots [src]!", \ + "I shoot [src]!", \ + COMBAT_MESSAGE_RANGE) /obj/item/gun/emp_act(severity) . = ..() @@ -192,8 +88,6 @@ if(!target) testing("no target") return - if(firing_burst) - return if(!user?.used_intent.tranged) //melee attack return if(flag) //It's adjacent, is the user, or is on the user's person @@ -231,301 +125,58 @@ process_fire(user, user, FALSE, params, shot_leg) user.dropItemToGround(src, TRUE) return - var/obj/item/bodypart/other_hand = user.has_hand_for_held_index(user.get_inactive_hand_index()) //returns non-disabled inactive hands - if(weapon_weight == WEAPON_HEAVY && (user.get_inactive_held_item() || !other_hand)) - to_chat(user, "I need two hands to fire \the [src]!") - return - //DUAL (or more!) WIELDING - var/bonus_spread = 0 - var/loop_counter = 0 - if(ishuman(user) && user.used_intent.type == INTENT_HARM) - var/mob/living/carbon/human/H = user - for(var/obj/item/gun/G in H.held_items) - if(G == src || G.weapon_weight >= WEAPON_MEDIUM) - continue - else if(G.can_trigger_gun(user)) - bonus_spread += dual_wield_spread - loop_counter++ - addtimer(CALLBACK(G, TYPE_PROC_REF(/obj/item/gun, process_fire), target, user, TRUE, params, null, bonus_spread), loop_counter) + return process_fire(target, user, TRUE, params, null, 0) - return process_fire(target, user, TRUE, params, null, bonus_spread) - - - -/obj/item/gun/can_trigger_gun(mob/living/user) - . = ..() - if(!handle_pins(user)) - return FALSE - -/obj/item/gun/proc/handle_pins(mob/living/user) - if(pin) - if(pin.pin_auth(user) || (pin.obj_flags & EMAGGED)) - return TRUE - else - pin.auth_fail(user) - return FALSE - else - to_chat(user, "[src]'s trigger is locked. This weapon doesn't have a firing pin installed!") - return FALSE /obj/item/gun/proc/recharge_newshot() return -/obj/item/gun/proc/process_burst(mob/living/user, atom/target, message = TRUE, params=null, zone_override = "", sprd = 0, randomized_gun_spread = 0, randomized_bonus_spread = 0, rand_spr = 0, iteration = 0) - if(!user || !firing_burst) - firing_burst = FALSE - return FALSE - if(chambered && chambered.BB) - if(HAS_TRAIT(user, TRAIT_PACIFISM)) // If the user has the pacifist trait, then they won't be able to fire [src] if the round chambered inside of [src] is lethal. - if(chambered.harmful) // Is the bullet chambered harmful? - to_chat(user, "[src] is lethally chambered! You don't want to risk harming anyone...") - return - if(randomspread) - sprd = round((rand() - 0.5) * DUALWIELD_PENALTY_EXTRA_MULTIPLIER * (randomized_gun_spread + randomized_bonus_spread)) - else //Smart spread - sprd = round((((rand_spr/burst_size) * iteration) - (0.5 + (rand_spr * 0.25))) * (randomized_gun_spread + randomized_bonus_spread)) - before_firing(target,user) - if(!chambered.fire_casing(target, user, params, ,suppressed, zone_override, sprd, src)) - shoot_with_empty_chamber(user) - firing_burst = FALSE - return FALSE - else -// if(get_dist(user, target) <= 1) //Making sure whether the target is in vicinity for the pointblank shot -// shoot_live_shot(user, 1, target, message) -// else - shoot_live_shot(user, 0, target, message) - if (iteration >= burst_size) - firing_burst = FALSE - else - shoot_with_empty_chamber(user) - firing_burst = FALSE - return FALSE - process_chamber() - update_icon() - return TRUE /obj/item/gun/proc/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0) add_fingerprint(user) - if(semicd) - return - var/sprd = 0 var/randomized_gun_spread = 0 - var/rand_spr = rand() if(spread) randomized_gun_spread = rand(0,spread) if(HAS_TRAIT(user, TRAIT_POOR_AIM)) //nice shootin' tex bonus_spread += 25 var/randomized_bonus_spread = rand(0, bonus_spread) - if(burst_size > 1) - firing_burst = TRUE - for(var/i = 1 to burst_size) - addtimer(CALLBACK(src, PROC_REF(process_burst), user, target, message, params, zone_override, sprd, randomized_gun_spread, randomized_bonus_spread, rand_spr, i), fire_delay * (i - 1)) - else - if(chambered) - if(HAS_TRAIT(user, TRAIT_PACIFISM)) // If the user has the pacifist trait, then they won't be able to fire [src] if the round chambered inside of [src] is lethal. - if(chambered.harmful) // Is the bullet chambered harmful? - to_chat(user, "[src] is lethally chambered! You don't want to risk harming anyone...") - return - sprd = round((rand() - 0.5) * DUALWIELD_PENALTY_EXTRA_MULTIPLIER * (randomized_gun_spread + randomized_bonus_spread)) - before_firing(target,user) - if(!chambered.fire_casing(target, user, params, , suppressed, zone_override, sprd, src)) - shoot_with_empty_chamber(user) + if(chambered) + if(HAS_TRAIT(user, TRAIT_PACIFISM)) // If the user has the pacifist trait, then they won't be able to fire [src] if the round chambered inside of [src] is lethal. + if(chambered.harmful) // Is the bullet chambered harmful? + to_chat(user, "[src] is lethally chambered! You don't want to risk harming anyone...") return - else -// if(get_dist(user, target) <= 1) //Making sure whether the target is in vicinity for the pointblank shot -// shoot_live_shot(user, 1, target, message) -// else - shoot_live_shot(user, 0, target, message) - else + sprd = round((rand() - 0.5) * DUALWIELD_PENALTY_EXTRA_MULTIPLIER * (randomized_gun_spread + randomized_bonus_spread)) + before_firing(target,user) + if(!chambered.fire_casing(target, user, params, , FALSE, zone_override, sprd, src)) shoot_with_empty_chamber(user) return - process_chamber() - update_icon() - semicd = TRUE - addtimer(CALLBACK(src, PROC_REF(reset_semicd)), fire_delay) + else + shoot_live_shot(user, 0, target, message) + else + shoot_with_empty_chamber(user) + return + process_chamber() + update_icon() if(user) user.update_inv_hands() SSblackbox.record_feedback("tally", "gun_fired", 1, type) return TRUE -/obj/item/gun/update_icon() - ..() - - -/obj/item/gun/proc/reset_semicd() - semicd = FALSE - -/obj/item/gun/attack(mob/M as mob, mob/user) - if(!user.used_intent.tranged) //Flogging - if(bayonet) - M.attackby(bayonet, user) - return - else - return ..() - return - -/obj/item/gun/attack_obj(obj/O, mob/user) - if(!user.used_intent.tranged) - if(bayonet) - O.attackby(bayonet, user) - return - else - return ..() - return /obj/item/gun/attackby(obj/item/I, mob/user, params) if(!user.used_intent.tranged) return ..() - else if(istype(I, /obj/item/flashlight/seclite)) - if(!can_flashlight) - return ..() - var/obj/item/flashlight/seclite/S = I - if(!gun_light) - if(!user.transferItemToLoc(I, src)) - return - to_chat(user, "I click [S] into place on [src].") - if(S.on) - set_light(0) - gun_light = S - update_gunlight() - alight = new(src) - if(loc == user) - alight.Grant(user) - else if(istype(I, /obj/item/kitchen/knife)) - var/obj/item/kitchen/knife/K = I - if(!can_bayonet || !K.bayonet || bayonet) //ensure the gun has an attachment point available, and that the knife is compatible with it. - return ..() - if(!user.transferItemToLoc(I, src)) - return - to_chat(user, "I attach [K] to [src]'s bayonet lug.") - bayonet = K - var/state = "bayonet" //Generic state. - if(bayonet.icon_state in icon_states('icons/obj/guns/bayonets.dmi')) //Snowflake state? - state = bayonet.icon_state - var/icon/bayonet_icons = 'icons/obj/guns/bayonets.dmi' - knife_overlay = mutable_appearance(bayonet_icons, state) - knife_overlay.pixel_x = knife_x_offset - knife_overlay.pixel_y = knife_y_offset - add_overlay(knife_overlay, TRUE) else return ..() -/obj/item/gun/screwdriver_act(mob/living/user, obj/item/I) - . = ..() - if(.) - return - if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) - return - if((can_flashlight && gun_light) && (can_bayonet && bayonet)) //give them a choice instead of removing both - var/list/possible_items = list(gun_light, bayonet) - var/obj/item/item_to_remove = input(user, "Select an attachment to remove", "Attachment Removal") as null|obj in sortNames(possible_items) - if(!item_to_remove || !user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) - return - return remove_gun_attachment(user, I, item_to_remove) - - else if(gun_light && can_flashlight) //if it has a gun_light and can_flashlight is false, the flashlight is permanently attached. - return remove_gun_attachment(user, I, gun_light, "unscrewed") - - else if(bayonet && can_bayonet) //if it has a bayonet, and the bayonet can be removed - return remove_gun_attachment(user, I, bayonet, "unfix") - -/obj/item/gun/proc/remove_gun_attachment(mob/living/user, obj/item/tool_item, obj/item/item_to_remove, removal_verb) - if(tool_item) - tool_item.play_tool_sound(src) - to_chat(user, "I [removal_verb ? removal_verb : "remove"] [item_to_remove] from [src].") - item_to_remove.forceMove(drop_location()) - - if(Adjacent(user)) - user.put_in_hands(item_to_remove) - - if(item_to_remove == bayonet) - return clear_bayonet() - else if(item_to_remove == gun_light) - return clear_gunlight() - -/obj/item/gun/proc/clear_bayonet() - if(!bayonet) - return - bayonet = null - if(knife_overlay) - cut_overlay(knife_overlay, TRUE) - knife_overlay = null - return TRUE - -/obj/item/gun/proc/clear_gunlight() - if(!gun_light) - return - var/obj/item/flashlight/seclite/removed_light = gun_light - gun_light = null - update_gunlight() - removed_light.update_brightness() - QDEL_NULL(alight) - return TRUE - -/obj/item/gun/ui_action_click(mob/user, actiontype) - if(istype(actiontype, alight)) - toggle_gunlight() - else - ..() - -/obj/item/gun/proc/toggle_gunlight() - if(!gun_light) - return - - var/mob/living/carbon/human/user = usr - gun_light.on = !gun_light.on - to_chat(user, "I toggle the gunlight [gun_light.on ? "on":"off"].") - - playsound(user, 'sound/blank.ogg', 100, TRUE) - update_gunlight() - -/obj/item/gun/proc/update_gunlight() - if(gun_light) - if(gun_light.on) - set_light(gun_light.light_outer_range) - else - set_light(0) - cut_overlays(flashlight_overlay, TRUE) - var/state = "[gunlight_state][gun_light.on? "_on":""]" //Generic state. - if(gun_light.icon_state in icon_states('icons/obj/guns/flashlights.dmi')) //Snowflake state? - state = gun_light.icon_state - flashlight_overlay = mutable_appearance('icons/obj/guns/flashlights.dmi', state) - flashlight_overlay.pixel_x = flight_x_offset - flashlight_overlay.pixel_y = flight_y_offset - add_overlay(flashlight_overlay, TRUE) - add_overlay(knife_overlay, TRUE) - else - set_light(0) - cut_overlays(flashlight_overlay, TRUE) - flashlight_overlay = null - update_icon(TRUE) - for(var/X in actions) - var/datum/action/A = X - A.UpdateButtonIcon() - -/obj/item/gun/pickup(mob/user) - ..() - if(azoom) - azoom.Grant(user) - -/obj/item/gun/dropped(mob/user) - . = ..() - if(azoom) - azoom.Remove(user) - if(zoomed) - zoom(user,FALSE) - /obj/item/gun/proc/handle_suicide(mob/living/carbon/human/user, mob/living/carbon/human/target, params, bypass_timer) if(!ishuman(user) || !ishuman(target)) return - if(semicd) - return - if(user == target) target.visible_message("[user] sticks [src] in [user.p_their()] mouth, ready to pull the trigger...", \ "I stick [src] in your mouth, ready to pull the trigger...") @@ -533,19 +184,14 @@ target.visible_message("[user] points [src] at [target]'s head, ready to pull the trigger...", \ "[user] points [src] at your head, ready to pull the trigger...") - semicd = TRUE - if(!bypass_timer && (!do_mob(user, target, 120) || user.zone_selected != BODY_ZONE_PRECISE_MOUTH)) if(user) if(user == target) user.visible_message("[user] decided not to shoot.") else if(target && target.Adjacent(user)) target.visible_message("[user] has decided to spare [target]", "[user] has decided to spare your life!") - semicd = FALSE return - semicd = FALSE - target.visible_message("[user] pulls the trigger!", "[(user == target) ? "You pull" : "[user] pulls"] the trigger!") if(chambered && chambered.BB) @@ -553,78 +199,6 @@ process_fire(target, user, TRUE, params, BODY_ZONE_HEAD) -/obj/item/gun/proc/unlock() //used in summon guns and as a convience for admins - if(pin) - qdel(pin) - pin = new /obj/item/firing_pin - //Happens before the actual projectile creation /obj/item/gun/proc/before_firing(atom/target,mob/user) return - -///////////// -// ZOOMING // -///////////// - -/datum/action/toggle_scope_zoom - name = "Toggle Scope" - check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_RESTRAINED|AB_CHECK_STUN|AB_CHECK_LYING - icon_icon = 'icons/mob/actions/actions_items.dmi' - button_icon_state = "sniper_zoom" - var/obj/item/gun/gun = null - -/datum/action/toggle_scope_zoom/Trigger() - gun.zoom(owner) - -/datum/action/toggle_scope_zoom/IsAvailable() - . = ..() - if(!. && gun) - gun.zoom(owner, FALSE) - -/datum/action/toggle_scope_zoom/Remove(mob/living/L) - gun.zoom(L, FALSE) - ..() - - -/obj/item/gun/proc/zoom(mob/living/user, forced_zoom) - if(!user || !user.client) - return - - switch(forced_zoom) - if(FALSE) - zoomed = FALSE - if(TRUE) - zoomed = TRUE - else - zoomed = !zoomed - - if(zoomed) - var/_x = 0 - var/_y = 0 - switch(user.dir) - if(NORTH) - _y = zoom_amt - if(EAST) - _x = zoom_amt - if(SOUTH) - _y = -zoom_amt - if(WEST) - _x = -zoom_amt - - user.client.change_view(zoom_out_amt) - user.client.pixel_x = world.icon_size*_x - user.client.pixel_y = world.icon_size*_y - else - user.client.change_view(CONFIG_GET(string/default_view)) - user.client.pixel_x = 0 - user.client.pixel_y = 0 - return zoomed - -//Proc, so that gun accessories/scopes/etc. can easily add zooming. -/obj/item/gun/proc/build_zooming() - if(azoom) - return - - if(zoomable) - azoom = new() - azoom.gun = src diff --git a/code/modules/projectiles/guns/ballistic.dm b/code/modules/projectiles/guns/ballistic.dm index 76e0f156b7..eba0aab545 100644 --- a/code/modules/projectiles/guns/ballistic.dm +++ b/code/modules/projectiles/guns/ballistic.dm @@ -1,3 +1,8 @@ +/obj/item/proc/can_trigger_gun(mob/living/user) + if(!user.can_use_guns(src)) + return FALSE + return TRUE + ///Subtype for any kind of ballistic gun ///This has a shitload of vars on it, and I'm sorry for that, but it does make making new subtypes really easy /obj/item/gun/ballistic @@ -48,7 +53,7 @@ ///Whether the gun will spawn loaded with a magazine var/spawnwithmagazine = TRUE ///Compatible magazines with the gun - var/mag_type = /obj/item/ammo_box/magazine/m10mm //Removes the need for max_ammo and caliber info + var/mag_type =/obj/item/ammo_box/magazine/internal/shot/xbow //Removes the need for max_ammo and caliber info ///Whether the sprite has a visible magazine or not var/mag_display = FALSE ///Whether the sprite has a visible ammo display or not @@ -83,8 +88,6 @@ var/recent_rack = 0 ///Whether the gun can be tacloaded by slapping a fresh magazine directly on it var/tac_reloads = TRUE //Snowflake mechanic no more. - ///Whether the gun can be sawn off by sawing tools - var/can_be_sawn_off = FALSE var/verbage = "load" /obj/item/gun/ballistic/Initialize() @@ -102,17 +105,12 @@ if (QDELETED(src)) return ..() - if(current_skin) - icon_state = "[unique_reskin[current_skin]][sawn_off ? "_sawn" : ""]" - else - icon_state = "[initial(icon_state)][sawn_off ? "_sawn" : ""]" + icon_state = initial(icon_state) cut_overlays() if (bolt_type == BOLT_TYPE_LOCKING) add_overlay("[icon_state]_bolt[bolt_locked ? "_locked" : ""]") if (bolt_type == BOLT_TYPE_OPEN && bolt_locked) add_overlay("[icon_state]_bolt") - if (suppressed) - add_overlay("[icon_state]_suppressor") if(!chambered && empty_indicator) add_overlay("[icon_state]_empty") if (magazine) @@ -263,53 +261,14 @@ A.update_icon() update_icon() return - if(istype(A, /obj/item/suppressor)) - var/obj/item/suppressor/S = A - if(!can_suppress) - to_chat(user, "I can't seem to figure out how to fit [S] on [src]!") - return - if(!user.is_holding(src)) - to_chat(user, "I need be holding [src] to fit [S] to it!") - return - if(suppressed) - to_chat(user, "[src] already has a suppressor!") - return - if(user.transferItemToLoc(A, src)) - to_chat(user, "I screw \the [S] onto \the [src].") - install_suppressor(A) - return - if (can_be_sawn_off) - if (sawoff(user, A)) - return user.update_inv_hands() return FALSE -/obj/item/gun/ballistic/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0) - if (sawn_off) - bonus_spread += SAWN_OFF_ACC_PENALTY - . = ..() - -///Installs a new suppressor, assumes that the suppressor is already in the contents of src -/obj/item/gun/ballistic/proc/install_suppressor(obj/item/suppressor/S) - suppressed = S - w_class += S.w_class //so pistols do not fit in pockets when suppressed - update_icon() /obj/item/gun/ballistic/AltClick(mob/user) if (unique_reskin && !current_skin && user.canUseTopic(src, BE_CLOSE, NO_DEXTERITY)) reskin_obj(user) return - if(loc == user) - if(suppressed && can_unsuppress) - var/obj/item/suppressor/S = suppressed - if(!user.is_holding(src)) - return ..() - to_chat(user, "I unscrew \the [suppressed] from \the [src].") - user.put_in_hands(suppressed) - w_class -= S.w_class - suppressed = null - update_icon() - return ///Prefire empty checks for the bolt drop /obj/item/gun/ballistic/proc/prefire_empty_checks() @@ -372,18 +331,6 @@ rack(user) return - -/obj/item/gun/ballistic/examine(mob/user) - . = ..() -// var/count_chambered = !(bolt_type == BOLT_TYPE_NO_BOLT || bolt_type == BOLT_TYPE_OPEN) -// . += "It has [get_ammo(count_chambered)] round\s remaining." -// if (!chambered) -// . += "It does not seem to have a round chambered." -// if (bolt_locked) -// . += "The [bolt_wording] is locked back and needs to be released before firing." -// if (suppressed) -// . += "It has a suppressor attached that can be removed with alt+click." - ///Gets the number of bullets in the gun /obj/item/gun/ballistic/proc/get_ammo(countchambered = TRUE) var/boolets = 0 //mature var names for mature people @@ -429,61 +376,3 @@ return (OXYLOSS) #undef BRAINS_BLOWN_THROW_SPEED #undef BRAINS_BLOWN_THROW_RANGE - -GLOBAL_LIST_INIT(gun_saw_types, typecacheof(list( - - ))) - -///Handles all the logic of sawing off guns, -/obj/item/gun/ballistic/proc/sawoff(mob/user, obj/item/saw) - if(!saw.get_sharpness() || !is_type_in_typecache(saw, GLOB.gun_saw_types) && !saw.tool_behaviour == TOOL_SAW) //needs to be sharp. Otherwise turned off eswords can cut this. - return - if(sawn_off) - to_chat(user, "\The [src] is already shortened!") - return - if(bayonet) - to_chat(user, "I cannot saw-off \the [src] with \the [bayonet] attached!") - return - user.changeNext_move(CLICK_CD_MELEE) - user.visible_message("[user] begins to shorten \the [src].", "I begin to shorten \the [src]...") - - //if there's any live ammo inside the gun, makes it go off - if(blow_up(user)) - user.visible_message("\The [src] goes off!", "\The [src] goes off in your face!") - return - - if(do_after(user, 30, target = src)) - if(sawn_off) - return - user.visible_message("[user] shortens \the [src]!", "I shorten \the [src].") - name = "sawn-off [src.name]" - desc = sawn_desc - w_class = WEIGHT_CLASS_NORMAL - item_state = "gun" - slot_flags &= ~ITEM_SLOT_BACK //you can't sling it on your back - slot_flags |= ITEM_SLOT_BELT //but you can wear it on your belt (poorly concealed under a trenchcoat, ideally) - recoil = SAWN_OFF_RECOIL - sawn_off = TRUE - update_icon() - return TRUE - -///used for sawing guns, causes the gun to fire without the input of the user -/obj/item/gun/ballistic/proc/blow_up(mob/user) - . = FALSE - for(var/obj/item/ammo_casing/AC in magazine.stored_ammo) - if(AC.BB) - process_fire(user, user, FALSE) - . = TRUE - - -/obj/item/suppressor - name = "suppressor" - desc = "" - icon = 'icons/obj/guns/projectile.dmi' - icon_state = "suppressor" - w_class = WEIGHT_CLASS_TINY - - -/obj/item/suppressor/specialoffer - name = "cheap suppressor" - desc = "" diff --git a/code/modules/projectiles/guns/ballistic/automatic.dm b/code/modules/projectiles/guns/ballistic/automatic.dm deleted file mode 100644 index 6b2bd1bb34..0000000000 --- a/code/modules/projectiles/guns/ballistic/automatic.dm +++ /dev/null @@ -1,344 +0,0 @@ -/obj/item/gun/ballistic/automatic - w_class = WEIGHT_CLASS_NORMAL - var/select = 1 - can_suppress = TRUE - burst_size = 3 - fire_delay = 2 - actions_types = list(/datum/action/item_action/toggle_firemode) - semi_auto = TRUE - fire_sound = 'sound/blank.ogg' - fire_sound_volume = 90 - vary_fire_sound = FALSE - rack_sound = 'sound/blank.ogg' - suppressed_sound = 'sound/blank.ogg' - -/obj/item/gun/ballistic/automatic/proto - name = "\improper Nanotrasen Saber SMG" - desc = "" - icon_state = "saber" - mag_type = /obj/item/ammo_box/magazine/smgm9mm - pin = null - bolt_type = BOLT_TYPE_LOCKING - mag_display = TRUE - -/obj/item/gun/ballistic/automatic/proto/unrestricted - pin = /obj/item/firing_pin - -/obj/item/gun/ballistic/automatic/update_icon() - ..() - if(!select) - add_overlay("[initial(icon_state)]_semi") - if(select == 1) - add_overlay("[initial(icon_state)]_burst") - -/obj/item/gun/ballistic/automatic/ui_action_click(mob/user, actiontype) - if(istype(actiontype, /datum/action/item_action/toggle_firemode)) - burst_select() - else - ..() - -/obj/item/gun/ballistic/automatic/proc/burst_select() - var/mob/living/carbon/human/user = usr - select = !select - if(!select) - burst_size = 1 - fire_delay = 0 - to_chat(user, "I switch to semi-automatic.") - else - burst_size = initial(burst_size) - fire_delay = initial(fire_delay) - to_chat(user, "I switch to [burst_size]-rnd burst.") - - playsound(user, 'sound/blank.ogg', 100, TRUE) - update_icon() - for(var/X in actions) - var/datum/action/A = X - A.UpdateButtonIcon() - -/obj/item/gun/ballistic/automatic/c20r - name = "\improper C-20r SMG" - desc = "" - icon_state = "c20r" - item_state = "c20r" - mag_type = /obj/item/ammo_box/magazine/smgm45 - fire_delay = 2 - burst_size = 2 - pin = /obj/item/firing_pin/implant/pindicate - can_bayonet = TRUE - knife_x_offset = 26 - knife_y_offset = 12 - mag_display = TRUE - mag_display_ammo = TRUE - empty_indicator = TRUE - -/obj/item/gun/ballistic/automatic/c20r/unrestricted - pin = /obj/item/firing_pin - -/obj/item/gun/ballistic/automatic/c20r/Initialize() - . = ..() - update_icon() - -/obj/item/gun/ballistic/automatic/wt550 - name = "security auto rifle" - desc = "" - icon_state = "wt550" - item_state = "arg" - mag_type = /obj/item/ammo_box/magazine/wt550m9 - fire_delay = 2 - can_suppress = FALSE - burst_size = 0 - actions_types = list() - can_bayonet = TRUE - knife_x_offset = 25 - knife_y_offset = 12 - mag_display = TRUE - mag_display_ammo = TRUE - empty_indicator = TRUE - -/obj/item/gun/ballistic/automatic/mini_uzi - name = "\improper Type U3 Uzi" - desc = "" - icon_state = "miniuzi" - mag_type = /obj/item/ammo_box/magazine/uzim9mm - burst_size = 2 - bolt_type = BOLT_TYPE_OPEN - mag_display = TRUE - rack_sound = 'sound/blank.ogg' - -/obj/item/gun/ballistic/automatic/m90 - name = "\improper M-90gl Carbine" - desc = "" - icon_state = "m90" - item_state = "m90" - mag_type = /obj/item/ammo_box/magazine/m556 - can_suppress = FALSE - var/obj/item/gun/ballistic/revolver/grenadelauncher/underbarrel - burst_size = 3 - fire_delay = 2 - pin = /obj/item/firing_pin/implant/pindicate - mag_display = TRUE - empty_indicator = TRUE - fire_sound = 'sound/blank.ogg' - -/obj/item/gun/ballistic/automatic/m90/Initialize() - . = ..() - underbarrel = new /obj/item/gun/ballistic/revolver/grenadelauncher(src) - update_icon() - -/obj/item/gun/ballistic/automatic/m90/unrestricted - pin = /obj/item/firing_pin - -/obj/item/gun/ballistic/automatic/m90/unrestricted/Initialize() - . = ..() - underbarrel = new /obj/item/gun/ballistic/revolver/grenadelauncher/unrestricted(src) - update_icon() - -/obj/item/gun/ballistic/automatic/m90/afterattack(atom/target, mob/living/user, flag, params) - if(select == 2) - underbarrel.afterattack(target, user, flag, params) - else - return ..() - -/obj/item/gun/ballistic/automatic/m90/attackby(obj/item/A, mob/user, params) - if(istype(A, /obj/item/ammo_casing)) - if(istype(A, underbarrel.magazine.ammo_type)) - underbarrel.attack_self() - underbarrel.attackby(A, user, params) - else - ..() - -/obj/item/gun/ballistic/automatic/m90/update_icon() - ..() - switch(select) - if(0) - add_overlay("[initial(icon_state)]_semi") - if(1) - add_overlay("[initial(icon_state)]_burst") - if(2) - add_overlay("[initial(icon_state)]_gren") - return - -/obj/item/gun/ballistic/automatic/m90/burst_select() - var/mob/living/carbon/human/user = usr - switch(select) - if(0) - select = 1 - burst_size = initial(burst_size) - fire_delay = initial(fire_delay) - to_chat(user, "I switch to [burst_size]-rnd burst.") - if(1) - select = 2 - to_chat(user, "I switch to grenades.") - if(2) - select = 0 - burst_size = 1 - fire_delay = 0 - to_chat(user, "I switch to semi-auto.") - playsound(user, 'sound/blank.ogg', 100, TRUE) - update_icon() - return - -/obj/item/gun/ballistic/automatic/tommygun - name = "\improper Thompson SMG" - desc = "" - icon_state = "tommygun" - item_state = "shotgun" - w_class = WEIGHT_CLASS_HUGE - slot_flags = 0 - mag_type = /obj/item/ammo_box/magazine/tommygunm45 - can_suppress = FALSE - burst_size = 4 - fire_delay = 1 - bolt_type = BOLT_TYPE_OPEN - -/obj/item/gun/ballistic/automatic/ar - name = "\improper NT-ARG 'Boarder'" - desc = "" - icon_state = "arg" - item_state = "arg" - slot_flags = 0 - mag_type = /obj/item/ammo_box/magazine/m556 - can_suppress = FALSE - burst_size = 3 - fire_delay = 1 - - -// L6 SAW // - -/obj/item/gun/ballistic/automatic/l6_saw - name = "\improper L6 SAW" - desc = "" - icon_state = "l6" - item_state = "l6closedmag" - w_class = WEIGHT_CLASS_HUGE - slot_flags = 0 - mag_type = /obj/item/ammo_box/magazine/mm712x82 - weapon_weight = WEAPON_HEAVY - var/cover_open = FALSE - can_suppress = FALSE - burst_size = 3 - fire_delay = 1 - spread = 7 - pin = /obj/item/firing_pin/implant/pindicate - bolt_type = BOLT_TYPE_OPEN - mag_display = TRUE - mag_display_ammo = TRUE - tac_reloads = FALSE - fire_sound = 'sound/blank.ogg' - rack_sound = 'sound/blank.ogg' - suppressed_sound = 'sound/blank.ogg' - -/obj/item/gun/ballistic/automatic/l6_saw/unrestricted - pin = /obj/item/firing_pin - - -/obj/item/gun/ballistic/automatic/l6_saw/examine(mob/user) - . = ..() - . += "alt + click to [cover_open ? "close" : "open"] the dust cover." - if(cover_open && magazine) - . += "It seems like you could use an empty hand to remove the magazine." - - -/obj/item/gun/ballistic/automatic/l6_saw/AltClick(mob/user) - cover_open = !cover_open - to_chat(user, "I [cover_open ? "open" : "close"] [src]'s cover.") - playsound(user, 'sound/blank.ogg', 60, TRUE) - update_icon() - - -/obj/item/gun/ballistic/automatic/l6_saw/update_icon() - . = ..() - add_overlay("l6_door_[cover_open ? "open" : "closed"]") - - -/obj/item/gun/ballistic/automatic/l6_saw/afterattack(atom/target as mob|obj|turf, mob/living/user as mob|obj, flag, params) - if(cover_open) - to_chat(user, "[src]'s cover is open! Close it before firing!") - return - else - . = ..() - update_icon() - -//ATTACK HAND IGNORING PARENT RETURN VALUE -/obj/item/gun/ballistic/automatic/l6_saw/attack_hand(mob/user) - if (loc != user) - ..() - return - if (!cover_open) - to_chat(user, "[src]'s cover is closed! Open it before trying to remove the magazine!") - return - ..() - -/obj/item/gun/ballistic/automatic/l6_saw/attackby(obj/item/A, mob/user, params) - if(!cover_open && istype(A, mag_type)) - to_chat(user, "[src]'s dust cover prevents a magazine from being fit.") - return - ..() - - - -// SNIPER // - -/obj/item/gun/ballistic/automatic/sniper_rifle - name = "sniper rifle" - desc = "" - icon_state = "sniper" - item_state = "sniper" - fire_sound = 'sound/blank.ogg' - fire_sound_volume = 90 - vary_fire_sound = FALSE - load_sound = 'sound/blank.ogg' - rack_sound = 'sound/blank.ogg' - suppressed_sound = 'sound/blank.ogg' - recoil = 2 - weapon_weight = WEAPON_HEAVY - mag_type = /obj/item/ammo_box/magazine/sniper_rounds - fire_delay = 40 - burst_size = 1 - w_class = WEIGHT_CLASS_NORMAL - zoomable = TRUE - zoom_amt = 10 //Long range, enough to see in front of you, but no tiles behind you. - zoom_out_amt = 13 - slot_flags = ITEM_SLOT_BACK - actions_types = list() - mag_display = TRUE - -/obj/item/gun/ballistic/automatic/sniper_rifle/syndicate - name = "syndicate sniper rifle" - desc = "" - can_suppress = TRUE - can_unsuppress = TRUE - pin = /obj/item/firing_pin/implant/pindicate - -// Old Semi-Auto Rifle // - -/obj/item/gun/ballistic/automatic/surplus - name = "Surplus Rifle" - desc = "" - icon_state = "surplus" - item_state = "moistnugget" - weapon_weight = WEAPON_HEAVY - mag_type = /obj/item/ammo_box/magazine/m10mm/rifle - fire_delay = 30 - burst_size = 1 - can_unsuppress = TRUE - can_suppress = TRUE - w_class = WEIGHT_CLASS_HUGE - slot_flags = ITEM_SLOT_BACK - actions_types = list() - mag_display = TRUE - -// Laser rifle (rechargeable magazine) // - -/obj/item/gun/ballistic/automatic/laser - name = "laser rifle" - desc = "" - icon_state = "oldrifle" - item_state = "arg" - mag_type = /obj/item/ammo_box/magazine/recharge - fire_delay = 2 - can_suppress = FALSE - burst_size = 0 - actions_types = list() - fire_sound = 'sound/blank.ogg' - casing_ejector = FALSE diff --git a/code/modules/projectiles/guns/ballistic/laser_gatling.dm b/code/modules/projectiles/guns/ballistic/laser_gatling.dm deleted file mode 100644 index 00a1be8dc8..0000000000 --- a/code/modules/projectiles/guns/ballistic/laser_gatling.dm +++ /dev/null @@ -1,147 +0,0 @@ - - -//The ammo/gun is stored in a back slot item -/obj/item/minigunpack - name = "backpack power source" - desc = "" - icon = 'icons/obj/guns/minigun.dmi' - icon_state = "holstered" - item_state = "backpack" - lefthand_file = 'icons/mob/inhands/equipment/backpack_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/backpack_righthand.dmi' - slot_flags = ITEM_SLOT_BACK - w_class = WEIGHT_CLASS_HUGE - var/obj/item/gun/ballistic/minigun/gun - var/armed = 0 //whether the gun is attached, 0 is attached, 1 is the gun is wielded. - var/overheat = 0 - var/overheat_max = 40 - var/heat_diffusion = 1 - -/obj/item/minigunpack/Initialize() - . = ..() - gun = new(src) - START_PROCESSING(SSobj, src) - -/obj/item/minigunpack/Destroy() - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/item/minigunpack/process() - overheat = max(0, overheat - heat_diffusion) - -//ATTACK HAND IGNORING PARENT RETURN VALUE -/obj/item/minigunpack/attack_hand(mob/living/carbon/user) - if(src.loc == user) - if(!armed) - if(user.get_item_by_slot(SLOT_BACK) == src) - armed = 1 - if(!user.put_in_hands(gun)) - armed = 0 - to_chat(user, "I need a free hand to hold the gun!") - return - update_icon() - user.update_inv_back() - else - to_chat(user, "I are already holding the gun!") - else - ..() - -/obj/item/minigunpack/attackby(obj/item/W, mob/user, params) - if(W == gun) //Don't need armed check, because if you have the gun assume its armed. - user.dropItemToGround(gun, TRUE) - else - ..() - -/obj/item/minigunpack/dropped(mob/user) - . = ..() - if(armed) - user.dropItemToGround(gun, TRUE) - -/obj/item/minigunpack/MouseDrop(atom/over_object) - . = ..() - if(armed) - return - if(iscarbon(usr)) - var/mob/M = usr - - if(!over_object) - return - - if(!M.incapacitated()) - - if(istype(over_object, /atom/movable/screen/inventory/hand)) - var/atom/movable/screen/inventory/hand/H = over_object - M.putItemFromInventoryInHandIfPossible(src, H.held_index) - - -/obj/item/minigunpack/update_icon() - if(armed) - icon_state = "notholstered" - else - icon_state = "holstered" - -/obj/item/minigunpack/proc/attach_gun(mob/user) - if(!gun) - gun = new(src) - gun.forceMove(src) - armed = 0 - if(user) - to_chat(user, "I attach the [gun.name] to the [name].") - else - src.visible_message("The [gun.name] snaps back onto the [name]!") - update_icon() - user.update_inv_back() - - -/obj/item/gun/ballistic/minigun - name = "laser gatling gun" - desc = "" - icon = 'icons/obj/guns/minigun.dmi' - icon_state = "minigun_spin" - item_state = "minigun" - flags_1 = CONDUCT_1 - slowdown = 1 - slot_flags = null - w_class = WEIGHT_CLASS_HUGE - custom_materials = null - burst_size = 3 - automatic = 0 - fire_delay = 1 - weapon_weight = WEAPON_HEAVY - fire_sound = 'sound/blank.ogg' - mag_type = /obj/item/ammo_box/magazine/internal/minigun - tac_reloads = FALSE - casing_ejector = FALSE - item_flags = NEEDS_PERMIT | SLOWS_WHILE_IN_HAND - var/obj/item/minigunpack/ammo_pack - -/obj/item/gun/ballistic/minigun/Initialize() - if(istype(loc, /obj/item/minigunpack)) //We should spawn inside an ammo pack so let's use that one. - ammo_pack = loc - else - return INITIALIZE_HINT_QDEL //No pack, no gun - - return ..() - -/obj/item/gun/ballistic/minigun/attack_self(mob/living/user) - return - -/obj/item/gun/ballistic/minigun/dropped(mob/user) - SHOULD_CALL_PARENT(FALSE) - if(ammo_pack) - ammo_pack.attach_gun(user) - else - qdel(src) - -/obj/item/gun/ballistic/minigun/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0) - if(ammo_pack) - if(ammo_pack.overheat < ammo_pack.overheat_max) - ammo_pack.overheat += burst_size - ..() - else - to_chat(user, "The gun's heat sensor locked the trigger to prevent lens damage!") - -/obj/item/gun/ballistic/minigun/afterattack(atom/target, mob/living/user, flag, params) - if(!ammo_pack || ammo_pack.loc != user) - to_chat(user, "I need the backpack power source to fire the gun!") - . = ..() diff --git a/code/modules/projectiles/guns/ballistic/launchers.dm b/code/modules/projectiles/guns/ballistic/launchers.dm index 10ccb695e5..88f43a77eb 100644 --- a/code/modules/projectiles/guns/ballistic/launchers.dm +++ b/code/modules/projectiles/guns/ballistic/launchers.dm @@ -6,99 +6,14 @@ name = "grenade launcher" icon_state = "dshotgun_sawn" item_state = "gun" - mag_type = /obj/item/ammo_box/magazine/internal/grenadelauncher fire_sound = 'sound/blank.ogg' w_class = WEIGHT_CLASS_NORMAL - pin = /obj/item/firing_pin/implant/pindicate bolt_type = BOLT_TYPE_NO_BOLT istrainable = TRUE // For the moment I'll allow these to be traineable until a proper way to level up bows and crossbows is coded. - Foxtrot var/damfactor = 1 // Multiplier for projectile damage. Used by bows and crossbows. -/obj/item/gun/ballistic/revolver/grenadelauncher/unrestricted - pin = /obj/item/firing_pin - /obj/item/gun/ballistic/revolver/grenadelauncher/attackby(obj/item/A, mob/user, params) ..() if(istype(A, /obj/item/ammo_box) || istype(A, /obj/item/ammo_casing)) chamber_round() -/obj/item/gun/ballistic/revolver/grenadelauncher/cyborg - desc = "" - name = "multi grenade launcher" - icon = 'icons/mecha/mecha_equipment.dmi' - icon_state = "mecha_grenadelnchr" - mag_type = /obj/item/ammo_box/magazine/internal/cylinder/grenademulti - pin = /obj/item/firing_pin - -/obj/item/gun/ballistic/revolver/grenadelauncher/cyborg/attack_self() - return - -/obj/item/gun/ballistic/automatic/gyropistol - name = "gyrojet pistol" - desc = "" - icon_state = "gyropistol" - fire_sound = 'sound/blank.ogg' - mag_type = /obj/item/ammo_box/magazine/m75 - burst_size = 1 - fire_delay = 0 - actions_types = list() - casing_ejector = FALSE - -/obj/item/gun/ballistic/rocketlauncher - name = "\improper PML-9" - desc = "" - icon_state = "rocketlauncher" - item_state = "rocketlauncher" - mag_type = /obj/item/ammo_box/magazine/internal/rocketlauncher - fire_sound = 'sound/blank.ogg' - w_class = WEIGHT_CLASS_BULKY - can_suppress = FALSE - pin = /obj/item/firing_pin/implant/pindicate - burst_size = 1 - fire_delay = 0 - casing_ejector = FALSE - weapon_weight = WEAPON_HEAVY - bolt_type = BOLT_TYPE_NO_BOLT - internal_magazine = TRUE - cartridge_wording = "rocket" - empty_indicator = TRUE - tac_reloads = FALSE - -/obj/item/gun/ballistic/rocketlauncher/unrestricted - pin = /obj/item/firing_pin - -/obj/item/gun/ballistic/rocketlauncher/afterattack() - . = ..() - magazine.get_round(FALSE) //Hack to clear the mag after it's fired - -/obj/item/gun/ballistic/rocketlauncher/attack_self_tk(mob/user) - return //too difficult to remove the rocket with TK - -/obj/item/gun/ballistic/rocketlauncher/suicide_act(mob/living/user) - user.visible_message("[user] aims [src] at the ground! It looks like [user.p_theyre()] performing a sick rocket jump!", \ - "I aim [src] at the ground to perform a bisnasty rocket jump...") - if(can_shoot()) - user.notransform = TRUE - playsound(src, 'sound/blank.ogg', 80, TRUE, 5) - animate(user, pixel_z = 300, time = 30, easing = LINEAR_EASING) - sleep(70) - animate(user, pixel_z = 0, time = 5, easing = LINEAR_EASING) - sleep(5) - user.notransform = FALSE - process_fire(user, user, TRUE) - if(!QDELETED(user)) //if they weren't gibbed by the explosion, take care of them for good. - user.gib() - return MANUAL_SUICIDE - else - sleep(5) - shoot_with_empty_chamber(user) - sleep(20) - user.visible_message("[user] looks about the room realizing [user.p_theyre()] still there. [user.p_they(TRUE)] proceed to shove [src] down their throat and choke [user.p_them()]self with it!", \ - "I look around after realizing you're still here, then proceed to choke myself to death with [src]!") - sleep(20) - return OXYLOSS - - - - - diff --git a/code/modules/projectiles/guns/ballistic/pistol.dm b/code/modules/projectiles/guns/ballistic/pistol.dm deleted file mode 100644 index 5be741690c..0000000000 --- a/code/modules/projectiles/guns/ballistic/pistol.dm +++ /dev/null @@ -1,98 +0,0 @@ -/obj/item/gun/ballistic/automatic/pistol - name = "stechkin pistol" - desc = "" - icon_state = "pistol" - w_class = WEIGHT_CLASS_SMALL - mag_type = /obj/item/ammo_box/magazine/m10mm - can_suppress = TRUE - burst_size = 1 - fire_delay = 0 - actions_types = list() - bolt_type = BOLT_TYPE_LOCKING - fire_sound = 'sound/blank.ogg' - dry_fire_sound = 'sound/blank.ogg' - suppressed_sound = 'sound/blank.ogg' - load_sound = 'sound/blank.ogg' - load_empty_sound = 'sound/blank.ogg' - eject_sound = 'sound/blank.ogg' - eject_empty_sound = 'sound/blank.ogg' - vary_fire_sound = FALSE - rack_sound = 'sound/blank.ogg' - lock_back_sound = 'sound/blank.ogg' - bolt_drop_sound = 'sound/blank.ogg' - fire_sound_volume = 90 - bolt_wording = "slide" - -/obj/item/gun/ballistic/automatic/pistol/no_mag - spawnwithmagazine = FALSE - -/obj/item/gun/ballistic/automatic/pistol/suppressed/Initialize(mapload) - . = ..() - var/obj/item/suppressor/S = new(src) - install_suppressor(S) - -/obj/item/gun/ballistic/automatic/pistol/m1911 - name = "\improper M1911" - desc = "" - icon_state = "m1911" - w_class = WEIGHT_CLASS_NORMAL - mag_type = /obj/item/ammo_box/magazine/m45 - can_suppress = FALSE - fire_sound = 'sound/blank.ogg' - rack_sound = 'sound/blank.ogg' - lock_back_sound = 'sound/blank.ogg' - bolt_drop_sound = 'sound/blank.ogg' - -/obj/item/gun/ballistic/automatic/pistol/m1911/no_mag - spawnwithmagazine = FALSE - -/obj/item/gun/ballistic/automatic/pistol/deagle - name = "\improper Desert Eagle" - desc = "" - icon_state = "deagle" - force = 14 - mag_type = /obj/item/ammo_box/magazine/m50 - can_suppress = FALSE - mag_display = TRUE - fire_sound = 'sound/blank.ogg' - rack_sound = 'sound/blank.ogg' - lock_back_sound = 'sound/blank.ogg' - bolt_drop_sound = 'sound/blank.ogg' - -/obj/item/gun/ballistic/automatic/pistol/deagle/gold - desc = "" - icon_state = "deagleg" - item_state = "deagleg" - -/obj/item/gun/ballistic/automatic/pistol/deagle/camo - desc = "" - icon_state = "deaglecamo" - item_state = "deagleg" - -/obj/item/gun/ballistic/automatic/pistol/APS - name = "stechkin APS pistol" - desc = "" - icon_state = "aps" - w_class = WEIGHT_CLASS_SMALL - mag_type = /obj/item/ammo_box/magazine/pistolm9mm - can_suppress = FALSE - burst_size = 3 - fire_delay = 2 - actions_types = list(/datum/action/item_action/toggle_firemode) - -/obj/item/gun/ballistic/automatic/pistol/stickman - name = "flat gun" - desc = "" - icon_state = "flatgun" - -/obj/item/gun/ballistic/automatic/pistol/stickman/pickup(mob/living/user) - SHOULD_CALL_PARENT(FALSE) - to_chat(user, "As you try to pick up [src], it slips out of your grip..") - if(prob(50)) - to_chat(user, "..and vanishes from your vision! Where the hell did it go?") - qdel(src) - user.update_icons() - else - to_chat(user, "..and falls into view. Whew, that was a close one.") - user.dropItemToGround(src) - diff --git a/code/modules/projectiles/guns/ballistic/revolver.dm b/code/modules/projectiles/guns/ballistic/revolver.dm index a5f6502f89..075f5af042 100644 --- a/code/modules/projectiles/guns/ballistic/revolver.dm +++ b/code/modules/projectiles/guns/ballistic/revolver.dm @@ -2,7 +2,6 @@ name = "\improper .357 revolver" desc = "" //usually used by syndicates icon_state = "revolver" - mag_type = /obj/item/ammo_box/magazine/internal/cylinder fire_sound = 'sound/blank.ogg' load_sound = 'sound/blank.ogg' eject_sound = 'sound/blank.ogg' @@ -26,37 +25,6 @@ ..() chamber_round(TRUE) -/obj/item/gun/ballistic/revolver/AltClick(mob/user) - ..() - spin() - -/obj/item/gun/ballistic/revolver/verb/spin() - set name = "Spin Chamber" - set hidden = 1 - set desc = "" - - var/mob/M = usr - - if(M.stat || !in_range(M,src)) - return - - if (recent_spin > world.time) - return - recent_spin = world.time + spin_delay - - if(do_spin()) - playsound(usr, "revolver_spin", 30, FALSE) - usr.visible_message("[usr] spins [src]'s chamber.", "I spin [src]'s chamber.") - else - verbs -= /obj/item/gun/ballistic/revolver/verb/spin - -/obj/item/gun/ballistic/revolver/proc/do_spin() - var/obj/item/ammo_box/magazine/internal/cylinder/C = magazine - . = istype(C) - if(.) - C.spin() - chamber_round(FALSE) - /obj/item/gun/ballistic/revolver/get_ammo(countchambered = FALSE, countempties = TRUE) var/boolets = 0 //mature var names for mature people if (chambered && countchambered) @@ -64,197 +32,3 @@ if (magazine) boolets += magazine.ammo_count(countempties) return boolets - -/obj/item/gun/ballistic/revolver/examine(mob/user) - . = ..() -// var/live_ammo = get_ammo(FALSE, FALSE) -// . += "[live_ammo ? live_ammo : "None"] of those are live rounds." -// if (current_skin) -// . += "It can be spun with alt+click" - -/obj/item/gun/ballistic/revolver/detective - name = "\improper Colt Detective Special" - desc = "" - fire_sound = 'sound/blank.ogg' - icon_state = "detective" - mag_type = /obj/item/ammo_box/magazine/internal/cylinder/rev38 - obj_flags = UNIQUE_RENAME - unique_reskin = list("Default" = "detective", - "Fitz Special" = "detective_fitz", - "Police Positive Special" = "detective_police", - "Blued Steel" = "detective_blued", - "Stainless Steel" = "detective_stainless", - "Gold Trim" = "detective_gold", - "Leopard Spots" = "detective_leopard", - "The Peacemaker" = "detective_peacemaker", - "Black Panther" = "detective_panther" - ) - -/obj/item/gun/ballistic/revolver/detective/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0) - if(magazine.caliber != initial(magazine.caliber)) - if(prob(70 - (magazine.ammo_count() * 10))) //minimum probability of 10, maximum of 60 - playsound(user, fire_sound, fire_sound_volume, vary_fire_sound) - to_chat(user, "[src] blows up in your face!") - user.take_bodypart_damage(0,20) - user.dropItemToGround(src) - return 0 - ..() - -/obj/item/gun/ballistic/revolver/detective/screwdriver_act(mob/living/user, obj/item/I) - if(..()) - return TRUE - if(magazine.caliber == "38") - to_chat(user, "I begin to reinforce the barrel of [src]...") - if(magazine.ammo_count()) - afterattack(user, user) //you know the drill - user.visible_message("[src] goes off!", "[src] goes off in your face!") - return TRUE - if(I.use_tool(src, user, 30)) - if(magazine.ammo_count()) - to_chat(user, "I can't modify it!") - return TRUE - magazine.caliber = "357" - fire_sound = 'sound/blank.ogg' - desc = "" - to_chat(user, "I reinforce the barrel of [src]. Now it will fire .357 rounds.") - else - to_chat(user, "I begin to revert the modifications to [src]...") - if(magazine.ammo_count()) - afterattack(user, user) //and again - user.visible_message("[src] goes off!", "[src] goes off in your face!") - return TRUE - if(I.use_tool(src, user, 30)) - if(magazine.ammo_count()) - to_chat(user, "I can't modify it!") - return - magazine.caliber = "38" - fire_sound = 'sound/blank.ogg' - desc = initial(desc) - to_chat(user, "I remove the modifications on [src]. Now it will fire .38 rounds.") - return TRUE - - -/obj/item/gun/ballistic/revolver/mateba - name = "\improper Unica 6 auto-revolver" - desc = "" - icon_state = "mateba" - -/obj/item/gun/ballistic/revolver/golden - name = "\improper Golden revolver" - desc = "" - icon_state = "goldrevolver" - fire_sound = 'sound/blank.ogg' - recoil = 8 - pin = /obj/item/firing_pin - -/obj/item/gun/ballistic/revolver/nagant - name = "\improper Nagant revolver" - desc = "" - icon_state = "nagant" - can_suppress = TRUE - - mag_type = /obj/item/ammo_box/magazine/internal/cylinder/rev762 - - -// A gun to play Russian Roulette! -// You can spin the chamber to randomize the position of the bullet. - -/obj/item/gun/ballistic/revolver/russian - name = "\improper Russian revolver" - desc = "" - icon_state = "russianrevolver" - mag_type = /obj/item/ammo_box/magazine/internal/cylinder/rus357 - var/spun = FALSE - -/obj/item/gun/ballistic/revolver/russian/do_spin() - . = ..() - if(.) - spun = TRUE - -/obj/item/gun/ballistic/revolver/russian/attackby(obj/item/A, mob/user, params) - ..() - if(get_ammo() > 0) - spin() - update_icon() - A.update_icon() - return - -/obj/item/gun/ballistic/revolver/russian/attack_self(mob/user) - if(!spun) - spin() - spun = TRUE - return - ..() - -/obj/item/gun/ballistic/revolver/russian/afterattack(atom/target, mob/living/user, flag, params) - . = ..(null, user, flag, params) - - if(flag) - if(!(target in user.contents) && ismob(target)) - if(user.used_intent.type == INTENT_HARM) // Flogging action - return - - if(isliving(user)) - if(!can_trigger_gun(user)) - return - if(target != user) - if(ismob(target)) - to_chat(user, "A mechanism prevents you from shooting anyone but yourself!") - return - - if(ishuman(user)) - var/mob/living/carbon/human/H = user - if(!spun) - to_chat(user, "I need to spin \the [src]'s chamber first!") - return - - spun = FALSE - - if(chambered) - var/obj/item/ammo_casing/AC = chambered - if(AC.fire_casing(user, user)) - playsound(user, fire_sound, fire_sound_volume, vary_fire_sound) - var/zone = check_zone(user.zone_selected) - var/obj/item/bodypart/affecting = H.get_bodypart(zone) - if(zone == BODY_ZONE_HEAD || zone == BODY_ZONE_PRECISE_R_EYE || zone == BODY_ZONE_PRECISE_MOUTH) - shoot_self(user, affecting) - else - user.visible_message("[user.name] cowardly fires [src] at [user.p_their()] [affecting.name]!", "I cowardly fire [src] at your [affecting.name]!", "I hear a gunshot!") - chambered = null - return - - user.visible_message("*click*") - playsound(src, dry_fire_sound, 30, TRUE) - -/obj/item/gun/ballistic/revolver/russian/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0) - add_fingerprint(user) - playsound(src, dry_fire_sound, 30, TRUE) - user.visible_message("[user.name] tries to fire \the [src] at the same time, but only succeeds at looking like an idiot.", "\The [src]'s anti-combat mechanism prevents you from firing it at the same time!") - -/obj/item/gun/ballistic/revolver/russian/proc/shoot_self(mob/living/carbon/human/user, affecting = BODY_ZONE_HEAD) - user.apply_damage(300, BRUTE, affecting) - user.visible_message("[user.name] fires [src] at [user.p_their()] head!", "I fire [src] at your head!", "I hear a gunshot!") - -/obj/item/gun/ballistic/revolver/russian/soul - name = "cursed Russian revolver" - desc = "" - -/obj/item/gun/ballistic/revolver/russian/soul/shoot_self(mob/living/user) - ..() - var/obj/item/soulstone/anybody/revolver/SS = new /obj/item/soulstone/anybody/revolver(get_turf(src)) - if(!SS.transfer_soul("FORCE", user)) //Something went wrong - qdel(SS) - return - user.visible_message("[user.name]'s soul is captured by \the [src]!", "You've lost the gamble! Your soul is forfeit!") - -/obj/item/gun/ballistic/revolver/reverse //Fires directly at its user... unless the user is a clown, of course. - clumsy_check = 0 - -/obj/item/gun/ballistic/revolver/reverse/can_trigger_gun(mob/living/user) - if((HAS_TRAIT(user, TRAIT_CLUMSY)) || (user.mind && user.mind.assigned_role == "Clown")) - return ..() - if(process_fire(user, user, FALSE, null, BODY_ZONE_HEAD)) - user.visible_message("[user] somehow manages to shoot [user.p_them()]self in the face!", "I somehow shoot myself in the face! How the hell?!") - user.emote("scream") - user.drop_all_held_items() - user.Paralyze(80) diff --git a/code/modules/projectiles/guns/ballistic/rifle.dm b/code/modules/projectiles/guns/ballistic/rifle.dm deleted file mode 100644 index f4f72c1a5d..0000000000 --- a/code/modules/projectiles/guns/ballistic/rifle.dm +++ /dev/null @@ -1,123 +0,0 @@ -/obj/item/gun/ballistic/rifle - name = "Bolt Rifle" - desc = "" - icon_state = "moistnugget" - item_state = "moistnugget" - mag_type = /obj/item/ammo_box/magazine/internal/boltaction - bolt_wording = "bolt" - bolt_type = BOLT_TYPE_STANDARD - semi_auto = FALSE - internal_magazine = TRUE - fire_sound = 'sound/blank.ogg' - fire_sound_volume = 90 - vary_fire_sound = FALSE - rack_sound = 'sound/blank.ogg' - bolt_drop_sound = 'sound/blank.ogg' - tac_reloads = FALSE - -/obj/item/gun/ballistic/rifle/update_icon() - ..() - add_overlay("[icon_state]_bolt[bolt_locked ? "_locked" : ""]") - -/obj/item/gun/ballistic/rifle/rack(mob/user = null) - if (bolt_locked == FALSE) - to_chat(user, "I open the bolt of \the [src].") - playsound(src, rack_sound, rack_sound_volume, rack_sound_vary) - process_chamber(FALSE, FALSE, FALSE) - bolt_locked = TRUE - update_icon() - return - drop_bolt(user) - -/obj/item/gun/ballistic/rifle/can_shoot() - if (bolt_locked) - return FALSE - return ..() - -/obj/item/gun/ballistic/rifle/attackby(obj/item/A, mob/user, params) - if (!bolt_locked) - to_chat(user, "The bolt is closed!") - return - return ..() - -/obj/item/gun/ballistic/rifle/examine(mob/user) - . = ..() - . += "The bolt is [bolt_locked ? "open" : "closed"]." - -/////////////////////// -// BOLT ACTION RIFLE // -/////////////////////// - -/obj/item/gun/ballistic/rifle/boltaction - name = "\improper Mosin Nagant" - desc = "" - sawn_desc = "" - w_class = WEIGHT_CLASS_BULKY - weapon_weight = WEAPON_HEAVY - icon_state = "moistnugget" - item_state = "moistnugget" - slot_flags = 0 //no ITEM_SLOT_BACK sprite, alas - mag_type = /obj/item/ammo_box/magazine/internal/boltaction - can_bayonet = TRUE - knife_x_offset = 27 - knife_y_offset = 13 - can_be_sawn_off = TRUE - -/obj/item/gun/ballistic/rifle/boltaction/sawoff(mob/user) - . = ..() - if(.) - spread = 36 - can_bayonet = FALSE - -/obj/item/gun/ballistic/rifle/boltaction/blow_up(mob/user) - . = 0 - if(chambered && chambered.BB) - process_fire(user, user, FALSE) - . = 1 - -/obj/item/gun/ballistic/rifle/boltaction/enchanted - name = "enchanted bolt action rifle" - desc = "" - var/guns_left = 30 - mag_type = /obj/item/ammo_box/magazine/internal/boltaction/enchanted - can_be_sawn_off = FALSE - -/obj/item/gun/ballistic/rifle/boltaction/enchanted/arcane_barrage - name = "arcane barrage" - desc = "" - fire_sound = 'sound/blank.ogg' - pin = /obj/item/firing_pin/magic - icon_state = "arcane_barrage" - item_state = "arcane_barrage" - can_bayonet = FALSE - item_flags = NEEDS_PERMIT | DROPDEL | ABSTRACT | NOBLUDGEON - flags_1 = NONE - trigger_guard = TRIGGER_GUARD_ALLOW_ALL - - mag_type = /obj/item/ammo_box/magazine/internal/boltaction/enchanted/arcane_barrage - -/obj/item/gun/ballistic/rifle/boltaction/enchanted/dropped() - . = ..() - guns_left = 0 - -/obj/item/gun/ballistic/rifle/boltaction/enchanted/proc/discard_gun(mob/living/user) - user.throw_item(pick(oview(7,get_turf(user)))) - -/obj/item/gun/ballistic/rifle/boltaction/enchanted/arcane_barrage/discard_gun(mob/living/user) - qdel(src) - -/obj/item/gun/ballistic/rifle/boltaction/enchanted/attack_self() - return - -/obj/item/gun/ballistic/rifle/boltaction/enchanted/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0) - . = ..() - if(!.) - return - if(guns_left) - var/obj/item/gun/ballistic/rifle/boltaction/enchanted/gun = new type - gun.guns_left = guns_left - 1 - discard_gun(user) - user.swap_hand() - user.put_in_hands(gun) - else - user.dropItemToGround(src, TRUE) diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm deleted file mode 100644 index a5ac5fa52e..0000000000 --- a/code/modules/projectiles/guns/ballistic/shotgun.dm +++ /dev/null @@ -1,216 +0,0 @@ -/obj/item/gun/ballistic/shotgun - name = "shotgun" - desc = "" - icon_state = "shotgun" - lefthand_file = 'icons/mob/inhands/weapons/64x_guns_left.dmi' - righthand_file = 'icons/mob/inhands/weapons/64x_guns_right.dmi' - item_state = "shotgun" - inhand_x_dimension = 64 - inhand_y_dimension = 64 - fire_sound = 'sound/blank.ogg' - vary_fire_sound = FALSE - fire_sound_volume = 90 - rack_sound = "sound/weapons/gun/shotgun/rack.ogg" - load_sound = "sound/weapons/gun/shotgun/insert_shell.ogg" - w_class = WEIGHT_CLASS_BULKY - force = 10 - flags_1 = CONDUCT_1 - slot_flags = ITEM_SLOT_BACK - mag_type = /obj/item/ammo_box/magazine/internal/shot - weapon_weight = WEAPON_MEDIUM - semi_auto = FALSE - internal_magazine = TRUE - casing_ejector = FALSE - bolt_wording = "pump" - cartridge_wording = "shell" - tac_reloads = FALSE - weapon_weight = WEAPON_HEAVY - - pb_knockback = 2 - -/obj/item/gun/ballistic/shotgun/blow_up(mob/user) - . = 0 - if(chambered && chambered.BB) - process_fire(user, user, FALSE) - . = 1 - -/obj/item/gun/ballistic/shotgun/lethal - mag_type = /obj/item/ammo_box/magazine/internal/shot/lethal - -// RIOT SHOTGUN // - -/obj/item/gun/ballistic/shotgun/riot //for spawn in the armory - name = "riot shotgun" - desc = "" - icon_state = "riotshotgun" - item_state = "shotgun" - fire_delay = 7 - mag_type = /obj/item/ammo_box/magazine/internal/shot/riot - sawn_desc = "" - can_be_sawn_off = TRUE - -// Automatic Shotguns// - -/obj/item/gun/ballistic/shotgun/automatic/shoot_live_shot(mob/living/user as mob|obj) - ..() - src.rack() - -/obj/item/gun/ballistic/shotgun/automatic/combat - name = "combat shotgun" - desc = "" - icon_state = "cshotgun" - item_state = "shotgun_combat" - fire_delay = 5 - mag_type = /obj/item/ammo_box/magazine/internal/shot/com - w_class = WEIGHT_CLASS_HUGE - -/obj/item/gun/ballistic/shotgun/automatic/combat/compact - name = "compact combat shotgun" - desc = "" - icon_state = "cshotgunc" - mag_type = /obj/item/ammo_box/magazine/internal/shot/com/compact - w_class = WEIGHT_CLASS_BULKY - -//Dual Feed Shotgun - -/obj/item/gun/ballistic/shotgun/automatic/dual_tube - name = "cycler shotgun" - desc = "" - icon_state = "cycler" - mag_type = /obj/item/ammo_box/magazine/internal/shot/tube - w_class = WEIGHT_CLASS_HUGE - var/toggled = FALSE - var/obj/item/ammo_box/magazine/internal/shot/alternate_magazine - semi_auto = TRUE - -/obj/item/gun/ballistic/shotgun/automatic/dual_tube/examine(mob/user) - . = ..() - . += "Alt-click to pump it." - -/obj/item/gun/ballistic/shotgun/automatic/dual_tube/Initialize() - . = ..() - if (!alternate_magazine) - alternate_magazine = new mag_type(src) - -/obj/item/gun/ballistic/shotgun/automatic/dual_tube/attack_self(mob/living/user) - if(!chambered && magazine.contents.len) - rack() - else - toggle_tube(user) - -/obj/item/gun/ballistic/shotgun/automatic/dual_tube/proc/toggle_tube(mob/living/user) - var/current_mag = magazine - var/alt_mag = alternate_magazine - magazine = alt_mag - alternate_magazine = current_mag - toggled = !toggled - if(toggled) - to_chat(user, "I switch to tube B.") - else - to_chat(user, "I switch to tube A.") - -/obj/item/gun/ballistic/shotgun/automatic/dual_tube/AltClick(mob/living/user) - if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) - return - rack() - -// Bulldog shotgun // - -/obj/item/gun/ballistic/shotgun/bulldog - name = "\improper Bulldog Shotgun" - desc = "" - icon_state = "bulldog" - item_state = "bulldog" - lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi' - inhand_x_dimension = 32 - inhand_y_dimension = 32 - w_class = WEIGHT_CLASS_NORMAL - weapon_weight = WEAPON_MEDIUM - mag_type = /obj/item/ammo_box/magazine/m12g - can_suppress = FALSE - burst_size = 1 - fire_delay = 0 - pin = /obj/item/firing_pin/implant/pindicate - fire_sound = 'sound/blank.ogg' - actions_types = list() - mag_display = TRUE - empty_indicator = TRUE - empty_alarm = TRUE - special_mags = TRUE - semi_auto = TRUE - internal_magazine = FALSE - tac_reloads = TRUE - - -/obj/item/gun/ballistic/shotgun/bulldog/unrestricted - pin = /obj/item/firing_pin -///////////////////////////// -// DOUBLE BARRELED SHOTGUN // -///////////////////////////// - -/obj/item/gun/ballistic/shotgun/doublebarrel - name = "double-barreled shotgun" - desc = "" - icon_state = "dshotgun" - item_state = "shotgun_db" - w_class = WEIGHT_CLASS_BULKY - weapon_weight = WEAPON_MEDIUM - force = 10 - flags_1 = CONDUCT_1 - slot_flags = ITEM_SLOT_BACK - mag_type = /obj/item/ammo_box/magazine/internal/shot/dual - sawn_desc = "" - obj_flags = UNIQUE_RENAME - rack_sound_volume = 0 - unique_reskin = list("Default" = "dshotgun", - "Dark Red Finish" = "dshotgun_d", - "Ash" = "dshotgun_f", - "Faded Grey" = "dshotgun_g", - "Maple" = "dshotgun_l", - "Rosewood" = "dshotgun_p" - ) - semi_auto = TRUE - bolt_type = BOLT_TYPE_NO_BOLT - can_be_sawn_off = TRUE - pb_knockback = 3 // it's a super shotgun! - -/obj/item/gun/ballistic/shotgun/doublebarrel/AltClick(mob/user) - . = ..() - if(unique_reskin && !current_skin && user.canUseTopic(src, BE_CLOSE, NO_DEXTERITY)) - reskin_obj(user) - -/obj/item/gun/ballistic/shotgun/doublebarrel/sawoff(mob/user) - . = ..() - if(.) - weapon_weight = WEAPON_MEDIUM - -// IMPROVISED SHOTGUN // - -/obj/item/gun/ballistic/shotgun/doublebarrel/improvised - name = "improvised shotgun" - desc = "" - icon_state = "ishotgun" - item_state = "ishotgun" - w_class = WEIGHT_CLASS_BULKY - force = 10 - slot_flags = null - mag_type = /obj/item/ammo_box/magazine/internal/shot/improvised - sawn_desc = "" - unique_reskin = null - var/slung = FALSE - -/obj/item/gun/ballistic/shotgun/doublebarrel/improvised/update_icon() - ..() - if(slung) - add_overlay("ishotgunsling") - item_state = "ishotgunsling" - -/obj/item/gun/ballistic/shotgun/doublebarrel/improvised/sawn - name = "sawn-off improvised shotgun" - desc = "" - icon_state = "ishotgun_sawn" - item_state = "ishotgun_sawn" - w_class = WEIGHT_CLASS_NORMAL - sawn_off = TRUE - slot_flags = ITEM_SLOT_BELT diff --git a/code/modules/projectiles/guns/ballistic/toy.dm b/code/modules/projectiles/guns/ballistic/toy.dm deleted file mode 100644 index a48d4bdfc9..0000000000 --- a/code/modules/projectiles/guns/ballistic/toy.dm +++ /dev/null @@ -1,123 +0,0 @@ -/obj/item/gun/ballistic/automatic/toy - name = "foam force SMG" - desc = "" - icon_state = "saber" - item_state = "gun" - mag_type = /obj/item/ammo_box/magazine/toy/smg - fire_sound = 'sound/blank.ogg' - force = 0 - throwforce = 0 - burst_size = 3 - can_suppress = TRUE - clumsy_check = 0 - item_flags = NONE - casing_ejector = FALSE - -/obj/item/gun/ballistic/automatic/toy/update_icon() - . = ..() - add_overlay("[icon_state]_toy") - -/obj/item/gun/ballistic/automatic/toy/unrestricted - pin = /obj/item/firing_pin - -/obj/item/gun/ballistic/automatic/toy/pistol - name = "foam force pistol" - desc = "" - icon_state = "pistol" - bolt_type = BOLT_TYPE_LOCKING - w_class = WEIGHT_CLASS_SMALL - mag_type = /obj/item/ammo_box/magazine/toy/pistol - fire_sound = 'sound/blank.ogg' - burst_size = 1 - fire_delay = 0 - actions_types = list() - -/obj/item/gun/ballistic/automatic/toy/pistol/riot - mag_type = /obj/item/ammo_box/magazine/toy/pistol/riot - -/obj/item/gun/ballistic/automatic/toy/pistol/riot/Initialize() - magazine = new /obj/item/ammo_box/magazine/toy/pistol/riot(src) - return ..() - -/obj/item/gun/ballistic/automatic/toy/pistol/unrestricted - pin = /obj/item/firing_pin - -/obj/item/gun/ballistic/automatic/toy/pistol/riot/unrestricted - pin = /obj/item/firing_pin - -/obj/item/gun/ballistic/shotgun/toy - name = "foam force shotgun" - desc = "" - force = 0 - throwforce = 0 - mag_type = /obj/item/ammo_box/magazine/internal/shot/toy - fire_sound = 'sound/blank.ogg' - clumsy_check = FALSE - item_flags = NONE - casing_ejector = FALSE - can_suppress = FALSE - pb_knockback = 0 - -/obj/item/gun/ballistic/shotgun/toy/update_icon() - . = ..() - add_overlay("[icon_state]_toy") - -/obj/item/gun/ballistic/shotgun/toy/process_chamber(empty_chamber = 0) - ..() - if(chambered && !chambered.BB) - qdel(chambered) - -/obj/item/gun/ballistic/shotgun/toy/unrestricted - pin = /obj/item/firing_pin - -/obj/item/gun/ballistic/shotgun/toy/crossbow - name = "foam force crossbow" - desc = "" - icon = 'icons/obj/toy.dmi' - icon_state = "foamcrossbow" - item_state = "crossbow" - mag_type = /obj/item/ammo_box/magazine/internal/shot/toy/crossbow - fire_sound = 'sound/blank.ogg' - slot_flags = ITEM_SLOT_BELT - w_class = WEIGHT_CLASS_SMALL - -/obj/item/gun/ballistic/automatic/c20r/toy //This is the syndicate variant with syndicate firing pin and riot darts. - name = "donksoft SMG" - desc = "" - can_suppress = TRUE - item_flags = NONE - mag_type = /obj/item/ammo_box/magazine/toy/smgm45/riot - casing_ejector = FALSE - clumsy_check = FALSE - -/obj/item/gun/ballistic/automatic/c20r/toy/unrestricted //Use this for actual toys - pin = /obj/item/firing_pin - mag_type = /obj/item/ammo_box/magazine/toy/smgm45 - -/obj/item/gun/ballistic/automatic/c20r/toy/unrestricted/riot - mag_type = /obj/item/ammo_box/magazine/toy/smgm45/riot - -/obj/item/gun/ballistic/automatic/c20r/toy/update_icon() - . = ..() - add_overlay("[icon_state]_toy") - -/obj/item/gun/ballistic/automatic/l6_saw/toy //This is the syndicate variant with syndicate firing pin and riot darts. - name = "donksoft LMG" - desc = "" - fire_sound = 'sound/blank.ogg' - can_suppress = FALSE - item_flags = NONE - mag_type = /obj/item/ammo_box/magazine/toy/m762/riot - casing_ejector = FALSE - clumsy_check = FALSE - -/obj/item/gun/ballistic/automatic/l6_saw/toy/unrestricted //Use this for actual toys - pin = /obj/item/firing_pin - mag_type = /obj/item/ammo_box/magazine/toy/m762 - -/obj/item/gun/ballistic/automatic/l6_saw/toy/unrestricted/riot - mag_type = /obj/item/ammo_box/magazine/toy/m762/riot - -/obj/item/gun/ballistic/automatic/l6_saw/toy/update_icon() - . = ..() - add_overlay("[icon_state]_toy") diff --git a/code/modules/projectiles/guns/magic.dm b/code/modules/projectiles/guns/magic.dm deleted file mode 100644 index bdf1047f15..0000000000 --- a/code/modules/projectiles/guns/magic.dm +++ /dev/null @@ -1,90 +0,0 @@ -/obj/item/gun/magic - name = "staff of nothing" - desc = "" - icon = 'icons/obj/guns/magic.dmi' - icon_state = "staffofnothing" - item_state = "staff" - lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' //not really a gun and some toys use these inhands - righthand_file = 'icons/mob/inhands/items_righthand.dmi' - fire_sound = 'sound/blank.ogg' - flags_1 = CONDUCT_1 - w_class = WEIGHT_CLASS_HUGE - var/checks_antimagic = TRUE - var/max_charges = 6 - var/charges = 0 - var/recharge_rate = 4 - var/charge_tick = 0 - var/can_charge = TRUE - var/ammo_type - var/no_den_usage - clumsy_check = 0 - trigger_guard = TRIGGER_GUARD_ALLOW_ALL // Has no trigger at all, uses magic instead - pin = /obj/item/firing_pin/magic - -/obj/item/gun/magic/process_fire(atom/target, mob/living/user, message, params, zone_override, bonus_spread) - if(no_den_usage) - var/area/A = get_area(user) - if(istype(A, /area/wizard_station)) - add_fingerprint(user) - to_chat(user, "I know better than to violate the security of The Den, best wait until you leave to use [src].") - return - else - no_den_usage = 0 - if(checks_antimagic && user.anti_magic_check(TRUE, FALSE, FALSE, 0, TRUE)) - add_fingerprint(user) - to_chat(user, "Something is interfering with [src].") - return - . = ..() - -/obj/item/gun/magic/can_shoot() - return charges - -/obj/item/gun/magic/recharge_newshot() - if (charges && chambered && !chambered.BB) - chambered.newshot() - -/obj/item/gun/magic/process_chamber() - if(chambered && !chambered.BB) //if BB is null, i.e the shot has been fired... - charges--//... drain a charge - recharge_newshot() - -/obj/item/gun/magic/Initialize() - . = ..() - charges = max_charges - chambered = new ammo_type(src) - if(can_charge) - START_PROCESSING(SSobj, src) - - -/obj/item/gun/magic/Destroy() - if(can_charge) - STOP_PROCESSING(SSobj, src) - return ..() - - -/obj/item/gun/magic/process() - charge_tick++ - if(charge_tick < recharge_rate || charges >= max_charges) - return 0 - charge_tick = 0 - charges++ - if(charges == 1) - recharge_newshot() - return 1 - -/obj/item/gun/magic/update_icon() - return - -/obj/item/gun/magic/shoot_with_empty_chamber(mob/living/user as mob|obj) - to_chat(user, "The [name] whizzles quietly.") - -/obj/item/gun/magic/suicide_act(mob/user) - user.visible_message("[user] is twisting [src] above [user.p_their()] head, releasing a magical blast! It looks like [user.p_theyre()] trying to commit suicide!") - playsound(loc, fire_sound, 50, TRUE, -1) - return (FIRELOSS) - -/obj/item/gun/magic/vv_edit_var(var_name, var_value) - . = ..() - switch (var_name) - if ("charges") - recharge_newshot() diff --git a/code/modules/projectiles/guns/magic/staff.dm b/code/modules/projectiles/guns/magic/staff.dm deleted file mode 100644 index 7736137773..0000000000 --- a/code/modules/projectiles/guns/magic/staff.dm +++ /dev/null @@ -1,123 +0,0 @@ -/obj/item/gun/magic/staff - slot_flags = ITEM_SLOT_BACK - lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi' - item_flags = NEEDS_PERMIT | NO_MAT_REDEMPTION - -/obj/item/gun/magic/staff/change - name = "staff of change" - desc = "" - fire_sound = 'sound/blank.ogg' - ammo_type = /obj/item/ammo_casing/magic/change - icon_state = "staffofchange" - item_state = "staffofchange" - -/obj/item/gun/magic/staff/healing - name = "staff of healing" - desc = "" - fire_sound = 'sound/blank.ogg' - ammo_type = /obj/item/ammo_casing/magic/heal - icon_state = "staffofhealing" - item_state = "staffofhealing" - -/obj/item/gun/magic/staff/healing/handle_suicide() //Stops people trying to commit suicide to heal themselves - return - -/obj/item/gun/magic/staff/chaos - name = "staff of chaos" - desc = "" - fire_sound = 'sound/blank.ogg' - ammo_type = /obj/item/ammo_casing/magic/chaos - icon_state = "staffofchaos" - item_state = "staffofchaos" - max_charges = 10 - recharge_rate = 2 - no_den_usage = 1 - var/allowed_projectile_types = list(/obj/projectile/magic/change, /obj/projectile/magic/resurrection, - /obj/projectile/magic/death, /obj/projectile/magic/teleport, /obj/projectile/magic/aoe/fireball, - /obj/projectile/magic/spellblade, /obj/projectile/magic/arcane_barrage, /obj/projectile/magic/locker, /obj/projectile/magic/flying, - /obj/projectile/magic/bounty, /obj/projectile/magic/antimagic, /obj/projectile/magic/fetch, /obj/projectile/magic/sapping, - /obj/projectile/magic/necropotence, /obj/projectile/magic, /obj/projectile/temp/chill, /obj/projectile/magic/wipe) - -/obj/item/gun/magic/staff/chaos/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0) - chambered.projectile_type = pick(allowed_projectile_types) - . = ..() - -/obj/item/gun/magic/staff/honk - name = "staff of the honkmother" - desc = "" - fire_sound = 'sound/blank.ogg' - ammo_type = /obj/item/ammo_casing/magic/honk - icon_state = "honker" - item_state = "honker" - max_charges = 4 - recharge_rate = 8 - -/obj/item/gun/magic/staff/spellblade - name = "spellblade" - desc = "" - fire_sound = 'sound/blank.ogg' - ammo_type = /obj/item/ammo_casing/magic/spellblade - icon_state = "spellblade" - item_state = "spellblade" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - hitsound = 'sound/blank.ogg' - force = 20 - armor_penetration = 75 - block_chance = 50 - sharpness = IS_SHARP - max_charges = 4 - -/obj/item/gun/magic/staff/spellblade/Initialize() - . = ..() - AddComponent(/datum/component/butchering, 15, 125, 0, hitsound) - -/obj/item/gun/magic/staff/spellblade/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 - return ..() - -/obj/item/gun/magic/staff/locker - name = "staff of the locker" - desc = "" - fire_sound = 'sound/blank.ogg' - ammo_type = /obj/item/ammo_casing/magic/locker - icon_state = "locker" - item_state = "locker" - max_charges = 6 - recharge_rate = 4 - -//yes, they don't have sounds. they're admin staves, and their projectiles will play the chaos bolt sound anyway so why bother? - -/obj/item/gun/magic/staff/flying - name = "staff of flying" - desc = "" - fire_sound = 'sound/blank.ogg' - ammo_type = /obj/item/ammo_casing/magic/flying - icon_state = "staffofflight" - item_state = "staffofflight" - -/obj/item/gun/magic/staff/sapping - name = "staff of sapping" - desc = "" - fire_sound = 'sound/blank.ogg' - ammo_type = /obj/item/ammo_casing/magic/sapping - icon_state = "staffofsapping" - item_state = "staffofsapping" - -/obj/item/gun/magic/staff/necropotence - name = "staff of necropotence" - desc = "" - fire_sound = 'sound/blank.ogg' - ammo_type = /obj/item/ammo_casing/magic/necropotence - icon_state = "staffofnecropotence" - item_state = "staffofnecropotence" - -/obj/item/gun/magic/staff/wipe - name = "staff of possession" - desc = "" - fire_sound = 'sound/blank.ogg' - ammo_type = /obj/item/ammo_casing/magic/wipe - icon_state = "staffofwipe" - item_state = "staffofwipe" diff --git a/code/modules/projectiles/guns/magic/wand.dm b/code/modules/projectiles/guns/magic/wand.dm deleted file mode 100644 index fd322a288d..0000000000 --- a/code/modules/projectiles/guns/magic/wand.dm +++ /dev/null @@ -1,210 +0,0 @@ -/obj/item/gun/magic/wand - name = "wand of nothing" - desc = "" - ammo_type = /obj/item/ammo_casing/magic - icon_state = "nothingwand" - item_state = "wand" - w_class = WEIGHT_CLASS_SMALL - can_charge = FALSE - max_charges = 100 //100, 50, 50, 34 (max charge distribution by 25%ths) - var/variable_charges = TRUE - -/obj/item/gun/magic/wand/Initialize() - if(prob(75) && variable_charges) //25% chance of listed max charges, 50% chance of 1/2 max charges, 25% chance of 1/3 max charges - if(prob(33)) - max_charges = CEILING(max_charges / 3, 1) - else - max_charges = CEILING(max_charges / 2, 1) - return ..() - -/obj/item/gun/magic/wand/examine(mob/user) - . = ..() - . += "Has [charges] charge\s remaining." - -/obj/item/gun/magic/wand/update_icon() - icon_state = "[initial(icon_state)][charges ? "" : "-drained"]" - -/obj/item/gun/magic/wand/attack(atom/target, mob/living/user) - if(target == user) - return - ..() - -/obj/item/gun/magic/wand/afterattack(atom/target, mob/living/user) - if(!charges) - shoot_with_empty_chamber(user) - return - if(target == user) - if(no_den_usage) - var/area/A = get_area(user) - if(istype(A, /area/wizard_station)) - to_chat(user, "I know better than to violate the security of The Den, best wait until you leave to use [src].") - return - else - no_den_usage = 0 - zap_self(user) - else - . = ..() - update_icon() - - -/obj/item/gun/magic/wand/proc/zap_self(mob/living/user) - user.visible_message("[user] zaps [user.p_them()]self with [src].") - playsound(user, fire_sound, 50, TRUE) - user.log_message("zapped [user.p_them()]self with a [src]", LOG_ATTACK) - - -///////////////////////////////////// -//WAND OF DEATH -///////////////////////////////////// - -/obj/item/gun/magic/wand/death - name = "wand of death" - desc = "" - fire_sound = 'sound/blank.ogg' - ammo_type = /obj/item/ammo_casing/magic/death - icon_state = "deathwand" - max_charges = 3 //3, 2, 2, 1 - -/obj/item/gun/magic/wand/death/zap_self(mob/living/user) - ..() - charges-- - if(user.anti_magic_check()) - user.visible_message("[src] has no effect on [user]!") - return - if(isliving(user)) - var/mob/living/L = user - if(L.mob_biotypes & MOB_UNDEAD) //negative energy heals the undead - user.revive(full_heal = TRUE, admin_revive = TRUE) - to_chat(user, "I feel great!") - return - to_chat(user, "I irradiate myself with pure negative energy! \ - [pick("Do not pass go. Do not collect 200 zorkmids.","You feel more confident in your spell casting skills.","You Die...","Do you want your possessions identified?")]\ - ") - user.death(FALSE) - -/obj/item/gun/magic/wand/death/debug - desc = "" - max_charges = 500 - variable_charges = FALSE - can_charge = TRUE - recharge_rate = 1 - - -///////////////////////////////////// -//WAND OF HEALING -///////////////////////////////////// - -/obj/item/gun/magic/wand/resurrection - name = "wand of healing" - desc = "" - ammo_type = /obj/item/ammo_casing/magic/heal - fire_sound = 'sound/blank.ogg' - icon_state = "revivewand" - max_charges = 10 //10, 5, 5, 4 - -/obj/item/gun/magic/wand/resurrection/zap_self(mob/living/user) - ..() - charges-- - if(user.anti_magic_check()) - user.visible_message("[src] has no effect on [user]!") - return - if(isliving(user)) - var/mob/living/L = user - if(L.mob_biotypes & MOB_UNDEAD) //positive energy harms the undead - to_chat(user, "I irradiate myself with pure positive energy! \ - [pick("Do not pass go. Do not collect 200 zorkmids.","You feel more confident in your spell casting skills.","You Die...","Do you want your possessions identified?")]\ - ") - user.death(0) - return - user.revive(full_heal = TRUE, admin_revive = TRUE) - to_chat(user, "I feel great!") - -/obj/item/gun/magic/wand/resurrection/debug //for testing - desc = "" - max_charges = 500 - variable_charges = FALSE - can_charge = TRUE - recharge_rate = 1 - -///////////////////////////////////// -//WAND OF POLYMORPH -///////////////////////////////////// - -/obj/item/gun/magic/wand/polymorph - name = "wand of polymorph" - desc = "" - ammo_type = /obj/item/ammo_casing/magic/change - icon_state = "polywand" - fire_sound = 'sound/blank.ogg' - max_charges = 10 //10, 5, 5, 4 - -/obj/item/gun/magic/wand/polymorph/zap_self(mob/living/user) - ..() //because the user mob ceases to exists by the time wabbajack fully resolves - wabbajack(user) - charges-- - -///////////////////////////////////// -//WAND OF TELEPORTATION -///////////////////////////////////// - -/obj/item/gun/magic/wand/teleport - name = "wand of teleportation" - desc = "" - ammo_type = /obj/item/ammo_casing/magic/teleport - fire_sound = 'sound/blank.ogg' - icon_state = "telewand" - max_charges = 10 //10, 5, 5, 4 - no_den_usage = TRUE - -/obj/item/gun/magic/wand/teleport/zap_self(mob/living/user) - if(do_teleport(user, user, 10, channel = TELEPORT_CHANNEL_MAGIC)) - var/datum/effect_system/smoke_spread/smoke = new - smoke.set_up(3, user.loc) - smoke.start() - charges-- - ..() - -/obj/item/gun/magic/wand/safety - name = "wand of safety" - desc = "" - ammo_type = /obj/item/ammo_casing/magic/safety - fire_sound = 'sound/blank.ogg' - icon_state = "telewand" - max_charges = 10 //10, 5, 5, 4 - no_den_usage = FALSE - -/obj/item/gun/magic/wand/safety/zap_self(mob/living/user) - var/turf/origin = get_turf(user) - var/turf/destination = find_safe_turf() - - if(do_teleport(user, destination, channel=TELEPORT_CHANNEL_MAGIC)) - for(var/t in list(origin, destination)) - var/datum/effect_system/smoke_spread/smoke = new - smoke.set_up(0, t) - smoke.start() - ..() - -/obj/item/gun/magic/wand/safety/debug - desc = "" - max_charges = 500 - variable_charges = FALSE - can_charge = TRUE - recharge_rate = 1 - - -///////////////////////////////////// -//WAND OF FIREBALL -///////////////////////////////////// - -/obj/item/gun/magic/wand/fireball - name = "wand of fireball" - desc = "" - fire_sound = 'sound/blank.ogg' - ammo_type = /obj/item/ammo_casing/magic/fireball - icon_state = "firewand" - max_charges = 8 //8, 4, 4, 3 - -/obj/item/gun/magic/wand/fireball/zap_self(mob/living/user) - ..() - explosion(user.loc, -1, 0, 2, 3, 0, flame_range = 2) - charges-- diff --git a/code/modules/projectiles/guns/misc/chem_gun.dm b/code/modules/projectiles/guns/misc/chem_gun.dm deleted file mode 100644 index c7203c7f15..0000000000 --- a/code/modules/projectiles/guns/misc/chem_gun.dm +++ /dev/null @@ -1,46 +0,0 @@ -//his isn't a subtype of the syringe gun because the syringegun subtype is made to hold syringes -//this is meant to hold reagents/obj/item/gun/syringe -/obj/item/gun/chem - name = "reagent gun" - desc = "" - icon_state = "chemgun" - item_state = "chemgun" - w_class = WEIGHT_CLASS_NORMAL - throw_speed = 1 - throw_range = 7 - force = 4 - custom_materials = list(/datum/material/iron=2000) - clumsy_check = FALSE - fire_sound = 'sound/blank.ogg' - var/time_per_syringe = 250 - var/syringes_left = 4 - var/max_syringes = 4 - var/last_synth = 0 - -/obj/item/gun/chem/Initialize() - . = ..() - chambered = new /obj/item/ammo_casing/chemgun(src) - START_PROCESSING(SSobj, src) - create_reagents(100, OPENCONTAINER) - -/obj/item/gun/chem/Destroy() - . = ..() - STOP_PROCESSING(SSobj, src) - -/obj/item/gun/chem/can_shoot() - return syringes_left - -/obj/item/gun/chem/process_chamber() - if(chambered && !chambered.BB && syringes_left) - chambered.newshot() - -/obj/item/gun/chem/process() - if(syringes_left >= max_syringes) - return - if(world.time < last_synth+time_per_syringe) - return - to_chat(loc, "I hear a click as [src] synthesizes a new dart.") - syringes_left++ - if(chambered && !chambered.BB) - chambered.newshot() - last_synth = world.time diff --git a/code/modules/projectiles/guns/misc/grenade_launcher.dm b/code/modules/projectiles/guns/misc/grenade_launcher.dm deleted file mode 100644 index 5966dffe11..0000000000 --- a/code/modules/projectiles/guns/misc/grenade_launcher.dm +++ /dev/null @@ -1,46 +0,0 @@ -/obj/item/gun/grenadelauncher - name = "grenade launcher" - desc = "" - icon = 'icons/obj/guns/projectile.dmi' - icon_state = "riotgun" - item_state = "riotgun" - w_class = WEIGHT_CLASS_BULKY - throw_speed = 2 - throw_range = 7 - force = 5 - var/list/grenades = new/list() - var/max_grenades = 3 - custom_materials = list(/datum/material/iron=2000) - -/obj/item/gun/grenadelauncher/examine(mob/user) - . = ..() - . += "[grenades.len] / [max_grenades] grenades loaded." - -/obj/item/gun/grenadelauncher/attackby(obj/item/I, mob/user, params) - - if((istype(I, /obj/item/grenade))) - if(grenades.len < max_grenades) - if(!user.transferItemToLoc(I, src)) - return - grenades += I - to_chat(user, "I put the grenade in the grenade launcher.") - to_chat(user, "[grenades.len] / [max_grenades] Grenades.") - else - to_chat(usr, "The grenade launcher cannot hold more grenades!") - -/obj/item/gun/grenadelauncher/can_shoot() - return grenades.len - -/obj/item/gun/grenadelauncher/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0) - user.visible_message("[user] fired a grenade!", \ - "I fire the grenade launcher!") - var/obj/item/grenade/F = grenades[1] //Now with less copypasta! - grenades -= F - F.forceMove(user.loc) - F.throw_at(target, 30, 2, user) - message_admins("[ADMIN_LOOKUPFLW(user)] fired a grenade ([F.name]) from a grenade launcher ([src]) from [AREACOORD(user)] at [target] [AREACOORD(target)].") - log_game("[key_name(user)] fired a grenade ([F.name]) with a grenade launcher ([src]) from [AREACOORD(user)] at [target] [AREACOORD(target)].") - F.active = 1 - F.icon_state = initial(F.icon_state) + "_active" - playsound(user.loc, 'sound/blank.ogg', 75, TRUE, -3) - addtimer(CALLBACK(F, TYPE_PROC_REF(/obj/item/grenade, prime)), 15) diff --git a/code/modules/projectiles/guns/misc/medbeam.dm b/code/modules/projectiles/guns/misc/medbeam.dm deleted file mode 100644 index e76cad800b..0000000000 --- a/code/modules/projectiles/guns/misc/medbeam.dm +++ /dev/null @@ -1,135 +0,0 @@ -/obj/item/gun/medbeam - name = "Medical Beamgun" - desc = "" - icon = 'icons/obj/chronos.dmi' - icon_state = "chronogun" - item_state = "chronogun" - w_class = WEIGHT_CLASS_NORMAL - - var/mob/living/current_target - var/last_check = 0 - var/check_delay = 10 //Check los as often as possible, max resolution is SSobj tick though - var/max_range = 8 - var/active = 0 - var/datum/beam/current_beam = null - var/mounted = 0 //Denotes if this is a handheld or mounted version - - weapon_weight = WEAPON_MEDIUM - -/obj/item/gun/medbeam/Initialize() - . = ..() - START_PROCESSING(SSobj, src) - -/obj/item/gun/medbeam/Destroy(mob/user) - STOP_PROCESSING(SSobj, src) - LoseTarget() - return ..() - -/obj/item/gun/medbeam/dropped(mob/user) - ..() - LoseTarget() - -/obj/item/gun/medbeam/equipped(mob/user) - ..() - LoseTarget() - -/obj/item/gun/medbeam/proc/LoseTarget() - if(active) - qdel(current_beam) - current_beam = null - active = 0 - on_beam_release(current_target) - current_target = null - -/obj/item/gun/medbeam/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0) - if(isliving(user)) - add_fingerprint(user) - - if(current_target) - LoseTarget() - if(!isliving(target)) - return - - current_target = target - active = TRUE - current_beam = new(user,current_target,time=6000,beam_icon_state="medbeam",btype=/obj/effect/ebeam/medical) - INVOKE_ASYNC(current_beam, TYPE_PROC_REF(/datum/beam, Start)) - - SSblackbox.record_feedback("tally", "gun_fired", 1, type) - -/obj/item/gun/medbeam/process() - - var/source = loc - if(!mounted && !isliving(source)) - LoseTarget() - return - - if(!current_target) - LoseTarget() - return - - if(world.time <= last_check+check_delay) - return - - last_check = world.time - - if(get_dist(source, current_target)>max_range || !los_check(source, current_target)) - LoseTarget() - if(isliving(source)) - to_chat(source, "I lose control of the beam!") - return - - if(current_target) - on_beam_tick(current_target) - -/obj/item/gun/medbeam/proc/los_check(atom/movable/user, mob/target) - var/turf/user_turf = user.loc - if(mounted) - user_turf = get_turf(user) - else if(!istype(user_turf)) - return 0 - var/obj/dummy = new(user_turf) - dummy.pass_flags |= PASSTABLE|PASSGLASS|PASSGRILLE //Grille/Glass so it can be used through common windows - for(var/turf/turf in getline(user_turf,target)) - if(mounted && turf == user_turf) - continue //Mechs are dense and thus fail the check - if(turf.density) - qdel(dummy) - return 0 - for(var/atom/movable/AM in turf) - if(!AM.CanPass(dummy,turf,1)) - qdel(dummy) - return 0 - for(var/obj/effect/ebeam/medical/B in turf)// Don't cross the str-beams! - if(B.owner.origin != current_beam.origin) - explosion(B.loc,0,3,5,8) - qdel(dummy) - return 0 - qdel(dummy) - return 1 - -/obj/item/gun/medbeam/proc/on_beam_hit(mob/living/target) - return - -/obj/item/gun/medbeam/proc/on_beam_tick(mob/living/target) - if(target.health != target.maxHealth) - new /obj/effect/temp_visual/heal(get_turf(target), "#80F5FF") - target.adjustBruteLoss(-4) - target.adjustFireLoss(-4) - target.adjustToxLoss(-1) - target.adjustOxyLoss(-1) - return - -/obj/item/gun/medbeam/proc/on_beam_release(mob/living/target) - return - -/obj/effect/ebeam/medical - name = "medical beam" - -//////////////////////////////Mech Version/////////////////////////////// -/obj/item/gun/medbeam/mech - mounted = 1 - -/obj/item/gun/medbeam/mech/Initialize() - . = ..() - STOP_PROCESSING(SSobj, src) //Mech mediguns do not process until installed, and are controlled by the holder obj diff --git a/code/modules/projectiles/guns/misc/syringe_gun.dm b/code/modules/projectiles/guns/misc/syringe_gun.dm deleted file mode 100644 index 0720d34d55..0000000000 --- a/code/modules/projectiles/guns/misc/syringe_gun.dm +++ /dev/null @@ -1,123 +0,0 @@ -/obj/item/gun/syringe - name = "syringe gun" - desc = "" - icon_state = "syringegun" - item_state = "syringegun" - w_class = WEIGHT_CLASS_NORMAL - throw_speed = 1 - throw_range = 7 - force = 4 - custom_materials = list(/datum/material/iron=2000) - clumsy_check = 0 - fire_sound = 'sound/blank.ogg' - var/list/syringes = list() - var/max_syringes = 1 - -/obj/item/gun/syringe/Initialize() - . = ..() - chambered = new /obj/item/ammo_casing/syringegun(src) - -/obj/item/gun/syringe/handle_atom_del(atom/A) - . = ..() - if(A in syringes) - syringes.Remove(A) - -/obj/item/gun/syringe/recharge_newshot() - if(!syringes.len) - return - chambered.newshot() - -/obj/item/gun/syringe/can_shoot() - return syringes.len - -/obj/item/gun/syringe/process_chamber() - if(chambered && !chambered.BB) //we just fired - recharge_newshot() - -/obj/item/gun/syringe/examine(mob/user) - . = ..() - . += "Can hold [max_syringes] syringe\s. Has [syringes.len] syringe\s remaining." - -/obj/item/gun/syringe/attack_self(mob/living/user) - if(!syringes.len) - to_chat(user, "[src] is empty!") - return 0 - - var/obj/item/reagent_containers/syringe/S = syringes[syringes.len] - - if(!S) - return 0 - user.put_in_hands(S) - - syringes.Remove(S) - to_chat(user, "I unload [S] from \the [src].") - - return 1 - -/obj/item/gun/syringe/attackby(obj/item/A, mob/user, params, show_msg = TRUE) - if(istype(A, /obj/item/reagent_containers/syringe)) - if(syringes.len < max_syringes) - if(!user.transferItemToLoc(A, src)) - return FALSE - to_chat(user, "I load [A] into \the [src].") - syringes += A - recharge_newshot() - return TRUE - else - to_chat(user, "[src] cannot hold more syringes!") - return FALSE - -/obj/item/gun/syringe/rapidsyringe - name = "rapid syringe gun" - desc = "" - icon_state = "rapidsyringegun" - max_syringes = 6 - -/obj/item/gun/syringe/syndicate - name = "dart pistol" - desc = "" - icon_state = "syringe_pistol" - item_state = "gun" //Smaller inhand - w_class = WEIGHT_CLASS_SMALL - force = 2 //Also very weak because it's smaller - suppressed = TRUE //Softer fire sound - can_unsuppress = FALSE //Permanently silenced - -/obj/item/gun/syringe/dna - name = "modified syringe gun" - desc = "" - -/obj/item/gun/syringe/dna/Initialize() - . = ..() - chambered = new /obj/item/ammo_casing/dnainjector(src) - -/obj/item/gun/syringe/dna/attackby(obj/item/A, mob/user, params, show_msg = TRUE) - if(istype(A, /obj/item/dnainjector)) - var/obj/item/dnainjector/D = A - if(D.used) - to_chat(user, "This injector is used up!") - return - if(syringes.len < max_syringes) - if(!user.transferItemToLoc(D, src)) - return FALSE - to_chat(user, "I load \the [D] into \the [src].") - syringes += D - recharge_newshot() - return TRUE - else - to_chat(user, "[src] cannot hold more syringes!") - return FALSE - -/obj/item/gun/syringe/blowgun - name = "blowgun" - desc = "" - icon_state = "blowgun" - item_state = "blowgun" - fire_sound = 'sound/blank.ogg' - -/obj/item/gun/syringe/blowgun/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0) - visible_message("[user] starts aiming with a blowgun!") - if(do_after(user, 25, target = src)) - user.adjustStaminaLoss(20) - user.adjustOxyLoss(20) - ..() diff --git a/code/modules/projectiles/pins.dm b/code/modules/projectiles/pins.dm deleted file mode 100644 index f21b6093ec..0000000000 --- a/code/modules/projectiles/pins.dm +++ /dev/null @@ -1,204 +0,0 @@ -/obj/item/firing_pin - name = "electronic firing pin" - desc = "" - icon = 'icons/obj/device.dmi' - icon_state = "firing_pin" - item_state = "pen" - flags_1 = CONDUCT_1 - w_class = WEIGHT_CLASS_TINY - attack_verb = list("poked") - var/fail_message = "INVALID USER." - var/selfdestruct = 0 // Explode when user check is failed. - var/force_replace = 0 // Can forcefully replace other pins. - var/pin_removeable = 0 // Can be replaced by any pin. - var/obj/item/gun/gun - -/obj/item/firing_pin/New(newloc) - ..() - if(istype(newloc, /obj/item/gun)) - gun = newloc - -/obj/item/firing_pin/afterattack(atom/target, mob/user, proximity_flag) - . = ..() - if(proximity_flag) - if(istype(target, /obj/item/gun)) - var/obj/item/gun/G = target - if(G.pin && (force_replace || G.pin.pin_removeable)) - G.pin.forceMove(get_turf(G)) - G.pin.gun_remove(user) - to_chat(user, "I remove [G]'s old pin.") - - if(!G.pin) - if(!user.temporarilyRemoveItemFromInventory(src)) - return - gun_insert(user, G) - to_chat(user, "I insert [src] into [G].") - else - to_chat(user, "This firearm already has a firing pin installed.") - -/obj/item/firing_pin/emag_act(mob/user) - if(obj_flags & EMAGGED) - return - obj_flags |= EMAGGED - to_chat(user, "I override the authentication mechanism.") - -/obj/item/firing_pin/proc/gun_insert(mob/living/user, obj/item/gun/G) - gun = G - forceMove(gun) - gun.pin = src - return - -/obj/item/firing_pin/proc/gun_remove(mob/living/user) - gun.pin = null - gun = null - return - -/obj/item/firing_pin/proc/pin_auth(mob/living/user) - return TRUE - -/obj/item/firing_pin/proc/auth_fail(mob/living/user) - if(user) - user.show_message(fail_message, MSG_VISUAL) - if(selfdestruct) - if(user) - user.show_message("SELF-DESTRUCTING...
", MSG_VISUAL) - to_chat(user, "[gun] explodes!") - explosion(get_turf(gun), -1, 0, 2, 3) - if(gun) - qdel(gun) - - -/obj/item/firing_pin/magic - name = "magic crystal shard" - desc = "" - - -// Test pin, works only near firing range. -/obj/item/firing_pin/test_range - name = "test-range firing pin" - desc = "" - fail_message = "TEST RANGE CHECK FAILED." - pin_removeable = TRUE - -/obj/item/firing_pin/test_range/pin_auth(mob/living/user) - if(!istype(user)) - return FALSE - return FALSE - - -// Implant pin, checks for implant -/obj/item/firing_pin/implant - name = "implant-keyed firing pin" - desc = "" - fail_message = "IMPLANT CHECK FAILED." - var/obj/item/implant/req_implant = null - -/obj/item/firing_pin/implant/pin_auth(mob/living/user) - if(user) - for(var/obj/item/implant/I in user.implants) - if(req_implant && I.type == req_implant) - return TRUE - return FALSE - -/obj/item/firing_pin/implant/mindshield - name = "mindshield firing pin" - desc = "" - icon_state = "firing_pin_loyalty" - -/obj/item/firing_pin/implant/pindicate - name = "syndicate firing pin" - icon_state = "firing_pin_pindi" - req_implant = /obj/item/implant/weapons_auth - - - -// Honk pin, clown's joke item. -// Can replace other pins. Replace a pin in cap's laser for extra fun! -/obj/item/firing_pin/clown - name = "hilarious firing pin" - desc = "" - color = "#FFFF00" - fail_message = "HONK!" - force_replace = TRUE - -/obj/item/firing_pin/clown/pin_auth(mob/living/user) - playsound(src, 'sound/blank.ogg', 50, TRUE) - return FALSE - -// Ultra-honk pin, clown's deadly joke item. -// A gun with ultra-honk pin is useful for clown and useless for everyone else. -/obj/item/firing_pin/clown/ultra/pin_auth(mob/living/user) - playsound(src.loc, 'sound/blank.ogg', 50, TRUE) - if(user && (!(HAS_TRAIT(user, TRAIT_CLUMSY)) && !(user.mind && user.mind.assigned_role == "Clown"))) - return FALSE - return TRUE - -/obj/item/firing_pin/clown/ultra/gun_insert(mob/living/user, obj/item/gun/G) - ..() - G.clumsy_check = FALSE - -/obj/item/firing_pin/clown/ultra/gun_remove(mob/living/user) - gun.clumsy_check = initial(gun.clumsy_check) - ..() - -// Now two times deadlier! -/obj/item/firing_pin/clown/ultra/selfdestruct - desc = "" - selfdestruct = TRUE - - -// DNA-keyed pin. -// When you want to keep your toys for myself. -/obj/item/firing_pin/dna - name = "DNA-keyed firing pin" - desc = "" - icon_state = "firing_pin_dna" - fail_message = "DNA CHECK FAILED." - var/unique_enzymes = null - -/obj/item/firing_pin/dna/afterattack(atom/target, mob/user, proximity_flag) - . = ..() - if(proximity_flag && iscarbon(target)) - var/mob/living/carbon/M = target - if(M.dna && M.dna.unique_enzymes) - unique_enzymes = M.dna.unique_enzymes - to_chat(user, "DNA-LOCK SET.") - -/obj/item/firing_pin/dna/pin_auth(mob/living/carbon/user) - if(user && user.dna && user.dna.unique_enzymes) - if(user.dna.unique_enzymes == unique_enzymes) - return TRUE - return FALSE - -/obj/item/firing_pin/dna/auth_fail(mob/living/carbon/user) - if(!unique_enzymes) - if(user && user.dna && user.dna.unique_enzymes) - unique_enzymes = user.dna.unique_enzymes - to_chat(user, "DNA-LOCK SET.") - else - ..() - -/obj/item/firing_pin/dna/dredd - desc = "" - selfdestruct = TRUE - -// Laser tag pins -/obj/item/firing_pin/tag - name = "laser tag firing pin" - desc = "" - fail_message = "SUIT CHECK FAILED." - var/obj/item/clothing/suit/suit_requirement = null - var/tagcolor = "" - -/obj/item/firing_pin/tag/pin_auth(mob/living/user) - if(ishuman(user)) - var/mob/living/carbon/human/M = user - if(istype(M.wear_armor, suit_requirement)) - return TRUE - to_chat(user, "I need to be wearing [tagcolor] laser tag armor!") - return FALSE - -/obj/item/firing_pin/Destroy() - if(gun) - gun.pin = null - return ..() diff --git a/code/modules/projectiles/projectile/bullets/_incendiary.dm b/code/modules/projectiles/projectile/bullets/_incendiary.dm deleted file mode 100644 index 59baefa6ba..0000000000 --- a/code/modules/projectiles/projectile/bullets/_incendiary.dm +++ /dev/null @@ -1,17 +0,0 @@ -/obj/projectile/bullet/incendiary - damage = 20 - var/fire_stacks = 4 - -/obj/projectile/bullet/incendiary/on_hit(atom/target, blocked = FALSE) - . = ..() - if(iscarbon(target)) - var/mob/living/carbon/M = target - M.adjust_fire_stacks(fire_stacks) - M.IgniteMob() - -/obj/projectile/bullet/incendiary/Move() - . = ..() - var/turf/location = get_turf(src) - if(location) - new /obj/effect/hotspot(location) - location.hotspot_expose(700, 50, 1) diff --git a/code/modules/projectiles/projectile/bullets/dart_syringe.dm b/code/modules/projectiles/projectile/bullets/dart_syringe.dm deleted file mode 100644 index e3918dc665..0000000000 --- a/code/modules/projectiles/projectile/bullets/dart_syringe.dm +++ /dev/null @@ -1,38 +0,0 @@ -/obj/projectile/bullet/dart - name = "dart" - icon_state = "cbbolt" - damage = 6 - var/piercing = FALSE - -/obj/projectile/bullet/dart/Initialize() - . = ..() - create_reagents(50, NO_REACT) - -/obj/projectile/bullet/dart/on_hit(atom/target, blocked = FALSE) - if(iscarbon(target)) - var/mob/living/carbon/M = target - if(blocked != 100) // not completely blocked - if(M.can_inject(null, FALSE, def_zone, piercing)) // Pass the hit zone to see if it can inject by whether it hit the head or the body. - ..() - reagents.reaction(M, INJECT) - reagents.trans_to(M, reagents.total_volume) - return BULLET_ACT_HIT - else - blocked = 100 - target.visible_message("\The [src] was deflected!", \ - "I were protected against \the [src]!") - - ..(target, blocked) - DISABLE_BITFIELD(reagents.flags, NO_REACT) - reagents.handle_reactions() - return BULLET_ACT_HIT - -/obj/projectile/bullet/dart/metalfoam/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/aluminium, 15) - reagents.add_reagent(/datum/reagent/foaming_agent, 5) - reagents.add_reagent(/datum/reagent/toxin/acid/fluacid, 5) - -/obj/projectile/bullet/dart/syringe - name = "syringe" - icon_state = "syringeproj" diff --git a/code/modules/projectiles/projectile/bullets/dnainjector.dm b/code/modules/projectiles/projectile/bullets/dnainjector.dm deleted file mode 100644 index 449d4286cd..0000000000 --- a/code/modules/projectiles/projectile/bullets/dnainjector.dm +++ /dev/null @@ -1,24 +0,0 @@ -/obj/projectile/bullet/dnainjector - name = "\improper DNA injector" - icon_state = "syringeproj" - var/obj/item/dnainjector/injector - damage = 5 - hitsound_wall = "shatter" - -/obj/projectile/bullet/dnainjector/on_hit(atom/target, blocked = FALSE) - if(iscarbon(target)) - var/mob/living/carbon/M = target - if(blocked != 100) - if(M.can_inject(null, FALSE, def_zone, FALSE)) - if(injector.inject(M, firer)) - QDEL_NULL(injector) - return BULLET_ACT_HIT - else - blocked = 100 - target.visible_message("\The [src] was deflected!", \ - "I were protected against \the [src]!") - return ..() - -/obj/projectile/bullet/dnainjector/Destroy() - QDEL_NULL(injector) - return ..() diff --git a/code/modules/projectiles/projectile/bullets/grenade.dm b/code/modules/projectiles/projectile/bullets/grenade.dm deleted file mode 100644 index 5928b07aa3..0000000000 --- a/code/modules/projectiles/projectile/bullets/grenade.dm +++ /dev/null @@ -1,12 +0,0 @@ -// 40mm (Grenade Launcher - -/obj/projectile/bullet/a40mm - name ="40mm grenade" - desc = "" - icon_state= "bolter" - damage = 60 - -/obj/projectile/bullet/a40mm/on_hit(atom/target, blocked = FALSE) - ..() - explosion(target, -1, 0, 2, 1, 0, flame_range = 3) - return BULLET_ACT_HIT diff --git a/code/modules/projectiles/projectile/bullets/lmg.dm b/code/modules/projectiles/projectile/bullets/lmg.dm deleted file mode 100644 index 0ae13b3890..0000000000 --- a/code/modules/projectiles/projectile/bullets/lmg.dm +++ /dev/null @@ -1,44 +0,0 @@ -// C3D (Borgs) - -/obj/projectile/bullet/c3d - damage = 20 - -// Mech LMG - -/obj/projectile/bullet/lmg - damage = 20 - -// Mech FNX-99 - -/obj/projectile/bullet/incendiary/fnx99 - damage = 20 - -// Turrets - -/obj/projectile/bullet/manned_turret - damage = 20 - -/obj/projectile/bullet/syndicate_turret - damage = 20 - -// 7.12x82mm (SAW) - -/obj/projectile/bullet/mm712x82 - name = "7.12x82mm bullet" - damage = 45 - armor_penetration = 5 - -/obj/projectile/bullet/mm712x82_ap - name = "7.12x82mm armor-piercing bullet" - damage = 40 - armor_penetration = 75 - -/obj/projectile/bullet/mm712x82_hp - name = "7.12x82mm hollow-point bullet" - damage = 60 - armor_penetration = -60 - -/obj/projectile/bullet/incendiary/mm712x82 - name = "7.12x82mm incendiary bullet" - damage = 20 - fire_stacks = 3 diff --git a/code/modules/projectiles/projectile/bullets/pistol.dm b/code/modules/projectiles/projectile/bullets/pistol.dm deleted file mode 100644 index 8ae6e7d492..0000000000 --- a/code/modules/projectiles/projectile/bullets/pistol.dm +++ /dev/null @@ -1,36 +0,0 @@ -// 9mm (Stechkin APS) - -/obj/projectile/bullet/c9mm - name = "9mm bullet" - damage = 20 - -/obj/projectile/bullet/c9mm_ap - name = "9mm armor-piercing bullet" - damage = 15 - armor_penetration = 40 - -/obj/projectile/bullet/incendiary/c9mm - name = "9mm incendiary bullet" - damage = 10 - fire_stacks = 1 - -// 10mm (Stechkin) - -/obj/projectile/bullet/c10mm - name = "10mm bullet" - damage = 30 - -/obj/projectile/bullet/c10mm_ap - name = "10mm armor-piercing bullet" - damage = 27 - armor_penetration = 40 - -/obj/projectile/bullet/c10mm_hp - name = "10mm hollow-point bullet" - damage = 40 - armor_penetration = -50 - -/obj/projectile/bullet/incendiary/c10mm - name = "10mm incendiary bullet" - damage = 15 - fire_stacks = 2 diff --git a/code/modules/projectiles/projectile/bullets/revolver.dm b/code/modules/projectiles/projectile/bullets/revolver.dm deleted file mode 100644 index 3f8d0c9e33..0000000000 --- a/code/modules/projectiles/projectile/bullets/revolver.dm +++ /dev/null @@ -1,60 +0,0 @@ -// 7.62x38mmR (Nagant Revolver) - -/obj/projectile/bullet/n762 - name = "7.62x38mmR bullet" - damage = 60 - -// .50AE (Desert Eagle) - -/obj/projectile/bullet/a50AE - name = ".50AE bullet" - damage = 60 - -// .38 (Detective's Gun) - -/obj/projectile/bullet/c38 - name = ".38 bullet" - damage = 25 - -/obj/projectile/bullet/c38/trac - name = ".38 TRAC bullet" - damage = 10 - -/obj/projectile/bullet/c38/trac/on_hit(atom/target, blocked = FALSE) - . = ..() - var/mob/living/carbon/M = target - var/obj/item/implant/tracking/c38/imp - for(var/obj/item/implant/tracking/c38/TI in M.implants) //checks if the target already contains a tracking implant - imp = TI - return - if(!imp) - imp = new /obj/item/implant/tracking/c38(M) - imp.implant(M) - -/obj/projectile/bullet/c38/hotshot //similar to incendiary bullets, but do not leave a flaming trail - name = ".38 Hot Shot bullet" - damage = 20 - -/obj/projectile/bullet/c38/hotshot/on_hit(atom/target, blocked = FALSE) - . = ..() - if(iscarbon(target)) - var/mob/living/carbon/M = target - M.adjust_fire_stacks(6) - M.IgniteMob() - -/obj/projectile/bullet/c38/iceblox //see /obj/projectile/temp for the original code - name = ".38 Iceblox bullet" - damage = 20 - var/temperature = 100 - -/obj/projectile/bullet/c38/iceblox/on_hit(atom/target, blocked = FALSE) - . = ..() - if(isliving(target)) - var/mob/living/M = target - M.adjust_bodytemperature(((100-blocked)/100)*(temperature - M.bodytemperature)) - -// .357 (Syndie Revolver) - -/obj/projectile/bullet/a357 - name = ".357 bullet" - damage = 60 diff --git a/code/modules/projectiles/projectile/bullets/rifle.dm b/code/modules/projectiles/projectile/bullets/rifle.dm deleted file mode 100644 index a60f1a3ae6..0000000000 --- a/code/modules/projectiles/projectile/bullets/rifle.dm +++ /dev/null @@ -1,16 +0,0 @@ -// 5.56mm (M-90gl Carbine) - -/obj/projectile/bullet/a556 - name = "5.56mm bullet" - damage = 35 - -// 7.62 (Nagant Rifle) - -/obj/projectile/bullet/a762 - name = "7.62 bullet" - damage = 60 - -/obj/projectile/bullet/a762_enchanted - name = "enchanted 7.62 bullet" - damage = 20 - stamina = 80 diff --git a/code/modules/projectiles/projectile/bullets/shotgun.dm b/code/modules/projectiles/projectile/bullets/shotgun.dm deleted file mode 100644 index 38802ed125..0000000000 --- a/code/modules/projectiles/projectile/bullets/shotgun.dm +++ /dev/null @@ -1,100 +0,0 @@ -/obj/projectile/bullet/shotgun_slug - name = "12g shotgun slug" - damage = 60 - -/obj/projectile/bullet/shotgun_beanbag - name = "beanbag slug" - damage = 5 - stamina = 55 - -/obj/projectile/bullet/incendiary/shotgun - name = "incendiary slug" - damage = 20 - -/obj/projectile/bullet/incendiary/shotgun/dragonsbreath - name = "dragonsbreath pellet" - damage = 5 - -/obj/projectile/bullet/shotgun_stunslug - name = "stunslug" - damage = 5 - paralyze = 100 - stutter = 5 - jitter = 20 - range = 7 - icon_state = "spark" - color = "#FFFF00" - -/obj/projectile/bullet/shotgun_meteorslug - name = "meteorslug" - icon = 'icons/obj/meteor.dmi' - icon_state = "dust" - damage = 30 - paralyze = 15 - knockdown = 80 - hitsound = 'sound/blank.ogg' - -/obj/projectile/bullet/shotgun_meteorslug/on_hit(atom/target, blocked = FALSE) - . = ..() - if(ismovableatom(target)) - var/atom/movable/M = target - var/atom/throw_target = get_edge_target_turf(M, get_dir(src, get_step_away(M, src))) - M.safe_throw_at(throw_target, 3, 2) - -/obj/projectile/bullet/shotgun_meteorslug/Initialize() - . = ..() - SpinAnimation() - -/obj/projectile/bullet/shotgun_frag12 - name ="frag12 slug" - damage = 25 - paralyze = 50 - -/obj/projectile/bullet/shotgun_frag12/on_hit(atom/target, blocked = FALSE) - ..() - explosion(target, -1, 0, 1) - return BULLET_ACT_HIT - -/obj/projectile/bullet/pellet - var/tile_dropoff = 0.75 - var/tile_dropoff_s = 0.5 - -/obj/projectile/bullet/pellet/shotgun_buckshot - name = "buckshot pellet" - damage = 12.5 - -/obj/projectile/bullet/pellet/shotgun_rubbershot - name = "rubbershot pellet" - damage = 3 - stamina = 11 - -/obj/projectile/bullet/pellet/shotgun_incapacitate - name = "incapacitating pellet" - damage = 1 - stamina = 6 - -/obj/projectile/bullet/pellet/Range() - ..() - if(damage > 0) - damage -= tile_dropoff - if(stamina > 0) - stamina -= tile_dropoff_s - if(damage < 0 && stamina < 0) - qdel(src) - -/obj/projectile/bullet/pellet/shotgun_improvised - tile_dropoff = 0.55 //Come on it does 6 damage don't be like that. - damage = 6 - -/obj/projectile/bullet/pellet/shotgun_improvised/Initialize() - . = ..() - range = rand(1, 8) - -/obj/projectile/bullet/pellet/shotgun_improvised/on_range() - do_sparks(1, TRUE, src) - ..() - -// Mech Scattershot - -/obj/projectile/bullet/scattershot - damage = 24 diff --git a/code/modules/projectiles/projectile/bullets/smg.dm b/code/modules/projectiles/projectile/bullets/smg.dm deleted file mode 100644 index b49c56ffc1..0000000000 --- a/code/modules/projectiles/projectile/bullets/smg.dm +++ /dev/null @@ -1,21 +0,0 @@ -// .45 (M1911 & C20r) - -/obj/projectile/bullet/c45 - name = ".45 bullet" - damage = 30 - -// 4.6x30mm (Autorifles) - -/obj/projectile/bullet/c46x30mm - name = "4.6x30mm bullet" - damage = 20 - -/obj/projectile/bullet/c46x30mm_ap - name = "4.6x30mm armor-piercing bullet" - damage = 15 - armor_penetration = 40 - -/obj/projectile/bullet/incendiary/c46x30mm - name = "4.6x30mm incendiary bullet" - damage = 10 - fire_stacks = 1 diff --git a/code/modules/projectiles/projectile/bullets/sniper.dm b/code/modules/projectiles/projectile/bullets/sniper.dm deleted file mode 100644 index 5985d1ed8f..0000000000 --- a/code/modules/projectiles/projectile/bullets/sniper.dm +++ /dev/null @@ -1,45 +0,0 @@ -// .50 (Sniper) - -/obj/projectile/bullet/p50 - name =".50 bullet" - speed = 0.4 - damage = 70 - paralyze = 100 - dismemberment = 50 - armor_penetration = 50 - var/breakthings = TRUE - -/obj/projectile/bullet/p50/on_hit(atom/target, blocked = 0) - if(isobj(target) && (blocked != 100) && breakthings) - var/obj/O = target - O.take_damage(80, BRUTE, "bullet", FALSE) - return ..() - -/obj/projectile/bullet/p50/soporific - name =".50 soporific bullet" - armor_penetration = 0 - damage = 0 - dismemberment = 0 - paralyze = 0 - breakthings = FALSE - -/obj/projectile/bullet/p50/soporific/on_hit(atom/target, blocked = FALSE) - if((blocked != 100) && isliving(target)) - var/mob/living/L = target - L.Sleeping(400) - return ..() - -/obj/projectile/bullet/p50/penetrator - name = "penetrator round" - icon_state = "gauss" - damage = 60 - movement_type = FLYING | UNSTOPPABLE - dismemberment = 0 //It goes through you cleanly. - paralyze = 0 - breakthings = FALSE - -/obj/projectile/bullet/p50/penetrator/shuttle //Nukeop Shuttle Variety - icon_state = "gaussstrong" - damage = 25 - speed = 0.3 - range = 16 diff --git a/code/modules/projectiles/projectile/bullets/special.dm b/code/modules/projectiles/projectile/bullets/special.dm deleted file mode 100644 index 5cc55adfd8..0000000000 --- a/code/modules/projectiles/projectile/bullets/special.dm +++ /dev/null @@ -1,32 +0,0 @@ -// Honker - -/obj/projectile/bullet/honker - name = "banana" - damage = 0 - movement_type = FLYING | UNSTOPPABLE - nodamage = TRUE - hitsound = 'sound/blank.ogg' - icon = 'icons/obj/hydroponics/harvest.dmi' - icon_state = "banana" - range = 200 - -/obj/projectile/bullet/honker/Initialize() - . = ..() - SpinAnimation() - -/obj/projectile/bullet/honker/on_hit(atom/target, blocked = FALSE) - . = ..() - var/mob/M = target - if(istype(M)) - M.slip(100, M.loc, GALOSHES_DONT_HELP|SLIDE, 0, FALSE) - -// Mime - -/obj/projectile/bullet/mime - damage = 40 - -/obj/projectile/bullet/mime/on_hit(atom/target, blocked = FALSE) - . = ..() - if(iscarbon(target)) - var/mob/living/carbon/M = target - M.silent = max(M.silent, 10) diff --git a/code/modules/projectiles/projectile/energy/_energy.dm b/code/modules/projectiles/projectile/energy/_energy.dm deleted file mode 100644 index 49144127d9..0000000000 --- a/code/modules/projectiles/projectile/energy/_energy.dm +++ /dev/null @@ -1,7 +0,0 @@ -/obj/projectile/energy - name = "energy" - icon_state = "spark" - damage = 0 - damage_type = BURN - flag = "energy" - reflectable = REFLECT_NORMAL diff --git a/code/modules/projectiles/projectile/energy/ebow.dm b/code/modules/projectiles/projectile/energy/ebow.dm deleted file mode 100644 index 6d48902905..0000000000 --- a/code/modules/projectiles/projectile/energy/ebow.dm +++ /dev/null @@ -1,17 +0,0 @@ -/obj/projectile/energy/bolt //ebow bolts - name = "bolt" - icon_state = "cbbolt" - damage = 15 - damage_type = TOX - nodamage = FALSE - stamina = 60 - eyeblur = 10 - knockdown = 10 - slur = 5 - -/obj/projectile/energy/bolt/halloween - name = "candy corn" - icon_state = "candy_corn" - -/obj/projectile/energy/bolt/large - damage = 20 diff --git a/code/modules/projectiles/projectile/energy/misc.dm b/code/modules/projectiles/projectile/energy/misc.dm deleted file mode 100644 index 79ee634a3e..0000000000 --- a/code/modules/projectiles/projectile/energy/misc.dm +++ /dev/null @@ -1,19 +0,0 @@ -/obj/projectile/energy/declone - name = "radiation beam" - icon_state = "declone" - damage = 20 - damage_type = CLONE - irradiate = 100 - impact_effect_type = /obj/effect/temp_visual/impact_effect/green_laser - -/obj/projectile/energy/declone/weak - damage = 9 - irradiate = 30 - -/obj/projectile/energy/dart //ninja throwing dart - name = "dart" - icon_state = "toxin" - damage = 5 - damage_type = TOX - paralyze = 100 - range = 7 diff --git a/code/modules/projectiles/projectile/energy/net_snare.dm b/code/modules/projectiles/projectile/energy/net_snare.dm deleted file mode 100644 index cad6d90ca2..0000000000 --- a/code/modules/projectiles/projectile/energy/net_snare.dm +++ /dev/null @@ -1,40 +0,0 @@ -/obj/projectile/energy/trap - name = "energy snare" - icon_state = "e_snare" - nodamage = TRUE - hitsound = 'sound/blank.ogg' - range = 4 - -/obj/projectile/energy/trap/on_hit(atom/target, blocked = FALSE) - if(!ismob(target) || blocked >= 100) //Fully blocked by mob or collided with dense object - drop a trap - new/obj/item/restraints/legcuffs/beartrap/energy(get_turf(loc)) - else if(iscarbon(target)) - var/obj/item/restraints/legcuffs/beartrap/B = new /obj/item/restraints/legcuffs/beartrap/energy(get_turf(target)) - B.Crossed(target) - ..() - -/obj/projectile/energy/trap/on_range() - new /obj/item/restraints/legcuffs/beartrap/energy(loc) - ..() - -/obj/projectile/energy/trap/cyborg - name = "Energy Bola" - icon_state = "e_snare" - nodamage = TRUE - paralyze = 0 - hitsound = 'sound/blank.ogg' - range = 10 - -/obj/projectile/energy/trap/cyborg/on_hit(atom/target, blocked = FALSE) - if(!ismob(target) || blocked >= 100) - do_sparks(1, TRUE, src) - qdel(src) - if(iscarbon(target)) - var/obj/item/restraints/legcuffs/beartrap/B = new /obj/item/restraints/legcuffs/beartrap/energy/cyborg(get_turf(target)) - B.Crossed(target) - QDEL_IN(src, 10) - ..() - -/obj/projectile/energy/trap/cyborg/on_range() - do_sparks(1, TRUE, src) - qdel(src) diff --git a/code/modules/projectiles/projectile/energy/nuclear_particle.dm b/code/modules/projectiles/projectile/energy/nuclear_particle.dm deleted file mode 100644 index 7cd3985f12..0000000000 --- a/code/modules/projectiles/projectile/energy/nuclear_particle.dm +++ /dev/null @@ -1,29 +0,0 @@ -//Nuclear particle projectile - a deadly side effect of fusion -/obj/projectile/energy/nuclear_particle - name = "nuclear particle" - icon_state = "nuclear_particle" - pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE - flag = "rad" - irradiate = 5000 - speed = 0.4 - hitsound = 'sound/blank.ogg' - impact_type = /obj/effect/projectile/impact/xray - var/static/list/particle_colors = list( - "red" = "#FF0000", - "blue" = "#00FF00", - "green" = "#0000FF", - "yellow" = "#FFFF00", - "cyan" = "#00FFFF", - "purple" = "#FF00FF" - ) - -/obj/projectile/energy/nuclear_particle/Initialize() - . = ..() - //Random color time! - var/our_color = pick(particle_colors) - add_atom_colour(particle_colors[our_color], FIXED_COLOUR_PRIORITY) - set_light(4, 4, 3, l_color = particle_colors[our_color]) //Range of 4, brightness of 3 - Same range as a flashlight - -/atom/proc/fire_nuclear_particle(angle = rand(0,360)) //used by fusion to fire random nuclear particles. Fires one particle in a random direction. - var/obj/projectile/energy/nuclear_particle/P = new /obj/projectile/energy/nuclear_particle(src) - P.fire(angle) diff --git a/code/modules/projectiles/projectile/energy/stun.dm b/code/modules/projectiles/projectile/energy/stun.dm deleted file mode 100644 index 69872af62a..0000000000 --- a/code/modules/projectiles/projectile/energy/stun.dm +++ /dev/null @@ -1,30 +0,0 @@ -/obj/projectile/energy/electrode - name = "electrode" - icon_state = "spark" - color = "#FFFF00" - nodamage = FALSE - paralyze = 100 - stutter = 5 - jitter = 20 - hitsound = 'sound/blank.ogg' - range = 7 - tracer_type = /obj/effect/projectile/tracer/stun - muzzle_type = /obj/effect/projectile/muzzle/stun - impact_type = /obj/effect/projectile/impact/stun - -/obj/projectile/energy/electrode/on_hit(atom/target, blocked = FALSE) - . = ..() - if(!ismob(target) || blocked >= 100) //Fully blocked by mob or collided with dense object - burst into sparks! - do_sparks(1, TRUE, src) - else if(iscarbon(target)) - var/mob/living/carbon/C = target - SEND_SIGNAL(C, COMSIG_ADD_MOOD_EVENT, "tased", /datum/mood_event/tased) - SEND_SIGNAL(C, COMSIG_LIVING_MINOR_SHOCK) - if(C.dna && C.dna.check_mutation(HULK)) - C.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ), forced = "hulk") - else if((C.status_flags & CANKNOCKDOWN) && !HAS_TRAIT(C, TRAIT_STUNIMMUNE)) - addtimer(CALLBACK(C, TYPE_PROC_REF(/mob/living/carbon, do_jitter_animation), jitter), 5) - -/obj/projectile/energy/electrode/on_range() //to ensure the bolt sparks when it reaches the end of its range if it didn't hit a target yet - do_sparks(1, TRUE, src) - ..() diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm index 25997cfc8c..64ddc72cab 100644 --- a/code/modules/projectiles/projectile/magic.dm +++ b/code/modules/projectiles/projectile/magic.dm @@ -114,120 +114,6 @@ smoke.set_up(0, t) smoke.start() -/obj/projectile/magic/change - name = "bolt of change" - icon_state = "ice_1" - damage = 0 - damage_type = BURN - nodamage = TRUE - -/obj/projectile/magic/change/on_hit(atom/change) - . = ..() - if(ismob(change)) - var/mob/M = change - if(M.anti_magic_check()) - M.visible_message("[src] fizzles on contact with [M]!") - qdel(src) - return BULLET_ACT_BLOCK - wabbajack(change) - qdel(src) - -/proc/wabbajack(mob/living/M) - if(!istype(M) || M.stat == DEAD || M.notransform || (GODMODE & M.status_flags)) - return - - M.notransform = TRUE - M.mobility_flags = NONE - M.icon = null - M.cut_overlays() - M.invisibility = INVISIBILITY_ABSTRACT - - var/list/contents = M.contents.Copy() - - for(var/obj/item/W in contents) - if(!M.dropItemToGround(W)) - qdel(W) - - var/mob/living/new_mob - - var/randomize = pick("monkey","humanoid","animal") - switch(randomize) - if("monkey") - new_mob = new /mob/living/carbon/monkey(M.loc) - - if("animal") - var/path = pick(/mob/living/simple_animal/hostile/carp, - /mob/living/simple_animal/hostile/bear, - /mob/living/simple_animal/hostile/mushroom, - /mob/living/simple_animal/hostile/statue, - /mob/living/simple_animal/hostile/retaliate/bat, - /mob/living/simple_animal/hostile/retaliate/goat, - /mob/living/simple_animal/hostile/killertomato, - /mob/living/simple_animal/hostile/poison/giant_spider, - /mob/living/simple_animal/hostile/poison/giant_spider/hunter, - /mob/living/simple_animal/hostile/gorilla, - /mob/living/simple_animal/parrot, - /mob/living/simple_animal/pet/dog/corgi, - /mob/living/simple_animal/crab, - /mob/living/simple_animal/pet/dog/pug, - /mob/living/simple_animal/pet/cat, - /mob/living/simple_animal/mouse, - /mob/living/simple_animal/chicken, - /mob/living/simple_animal/cow, - /mob/living/simple_animal/hostile/lizard, - /mob/living/simple_animal/pet/fox, - /mob/living/simple_animal/butterfly, - /mob/living/simple_animal/pet/cat/cak, - /mob/living/simple_animal/chick) - new_mob = new path(M.loc) - - if("humanoid") - new_mob = new /mob/living/carbon/human(M.loc) - - if(prob(50)) - var/list/chooseable_races = list() - for(var/speciestype in subtypesof(/datum/species)) - var/datum/species/S = speciestype - if(initial(S.changesource_flags) & WABBAJACK) - chooseable_races += speciestype - - if(chooseable_races.len) - new_mob.set_species(pick(chooseable_races)) - - var/datum/preferences/A = new() //Randomize appearance for the human - A.copy_to(new_mob, icon_updates=0) - - var/mob/living/carbon/human/H = new_mob - H.update_body() - H.update_hair() - H.update_body_parts() - H.dna.update_dna_identity() - - if(!new_mob) - return - new_mob.grant_language(/datum/language/common) - - // Some forms can still wear some items - for(var/obj/item/W in contents) - new_mob.equip_to_appropriate_slot(W) - - M.log_message("became [new_mob.real_name]", LOG_ATTACK, color="orange") - - new_mob.a_intent = INTENT_HARM - - M.wabbajack_act(new_mob) - - to_chat(new_mob, "My form morphs into that of a [randomize].") - - var/poly_msg = get_policy(POLICY_POLYMORPH) - if(poly_msg) - to_chat(new_mob, poly_msg) - - M.transfer_observers_to(new_mob) - - qdel(M) - return new_mob - /obj/projectile/magic/spellblade name = "blade energy" icon_state = "lavastaff" @@ -554,15 +440,3 @@ var/turf/T = get_turf(target) for(var/i=0, i<50, i+=10) addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(explosion), T, -1, exp_heavy, exp_light, exp_flash, FALSE, FALSE, exp_fire), i) - -//still magic related, but a different path - -/obj/projectile/temp/chill - name = "bolt of chills" - icon_state = "ice_2" - damage = 0 - damage_type = BURN - nodamage = FALSE - armor_penetration = 100 - temperature = 50 - flag = "magic" diff --git a/code/modules/projectiles/projectile/reusable/foam_dart.dm b/code/modules/projectiles/projectile/reusable/foam_dart.dm deleted file mode 100644 index f47c407060..0000000000 --- a/code/modules/projectiles/projectile/reusable/foam_dart.dm +++ /dev/null @@ -1,42 +0,0 @@ -/obj/projectile/bullet/reusable/foam_dart - name = "foam dart" - desc = "" - damage = 0 // It's a damn toy. - damage_type = OXY - nodamage = TRUE - icon = 'icons/obj/guns/toy.dmi' - icon_state = "foamdart_proj" - ammo_type = /obj/item/ammo_casing/caseless/foam_dart - range = 10 - var/modified = FALSE - var/obj/item/pen/pen = null - -/obj/projectile/bullet/reusable/foam_dart/handle_drop() - if(dropped) - return - var/turf/T = get_turf(src) - dropped = 1 - var/obj/item/ammo_casing/caseless/foam_dart/newcasing = new ammo_type(T) - newcasing.modified = modified - var/obj/projectile/bullet/reusable/foam_dart/newdart = newcasing.BB - newdart.modified = modified - newdart.damage = damage - newdart.nodamage = nodamage - newdart.damage_type = damage_type - if(pen) - newdart.pen = pen - pen.forceMove(newdart) - pen = null - newdart.update_icon() - - -/obj/projectile/bullet/reusable/foam_dart/Destroy() - pen = null - return ..() - -/obj/projectile/bullet/reusable/foam_dart/riot - name = "riot foam dart" - icon_state = "foamdart_riot_proj" - ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot - nodamage = FALSE - stamina = 25 diff --git a/code/modules/projectiles/projectile/special/curse.dm b/code/modules/projectiles/projectile/special/curse.dm deleted file mode 100644 index 79c87e176d..0000000000 --- a/code/modules/projectiles/projectile/special/curse.dm +++ /dev/null @@ -1,52 +0,0 @@ -/obj/effect/ebeam/curse_arm - name = "curse arm" - layer = LARGE_MOB_LAYER - -/obj/projectile/curse_hand - name = "curse hand" - icon_state = "cursehand0" - hitsound = 'sound/blank.ogg' - layer = LARGE_MOB_LAYER - damage_type = BURN - damage = 10 - paralyze = 20 - speed = 2 - range = 16 - var/datum/beam/arm - var/handedness = 0 - -/obj/projectile/curse_hand/Initialize(mapload) - . = ..() - ENABLE_BITFIELD(movement_type, UNSTOPPABLE) - handedness = prob(50) - icon_state = "cursehand[handedness]" - -/obj/projectile/curse_hand/fire(setAngle) - if(starting) - arm = starting.Beam(src, icon_state = "curse[handedness]", time = INFINITY, maxdistance = INFINITY, beam_type=/obj/effect/ebeam/curse_arm) - ..() - -/obj/projectile/curse_hand/prehit(atom/target) - if(target == original) - DISABLE_BITFIELD(movement_type, UNSTOPPABLE) - else if(!isturf(target)) - return FALSE - return ..() - -/obj/projectile/curse_hand/Destroy() - if(arm) - arm.End() - arm = null - if(CHECK_BITFIELD(movement_type, UNSTOPPABLE)) - playsound(src, 'sound/blank.ogg', 25, TRUE, -1) - var/turf/T = get_step(src, dir) - new/obj/effect/temp_visual/dir_setting/curse/hand(T, dir, handedness) - for(var/obj/effect/temp_visual/dir_setting/curse/grasp_portal/G in starting) - qdel(G) - new /obj/effect/temp_visual/dir_setting/curse/grasp_portal/fading(starting, dir) - var/datum/beam/D = starting.Beam(T, icon_state = "curse[handedness]", time = 32, maxdistance = INFINITY, beam_type=/obj/effect/ebeam/curse_arm, beam_sleep_time = 1) - for(var/b in D.elements) - var/obj/effect/ebeam/B = b - animate(B, alpha = 0, time = 32) - return ..() - diff --git a/code/modules/projectiles/projectile/special/floral.dm b/code/modules/projectiles/projectile/special/floral.dm deleted file mode 100644 index cdf427a474..0000000000 --- a/code/modules/projectiles/projectile/special/floral.dm +++ /dev/null @@ -1,15 +0,0 @@ -/obj/projectile/energy/floramut - name = "alpha somatoray" - icon_state = "energy" - damage = 0 - damage_type = TOX - nodamage = TRUE - flag = "energy" - -/obj/projectile/energy/florayield - name = "beta somatoray" - icon_state = "energy2" - damage = 0 - damage_type = TOX - nodamage = TRUE - flag = "energy" diff --git a/code/modules/projectiles/projectile/special/hallucination.dm b/code/modules/projectiles/projectile/special/hallucination.dm deleted file mode 100644 index 0acb9503ca..0000000000 --- a/code/modules/projectiles/projectile/special/hallucination.dm +++ /dev/null @@ -1,230 +0,0 @@ -/obj/projectile/hallucination - name = "bullet" - icon = null - icon_state = null - hitsound = "" - suppressed = TRUE - ricochets_max = 0 - ricochet_chance = 0 - damage = 0 - nodamage = TRUE - projectile_type = /obj/projectile/hallucination - log_override = TRUE - var/hal_icon_state - var/image/fake_icon - var/mob/living/carbon/hal_target - var/hal_fire_sound - var/hal_hitsound - var/hal_hitsound_wall - var/hal_impact_effect - var/hal_impact_effect_wall - var/hit_duration - var/hit_duration_wall - -/obj/projectile/hallucination/fire() - ..() - fake_icon = image('icons/obj/projectiles.dmi', src, hal_icon_state, ABOVE_MOB_LAYER) - if(hal_target.client) - hal_target.client.images += fake_icon - -/obj/projectile/hallucination/Destroy() - if(hal_target.client) - hal_target.client.images -= fake_icon - QDEL_NULL(fake_icon) - return ..() - -/obj/projectile/hallucination/Bump(atom/A) - if(!ismob(A)) - if(hal_hitsound_wall) - hal_target.playsound_local(loc, hal_hitsound_wall, 40, 1) - if(hal_impact_effect_wall) - spawn_hit(A, TRUE) - else if(A == hal_target) - if(hal_hitsound) - hal_target.playsound_local(A, hal_hitsound, 100, 1) - target_on_hit(A) - qdel(src) - return TRUE - -/obj/projectile/hallucination/proc/target_on_hit(mob/M) - if(M == hal_target) - to_chat(hal_target, "[M] is hit by \a [src] in the chest!") - hal_apply_effect() - else if(M in view(hal_target)) - to_chat(hal_target, "[M] is hit by \a [src] in the chest!!") - if(damage_type == BRUTE) - var/splatter_dir = dir - if(starting) - splatter_dir = get_dir(starting, get_turf(M)) - spawn_blood(M, splatter_dir) - else if(hal_impact_effect) - spawn_hit(M, FALSE) - -/obj/projectile/hallucination/proc/spawn_blood(mob/M, set_dir) - set waitfor = 0 - if(!hal_target.client) - return - - var/splatter_icon_state - if(set_dir in GLOB.diagonals) - splatter_icon_state = "splatter[pick(1, 2, 6)]" - else - splatter_icon_state = "splatter[pick(3, 4, 5)]" - - var/image/blood = image('icons/effects/blood.dmi', M, splatter_icon_state, ABOVE_MOB_LAYER) - var/target_pixel_x = 0 - var/target_pixel_y = 0 - switch(set_dir) - if(NORTH) - target_pixel_y = 16 - if(SOUTH) - target_pixel_y = -16 - layer = ABOVE_MOB_LAYER - if(EAST) - target_pixel_x = 16 - if(WEST) - target_pixel_x = -16 - if(NORTHEAST) - target_pixel_x = 16 - target_pixel_y = 16 - if(NORTHWEST) - target_pixel_x = -16 - target_pixel_y = 16 - if(SOUTHEAST) - target_pixel_x = 16 - target_pixel_y = -16 - layer = ABOVE_MOB_LAYER - if(SOUTHWEST) - target_pixel_x = -16 - target_pixel_y = -16 - layer = ABOVE_MOB_LAYER - hal_target.client.images += blood - animate(blood, pixel_x = target_pixel_x, pixel_y = target_pixel_y, alpha = 0, time = 5) - addtimer(CALLBACK(src, PROC_REF(cleanup_blood)), 5) - -/obj/projectile/hallucination/proc/cleanup_blood(image/blood) - hal_target.client.images -= blood - qdel(blood) - -/obj/projectile/hallucination/proc/spawn_hit(atom/A, is_wall) - set waitfor = 0 - if(!hal_target.client) - return - - var/image/hit_effect = image('icons/effects/blood.dmi', A, is_wall ? hal_impact_effect_wall : hal_impact_effect, ABOVE_MOB_LAYER) - hit_effect.pixel_x = A.pixel_x + rand(-4,4) - hit_effect.pixel_y = A.pixel_y + rand(-4,4) - hal_target.client.images += hit_effect - sleep(is_wall ? hit_duration_wall : hit_duration) - hal_target.client.images -= hit_effect - qdel(hit_effect) - - -/obj/projectile/hallucination/proc/hal_apply_effect() - return - -/obj/projectile/hallucination/bullet - name = "bullet" - hal_icon_state = "bullet" - hal_fire_sound = "gunshot" - hal_hitsound = 'sound/blank.ogg' - hal_hitsound_wall = "ricochet" - hal_impact_effect = "impact_bullet" - hal_impact_effect_wall = "impact_bullet" - hit_duration = 5 - hit_duration_wall = 5 - -/obj/projectile/hallucination/bullet/hal_apply_effect() - hal_target.adjustStaminaLoss(60) - -/obj/projectile/hallucination/laser - name = "laser" - damage_type = BURN - hal_icon_state = "laser" - hal_fire_sound = 'sound/blank.ogg' - hal_hitsound = 'sound/blank.ogg' - hal_hitsound_wall = 'sound/blank.ogg' - hal_impact_effect = "impact_laser" - hal_impact_effect_wall = "impact_laser_wall" - hit_duration = 4 - hit_duration_wall = 10 - pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE - -/obj/projectile/hallucination/laser/hal_apply_effect() - hal_target.adjustStaminaLoss(20) - hal_target.blur_eyes(2) - -/obj/projectile/hallucination/taser - name = "electrode" - damage_type = BURN - hal_icon_state = "spark" - color = "#FFFF00" - hal_fire_sound = 'sound/blank.ogg' - hal_hitsound = 'sound/blank.ogg' - hal_hitsound_wall = null - hal_impact_effect = null - hal_impact_effect_wall = null - -/obj/projectile/hallucination/taser/hal_apply_effect() - hal_target.Paralyze(100) - hal_target.stuttering += 20 - if(hal_target.dna && hal_target.dna.check_mutation(HULK)) - hal_target.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ), forced = "hulk") - else if((hal_target.status_flags & CANKNOCKDOWN) && !HAS_TRAIT(hal_target, TRAIT_STUNIMMUNE)) - addtimer(CALLBACK(hal_target, TYPE_PROC_REF(/mob/living/carbon, do_jitter_animation), 20), 5) - -/obj/projectile/hallucination/disabler - name = "disabler beam" - damage_type = STAMINA - hal_icon_state = "omnilaser" - hal_fire_sound = 'sound/blank.ogg' - hal_hitsound = 'sound/blank.ogg' - hal_hitsound_wall = 'sound/blank.ogg' - hal_impact_effect = "impact_laser_blue" - hal_impact_effect_wall = null - hit_duration = 4 - pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE - -/obj/projectile/hallucination/disabler/hal_apply_effect() - hal_target.adjustStaminaLoss(25) - -/obj/projectile/hallucination/ebow - name = "bolt" - damage_type = TOX - hal_icon_state = "cbbolt" - hal_fire_sound = 'sound/blank.ogg' - hal_hitsound = null - hal_hitsound_wall = null - hal_impact_effect = null - hal_impact_effect_wall = null - -/obj/projectile/hallucination/ebow/hal_apply_effect() - hal_target.Paralyze(100) - hal_target.stuttering += 5 - hal_target.adjustStaminaLoss(8) - -/obj/projectile/hallucination/change - name = "bolt of change" - damage_type = BURN - hal_icon_state = "ice_1" - hal_fire_sound = 'sound/blank.ogg' - hal_hitsound = null - hal_hitsound_wall = null - hal_impact_effect = null - hal_impact_effect_wall = null - -/obj/projectile/hallucination/change/hal_apply_effect() - new /datum/hallucination/self_delusion(hal_target, TRUE, wabbajack = FALSE) - -/obj/projectile/hallucination/death - name = "bolt of death" - damage_type = BURN - hal_icon_state = "pulse1_bl" - hal_fire_sound = 'sound/blank.ogg' - hal_hitsound = null - hal_hitsound_wall = null - hal_impact_effect = null - hal_impact_effect_wall = null - -/obj/projectile/hallucination/death/hal_apply_effect() - new /datum/hallucination/death(hal_target, TRUE) diff --git a/code/modules/projectiles/projectile/special/ion.dm b/code/modules/projectiles/projectile/special/ion.dm deleted file mode 100644 index 1e4ff220e8..0000000000 --- a/code/modules/projectiles/projectile/special/ion.dm +++ /dev/null @@ -1,17 +0,0 @@ -/obj/projectile/ion - name = "ion bolt" - icon_state = "ion" - damage = 0 - damage_type = BURN - nodamage = TRUE - flag = "energy" - impact_effect_type = /obj/effect/temp_visual/impact_effect/ion - var/emp_radius = 1 - -/obj/projectile/ion/on_hit(atom/target, blocked = FALSE) - ..() - empulse(target, emp_radius, emp_radius) - return BULLET_ACT_HIT - -/obj/projectile/ion/weak - emp_radius = 0 diff --git a/code/modules/projectiles/projectile/special/meteor.dm b/code/modules/projectiles/projectile/special/meteor.dm deleted file mode 100644 index afdb49568f..0000000000 --- a/code/modules/projectiles/projectile/special/meteor.dm +++ /dev/null @@ -1,19 +0,0 @@ -/obj/projectile/meteor - name = "meteor" - icon = 'icons/obj/meteor.dmi' - icon_state = "small1" - damage = 0 - damage_type = BRUTE - nodamage = TRUE - flag = "bullet" - -/obj/projectile/meteor/Bump(atom/A) - if(A == firer) - forceMove(A.loc) - return - A.ex_act(EXPLODE_HEAVY) - playsound(src.loc, 'sound/blank.ogg', 40, TRUE) - for(var/mob/M in urange(10, src)) - if(!M.stat) - shake_camera(M, 3, 1) - qdel(src) diff --git a/code/modules/projectiles/projectile/special/mindflayer.dm b/code/modules/projectiles/projectile/special/mindflayer.dm deleted file mode 100644 index d91735cb19..0000000000 --- a/code/modules/projectiles/projectile/special/mindflayer.dm +++ /dev/null @@ -1,9 +0,0 @@ -/obj/projectile/beam/mindflayer - name = "flayer ray" - -/obj/projectile/beam/mindflayer/on_hit(atom/target, blocked = FALSE) - . = ..() - if(ishuman(target)) - var/mob/living/carbon/human/M = target - M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 20) - M.hallucination += 30 diff --git a/code/modules/projectiles/projectile/special/neurotoxin.dm b/code/modules/projectiles/projectile/special/neurotoxin.dm deleted file mode 100644 index e4ee605aee..0000000000 --- a/code/modules/projectiles/projectile/special/neurotoxin.dm +++ /dev/null @@ -1,6 +0,0 @@ -/obj/projectile/bullet/neurotoxin - name = "neurotoxin spit" - icon_state = "neurotoxin" - damage = 5 - damage_type = TOX - paralyze = 100 diff --git a/code/modules/projectiles/projectile/special/plasma.dm b/code/modules/projectiles/projectile/special/plasma.dm deleted file mode 100644 index b398731cfd..0000000000 --- a/code/modules/projectiles/projectile/special/plasma.dm +++ /dev/null @@ -1,40 +0,0 @@ -/obj/projectile/plasma - name = "plasma blast" - icon_state = "plasmacutter" - damage_type = BRUTE - damage = 5 - range = 4 - dismemberment = 20 - impact_effect_type = /obj/effect/temp_visual/impact_effect/purple_laser - var/mine_range = 3 //mines this many additional tiles of rock - tracer_type = /obj/effect/projectile/tracer/plasma_cutter - muzzle_type = /obj/effect/projectile/muzzle/plasma_cutter - impact_type = /obj/effect/projectile/impact/plasma_cutter - -/obj/projectile/plasma/on_hit(atom/target) - . = ..() - if(ismineralturf(target)) - var/turf/closed/mineral/M = target - M.gets_drilled(firer, FALSE) - if(mine_range) - mine_range-- - range++ - if(range > 0) - return BULLET_ACT_FORCE_PIERCE - -/obj/projectile/plasma/adv - damage = 7 - range = 5 - mine_range = 5 - -/obj/projectile/plasma/adv/mech - damage = 10 - range = 9 - mine_range = 3 - -/obj/projectile/plasma/turret - //Between normal and advanced for damage, made a beam so not the turret does not destroy glass - name = "plasma beam" - damage = 24 - range = 7 - pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE diff --git a/code/modules/projectiles/projectile/special/rocket.dm b/code/modules/projectiles/projectile/special/rocket.dm deleted file mode 100644 index 0fa5bb4e40..0000000000 --- a/code/modules/projectiles/projectile/special/rocket.dm +++ /dev/null @@ -1,65 +0,0 @@ -/obj/projectile/bullet/gyro - name ="explosive bolt" - icon_state= "bolter" - damage = 50 - -/obj/projectile/bullet/gyro/on_hit(atom/target, blocked = FALSE) - ..() - explosion(target, -1, 0, 2) - return BULLET_ACT_HIT - -/obj/projectile/bullet/a84mm - name ="\improper HEDP rocket" - desc = "" - icon_state= "84mm-hedp" - damage = 80 - var/anti_armour_damage = 200 - armor_penetration = 100 - dismemberment = 100 - -/obj/projectile/bullet/a84mm/on_hit(atom/target, blocked = FALSE) - ..() - explosion(target, -1, 1, 3, 1, 0, flame_range = 4) - - return BULLET_ACT_HIT - -/obj/projectile/bullet/a84mm_he - name ="\improper HE missile" - desc = "" - icon_state = "missile" - damage = 30 - ricochets_max = 0 //it's a MISSILE - -/obj/projectile/bullet/a84mm_he/on_hit(atom/target, blocked=0) - ..() - if(!isliving(target)) //if the target isn't alive, so is a wall or something - explosion(target, 0, 1, 2, 4) - else - explosion(target, 0, 0, 2, 4) - return BULLET_ACT_HIT - -/obj/projectile/bullet/a84mm_br - name ="\improper HE missile" - desc = "" - icon_state = "missile" - damage = 30 - ricochets_max = 0 //it's a MISSILE - var/sturdy = list( - /turf/closed, - ) - -/obj/item/broken_missile - name = "\improper broken missile" - desc = "" - icon = 'icons/obj/projectiles.dmi' - icon_state = "missile_broken" - w_class = WEIGHT_CLASS_TINY - - -/obj/projectile/bullet/a84mm_br/on_hit(atom/target, blocked=0) - ..() - for(var/i in sturdy) - if(istype(target, i)) - explosion(target, 0, 1, 1, 2) - return BULLET_ACT_HIT - new /obj/item/broken_missile(get_turf(src), 1) diff --git a/code/modules/projectiles/projectile/special/temperature.dm b/code/modules/projectiles/projectile/special/temperature.dm deleted file mode 100644 index 163f00bf02..0000000000 --- a/code/modules/projectiles/projectile/special/temperature.dm +++ /dev/null @@ -1,29 +0,0 @@ -/obj/projectile/temp - name = "freeze beam" - icon_state = "ice_2" - damage = 0 - damage_type = BURN - nodamage = FALSE - flag = "energy" - var/temperature = 100 - -/obj/projectile/temp/on_hit(atom/target, blocked = 0) - . = ..() - if(isliving(target)) - var/mob/living/L = target - L.adjust_bodytemperature(((100-blocked)/100)*(temperature - L.bodytemperature)) // the new body temperature is adjusted by 100-blocked % of the delta between body temperature and the bullet's effect temperature - -/obj/projectile/temp/hot - name = "heat beam" - temperature = 400 - -/obj/projectile/temp/cryo - name = "cryo beam" - range = 3 - -/obj/projectile/temp/cryo/on_range() - var/turf/T = get_turf(src) - if(isopenturf(T)) - var/turf/open/O = T - O.freon_gas_act() - return ..() diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm index 9613113a40..6750503ad4 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm @@ -623,8 +623,6 @@ All effects don't start immediately, but rather get worse over time; the rate is M.adjustStaminaLoss(-10, 0) if(prob(20)) new /datum/hallucination/items_other(M) - if(prob(10)) - new /datum/hallucination/stray_bullet(M) ..() . = 1 @@ -1149,12 +1147,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "Fetching Fizz" glass_desc = "" - -/datum/reagent/consumable/ethanol/fetching_fizz/on_mob_life(mob/living/carbon/M) - for(var/obj/item/stack/ore/O in orange(3, M)) - step_towards(O, get_turf(M)) - return ..() - //Another reference. Heals those in critical condition extremely quickly. /datum/reagent/consumable/ethanol/hearty_punch name = "Hearty Punch" @@ -1877,18 +1869,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "Bug Spray" glass_desc = "" -/datum/reagent/consumable/ethanol/bug_spray/on_mob_life(mob/living/carbon/M) -//Bugs should not drink Bug spray. - if(ismoth(M) || isflyperson(M)) - M.adjustToxLoss(1,0) - return ..() -/datum/reagent/consumable/ethanol/bug_spray/on_mob_metabolize(mob/living/carbon/M) - - if(ismoth(M) || isflyperson(M)) - M.emote("scream") - return ..() - - /datum/reagent/consumable/ethanol/applejack name = "Applejack" description = "The perfect beverage for when you feel the need to horse around." diff --git a/code/modules/reagents/chemistry/reagents/drug_reagents.dm b/code/modules/reagents/chemistry/reagents/drug_reagents.dm index 960255a415..ebd0087c22 100644 --- a/code/modules/reagents/chemistry/reagents/drug_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drug_reagents.dm @@ -294,106 +294,6 @@ ..() . = 1 -/datum/reagent/drug/bath_salts - name = "Bath Salts" - description = "Makes you impervious to stuns and grants a stamina regeneration buff, but you will be a nearly uncontrollable tramp-bearded raving lunatic." - reagent_state = LIQUID - color = "#FAFAFA" - overdose_threshold = 20 - addiction_threshold = 10 - taste_description = "salt" // because they're bathsalts? - var/datum/brain_trauma/special/psychotic_brawling/bath_salts/rage - -/datum/reagent/drug/bath_salts/on_mob_metabolize(mob/living/L) - ..() - ADD_TRAIT(L, TRAIT_STUNIMMUNE, type) - ADD_TRAIT(L, TRAIT_SLEEPIMMUNE, type) - if(iscarbon(L)) - var/mob/living/carbon/C = L - rage = new() - C.gain_trauma(rage, TRAUMA_RESILIENCE_ABSOLUTE) - -/datum/reagent/drug/bath_salts/on_mob_end_metabolize(mob/living/L) - REMOVE_TRAIT(L, TRAIT_STUNIMMUNE, type) - REMOVE_TRAIT(L, TRAIT_SLEEPIMMUNE, type) - if(rage) - QDEL_NULL(rage) - ..() - -/datum/reagent/drug/bath_salts/on_mob_life(mob/living/carbon/M) - var/high_message = pick("You feel amped up.", "You feel ready.", "You feel like you can push it to the limit.") - if(prob(5)) - to_chat(M, "[high_message]") - SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "salted", /datum/mood_event/stimulant_heavy, name) - M.adjustStaminaLoss(-5, 0) - M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 4) - M.hallucination += 5 - if((M.mobility_flags & MOBILITY_MOVE) && !ismovableatom(M.loc)) - step(M, pick(GLOB.cardinals)) - step(M, pick(GLOB.cardinals)) - ..() - . = 1 - -/datum/reagent/drug/bath_salts/overdose_process(mob/living/M) - M.hallucination += 5 - if((M.mobility_flags & MOBILITY_MOVE) && !ismovableatom(M.loc)) - for(var/i in 1 to 8) - step(M, pick(GLOB.cardinals)) - if(prob(20)) - M.emote(pick("twitch","drool","moan")) - if(prob(33)) - M.drop_all_held_items() - ..() - -/datum/reagent/drug/bath_salts/addiction_act_stage1(mob/living/M) - M.hallucination += 10 - if((M.mobility_flags & MOBILITY_MOVE) && !ismovableatom(M.loc)) - for(var/i = 0, i < 8, i++) - step(M, pick(GLOB.cardinals)) - M.Jitter(5) - M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 10) - if(prob(20)) - M.emote(pick("twitch","drool","moan")) - ..() - -/datum/reagent/drug/bath_salts/addiction_act_stage2(mob/living/M) - M.hallucination += 20 - if((M.mobility_flags & MOBILITY_MOVE) && !ismovableatom(M.loc)) - for(var/i = 0, i < 8, i++) - step(M, pick(GLOB.cardinals)) - M.Jitter(10) - M.Dizzy(10) - M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 10) - if(prob(30)) - M.emote(pick("twitch","drool","moan")) - ..() - -/datum/reagent/drug/bath_salts/addiction_act_stage3(mob/living/M) - M.hallucination += 30 - if((M.mobility_flags & MOBILITY_MOVE) && !ismovableatom(M.loc)) - for(var/i = 0, i < 12, i++) - step(M, pick(GLOB.cardinals)) - M.Jitter(15) - M.Dizzy(15) - M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 10) - if(prob(40)) - M.emote(pick("twitch","drool","moan")) - ..() - -/datum/reagent/drug/bath_salts/addiction_act_stage4(mob/living/carbon/human/M) - M.hallucination += 30 - if((M.mobility_flags & MOBILITY_MOVE) && !ismovableatom(M.loc)) - for(var/i = 0, i < 16, i++) - step(M, pick(GLOB.cardinals)) - M.Jitter(50) - M.Dizzy(50) - M.adjustToxLoss(5, 0) - M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 10) - if(prob(50)) - M.emote(pick("twitch","drool","moan")) - ..() - . = 1 - /datum/reagent/drug/aranesp name = "Aranesp" description = "Amps you up, gets you going, and rapidly restores stamina damage. Side effects include breathlessness and toxicity." diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index 2e218f5b8c..b7ae47634f 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -453,11 +453,10 @@ taste_description = "chalky wheat" /datum/reagent/consumable/flour/reaction_turf(turf/T, reac_volume) - if(!isspaceturf(T)) - var/obj/effect/decal/cleanable/food/flour/reagentdecal = new(T) - reagentdecal = locate() in T //Might have merged with flour already there. - if(reagentdecal) - reagentdecal.reagents.add_reagent(/datum/reagent/consumable/flour, reac_volume) + var/obj/effect/decal/cleanable/food/flour/reagentdecal = new(T) + reagentdecal = locate() in T //Might have merged with flour already there. + if(reagentdecal) + reagentdecal.reagents.add_reagent(/datum/reagent/consumable/flour, reac_volume) /datum/reagent/consumable/cherryjelly name = "Cherry Jelly" diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 5c66e8b8ea..3fe87c74f3 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -133,33 +133,13 @@ /datum/reagent/water/reaction_turf(turf/open/T, reac_volume) if(!istype(T)) return -// var/CT = cooling_temperature - if(reac_volume >= 5) -// T.MakeSlippery(TURF_WET_WATER, reac_volume*1.5 SECONDS, reac_volume*1.5 SECONDS) - T.add_water(reac_volume * 3) //nuproc - -// for(var/mob/living/simple_animal/slime/M in T) -// M.apply_water() - -// if(reac_volume >= 100) -// for(var/obj/effect/decal/cleanable/blood/target in T) -// qdel(target) -// for(var/obj/effect/decal/cleanable/trail_holder/target in T) -// qdel(target) + T.add_water(reac_volume * 3) //nuprocet) var/obj/effect/hotspot/hotspot = (locate(/obj/effect/hotspot) in T) - if(hotspot && !isspaceturf(T)) -// if(T.air) -// var/datum/gas_mixture/G = T.air -// G.temperature = max(min(G.temperature-(CT*1000),G.temperature/CT),TCMB) -// G.react(src) + if(hotspot) new /obj/effect/temp_visual/small_smoke(T) qdel(hotspot) - //fixed -// var/obj/effect/acid/A = (locate(/obj/effect/acid) in T) -// if(A) -// A.acid_level = max(A.acid_level - reac_volume*50, 0) /* * Water reaction to an object @@ -487,34 +467,6 @@ race = /datum/species/lizard taste_description = "dragon's breath but not as cool" -/datum/reagent/mutationtoxin/fly - name = "Fly Mutation Toxin" - description = "An insectifying toxin." - color = "#5EFF3B" //RGB: 94, 255, 59 - race = /datum/species/fly - taste_description = "trash" - -/datum/reagent/mutationtoxin/moth - name = "Moth Mutation Toxin" - description = "A glowing toxin." - color = "#5EFF3B" //RGB: 94, 255, 59 - race = /datum/species/moth - taste_description = "clothing" - -/datum/reagent/mutationtoxin/pod - name = "Podperson Mutation Toxin" - description = "A vegetalizing toxin." - color = "#5EFF3B" //RGB: 94, 255, 59 - race = /datum/species/pod - taste_description = "flowers" - -/datum/reagent/mutationtoxin/golem - name = "Golem Mutation Toxin" - description = "A crystal toxin." - color = "#5EFF3B" //RGB: 94, 255, 59 - race = /datum/species/golem/random - taste_description = "rocks" - /datum/reagent/mutationtoxin/abductor name = "Abductor Mutation Toxin" description = "An alien toxin." @@ -552,13 +504,6 @@ race = /datum/species/shadow taste_description = "the night" -/datum/reagent/mutationtoxin/plasma - name = "Plasma Mutation Toxin" - description = "A plasma-based toxin." - color = "#5EFF3B" //RGB: 94, 255, 59 - race = /datum/species/plasmaman - taste_description = "plasma" - #undef MUT_MSG_IMMEDIATE #undef MUT_MSG_EXTENDED #undef MUT_MSG_ABOUT2TURN @@ -617,13 +562,6 @@ color = "#6E3B08" // rgb: 110, 59, 8 taste_description = "metal" -/datum/reagent/copper/reaction_obj(obj/O, reac_volume) - if(istype(O, /obj/item/stack/sheet/metal)) - var/obj/item/stack/sheet/metal/M = O - reac_volume = min(reac_volume, M.amount) - new/obj/item/stack/tile/bronze(get_turf(M), reac_volume) - M.use(reac_volume) - /datum/reagent/nitrogen name = "Nitrogen" description = "A colorless, odorless, tasteless gas. A simple asphyxiant that can silently displace vital oxygen." @@ -664,7 +602,7 @@ taste_mult = 0 // apparently tasteless. /datum/reagent/mercury/on_mob_life(mob/living/carbon/M) - if((M.mobility_flags & MOBILITY_MOVE) && !isspaceturf(M.loc)) + if((M.mobility_flags & MOBILITY_MOVE)) step(M, pick(GLOB.cardinals)) if(prob(5)) M.emote(pick("twitch","drool","moan")) @@ -686,10 +624,9 @@ taste_description = "sour chalk" /datum/reagent/carbon/reaction_turf(turf/T, reac_volume) - if(!isspaceturf(T)) - var/obj/effect/decal/cleanable/dirt/D = locate() in T.contents - if(!D) - new /obj/effect/decal/cleanable/dirt(T) + var/obj/effect/decal/cleanable/dirt/D = locate() in T.contents + if(!D) + new /obj/effect/decal/cleanable/dirt(T) /datum/reagent/chlorine name = "Chlorine" @@ -737,7 +674,7 @@ taste_description = "metal" /datum/reagent/lithium/on_mob_life(mob/living/carbon/M) - if((M.mobility_flags & MOBILITY_MOVE) && !isspaceturf(M.loc)) + if((M.mobility_flags & MOBILITY_MOVE)) step(M, pick(GLOB.cardinals)) if(prob(5)) M.emote(pick("twitch","drool","moan")) @@ -796,11 +733,10 @@ /datum/reagent/uranium/reaction_turf(turf/T, reac_volume) if(reac_volume >= 3) - if(!isspaceturf(T)) - var/obj/effect/decal/cleanable/greenglow/GG = locate() in T.contents - if(!GG) - GG = new/obj/effect/decal/cleanable/greenglow(T) - GG.reagents.add_reagent(type, reac_volume) + var/obj/effect/decal/cleanable/greenglow/GG = locate() in T.contents + if(!GG) + GG = new/obj/effect/decal/cleanable/greenglow(T) + GG.reagents.add_reagent(type, reac_volume) /datum/reagent/uranium/radium name = "Radium" @@ -1266,101 +1202,6 @@ color = "#BC8A00" taste_description = "metal" -/datum/reagent/carpet - name = "Carpet" - description = "For those that need a more creative way to roll out a red carpet." - reagent_state = LIQUID - color = "#771100" - taste_description = "carpet" // Your tounge feels furry. - var/carpet_type = /turf/open/floor/carpet - -/datum/reagent/carpet/reaction_turf(turf/T, reac_volume) - if(isplatingturf(T) || istype(T, /turf/open/floor/plasteel)) - var/turf/open/floor/F = T - F.PlaceOnTop(carpet_type, flags = CHANGETURF_INHERIT_AIR) - ..() - -/datum/reagent/carpet/black - name = "Black Carpet" - description = "The carpet also comes in... BLAPCK" //yes, the typo is intentional - color = "#1E1E1E" - taste_description = "licorice" - carpet_type = /turf/open/floor/carpet/black - -/datum/reagent/carpet/blue - name = "Blue Carpet" - description = "For those that really need to chill out for a while." - color = "#0000DC" - taste_description = "frozen carpet" - carpet_type = /turf/open/floor/carpet/blue - -/datum/reagent/carpet/cyan - name = "Cyan Carpet" - description = "For those that need a throwback to the years of using poison as a construction material. Smells like asbestos." - color = "#00B4FF" - taste_description = "asbestos" - carpet_type = /turf/open/floor/carpet/cyan - -/datum/reagent/carpet/green - name = "Green Carpet" - description = "For those that need the perfect flourish for green eggs and ham." - color = "#A8E61D" - taste_description = "Green" //the caps is intentional - carpet_type = /turf/open/floor/carpet/green - -/datum/reagent/carpet/orange - name = "Orange Carpet" - description = "For those that prefer a healthy carpet to go along with their healthy diet." - color = "#E78108" - taste_description = "orange juice" - carpet_type = /turf/open/floor/carpet/orange - -/datum/reagent/carpet/purple - name = "Purple Carpet" - description = "For those that need to waste copious amounts of healing jelly in order to look fancy." - color = "#91D865" - taste_description = "jelly" - carpet_type = /turf/open/floor/carpet/purple - -/datum/reagent/carpet/red - name = "Red Carpet" - description = "For those that need an even redder carpet." - color = "#731008" - taste_description = "blood and gibs" - carpet_type = /turf/open/floor/carpet/red - -/datum/reagent/carpet/royal - name = "Royal Carpet?" - description = "For those that break the game and need to make an issue report." - -/datum/reagent/carpet/royal/on_mob_life(mob/living/carbon/M) - . = ..() - if(!M.mind?.assigned_role) - return - switch(M.mind.assigned_role) - if("Chief Medical Officer", "Captain", "Chief Engineer", "Research Director", "Head of Personnel") - if(prob(10)) - to_chat(M, "You feel like royalty.") - if(prob(5)) - M.say(pick("Peasants..","This carpet is worth more than my contracts!","I could fire you at any time..."), forced = "royal carpet") - if("Quartermaster") - if(prob(15)) - to_chat(M, "You feel like an impostor...") - -/datum/reagent/carpet/royal/black - name = "Royal Black Carpet" - description = "For those that feel the need to show off their timewasting skills." - color = "#000000" - taste_description = "royalty" - carpet_type = /turf/open/floor/carpet/royalblack - -/datum/reagent/carpet/royal/blue - name = "Royal Blue Carpet" - description = "For those that feel the need to show off their timewasting skills.. in BLUE." - color = "#5A64C8" - taste_description = "blueyalty" //also intentional - carpet_type = /turf/open/floor/carpet/royalblue - /datum/reagent/bromine name = "Bromine" description = "A brownish liquid that's highly reactive. Useful for stopping free radicals, but not intended for human consumption." @@ -1535,12 +1376,6 @@ if(istype(T)) T.MakeDry(ALL, TRUE, reac_volume * 5 SECONDS) //50 deciseconds per unit -/datum/reagent/drying_agent/reaction_obj(obj/O, reac_volume) - if(O.type == /obj/item/clothing/shoes/galoshes) - var/t_loc = get_turf(O) - qdel(O) - new /obj/item/clothing/shoes/galoshes/dry(t_loc) - // Bee chemicals /datum/reagent/royal_bee_jelly diff --git a/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm b/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm index 4a862efc3d..9e75b1ff84 100644 --- a/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm @@ -1,20 +1,4 @@ -/datum/reagent/thermite - name = "Thermite" - description = "Thermite produces an aluminothermic reaction known as a thermite reaction. Can be used to melt walls." - reagent_state = SOLID - color = "#550000" - taste_description = "sweet tasting metal" - -/datum/reagent/thermite/reaction_turf(turf/T, reac_volume) - if(reac_volume >= 1) - T.AddComponent(/datum/component/thermite, reac_volume) - -/datum/reagent/thermite/on_mob_life(mob/living/carbon/M) - M.adjustFireLoss(1, 0) - ..() - return TRUE - /datum/reagent/nitroglycerin name = "Nitroglycerin" description = "Nitroglycerin is a heavy, colorless, oily, explosive liquid obtained by nitrating glycerol." @@ -28,49 +12,6 @@ color = "#FFFF00" taste_description = "metal" -/datum/reagent/clf3 - name = "Chlorine Trifluoride" - description = "Makes a temporary 3x3 fireball when it comes into existence, so be careful when mixing. ClF3 applied to a surface burns things that wouldn't otherwise burn, sometimes through the very floors of the station and exposing it to the vacuum of space." - reagent_state = LIQUID - color = "#FFC8C8" - metabolization_rate = 4 - taste_description = "burning" - -/datum/reagent/clf3/on_mob_life(mob/living/carbon/M) - M.adjust_fire_stacks(2) - var/burndmg = max(0.3*M.fire_stacks, 0.3) - M.adjustFireLoss(burndmg, 0) - ..() - return TRUE - -/datum/reagent/clf3/reaction_turf(turf/T, reac_volume) - if(isplatingturf(T)) - var/turf/open/floor/plating/F = T - if(prob(10 + F.burnt + 5*F.broken)) //broken or burnt plating is more susceptible to being destroyed - F.ScrapeAway(flags = CHANGETURF_INHERIT_AIR) - if(isfloorturf(T)) - var/turf/open/floor/F = T - if(prob(reac_volume)) - F.make_plating() - else if(prob(reac_volume)) - F.burn_tile() - if(isfloorturf(F)) - for(var/turf/turf in range(1,F)) - if(!locate(/obj/effect/hotspot) in turf) - new /obj/effect/hotspot(F) - if(iswallturf(T)) - var/turf/closed/wall/W = T - if(prob(reac_volume)) - W.ScrapeAway() - -/datum/reagent/clf3/reaction_mob(mob/living/M, method=TOUCH, reac_volume) - if(istype(M)) - if(method != INGEST && method != INJECT) - M.adjust_fire_stacks(min(reac_volume/5, 10)) - M.IgniteMob() - if(!locate(/obj/effect/hotspot) in M.loc) - new /obj/effect/hotspot(M.loc) - /datum/reagent/sorium name = "Sorium" description = "Sends everything flying from the detonation point." @@ -96,8 +37,6 @@ /datum/reagent/gunpowder/on_mob_life(mob/living/carbon/M) . = TRUE ..() - if(!isplasmaman(M)) - return M.set_drugginess(15) if(M.hallucination < volume) M.hallucination += 5 @@ -261,7 +200,7 @@ F.lifetime = initial(F.lifetime) //reduce object churn a little bit when using smoke by keeping existing foam alive a bit longer var/obj/effect/hotspot/hotspot = (locate(/obj/effect/hotspot) in T) - if(hotspot && !isspaceturf(T)) + if(hotspot) if(T.air) var/datum/gas_mixture/G = T.air if(G.temperature > T20C) diff --git a/code/modules/reagents/chemistry/recipes/drugs.dm b/code/modules/reagents/chemistry/recipes/drugs.dm index 0b66c232c8..ccdc96f5f1 100644 --- a/code/modules/reagents/chemistry/recipes/drugs.dm +++ b/code/modules/reagents/chemistry/recipes/drugs.dm @@ -28,13 +28,6 @@ required_reagents = list(/datum/reagent/medicine/ephedrine = 1, /datum/reagent/iodine = 1, /datum/reagent/phosphorus = 1, /datum/reagent/hydrogen = 1) required_temp = 374 -/datum/chemical_reaction/bath_salts - name = /datum/reagent/drug/bath_salts - id = /datum/reagent/drug/bath_salts - results = list(/datum/reagent/drug/bath_salts = 7) - required_reagents = list(/datum/reagent/toxin/bad_food = 1, /datum/reagent/saltpetre = 1, /datum/reagent/consumable/nutriment = 1, /datum/reagent/space_cleaner = 1, /datum/reagent/consumable/enzyme = 1, /datum/reagent/consumable/tea = 1, /datum/reagent/mercury = 1) - required_temp = 374 - /datum/chemical_reaction/aranesp name = /datum/reagent/drug/aranesp id = /datum/reagent/drug/aranesp diff --git a/code/modules/reagents/chemistry/recipes/others.dm b/code/modules/reagents/chemistry/recipes/others.dm index 342b1fe20e..1d42b51de4 100644 --- a/code/modules/reagents/chemistry/recipes/others.dm +++ b/code/modules/reagents/chemistry/recipes/others.dm @@ -47,27 +47,6 @@ results = list(/datum/reagent/consumable/sodiumchloride = 3) required_reagents = list(/datum/reagent/water = 1, /datum/reagent/sodium = 1, /datum/reagent/chlorine = 1) -/datum/chemical_reaction/plasmasolidification - name = "Solid Plasma" - id = "solidplasma" - required_reagents = list(/datum/reagent/iron = 5, /datum/reagent/consumable/frostoil = 5, /datum/reagent/toxin/plasma = 20) - mob_react = FALSE - -/datum/chemical_reaction/plasmasolidification/on_reaction(datum/reagents/holder, created_volume) - var/location = get_turf(holder.my_atom) - for(var/i = 1, i <= created_volume, i++) - new /obj/item/stack/sheet/mineral/plasma(location) - -/datum/chemical_reaction/goldsolidification - name = "Solid Gold" - id = "solidgold" - required_reagents = list(/datum/reagent/consumable/frostoil = 5, /datum/reagent/gold = 20, /datum/reagent/iron = 1) - mob_react = FALSE - -/datum/chemical_reaction/goldsolidification/on_reaction(datum/reagents/holder, created_volume) - var/location = get_turf(holder.my_atom) - for(var/i = 1, i <= created_volume, i++) - new /obj/item/stack/sheet/mineral/gold(location) /datum/chemical_reaction/capsaicincondensation name = "Capsaicincondensation" @@ -75,18 +54,6 @@ results = list(/datum/reagent/consumable/condensedcapsaicin = 5) required_reagents = list(/datum/reagent/consumable/capsaicin = 1, /datum/reagent/consumable/ethanol = 5) -/datum/chemical_reaction/soapification - name = "Soapification" - id = "soapification" - required_reagents = list(/datum/reagent/liquidgibs = 10, /datum/reagent/lye = 10) // requires two scooped gib tiles - required_temp = 374 - mob_react = FALSE - -/datum/chemical_reaction/soapification/on_reaction(datum/reagents/holder, created_volume) - var/location = get_turf(holder.my_atom) - for(var/i = 1, i <= created_volume, i++) - new /obj/item/soap/homemade(location) - /datum/chemical_reaction/candlefication name = "Candlefication" id = "candlefication" @@ -243,70 +210,6 @@ results = list(/datum/reagent/acetone = 3) required_reagents = list(/datum/reagent/fuel/oil = 1, /datum/reagent/fuel = 1, /datum/reagent/oxygen = 1) -/datum/chemical_reaction/carpet - name = /datum/reagent/carpet - id = /datum/reagent/carpet - results = list(/datum/reagent/carpet = 2) - required_reagents = list(/datum/reagent/drug/space_drugs = 1, /datum/reagent/blood = 1) - -/datum/chemical_reaction/carpet/black - name = /datum/reagent/carpet/black - id = /datum/reagent/carpet/black - results = list(/datum/reagent/carpet/black = 2) - required_reagents = list(/datum/reagent/carpet = 1, /datum/reagent/fuel/oil = 1) - -/datum/chemical_reaction/carpet/blue - name = /datum/reagent/carpet/blue - id = /datum/reagent/carpet/blue - results = list(/datum/reagent/carpet/blue = 2) - required_reagents = list(/datum/reagent/carpet = 1, /datum/reagent/cryostylane = 1) - -/datum/chemical_reaction/carpet/cyan - name = /datum/reagent/carpet/cyan - id = /datum/reagent/carpet/cyan - results = list(/datum/reagent/carpet/cyan = 2) - required_reagents = list(/datum/reagent/carpet = 1, /datum/reagent/toxin/cyanide = 1) - //cyan = cyanide get it huehueuhuehuehheuhe - -/datum/chemical_reaction/carpet/green - name = /datum/reagent/carpet/green - id = /datum/reagent/carpet/green - results = list(/datum/reagent/carpet/green = 2) - required_reagents = list(/datum/reagent/carpet = 1, /datum/reagent/consumable/ethanol/beer/green = 1) - //make green beer by grinding up green crayons and mixing with beer - -/datum/chemical_reaction/carpet/orange - name = /datum/reagent/carpet/orange - id = /datum/reagent/carpet/orange - results = list(/datum/reagent/carpet/orange = 2) - required_reagents = list(/datum/reagent/carpet = 1, /datum/reagent/consumable/orangejuice = 1) - -/datum/chemical_reaction/carpet/purple - name = /datum/reagent/carpet/purple - id = /datum/reagent/carpet/purple - results = list(/datum/reagent/carpet/purple = 2) - required_reagents = list(/datum/reagent/carpet = 1, /datum/reagent/medicine/regen_jelly = 1) - //slimes only party - -/datum/chemical_reaction/carpet/red - name = /datum/reagent/carpet/red - id = /datum/reagent/carpet/red - results = list(/datum/reagent/carpet/red = 2) - required_reagents = list(/datum/reagent/carpet/ = 1, /datum/reagent/liquidgibs = 1) - -/datum/chemical_reaction/carpet/royalblack - name = /datum/reagent/carpet/royal/black - id = /datum/reagent/carpet/royal/black - results = list(/datum/reagent/carpet/royal/black = 2) - required_reagents = list(/datum/reagent/carpet/black = 1, /datum/reagent/royal_bee_jelly = 1) - -/datum/chemical_reaction/carpet/royalblue - name = /datum/reagent/carpet/royal/blue - id = /datum/reagent/carpet/royal/blue - results = list(/datum/reagent/carpet/royal/blue = 2) - required_reagents = list(/datum/reagent/carpet/blue = 1, /datum/reagent/royal_bee_jelly = 1) - - /datum/chemical_reaction/oil name = "Oil" id = /datum/reagent/fuel/oil @@ -410,12 +313,6 @@ results = list(/datum/reagent/hair_dye = 5) required_reagents = list(/datum/reagent/colorful_reagent = 1, /datum/reagent/uranium/radium = 1, /datum/reagent/drug/space_drugs = 1) -/datum/chemical_reaction/barbers_aid - name = /datum/reagent/barbers_aid - id = /datum/reagent/barbers_aid - results = list(/datum/reagent/barbers_aid = 5) - required_reagents = list(/datum/reagent/carpet = 1, /datum/reagent/uranium/radium = 1, /datum/reagent/drug/space_drugs = 1) - /datum/chemical_reaction/concentrated_barbers_aid name = /datum/reagent/concentrated_barbers_aid id = /datum/reagent/concentrated_barbers_aid @@ -452,17 +349,6 @@ results = list(/datum/reagent/consumable/laughter = 10) // Fuck it. I'm not touching this one. required_reagents = list(/datum/reagent/consumable/sugar = 1, /datum/reagent/consumable/banana = 1) -/datum/chemical_reaction/plastic_polymers - name = "plastic polymers" - id = /datum/reagent/plastic_polymers - required_reagents = list(/datum/reagent/fuel/oil = 5, /datum/reagent/toxin/acid = 2, /datum/reagent/ash = 3) - required_temp = 374 //lazily consistent with soap & other crafted objects generically created with heat. - -/datum/chemical_reaction/plastic_polymers/on_reaction(datum/reagents/holder, created_volume) - var/location = get_turf(holder.my_atom) - for(var/i in 1 to created_volume) - new /obj/item/stack/sheet/plastic(location) - /datum/chemical_reaction/pax name = /datum/reagent/pax id = /datum/reagent/pax diff --git a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm index 9dc3ebb62e..54326c0721 100644 --- a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm +++ b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm @@ -166,12 +166,6 @@ /datum/chemical_reaction/reagent_explosion/gunpowder_explosion/on_reaction(datum/reagents/holder, created_volume) addtimer(CALLBACK(src, PROC_REF(do_explosion), holder, created_volume), rand(5 SECONDS, 10 SECONDS)) -/datum/chemical_reaction/thermite - name = "Thermite" - id = /datum/reagent/thermite - results = list(/datum/reagent/thermite = 3) - required_reagents = list(/datum/reagent/aluminium = 1, /datum/reagent/iron = 1, /datum/reagent/oxygen = 1) - /datum/chemical_reaction/emp_pulse name = "EMP Pulse" id = "emp_pulse" @@ -190,13 +184,6 @@ results = list(/datum/reagent/stabilizing_agent = 3) required_reagents = list(/datum/reagent/iron = 1, /datum/reagent/oxygen = 1, /datum/reagent/hydrogen = 1) -/datum/chemical_reaction/clf3 - name = "Chlorine Trifluoride" - id = /datum/reagent/clf3 - results = list(/datum/reagent/clf3 = 4) - required_reagents = list(/datum/reagent/chlorine = 1, /datum/reagent/fluorine = 3) - required_temp = 424 - /datum/chemical_reaction/clf3/on_reaction(datum/reagents/holder, created_volume) var/turf/T = get_turf(holder.my_atom) for(var/turf/turf in range(1,T)) diff --git a/code/modules/reagents/reagent_containers/blood_pack.dm b/code/modules/reagents/reagent_containers/blood_pack.dm index 8b93d75165..12cc83f2c5 100644 --- a/code/modules/reagents/reagent_containers/blood_pack.dm +++ b/code/modules/reagents/reagent_containers/blood_pack.dm @@ -67,22 +67,3 @@ /obj/item/reagent_containers/blood/universal blood_type = "U" - -/obj/item/reagent_containers/blood/attackby(obj/item/I, mob/user, params) - if (istype(I, /obj/item/pen) || istype(I, /obj/item/toy/crayon)) - if(!user.is_literate()) - to_chat(user, "I scribble illegibly on the label of [src]!") - return - var/t = stripped_input(user, "What would you like to label the blood pack?", name, null, 53) - if(!user.canUseTopic(src, BE_CLOSE)) - return - if(user.get_active_held_item() != I) - return - if(t) - labelled = 1 - name = "blood pack - [t]" - else - labelled = 0 - update_pack_name() - else - return ..() diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index 18245affab..49814f2e85 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -197,111 +197,6 @@ return ..() - -/obj/item/reagent_containers/glass/beaker - name = "beaker" - desc = "" - icon = 'icons/obj/chemical.dmi' - icon_state = "beaker" - item_state = "beaker" - custom_materials = list(/datum/material/glass=500) - fill_icon_thresholds = list(0, 10, 25, 50, 75, 80, 90) - -/obj/item/reagent_containers/glass/beaker/Initialize() - . = ..() - update_icon() - -/obj/item/reagent_containers/glass/beaker/get_part_rating() - return reagents.maximum_volume - -/obj/item/reagent_containers/glass/beaker/jar - name = "honey jar" - desc = "" - icon = 'icons/obj/chemical.dmi' - icon_state = "vapour" - -/obj/item/reagent_containers/glass/beaker/large - name = "large beaker" - desc = "" - icon_state = "beakerlarge" - custom_materials = list(/datum/material/glass=2500) - volume = 100 - amount_per_transfer_from_this = 10 - possible_transfer_amounts = list(5,10,15,20,25,30,50,100) - -/obj/item/reagent_containers/glass/beaker/plastic - name = "x-large beaker" - desc = "" - icon_state = "beakerwhite" - custom_materials = list(/datum/material/glass=2500, /datum/material/plastic=3000) - volume = 120 - amount_per_transfer_from_this = 10 - possible_transfer_amounts = list(5,10,15,20,25,30,60,120) - -/obj/item/reagent_containers/glass/beaker/plastic/update_icon() - icon_state = "beakerlarge" // hack to lets us reuse the large beaker reagent fill states - ..() - icon_state = "beakerwhite" - -/obj/item/reagent_containers/glass/beaker/meta - name = "metamaterial beaker" - desc = "" - icon_state = "beakergold" - custom_materials = list(/datum/material/glass=2500, /datum/material/plastic=3000, /datum/material/gold=1000, /datum/material/titanium=1000) - volume = 180 - amount_per_transfer_from_this = 10 - possible_transfer_amounts = list(5,10,15,20,25,30,60,120,180) - -/obj/item/reagent_containers/glass/beaker/noreact - name = "cryostasis beaker" - desc = "A cryostasis beaker that allows for chemical storage without \ - reactions. Can hold up to 50 units." - icon_state = "beakernoreact" - custom_materials = list(/datum/material/iron=3000) - reagent_flags = OPENCONTAINER | NO_REACT - volume = 50 - amount_per_transfer_from_this = 10 - -/obj/item/reagent_containers/glass/beaker/bluespace - name = "bluespace beaker" - desc = "A bluespace beaker, powered by experimental bluespace technology \ - and Element Cuban combined with the Compound Pete. Can hold up to \ - 300 units." - icon_state = "beakerbluespace" - custom_materials = list(/datum/material/glass = 5000, /datum/material/plasma = 3000, /datum/material/diamond = 1000, /datum/material/bluespace = 1000) - volume = 300 - material_flags = MATERIAL_NO_EFFECTS - amount_per_transfer_from_this = 10 - possible_transfer_amounts = list(5,10,15,20,25,30,50,100,300) - -/obj/item/reagent_containers/glass/beaker/cryoxadone - list_reagents = list(/datum/reagent/medicine/cryoxadone = 30) - -/obj/item/reagent_containers/glass/beaker/sulphuric - list_reagents = list(/datum/reagent/toxin/acid = 50) - -/obj/item/reagent_containers/glass/beaker/slime - list_reagents = list(/datum/reagent/toxin/slimejelly = 50) - -/obj/item/reagent_containers/glass/beaker/large/libital - name = "libital reserve tank (diluted)" - list_reagents = list(/datum/reagent/medicine/C2/libital = 10,/datum/reagent/medicine/granibitaluri = 40) - -/obj/item/reagent_containers/glass/beaker/large/aiuri - name = "aiuri reserve tank (diluted)" - list_reagents = list(/datum/reagent/medicine/C2/aiuri = 10, /datum/reagent/medicine/granibitaluri = 40) - -/obj/item/reagent_containers/glass/beaker/large/multiver - name = "multiver reserve tank (diluted)" - list_reagents = list(/datum/reagent/medicine/C2/multiver = 10, /datum/reagent/medicine/granibitaluri = 40) - -/obj/item/reagent_containers/glass/beaker/large/epinephrine - name = "epinephrine reserve tank (diluted)" - list_reagents = list(/datum/reagent/medicine/epinephrine = 50) - -/obj/item/reagent_containers/glass/beaker/instabitaluri - list_reagents = list(/datum/reagent/medicine/C2/instabitaluri = 50) - /obj/item/reagent_containers/glass/bucket name = "bucket" desc = "" @@ -311,7 +206,6 @@ icon_state = "woodbucket" item_state = "woodbucket" max_integrity = 300 - custom_materials = list(/datum/material/iron=200) w_class = WEIGHT_CLASS_BULKY amount_per_transfer_from_this = 9 possible_transfer_amounts = list(9) @@ -388,151 +282,19 @@ cut_overlays() - if(reagents.total_volume > 0) - if(reagents.total_volume <= 50) + if(reagents.total_volume > 0) + if(reagents.total_volume <= 50) var/mutable_appearance/filling = mutable_appearance('modular/Neu_Food/icons/cooking.dmi', "bucket_half") filling.color = mix_color_from_reagents(reagents.reagent_list) filling.alpha = mix_alpha_from_reagents(reagents.reagent_list) add_overlay(filling) - if(reagents.total_volume > 50) + if(reagents.total_volume > 50) var/mutable_appearance/filling = mutable_appearance('modular/Neu_Food/icons/cooking.dmi', "bucket_full") filling.color = mix_color_from_reagents(reagents.reagent_list) filling.alpha = mix_alpha_from_reagents(reagents.reagent_list) add_overlay(filling) - - - -/obj/item/reagent_containers/glass/waterbottle - name = "bottle of water" - desc = "" - icon = 'icons/obj/drinks.dmi' - icon_state = "smallbottle" - item_state = "bottle" - list_reagents = list(/datum/reagent/water = 49.5, /datum/reagent/fluorine = 0.5)//see desc, don't think about it too hard - custom_materials = list(/datum/material/plastic=1000) - volume = 50 - amount_per_transfer_from_this = 10 - fill_icon_thresholds = list(0, 10, 25, 50, 75, 80, 90) - - // The 2 bottles have separate cap overlay icons because if the bottle falls over while bottle flipping the cap stays fucked on the moved overlay - var/cap_icon_state = "bottle_cap_small" - var/cap_on = TRUE - var/cap_lost = FALSE - var/mutable_appearance/cap_overlay - var/flip_chance = 10 - -/obj/item/reagent_containers/glass/waterbottle/Initialize() - . = ..() - cap_overlay = mutable_appearance(icon, cap_icon_state) - if(cap_on) - spillable = FALSE - add_overlay(cap_overlay, TRUE) - -/obj/item/reagent_containers/glass/waterbottle/examine(mob/user) - . = ..() - if(cap_lost) - . += "The cap seems to be missing." - else if(cap_on) - . += "The cap is firmly on to prevent spilling. Alt-click to remove the cap." - else - . += "The cap has been taken off. Alt-click to put a cap on." - -/obj/item/reagent_containers/glass/waterbottle/AltClick(mob/user) - . = ..() - if(cap_lost) - to_chat(user, "The cap seems to be missing! Where did it go?") - return - - var/fumbled = HAS_TRAIT(user, TRAIT_CLUMSY) && prob(5) - if(cap_on || fumbled) - cap_on = FALSE - spillable = TRUE - cut_overlay(cap_overlay, TRUE) - animate(src, transform = null, time = 2, loop = 0) - if(fumbled) - to_chat(user, "I fumble with [src]'s cap! The cap falls onto the ground and simply vanishes. Where the hell did it go?") - cap_lost = TRUE - else - to_chat(user, "I remove the cap from [src].") - else - cap_on = TRUE - spillable = FALSE - add_overlay(cap_overlay, TRUE) - to_chat(user, "I put the cap on [src].") - update_icon() - -/obj/item/reagent_containers/glass/waterbottle/is_refillable() - if(cap_on) - return FALSE - . = ..() - -/obj/item/reagent_containers/glass/waterbottle/is_drainable() - if(cap_on) - return FALSE - . = ..() - -/obj/item/reagent_containers/glass/waterbottle/attack(mob/M, mob/user, obj/target) - if(cap_on && reagents.total_volume && istype(M)) - to_chat(user, "I must remove the cap before you can do that!") - return - . = ..() - -/obj/item/reagent_containers/glass/waterbottle/afterattack(obj/target, mob/user, proximity) - if(cap_on && (target.is_refillable() || target.is_drainable() || (reagents.total_volume && user.used_intent.type == INTENT_HARM))) - to_chat(user, "I must remove the cap before you can do that!") - return - - else if(istype(target, /obj/item/reagent_containers/glass/waterbottle)) - var/obj/item/reagent_containers/glass/waterbottle/WB = target - if(WB.cap_on) - to_chat(user, "[WB] has a cap firmly twisted on!") - . = ..() - -// heehoo bottle flipping -/obj/item/reagent_containers/glass/waterbottle/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) - . = ..() - if(cap_on && reagents.total_volume) - if(prob(flip_chance)) // landed upright - src.visible_message("[src] lands upright!") - SEND_SIGNAL(throwingdatum.thrower, COMSIG_ADD_MOOD_EVENT, "bottle_flip", /datum/mood_event/bottle_flip) - else // landed on it's side - animate(src, transform = matrix(prob(50)? 90 : -90, MATRIX_ROTATE), time = 3, loop = 0) - -/obj/item/reagent_containers/glass/waterbottle/pickup(mob/user) - . = ..() - animate(src, transform = null, time = 1, loop = 0) - -/obj/item/reagent_containers/glass/waterbottle/empty - list_reagents = list() - cap_on = FALSE - -/obj/item/reagent_containers/glass/waterbottle/large - desc = "" - icon_state = "largebottle" - custom_materials = list(/datum/material/plastic=3000) - list_reagents = list(/datum/reagent/water = 100) - volume = 100 - amount_per_transfer_from_this = 20 - cap_icon_state = "bottle_cap" - -/obj/item/reagent_containers/glass/waterbottle/large/empty - list_reagents = list() - cap_on = FALSE - -// Admin spawn -/obj/item/reagent_containers/glass/waterbottle/relic - name = "mysterious bottle" - desc = "" - flip_chance = 100 // FLIPP - -/obj/item/reagent_containers/glass/waterbottle/relic/Initialize() - var/datum/reagent/random_reagent = get_random_reagent_id() - list_reagents = list((random_reagent) = 50) // without parentheses, it's "random_reagent" the string - . = ..() - desc += "The writing reads '[random_reagent.name]'." - /obj/item/pestle name = "pestle" desc = "" @@ -592,27 +354,3 @@ grinded = I return to_chat(user, "I can't grind this!") - -/obj/item/reagent_containers/glass/saline - name = "saline canister" - volume = 5000 - list_reagents = list(/datum/reagent/medicine/salglu_solution = 5000) - -/obj/item/reagent_containers/glass/colocup - name = "colo cup" - desc = "" - icon = 'icons/obj/drinks.dmi' - icon_state = "colocup" - lefthand_file = 'icons/mob/inhands/misc/food_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/food_righthand.dmi' - item_state = "colocup" - custom_materials = list(/datum/material/plastic = 1000) - possible_transfer_amounts = list(5, 10, 15, 20) - volume = 20 - amount_per_transfer_from_this = 5 - -/obj/item/reagent_containers/glass/colocup/Initialize() - .=..() - icon_state = "colocup[rand(0, 6)]" - pixel_x = rand(-4,4) - pixel_y = rand(-4,4) diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm deleted file mode 100644 index 0c54425089..0000000000 --- a/code/modules/reagents/reagent_containers/spray.dm +++ /dev/null @@ -1,413 +0,0 @@ -/obj/item/reagent_containers/spray - name = "spray bottle" - desc = "" - icon = 'icons/obj/janitor.dmi' - icon_state = "sprayer_large" - item_state = "cleaner" - lefthand_file = 'icons/mob/inhands/equipment/custodial_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/custodial_righthand.dmi' - item_flags = NOBLUDGEON - reagent_flags = OPENCONTAINER - slot_flags = ITEM_SLOT_BELT - throwforce = 0 - w_class = WEIGHT_CLASS_SMALL - throw_speed = 3 - throw_range = 7 - var/stream_mode = 0 //whether we use the more focused mode - var/current_range = 3 //the range of tiles the sprayer will reach. - var/spray_range = 3 //the range of tiles the sprayer will reach when in spray mode. - var/stream_range = 1 //the range of tiles the sprayer will reach when in stream mode. - var/stream_amount = 10 //the amount of reagents transfered when in stream mode. - var/can_fill_from_container = TRUE - amount_per_transfer_from_this = 5 - volume = 250 - possible_transfer_amounts = list(5,10,15,20,25,30,50,100) - -/obj/item/reagent_containers/spray/afterattack(atom/A, mob/user) - . = ..() - if(istype(A, /obj/structure/sink) || istype(A, /obj/structure/janitorialcart)) - return - - if((A.is_drainable() && !A.is_refillable()) && get_dist(src,A) <= 1 && can_fill_from_container) - if(!A.reagents.total_volume) - to_chat(user, "[A] is empty.") - return - - if(reagents.holder_full()) - to_chat(user, "[src] is full.") - return - - var/trans = A.reagents.trans_to(src, 50, transfered_by = user) //transfer 50u , using the spray's transfer amount would take too long to refill - to_chat(user, "I fill \the [src] with [trans] units of the contents of \the [A].") - return - - if(reagents.total_volume < amount_per_transfer_from_this) - to_chat(user, "Not enough left!") - return - - spray(A, user) - - playsound(src.loc, 'sound/blank.ogg', 50, TRUE, -6) - user.changeNext_move(CLICK_CD_RANGE*2) - user.newtonian_move(get_dir(A, user)) - - var/turf/T = get_turf(src) - var/contained = reagents.log_list() - - log_combat(user, T, "sprayed", src, addition="which had [contained]") - log_game("[key_name(user)] fired [contained] from \a [src] at [AREACOORD(T)].") //copypasta falling out of my pockets - return - - -/obj/item/reagent_containers/spray/proc/spray(atom/A, mob/user) - var/range = max(min(current_range, get_dist(src, A)), 1) - var/obj/effect/decal/chempuff/D = new /obj/effect/decal/chempuff(get_turf(src)) - D.create_reagents(amount_per_transfer_from_this) - var/puff_reagent_left = range //how many turf, mob or dense objet we can react with before we consider the chem puff consumed - if(stream_mode) - reagents.trans_to(D, amount_per_transfer_from_this) - puff_reagent_left = 1 - else - reagents.trans_to(D, amount_per_transfer_from_this, 1/range) - D.color = mix_color_from_reagents(D.reagents.reagent_list) - var/wait_step = max(round(2+3/range), 2) - do_spray(A, wait_step, D, range, puff_reagent_left, user) - -/obj/item/reagent_containers/spray/proc/do_spray(atom/A, wait_step, obj/effect/decal/chempuff/D, range, puff_reagent_left, mob/user) - set waitfor = FALSE - var/range_left = range - for(var/i=0, i 0 && (!stream_mode || !range_left)) - D.reagents.reaction(get_turf(D), VAPOR) - puff_reagent_left -= 1 - - if(puff_reagent_left <= 0) // we used all the puff so we delete it. - qdel(D) - return - qdel(D) - -/obj/item/reagent_containers/spray/attack_self(mob/user) - stream_mode = !stream_mode - if(stream_mode) - amount_per_transfer_from_this = stream_amount - current_range = stream_range - else - amount_per_transfer_from_this = initial(amount_per_transfer_from_this) - current_range = spray_range - to_chat(user, "I switch the nozzle setting to [stream_mode ? "\"stream\"":"\"spray\""]. You'll now use [amount_per_transfer_from_this] units per use.") - -/obj/item/reagent_containers/spray/attackby(obj/item/I, mob/user, params) - var/hotness = I.get_temperature() - if(hotness && reagents) - reagents.expose_temperature(hotness) - to_chat(user, "I heat [name] with [I]!") - return ..() - -/obj/item/reagent_containers/spray/verb/empty() - set name = "Empty Spray Bottle" - set hidden = 1 - set src in usr - if(usr.incapacitated()) - return - if (alert(usr, "Are you sure you want to empty that?", "Empty Bottle:", "Yes", "No") != "Yes") - return - if(isturf(usr.loc) && src.loc == usr) - to_chat(usr, "I empty \the [src] onto the floor.") - reagents.reaction(usr.loc) - src.reagents.clear_reagents() - -/obj/item/reagent_containers/spray/on_reagent_change(changetype) - var/total_reagent_weight - var/amount_of_reagents - for (var/datum/reagent/R in reagents.reagent_list) - total_reagent_weight = total_reagent_weight + R.reagent_weight - amount_of_reagents++ - - if(total_reagent_weight && amount_of_reagents) //don't bother if the container is empty - DIV/0 - var/average_reagent_weight = total_reagent_weight / amount_of_reagents - spray_range = CLAMP(round((initial(spray_range) / average_reagent_weight) - ((amount_of_reagents - 1) * 1)), 3, 5) //spray distance between 3 and 5 tiles rounded down; extra reagents lose a tile - else - spray_range = initial(spray_range) - if(stream_mode == 0) - current_range = spray_range - -//space cleaner -/obj/item/reagent_containers/spray/cleaner - name = "space cleaner" - desc = "" - icon_state = "cleaner" - volume = 100 - list_reagents = list(/datum/reagent/space_cleaner = 100) - amount_per_transfer_from_this = 2 - stream_amount = 5 - -/obj/item/reagent_containers/spray/cleaner/suicide_act(mob/user) - user.visible_message("[user] is putting the nozzle of \the [src] in [user.p_their()] mouth. It looks like [user.p_theyre()] trying to commit suicide!") - if(do_mob(user,user,30)) - if(reagents.total_volume >= amount_per_transfer_from_this)//if not empty - user.visible_message("[user] pulls the trigger!") - src.spray(user) - return BRUTELOSS - else - user.visible_message("[user] pulls the trigger...but \the [src] is empty!") - return SHAME - else - user.visible_message("[user] decided life was worth living.") - return - -//spray tan -/obj/item/reagent_containers/spray/spraytan - name = "spray tan" - volume = 50 - desc = "" - list_reagents = list(/datum/reagent/spraytan = 50) - - -//pepperspray -/obj/item/reagent_containers/spray/pepper - name = "pepperspray" - desc = "" - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "pepperspray" - item_state = "pepperspray" - lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' - volume = 50 - stream_range = 4 - amount_per_transfer_from_this = 5 - list_reagents = list(/datum/reagent/consumable/condensedcapsaicin = 50) - -/obj/item/reagent_containers/spray/pepper/empty //for protolathe printing - list_reagents = null - -/obj/item/reagent_containers/spray/pepper/suicide_act(mob/living/carbon/user) - user.visible_message("[user] begins huffing \the [src]! It looks like [user.p_theyre()] getting a dirty high!") - return OXYLOSS - -// Fix pepperspraying yourself -/obj/item/reagent_containers/spray/pepper/afterattack(atom/A as mob|obj, mob/user) - if (A.loc == user) - return - . = ..() - -//water flower -/obj/item/reagent_containers/spray/waterflower - name = "water flower" - desc = "" - icon = 'icons/obj/hydroponics/harvest.dmi' - icon_state = "sunflower" - item_state = "sunflower" - amount_per_transfer_from_this = 1 - volume = 10 - list_reagents = list(/datum/reagent/water = 10) - -/obj/item/reagent_containers/spray/waterflower/attack_self(mob/user) //Don't allow changing how much the flower sprays - return - -///Subtype used for the lavaland clown ruin. -/obj/item/reagent_containers/spray/waterflower/superlube - name = "clown flower" - desc = "" - icon = 'icons/obj/chemical.dmi' - icon_state = "clownflower" - volume = 30 - list_reagents = list(/datum/reagent/lube/superlube = 30) - -/obj/item/reagent_containers/spray/waterflower/cyborg - reagent_flags = NONE - volume = 100 - list_reagents = list(/datum/reagent/water = 100) - var/generate_amount = 5 - var/generate_type = /datum/reagent/water - var/last_generate = 0 - var/generate_delay = 10 //deciseconds - can_fill_from_container = FALSE - -/obj/item/reagent_containers/spray/waterflower/cyborg/hacked - name = "nova flower" - desc = "" - list_reagents = list(/datum/reagent/clf3 = 3) - volume = 3 - generate_type = /datum/reagent/clf3 - generate_amount = 1 - generate_delay = 40 //deciseconds - -/obj/item/reagent_containers/spray/waterflower/cyborg/Initialize() - . = ..() - START_PROCESSING(SSfastprocess, src) - -/obj/item/reagent_containers/spray/waterflower/cyborg/Destroy() - STOP_PROCESSING(SSfastprocess, src) - return ..() - -/obj/item/reagent_containers/spray/waterflower/cyborg/process() - if(world.time < last_generate + generate_delay) - return - last_generate = world.time - generate_reagents() - -/obj/item/reagent_containers/spray/waterflower/cyborg/empty() - to_chat(usr, "I can not empty this!") - return - -/obj/item/reagent_containers/spray/waterflower/cyborg/proc/generate_reagents() - reagents.add_reagent(generate_type, generate_amount) - -//chemsprayer -/obj/item/reagent_containers/spray/chemsprayer - name = "chem sprayer" - desc = "" - icon = 'icons/obj/guns/projectile.dmi' - icon_state = "chemsprayer" - item_state = "chemsprayer" - lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi' - throwforce = 0 - w_class = WEIGHT_CLASS_NORMAL - stream_mode = 1 - current_range = 7 - spray_range = 4 - stream_range = 7 - amount_per_transfer_from_this = 10 - volume = 600 - -/obj/item/reagent_containers/spray/chemsprayer/afterattack(atom/A as mob|obj, mob/user) - // Make it so the bioterror spray doesn't spray myself when you click your inventory items - if (A.loc == user) - return - . = ..() - -/obj/item/reagent_containers/spray/chemsprayer/spray(atom/A, mob/user) - var/direction = get_dir(src, A) - var/turf/T = get_turf(A) - var/turf/T1 = get_step(T,turn(direction, 90)) - var/turf/T2 = get_step(T,turn(direction, -90)) - var/list/the_targets = list(T,T1,T2) - - for(var/i=1, i<=3, i++) // intialize sprays - if(reagents.total_volume < 1) - return - ..(the_targets[i], user) - -/obj/item/reagent_containers/spray/chemsprayer/bioterror - list_reagents = list(/datum/reagent/toxin/sodium_thiopental = 100, /datum/reagent/toxin/coniine = 100, /datum/reagent/toxin/venom = 100, /datum/reagent/consumable/condensedcapsaicin = 100, /datum/reagent/toxin/initropidril = 100, /datum/reagent/toxin/polonium = 100) - - -/obj/item/reagent_containers/spray/chemsprayer/janitor - name = "janitor chem sprayer" - desc = "" - icon_state = "chemsprayer_janitor" - item_state = "chemsprayer_janitor" - lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi' - reagent_flags = NONE - list_reagents = list(/datum/reagent/space_cleaner = 1000) - volume = 1000 - amount_per_transfer_from_this = 5 - var/generate_amount = 50 - var/generate_type = /datum/reagent/space_cleaner - var/last_generate = 0 - var/generate_delay = 10 //deciseconds - -/obj/item/reagent_containers/spray/chemsprayer/janitor/Initialize() - . = ..() - START_PROCESSING(SSfastprocess, src) - -/obj/item/reagent_containers/spray/chemsprayer/janitor/Destroy() - STOP_PROCESSING(SSfastprocess, src) - return ..() - -/obj/item/reagent_containers/spray/chemsprayer/janitor/process() - if(world.time < last_generate + generate_delay) - return - last_generate = world.time - reagents.add_reagent(generate_type, generate_amount) - -// Plant-B-Gone -/obj/item/reagent_containers/spray/plantbgone // -- Skie - name = "Plant-B-Gone" - desc = "" - icon = 'icons/obj/hydroponics/equipment.dmi' - icon_state = "plantbgone" - item_state = "plantbgone" - lefthand_file = 'icons/mob/inhands/equipment/hydroponics_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/hydroponics_righthand.dmi' - volume = 100 - list_reagents = list(/datum/reagent/toxin/plantbgone = 100) - -/obj/item/reagent_containers/spray/syndicate - name = "suspicious spray bottle" - desc = "" - icon = 'icons/obj/chemical.dmi' - icon_state = "sprayer_sus_8" - item_state = "sprayer_sus" - lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' - spray_range = 4 - stream_range = 2 - volume = 100 - custom_premium_price = 200 - -/obj/item/reagent_containers/spray/syndicate/Initialize() - . = ..() - icon_state = pick("sprayer_sus_1", "sprayer_sus_2", "sprayer_sus_3", "sprayer_sus_4", "sprayer_sus_5","sprayer_sus_6", "sprayer_sus_7", "sprayer_sus_8") - -/obj/item/reagent_containers/spray/medical - name = "medical spray bottle" - icon = 'icons/obj/chemical.dmi' - icon_state = "sprayer_med_red" - item_state = "sprayer_med_red" - lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' - volume = 100 - unique_reskin = list("Red" = "sprayer_med_red", - "Yellow" = "sprayer_med_yellow", - "Blue" = "sprayer_med_blue") - -/obj/item/reagent_containers/spray/medical/AltClick(mob/user) - if(unique_reskin && !current_skin && user.canUseTopic(src, BE_CLOSE, NO_DEXTERITY)) - reskin_obj(user) - -/obj/item/reagent_containers/spray/medical/reskin_obj(mob/M) - ..() - switch(icon_state) - if("sprayer_med_red") - item_state = "sprayer_med_red" - if("sprayer_med_yellow") - item_state = "sprayer_med_yellow" - if("sprayer_med_blue") - item_state = "sprayer_med_blue" - M.update_inv_hands() - -/obj/item/reagent_containers/spray/rhigoxane - name = "medical spray (rhigoxane)" - desc = "" - icon_state = "sprayer_large" - list_reagents = list(/datum/reagent/medicine/rhigoxane = 100) diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index 23fef46b45..61e9578cd0 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -12,7 +12,6 @@ var/mode = SYRINGE_DRAW var/busy = FALSE // needed for delayed drawing of blood var/proj_piercing = 0 //does it pierce through thick clothes when shot with syringe gun - custom_materials = list(/datum/material/iron=10, /datum/material/glass=20) reagent_flags = TRANSPARENT /obj/item/reagent_containers/syringe/Initialize() @@ -173,100 +172,3 @@ injoverlay = "inject" add_overlay(injoverlay) M.update_inv_hands() - -/obj/item/reagent_containers/syringe/epinephrine - name = "syringe (epinephrine)" - desc = "" - list_reagents = list(/datum/reagent/medicine/epinephrine = 15) - -/obj/item/reagent_containers/syringe/multiver - name = "syringe (multiver)" - desc = "" - list_reagents = list(/datum/reagent/medicine/C2/multiver = 6, /datum/reagent/medicine/granibitaluri = 9) - -/obj/item/reagent_containers/syringe/convermol - name = "syringe (convermol)" - desc = "" - list_reagents = list(/datum/reagent/medicine/C2/convermol = 6, /datum/reagent/medicine/granibitaluri = 9) - -/obj/item/reagent_containers/syringe/antiviral - name = "syringe (spaceacillin)" - desc = "" - list_reagents = list(/datum/reagent/medicine/spaceacillin = 15) - -/obj/item/reagent_containers/syringe/bioterror - name = "bioterror syringe" - desc = "" - list_reagents = list(/datum/reagent/consumable/ethanol/neurotoxin = 5, /datum/reagent/toxin/mutetoxin = 5, /datum/reagent/toxin/sodium_thiopental = 5) - -/obj/item/reagent_containers/syringe/calomel - name = "syringe (calomel)" - desc = "" - list_reagents = list(/datum/reagent/medicine/calomel = 15) - -/obj/item/reagent_containers/syringe/plasma - name = "syringe (plasma)" - desc = "" - list_reagents = list(/datum/reagent/toxin/plasma = 15) - -/obj/item/reagent_containers/syringe/lethal - name = "lethal injection syringe" - desc = "" - amount_per_transfer_from_this = 50 - volume = 50 - -/obj/item/reagent_containers/syringe/lethal/choral - list_reagents = list(/datum/reagent/toxin/chloralhydrate = 50) - -/obj/item/reagent_containers/syringe/lethal/execution - list_reagents = list(/datum/reagent/toxin/plasma = 15, /datum/reagent/toxin/formaldehyde = 15, /datum/reagent/toxin/cyanide = 10, /datum/reagent/toxin/acid/fluacid = 10) - -/obj/item/reagent_containers/syringe/mulligan - name = "Mulligan" - desc = "" - amount_per_transfer_from_this = 1 - volume = 1 - list_reagents = list(/datum/reagent/mulligan = 1) - -/obj/item/reagent_containers/syringe/bluespace - name = "bluespace syringe" - desc = "" - amount_per_transfer_from_this = 20 - volume = 60 - -/obj/item/reagent_containers/syringe/noreact - name = "cryo syringe" - desc = "" - volume = 20 - reagent_flags = TRANSPARENT | NO_REACT - -/obj/item/reagent_containers/syringe/piercing - name = "piercing syringe" - desc = "" - volume = 10 - proj_piercing = 1 - -/obj/item/reagent_containers/syringe/spider_extract - name = "spider extract syringe" - desc = "" - list_reagents = list(/datum/reagent/spider_extract = 1) - -/obj/item/reagent_containers/syringe/oxandrolone - name = "syringe (oxandrolone)" - desc = "" - list_reagents = list(/datum/reagent/medicine/oxandrolone = 15) - -/obj/item/reagent_containers/syringe/salacid - name = "syringe (salicylic acid)" - desc = "" - list_reagents = list(/datum/reagent/medicine/sal_acid = 15) - -/obj/item/reagent_containers/syringe/penacid - name = "syringe (pentetic acid)" - desc = "" - list_reagents = list(/datum/reagent/medicine/pen_acid = 15) - -/obj/item/reagent_containers/syringe/syriniver - name = "syringe (syriniver)" - desc = "" - list_reagents = list(/datum/reagent/medicine/C2/syriniver = 15) diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm deleted file mode 100644 index 8d17ec6113..0000000000 --- a/code/modules/reagents/reagent_dispenser.dm +++ /dev/null @@ -1,169 +0,0 @@ -/obj/structure/reagent_dispensers - name = "Dispenser" - desc = "" - icon = 'icons/obj/objects.dmi' - icon_state = "water" - density = TRUE - anchored = FALSE - pressure_resistance = 2*ONE_ATMOSPHERE - max_integrity = 300 - var/tank_volume = 1000 //In units, how much the dispenser can hold - var/reagent_id = /datum/reagent/water //The ID of the reagent that the dispenser uses - -/obj/structure/reagent_dispensers/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) - . = ..() - if(. && obj_integrity > 0) - if(tank_volume && (damage_flag == "bullet" || damage_flag == "laser")) - boom() - -/obj/structure/reagent_dispensers/attackby(obj/item/W, mob/user, params) - if(W.is_refillable()) - return 0 //so we can refill them via their afterattack. - else - return ..() - -/obj/structure/reagent_dispensers/Initialize() - create_reagents(tank_volume, DRAINABLE | AMOUNT_VISIBLE) - if(reagent_id) - reagents.add_reagent(reagent_id, tank_volume) - . = ..() - -/obj/structure/reagent_dispensers/proc/boom() - visible_message("\The [src] ruptures!") - chem_splash(loc, 5, list(reagents)) - qdel(src) - -/obj/structure/reagent_dispensers/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) - if(!disassembled) - boom() - else - qdel(src) - -/obj/structure/reagent_dispensers/watertank - name = "water tank" - desc = "" - icon_state = "water" - -/obj/structure/reagent_dispensers/watertank/high - name = "high-capacity water tank" - desc = "" - icon_state = "water_high" //I was gonna clean my room... - tank_volume = 100000 - -/obj/structure/reagent_dispensers/foamtank - name = "firefighting foam tank" - desc = "" - icon_state = "foam" - reagent_id = /datum/reagent/firefighting_foam - tank_volume = 500 - -/obj/structure/reagent_dispensers/fueltank - name = "fuel tank" - desc = "" - icon_state = "fuel" - reagent_id = /datum/reagent/fuel - -/obj/structure/reagent_dispensers/fueltank/boom() - explosion(get_turf(src), 0, 1, 5, flame_range = 5) - qdel(src) - - -/obj/structure/reagent_dispensers/fueltank/ex_act() - boom() - -/obj/structure/reagent_dispensers/fueltank/fire_act(added, maxstacks) - boom() - -/obj/structure/reagent_dispensers/fueltank/tesla_act() - ..() //extend the zap - boom() - -/obj/structure/reagent_dispensers/fueltank/bullet_act(obj/projectile/P) - . = ..() - if(!QDELETED(src)) //wasn't deleted by the projectile's effects. - if(!P.nodamage && ((P.damage_type == BURN) || (P.damage_type == BRUTE))) - log_bomber(P.firer, "detonated a", src, "via projectile") - boom() - -/obj/structure/reagent_dispensers/fueltank/attackby(obj/item/I, mob/living/user, params) - if(I.tool_behaviour == TOOL_WELDER) - if(!reagents.has_reagent(/datum/reagent/fuel)) - to_chat(user, "[src] is out of fuel!") - return - var/obj/item/weldingtool/W = I - if(!W.welding) - if(W.reagents.has_reagent(/datum/reagent/fuel, W.max_fuel)) - to_chat(user, "My [W.name] is already full!") - return - reagents.trans_to(W, W.max_fuel, transfered_by = user) - user.visible_message("[user] refills [user.p_their()] [W.name].", "I refill [W].") - playsound(src, 'sound/blank.ogg', 50, TRUE) - W.update_icon() - else - user.visible_message("[user] catastrophically fails at refilling [user.p_their()] [W.name]!", "That was stupid of you.") - - log_bomber(user, "detonated a", src, "via welding tool") - - boom() - return - return ..() - - -/obj/structure/reagent_dispensers/peppertank - name = "pepper spray refiller" - desc = "" - icon_state = "pepper" - anchored = TRUE - density = FALSE - reagent_id = /datum/reagent/consumable/condensedcapsaicin - -/obj/structure/reagent_dispensers/peppertank/Initialize() - . = ..() - if(prob(1)) - desc = "" - - -/obj/structure/reagent_dispensers/water_cooler - name = "liquid cooler" - desc = "" - icon = 'icons/obj/vending.dmi' - icon_state = "water_cooler" - anchored = TRUE - tank_volume = 500 - var/paper_cups = 25 //Paper cups left from the cooler - -/obj/structure/reagent_dispensers/water_cooler/examine(mob/user) - . = ..() - if (paper_cups > 1) - . += "There are [paper_cups] paper cups left." - else if (paper_cups == 1) - . += "There is one paper cup left." - else - . += "There are no paper cups left." - -/obj/structure/reagent_dispensers/water_cooler/attack_hand(mob/living/user) - . = ..() - if(.) - return - if(!paper_cups) - to_chat(user, "There aren't any cups left!") - return - user.visible_message("[user] takes a cup from [src].", "I take a paper cup from [src].") - var/obj/item/reagent_containers/food/drinks/sillycup/S = new(get_turf(src)) - user.put_in_hands(S) - paper_cups-- - -/obj/structure/reagent_dispensers/beerkeg - name = "beer keg" - desc = "" - icon_state = "beer" - reagent_id = /datum/reagent/consumable/ethanol/beer - - -/obj/structure/reagent_dispensers/cooking_oil - name = "vat of cooking oil" - desc = "" - icon_state = "vat" - anchored = TRUE - reagent_id = /datum/reagent/consumable/cooking_oil diff --git a/code/modules/roguetown/roguejobs/gravedigger/tools.dm b/code/modules/roguetown/roguejobs/gravedigger/tools.dm index 27ee7fe1fd..6fccc286d8 100644 --- a/code/modules/roguetown/roguejobs/gravedigger/tools.dm +++ b/code/modules/roguetown/roguejobs/gravedigger/tools.dm @@ -309,3 +309,91 @@ var/obj/item/bodybag/B = foldedbag_instance || new foldedbag_path usr.put_in_hands(B) qdel(src) + +/obj/item/bodybag + name = "body bag" + desc = "" + icon = 'icons/obj/bodybag.dmi' + icon_state = "bodybag_folded" + w_class = WEIGHT_CLASS_SMALL + var/unfoldedbag_path = /obj/structure/closet/body_bag + +/obj/item/bodybag/attack_self(mob/user) + deploy_bodybag(user, user.loc) + +/obj/item/bodybag/afterattack(atom/target, mob/user, proximity) + . = ..() + if(proximity) + if(isopenturf(target)) + deploy_bodybag(user, target) + +/obj/item/bodybag/proc/deploy_bodybag(mob/user, atom/location) + var/obj/structure/closet/body_bag/R = new unfoldedbag_path(location) + R.open(user) + R.add_fingerprint(user) + R.foldedbag_instance = src + moveToNullspace() + +/obj/item/bodybag/suicide_act(mob/user) + if(isopenturf(user.loc)) + user.visible_message("[user] is crawling into [src]! It looks like [user.p_theyre()] trying to commit suicide!") + var/obj/structure/closet/body_bag/R = new unfoldedbag_path(user.loc) + R.add_fingerprint(user) + qdel(src) + user.forceMove(R) + playsound(src, 'sound/blank.ogg', 15, TRUE, -3) + return (OXYLOSS) + ..() + + +/obj/structure/closet/body_bag + name = "body bag" + desc = "" + icon = 'icons/obj/bodybag.dmi' + icon_state = "bodybag" + density = FALSE + mob_storage_capacity = 2 + open_sound = 'sound/blank.ogg' + close_sound = 'sound/blank.ogg' + open_sound_volume = 15 + close_sound_volume = 15 + integrity_failure = 0 + delivery_icon = null //unwrappable + anchorable = FALSE + mouse_drag_pointer = MOUSE_ACTIVE_POINTER + drag_slowdown = 0 + var/foldedbag_path = /obj/item/bodybag + var/obj/item/bodybag/foldedbag_instance = null + +/obj/structure/closet/body_bag/Destroy() + // If we have a stored bag, and it's in nullspace (not in someone's hand), delete it. + if (foldedbag_instance && !foldedbag_instance.loc) + QDEL_NULL(foldedbag_instance) + return ..() + +/obj/structure/closet/body_bag/open(mob/living/user) + . = ..() + if(.) + mouse_drag_pointer = MOUSE_INACTIVE_POINTER + +/obj/structure/closet/body_bag/close() + . = ..() + if(.) + density = FALSE + mouse_drag_pointer = MOUSE_ACTIVE_POINTER + +/obj/structure/closet/body_bag/MouseDrop(over_object, src_location, over_location) + . = ..() + if(over_object == usr && Adjacent(usr) && (in_range(src, usr) || usr.contents.Find(src))) + if(!ishuman(usr)) + return + if(opened) + to_chat(usr, "I wrestle with [src], but it won't fold while unzipped.") + return + if(contents.len) + to_chat(usr, "There are too many things inside of [src] to fold it up!") + return + visible_message("[usr] folds up [src].") + var/obj/item/bodybag/B = foldedbag_instance || new foldedbag_path + usr.put_in_hands(B) + qdel(src) diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index ddb1483ae9..a71ac3a395 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -271,8 +271,6 @@ var/list/ripples = list() var/engine_coeff = 1 //current engine coeff - var/current_engines = 0 //current engine power - var/initial_engines = 0 //initial engine power var/list/engine_list = list() var/can_move_docking_ports = FALSE //if this shuttle can move docking ports other than the one it is docked at var/list/hidden_turfs = list() @@ -306,9 +304,6 @@ if(istype(cur_area, area_type)) shuttle_areas[cur_area] = TRUE - initial_engines = count_engines() - current_engines = initial_engines - #ifdef DOCKING_PORT_HIGHLIGHT highlight("#0f0") #endif @@ -483,9 +478,6 @@ for(var/t in return_turfs()) var/turf/T = t for(var/mob/living/M in T.GetAllContents()) - // If they have a mind and they're not in the brig, they escaped - if(M.mind && !istype(t, /turf/open/floor/plasteel/shuttle/red) && !istype(t, /turf/open/floor/mineral/plastitanium/red/brig)) - M.mind.force_escaped = TRUE // Ghostize them and put them in nullspace stasis (for stat & possession checks) M.notransform = TRUE M.ghostize(FALSE) @@ -762,41 +754,11 @@ if(mod == 0) return var/old_coeff = engine_coeff - engine_coeff = get_engine_coeff(current_engines,mod) - current_engines = max(0,current_engines + mod) + engine_coeff = 1 if(in_flight()) var/delta_coeff = engine_coeff / old_coeff modTimer(delta_coeff) -/obj/docking_port/mobile/proc/count_engines() - . = 0 - for(var/thing in shuttle_areas) - var/area/shuttle/areaInstance = thing - for(var/obj/structure/shuttle/engine/E in areaInstance.contents) - if(!QDELETED(E)) - engine_list += E - . += E.engine_power - -// Double initial engines to get to 0.5 minimum -// Lose all initial engines to get to 2 -//For 0 engine shuttles like BYOS 5 engines to get to doublespeed -/obj/docking_port/mobile/proc/get_engine_coeff(current,engine_mod) - var/new_value = max(0,current + engine_mod) - if(new_value == initial_engines) - return 1 - if(new_value > initial_engines) - var/delta = new_value - initial_engines - var/change_per_engine = (1 - ENGINE_COEFF_MIN) / ENGINE_DEFAULT_MAXSPEED_ENGINES // 5 by default - if(initial_engines > 0) - change_per_engine = (1 - ENGINE_COEFF_MIN) / initial_engines // or however many it had - return CLAMP(1 - delta * change_per_engine,ENGINE_COEFF_MIN,ENGINE_COEFF_MAX) - if(new_value < initial_engines) - var/delta = initial_engines - new_value - var/change_per_engine = 1 //doesn't really matter should not be happening for 0 engine shuttles - if(initial_engines > 0) - change_per_engine = (ENGINE_COEFF_MAX - 1) / initial_engines //just linear drop to max delay - return CLAMP(1 + delta * change_per_engine,ENGINE_COEFF_MIN,ENGINE_COEFF_MAX) - /obj/docking_port/mobile/proc/in_flight() switch(mode) diff --git a/code/modules/spells/roguetown/acolyte/general.dm b/code/modules/spells/roguetown/acolyte/general.dm index 9e1ece54fd..05b5fd44ed 100644 --- a/code/modules/spells/roguetown/acolyte/general.dm +++ b/code/modules/spells/roguetown/acolyte/general.dm @@ -107,7 +107,7 @@ target.visible_message(span_info("Vital energies are sapped towards [target]!"), span_notice("The life around me pales as I am restored!")) // set up a ritual pile of bones (or just cast near a stack of bones whatever) around us for massive bonuses, cap at 50 for 75 healing total (wowie) situational_bonus = 0 - for (var/obj/item/stack/sheet/bone/O in oview(5, user)) + for (var/obj/item/alch/bone/O in oview(5, user)) situational_bonus = min(situational_bonus + 5, 50) if (situational_bonus > 0) conditional_buff = TRUE diff --git a/code/modules/spells/roguetown/wizard.dm b/code/modules/spells/roguetown/wizard.dm index b2ba3a03ef..7484f6a419 100644 --- a/code/modules/spells/roguetown/wizard.dm +++ b/code/modules/spells/roguetown/wizard.dm @@ -515,15 +515,7 @@ var/skill_level = user.mind?.get_skill_level(attached_spell.associated_skill) cleanspeed = initial(cleanspeed) - (skill_level * 3) // 3 cleanspeed per skill level, from 35 down to a maximum of 17 (pretty quick) - if (istype(target, /obj/structure/window)) - user.visible_message(span_notice("[user] gestures at \the [target.name], tiny motes of arcyne power running across its surface..."), span_notice("I begin to clean \the [target.name] with my arcyne power...")) - if (do_after(user, src.cleanspeed, target = target)) - target.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) - target.set_opacity(initial(target.opacity)) - to_chat(user, span_notice("I render \the [target.name] clean.")) - return TRUE - return FALSE - else if (istype(target, /obj/effect/decal/cleanable)) + if (istype(target, /obj/effect/decal/cleanable)) user.visible_message(span_notice("[user] gestures at \the [target.name], arcyne power slowly scouring it away..."), span_notice("I begin to scour \the [target.name] away with my arcyne power...")) if (do_after(user, src.cleanspeed, target = target)) to_chat(user, span_notice("I expunge \the [target.name] with my mana.")) diff --git a/code/modules/spells/spell.dm b/code/modules/spells/spell.dm index dc94ad9186..c6b279e931 100644 --- a/code/modules/spells/spell.dm +++ b/code/modules/spells/spell.dm @@ -274,16 +274,6 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) //needed for th to_chat(user, "I can't get the words out!") return FALSE - var/list/casting_clothes = typecacheof(list(/obj/item/clothing/suit/wizrobe, - /obj/item/clothing/head/wizard)) - - if(clothes_req) //clothes check - if(!is_type_in_typecache(H.wear_armor, casting_clothes)) - to_chat(H, "I don't feel strong enough without your robe!") - return FALSE - if(!is_type_in_typecache(H.head, casting_clothes)) - to_chat(H, "I don't feel strong enough without your hat!") - return FALSE if(miracle) var/datum/devotion/cleric_holder/D = H.cleric if(!D.check_devotion(devotion_cost)) diff --git a/code/modules/spells/spell_types/barnyard.dm b/code/modules/spells/spell_types/barnyard.dm deleted file mode 100644 index 5dd009f882..0000000000 --- a/code/modules/spells/spell_types/barnyard.dm +++ /dev/null @@ -1,51 +0,0 @@ -/obj/effect/proc_holder/spell/targeted/barnyardcurse - name = "Curse of the Barnyard" - desc = "" - school = "transmutation" - charge_type = "recharge" - charge_max = 150 - charge_counter = 0 - clothes_req = FALSE - stat_allowed = FALSE - invocation = "KN'A FTAGHU, PUCK 'BTHNK!" - invocation_type = "shout" - range = 7 - cooldown_min = 30 - selection_type = "range" - var/static/list/compatible_mobs_typecache = typecacheof(list(/mob/living/carbon/human, /mob/living/carbon/monkey)) - - action_icon_state = "barn" - -/obj/effect/proc_holder/spell/targeted/barnyardcurse/cast(list/targets, mob/user = usr) - if(!targets.len) - to_chat(user, "No target found in range!") - return - - var/mob/living/carbon/target = targets[1] - - - if(!is_type_in_typecache(target, compatible_mobs_typecache)) - to_chat(user, "I are unable to curse [target]'s head!") - return - - if(!(target in oview(range))) - to_chat(user, "[target.p_theyre(TRUE)] too far away!") - return - - if(target.anti_magic_check()) - to_chat(user, "The spell had no effect!") - target.visible_message("[target]'s face bursts into flames, which instantly burst outward, leaving [target] unharmed!", \ - "My face starts burning up, but the flames are repulsed by my anti-magic protection!") - return - - var/list/masks = list(/obj/item/clothing/mask/pig/cursed, /obj/item/clothing/mask/cowmask/cursed, /obj/item/clothing/mask/horsehead/cursed) - - var/choice = pick(masks) - var/obj/item/clothing/mask/magichead = new choice(get_turf(target)) - target.visible_message("[target]'s face bursts into flames, and a barnyard animal's head takes its place!", \ - "My face burns up, and shortly after the fire you realise you have the face of a barnyard animal!") - if(!target.dropItemToGround(target.wear_mask)) - qdel(target.wear_mask) - target.equip_to_slot_if_possible(magichead, SLOT_WEAR_MASK, 1, 1) - - target.flash_act() diff --git a/code/modules/spells/spell_types/construct_spells.dm b/code/modules/spells/spell_types/construct_spells.dm deleted file mode 100644 index 146eaf3db9..0000000000 --- a/code/modules/spells/spell_types/construct_spells.dm +++ /dev/null @@ -1,307 +0,0 @@ -//////////////////////////////Construct Spells///////////////////////// - -/obj/effect/proc_holder/spell/aoe_turf/conjure/construct/lesser - charge_max = 1800 - action_icon = 'icons/mob/actions/actions_cult.dmi' - action_icon_state = "artificer" - action_background_icon_state = "bg_demon" - -/obj/effect/proc_holder/spell/aoe_turf/conjure/construct/lesser/cult - clothes_req = TRUE - charge_max = 2500 - - -/obj/effect/proc_holder/spell/aoe_turf/area_conversion - name = "Area Conversion" - desc = "" - - school = "transmutation" - charge_max = 50 - clothes_req = FALSE - invocation = "none" - invocation_type = "none" - range = 2 - action_icon = 'icons/mob/actions/actions_cult.dmi' - action_icon_state = "areaconvert" - action_background_icon_state = "bg_cult" - -/obj/effect/proc_holder/spell/aoe_turf/area_conversion/cast(list/targets, mob/user = usr) - playsound(get_turf(user), 'sound/blank.ogg', 75, TRUE) - for(var/turf/T in targets) - T.narsie_act(FALSE, TRUE, 100 - (get_dist(user, T) * 25)) - -/obj/effect/proc_holder/spell/aoe_turf/conjure/wall - name = "Summon Cult Wall" - desc = "" - - school = "conjuration" - charge_max = 100 - clothes_req = FALSE - invocation = "none" - invocation_type = "none" - range = 0 - action_icon = 'icons/mob/actions/actions_cult.dmi' - action_icon_state = "lesserconstruct" - action_background_icon_state = "bg_cult" - - summon_type = list(/turf/closed/wall/mineral/cult/artificer) //we don't want artificer-based runed metal farms - - -/obj/effect/proc_holder/spell/aoe_turf/conjure/wall/reinforced - name = "Greater Construction" - desc = "" - - school = "conjuration" - charge_max = 300 - clothes_req = FALSE - invocation = "none" - invocation_type = "none" - range = 0 - - summon_type = list(/turf/closed/wall/r_wall) - -/obj/effect/proc_holder/spell/aoe_turf/conjure/soulstone - name = "Summon Soulstone" - desc = "" - - school = "conjuration" - charge_max = 2400 - clothes_req = FALSE - invocation = "none" - invocation_type = "none" - range = 0 - action_icon = 'icons/mob/actions/actions_cult.dmi' - action_icon_state = "summonsoulstone" - action_background_icon_state = "bg_demon" - - summon_type = list(/obj/item/soulstone) - -/obj/effect/proc_holder/spell/aoe_turf/conjure/soulstone/cult - clothes_req = TRUE - charge_max = 3600 - -/obj/effect/proc_holder/spell/aoe_turf/conjure/soulstone/noncult - summon_type = list(/obj/item/soulstone/anybody) - -/obj/effect/proc_holder/spell/aoe_turf/conjure/soulstone/noncult/purified - summon_type = list(/obj/item/soulstone/anybody/purified) - -/obj/effect/proc_holder/spell/targeted/forcewall/cult - name = "Shield" - desc = "" - school = "transmutation" - charge_max = 400 - clothes_req = FALSE - invocation = "none" - invocation_type = "none" - wall_type = /obj/effect/forcefield/cult - action_icon = 'icons/mob/actions/actions_cult.dmi' - action_icon_state = "cultforcewall" - action_background_icon_state = "bg_demon" - - - -/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift - name = "Phase Shift" - desc = "" - - school = "transmutation" - charge_max = 250 - clothes_req = FALSE - invocation = "none" - invocation_type = "none" - range = -1 - include_user = TRUE - jaunt_duration = 50 //in deciseconds - action_icon = 'icons/mob/actions/actions_cult.dmi' - action_icon_state = "phaseshift" - action_background_icon_state = "bg_demon" - jaunt_in_time = 12 - jaunt_in_type = /obj/effect/temp_visual/dir_setting/wraith - jaunt_out_type = /obj/effect/temp_visual/dir_setting/wraith/out - -/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift/jaunt_steam(mobloc) - return - -/obj/effect/proc_holder/spell/targeted/projectile/magic_missile/lesser - name = "Lesser Magic Missile" - desc = "" - - school = "evocation" - charge_max = 400 - clothes_req = FALSE - invocation = "none" - invocation_type = "none" - max_targets = 6 - action_icon_state = "magicm" - action_background_icon_state = "bg_demon" - proj_type = /obj/projectile/magic/spell/magic_missile/lesser - -/obj/projectile/magic/spell/magic_missile/lesser - color = "red" //Looks more culty this way - range = 10 - -/obj/effect/proc_holder/spell/targeted/smoke/disable - name = "Paralysing Smoke" - desc = "" - - school = "conjuration" - charge_max = 200 - clothes_req = FALSE - invocation = "none" - invocation_type = "none" - range = -1 - include_user = TRUE - cooldown_min = 20 //25 deciseconds reduction per rank - - smoke_spread = 3 - smoke_amt = 4 - action_icon_state = "smoke" - action_background_icon_state = "bg_cult" - - -/obj/effect/proc_holder/spell/targeted/abyssal_gaze - name = "Abyssal Gaze" - desc = "" - - charge_max = 750 - range = 5 - include_user = FALSE - selection_type = "range" - stat_allowed = FALSE - - school = "evocation" - clothes_req = FALSE - invocation = "none" - invocation_type = "none" - action_icon = 'icons/mob/actions/actions_cult.dmi' - action_background_icon_state = "bg_demon" - action_icon_state = "abyssal_gaze" - -/obj/effect/proc_holder/spell/targeted/abyssal_gaze/cast(list/targets, mob/user = usr) - if(!LAZYLEN(targets)) - to_chat(user, "No target found in range!") - revert_cast() - return - - var/mob/living/carbon/target = targets[1] - - if(!(target in oview(range))) - to_chat(user, "[target] is too far away!") - revert_cast() - return - - if(target.anti_magic_check(TRUE, TRUE)) - to_chat(target, "I feel a freezing darkness closing in on you, but it rapidly dissipates.") - return - - to_chat(target, "A freezing darkness surrounds you...") - target.playsound_local(get_turf(target), 'sound/blank.ogg', 50, 1) - user.playsound_local(get_turf(user), 'sound/blank.ogg', 50, 1) - target.become_blind(ABYSSAL_GAZE_BLIND) - addtimer(CALLBACK(src, PROC_REF(cure_blindness), target), 40) - target.adjust_bodytemperature(-200) - -/obj/effect/proc_holder/spell/targeted/abyssal_gaze/proc/cure_blindness(mob/target) - if(isliving(target)) - var/mob/living/L = target - L.cure_blind(ABYSSAL_GAZE_BLIND) - -/obj/effect/proc_holder/spell/targeted/dominate - name = "Dominate" - desc = "" - - charge_max = 600 - range = 7 - include_user = FALSE - selection_type = "range" - stat_allowed = FALSE - - school = "evocation" - clothes_req = FALSE - invocation = "none" - invocation_type = "none" - action_icon = 'icons/mob/actions/actions_cult.dmi' - action_background_icon_state = "bg_demon" - action_icon_state = "dominate" - -/obj/effect/proc_holder/spell/targeted/dominate/cast(list/targets, mob/user = usr) - if(!LAZYLEN(targets)) - to_chat(user, "No target found in range.") - revert_cast() - return - - var/mob/living/simple_animal/S = targets[1] - - if(S.ckey) - to_chat(user, "[S] is too intelligent to dominate!") - revert_cast() - return - - if(S.stat) - to_chat(user, "[S] is dead!") - revert_cast() - return - - if(S.sentience_type != SENTIENCE_ORGANIC) - to_chat(user, "[S] cannot be dominated!") - revert_cast() - return - - if(!(S in oview(range))) - to_chat(user, "[S] is too far away!") - revert_cast() - return - - S.add_atom_colour("#990000", FIXED_COLOUR_PRIORITY) - S.faction = list("cult") - playsound(get_turf(S), 'sound/blank.ogg', 100, TRUE) - new /obj/effect/temp_visual/cult/sac(get_turf(S)) - -/obj/effect/proc_holder/spell/targeted/dominate/can_target(mob/living/target) - if(!isanimal(target) || target.stat) - return FALSE - if("cult" in target.faction) - return FALSE - return TRUE - -/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift/golem - charge_max = 800 - jaunt_in_type = /obj/effect/temp_visual/dir_setting/cult/phase - jaunt_out_type = /obj/effect/temp_visual/dir_setting/cult/phase/out - - -/obj/effect/proc_holder/spell/targeted/projectile/dumbfire/juggernaut - name = "Gauntlet Echo" - desc = "" - proj_type = /obj/projectile/magic/spell/juggernaut - charge_max = 350 - clothes_req = FALSE - action_icon = 'icons/mob/actions/actions_cult.dmi' - action_icon_state = "cultfist" - action_background_icon_state = "bg_demon" - sound = 'sound/blank.ogg' - -/obj/projectile/magic/spell/juggernaut - name = "Gauntlet Echo" - icon_state = "cultfist" - alpha = 180 - damage = 30 - damage_type = BRUTE - knockdown = 50 - hitsound = 'sound/blank.ogg' - trigger_range = 0 - check_holy = TRUE - ignored_factions = list("cult") - range = 15 - speed = 7 - -/obj/projectile/magic/spell/juggernaut/on_hit(atom/target, blocked) - . = ..() - var/turf/T = get_turf(src) - playsound(T, 'sound/blank.ogg', 100, FALSE) - new /obj/effect/temp_visual/cult/sac(T) - for(var/obj/O in range(src,1)) - if(O.density) - O.take_damage(90, BRUTE, "melee", 0) - new /obj/effect/temp_visual/cult/turf/floor(get_turf(O)) diff --git a/code/modules/spells/spell_types/devil_boons.dm b/code/modules/spells/spell_types/devil_boons.dm deleted file mode 100644 index d57a5dead3..0000000000 --- a/code/modules/spells/spell_types/devil_boons.dm +++ /dev/null @@ -1,75 +0,0 @@ -/obj/effect/proc_holder/spell/targeted/summon_wealth - name = "Summon wealth" - desc = "" - invocation_type = "none" - include_user = TRUE - range = -1 - clothes_req = FALSE - school = "conjuration" - charge_max = 100 - cooldown_min = 10 - action_icon = 'icons/mob/actions/actions_minor_antag.dmi' - action_icon_state = "moneybag" - - -/obj/effect/proc_holder/spell/targeted/summon_wealth/cast(list/targets, mob/user = usr) - for(var/mob/living/carbon/C in targets) - if(user.dropItemToGround(user.get_active_held_item())) - var/obj/item = pick( - new /obj/item/coin/gold(user.drop_location()), - new /obj/item/coin/diamond(user.drop_location()), - new /obj/item/coin/silver(user.drop_location()), - new /obj/item/clothing/accessory/medal/gold(user.drop_location()), - new /obj/item/stack/sheet/mineral/gold(user.drop_location()), - new /obj/item/stack/sheet/mineral/silver(user.drop_location()), - new /obj/item/stack/sheet/mineral/diamond(user.drop_location())) - C.put_in_hands(item) - -/obj/effect/proc_holder/spell/targeted/view_range - name = "Distant vision" - desc = "" - invocation_type = "none" - include_user = TRUE - range = -1 - clothes_req = FALSE - charge_max = 50 - cooldown_min = 10 - action_icon = 'icons/mob/actions/actions_silicon.dmi' - action_icon_state = "camera_jump" - var/ranges = list(7,8,9,10) - -/obj/effect/proc_holder/spell/targeted/view_range/cast(list/targets, mob/user = usr) - for(var/mob/C in targets) - if(!C.client) - continue - C.client.change_view(input("Select view range:", "Range", 4) in ranges) - -/obj/effect/proc_holder/spell/targeted/summon_friend - name = "Summon Friend" - desc = "" - invocation_type = "none" - include_user = TRUE - range = -1 - clothes_req = FALSE - charge_max = 50 - cooldown_min = 10 - action_icon = 'icons/mob/actions/actions_spells.dmi' - action_icon_state = "sacredflame" - var/mob/living/friend - var/obj/effect/mob_spawn/human/demonic_friend/friendShell - -/obj/effect/proc_holder/spell/targeted/summon_friend/cast(list/targets, mob/user = usr) - if(!QDELETED(friend)) - to_chat(friend, "My master has deemed you a poor friend. Your durance in hell will now resume.") - friend.dust(TRUE) - qdel(friendShell) - return - if(!QDELETED(friendShell)) - qdel(friendShell) - return - for(var/C in targets) - var/mob/living/L = C - friendShell = new /obj/effect/mob_spawn/human/demonic_friend(L.loc, L.mind, src) - -/obj/effect/proc_holder/spell/targeted/conjure_item/spellpacket/robeless - clothes_req = FALSE diff --git a/code/modules/spells/spell_types/godhand.dm b/code/modules/spells/spell_types/godhand.dm index 38b29dd09d..2235b30865 100644 --- a/code/modules/spells/spell_types/godhand.dm +++ b/code/modules/spells/spell_types/godhand.dm @@ -44,45 +44,6 @@ attached_spell.on_hand_destroy(src) return ..() -/obj/item/melee/touch_attack/disintegrate - name = "\improper smiting touch" - desc = "" - catchphrase = "EI NATH!!" - on_use_sound = 'sound/blank.ogg' - icon_state = "disintegrate" - item_state = "disintegrate" - -/obj/item/melee/touch_attack/disintegrate/afterattack(atom/target, mob/living/carbon/user, proximity) - if(!proximity || target == user || !ismob(target) || !iscarbon(user) || !(user.mobility_flags & MOBILITY_USE)) //exploding after touching myself would be bad - return - if(!user.can_speak_vocal()) - to_chat(user, "I can't get the words out!") - return - var/mob/M = target - do_sparks(4, FALSE, M.loc) - for(var/mob/living/L in view(src, 7)) - if(L != user) - L.flash_act(affect_silicon = FALSE) - var/atom/A = M.anti_magic_check() - if(A) - if(isitem(A)) - target.visible_message("[target]'s [A] glows brightly as it wards off the spell!") - user.visible_message("The feedback blows [user]'s arm off!","The spell bounces from [M]'s skin back into your arm!") - user.flash_act() - var/obj/item/bodypart/part = user.get_holding_bodypart_of_item(src) - if(part) - part.dismember() - return ..() - var/obj/item/clothing/suit/hooded/bloated_human/suit = M.get_item_by_slot(SLOT_ARMOR) - if(istype(suit)) - M.visible_message("[M]'s [suit] explodes off of them into a puddle of gore!") - M.dropItemToGround(suit) - qdel(suit) - new /obj/effect/gibspawner(M.loc) - return ..() - M.gib() - return ..() - /obj/item/melee/touch_attack/fleshtostone name = "\improper petrifying touch" desc = "" diff --git a/code/modules/spells/spell_types/infinite_guns.dm b/code/modules/spells/spell_types/infinite_guns.dm deleted file mode 100644 index c61322a4c0..0000000000 --- a/code/modules/spells/spell_types/infinite_guns.dm +++ /dev/null @@ -1,27 +0,0 @@ -/obj/effect/proc_holder/spell/targeted/infinite_guns - name = "Lesser Summon Guns" - desc = "" - invocation_type = "none" - include_user = TRUE - range = -1 - - school = "conjuration" - charge_max = 750 - clothes_req = TRUE - cooldown_min = 10 //Gun wizard - action_icon_state = "bolt_action" - var/summon_path = /obj/item/gun/ballistic/rifle/boltaction/enchanted - -/obj/effect/proc_holder/spell/targeted/infinite_guns/cast(list/targets, mob/user = usr) - for(var/mob/living/carbon/C in targets) - C.drop_all_held_items() - var/GUN = new summon_path - C.put_in_hands(GUN) - -/obj/effect/proc_holder/spell/targeted/infinite_guns/gun - -/obj/effect/proc_holder/spell/targeted/infinite_guns/arcane_barrage - name = "Arcane Barrage" - desc = "" - action_icon_state = "arcane_barrage" - summon_path = /obj/item/gun/ballistic/rifle/boltaction/enchanted/arcane_barrage diff --git a/code/modules/spells/spell_types/lichdom.dm b/code/modules/spells/spell_types/lichdom.dm deleted file mode 100644 index 9b56656aa9..0000000000 --- a/code/modules/spells/spell_types/lichdom.dm +++ /dev/null @@ -1,75 +0,0 @@ -/obj/effect/proc_holder/spell/targeted/lichdom - name = "Bind Soul" - desc = "A dark necromantic pact that can forever bind my soul to an \ - item of my choosing. So long as both my body and the item remain \ - intact and on the same plane you can revive from death, though the time \ - between reincarnations grows steadily with use, along with the weakness \ - that the new skeleton body will experience upon 'birth'. Note that \ - becoming a lich destroys all internal organs except the brain." - school = "necromancy" - charge_max = 10 - clothes_req = FALSE - centcom_cancast = FALSE - invocation = "NECREM IMORTIUM!" - invocation_type = "shout" - range = -1 - level_max = 0 //cannot be improved - cooldown_min = 10 - include_user = TRUE - - action_icon = 'icons/mob/actions/actions_spells.dmi' - action_icon_state = "skeleton" - -/obj/effect/proc_holder/spell/targeted/lichdom/cast(list/targets,mob/user = usr) - for(var/mob/M in targets) - var/list/hand_items = list() - if(iscarbon(M)) - hand_items = list(M.get_active_held_item(),M.get_inactive_held_item()) - if(!hand_items.len) - to_chat(M, "I must hold an item you wish to make my phylactery!") - return - if(!M.mind.hasSoul) - to_chat(user, "I do not possess a soul!") - return - - var/obj/item/marked_item - - for(var/obj/item/item in hand_items) - // I ensouled the nuke disk once. But it's probably a really - // mean tactic, so probably should discourage it. - if((item.item_flags & ABSTRACT) || HAS_TRAIT(item, TRAIT_NODROP) || SEND_SIGNAL(item, COMSIG_ITEM_IMBUE_SOUL, user)) - continue - marked_item = item - to_chat(M, "I begin to focus my very being into [item]...") - break - - if(!marked_item) - to_chat(M, "None of the items you hold are suitable for emplacement of my fragile soul.") - return - - playsound(user, 'sound/blank.ogg', 100) - - if(!do_after(M, 50, needhand=FALSE, target=marked_item)) - to_chat(M, "My soul snaps back to my body as you stop ensouling [marked_item]!") - return - - marked_item.name = "ensouled [marked_item.name]" - marked_item.desc += "\nA terrible aura surrounds this item, its very existence is offensive to life itself..." - marked_item.add_atom_colour("#003300", ADMIN_COLOUR_PRIORITY) - - new /obj/item/phylactery(marked_item, M.mind) - - to_chat(M, "With a hideous feeling of emptiness you watch in horrified fascination as skin sloughs off bone! Blood boils, nerves disintegrate, eyes boil in their sockets! As my organs crumble to dust in my fleshless chest you come to terms with my choice. You're a lich!") - M.mind.hasSoul = FALSE - M.set_species(/datum/species/skeleton) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - H.dropItemToGround(H.wear_pants) - H.dropItemToGround(H.wear_armor) - H.dropItemToGround(H.head) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe/black(H), SLOT_ARMOR) - H.equip_to_slot_or_del(new /obj/item/clothing/head/wizard/black(H), SLOT_HEAD) - H.equip_to_slot_or_del(new /obj/item/clothing/under/color/black(H), SLOT_PANTS) - - // you only get one phylactery. - M.mind.RemoveSpell(src) diff --git a/code/modules/spells/spell_types/mime.dm b/code/modules/spells/spell_types/mime.dm index e763d78cc8..bc8edc3653 100644 --- a/code/modules/spells/spell_types/mime.dm +++ b/code/modules/spells/spell_types/mime.dm @@ -66,44 +66,6 @@ A.setDir(user.dir) A.buckle_mob(user) -/obj/effect/proc_holder/spell/aoe_turf/conjure/mime_box - name = "Invisible Box" - desc = "" - school = "mime" - panel = "Mime" - summon_type = list(/obj/item/storage/box/mime) - invocation_type = "emote" - invocation_emote_self = "I conjure up an invisible box, large enough to store a few things." - summon_lifespan = 500 - charge_max = 300 - clothes_req = FALSE - antimagic_allowed = TRUE - range = 0 - cast_sound = null - human_req = TRUE - - action_icon = 'icons/mob/actions/actions_mime.dmi' - action_icon_state = "invisible_box" - action_background_icon_state = "bg_mime" - -/obj/effect/proc_holder/spell/aoe_turf/conjure/mime_box/cast(list/targets,mob/user = usr) - ..() - var/turf/T = user.loc - for (var/obj/item/storage/box/mime/B in T) - user.put_in_hands(B) - B.alpha = 255 - addtimer(CALLBACK(B, TYPE_PROC_REF(/obj/item/storage/box/mime, emptyStorage), FALSE), (summon_lifespan - 1)) - -/obj/effect/proc_holder/spell/aoe_turf/conjure/mime_box/Click() - if(usr && usr.mind) - if(!usr.mind.miming) - to_chat(usr, "I must dedicate myself to silence first!") - return - invocation = "[usr.real_name] moves [usr.p_their()] hands in the shape of a cube, pressing a box out of the air." - else - invocation_type ="none" - ..() - /obj/effect/proc_holder/spell/targeted/mime/speak name = "Speech" @@ -174,55 +136,6 @@ invocation_type ="none" ..() -/obj/effect/proc_holder/spell/aimed/finger_guns - name = "Finger Guns" - desc = "" - school = "mime" - panel = "Mime" - charge_max = 300 - clothes_req = FALSE - antimagic_allowed = TRUE - invocation_type = "emote" - invocation_emote_self = "I fire your finger gun!" - range = 20 - projectile_type = /obj/projectile/bullet/mime - projectile_amount = 3 - sound = null - active_msg = "You draw your fingers!" - deactive_msg = "You put your fingers at ease. Another time." - active = FALSE - - action_icon = 'icons/mob/actions/actions_mime.dmi' - action_icon_state = "finger_guns0" - action_background_icon_state = "bg_mime" - base_icon_state = "finger_guns" - - -/obj/effect/proc_holder/spell/aimed/finger_guns/Click() - var/mob/living/carbon/human/owner = usr - if(owner.incapacitated()) - to_chat(owner, "I can't properly point your fingers while incapacitated.") - return - if(usr && usr.mind) - if(!usr.mind.miming) - to_chat(usr, "I must dedicate myself to silence first!") - return - invocation = "[usr.real_name] fires [usr.p_their()] finger gun!" - else - invocation_type ="none" - ..() - -/obj/effect/proc_holder/spell/aimed/finger_guns/InterceptClickOn(mob/living/caller, params, atom/target) - if(caller.incapacitated()) - to_chat(caller, "I can't properly point your fingers while incapacitated.") - if(charge_type == "recharge") - var/refund_percent = current_amount/projectile_amount - charge_counter = charge_max * refund_percent - start_recharge() - remove_ranged_ability() - on_deactivation(caller) - ..() - /obj/item/book/granter/spell/mimery_blockade spell = /obj/effect/proc_holder/spell/targeted/forcewall/mime spellname = "Invisible Blockade" @@ -237,18 +150,3 @@ return if(!locate(/obj/effect/proc_holder/spell/targeted/mime/speak) in user.mind.spell_list) user.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/mime/speak) - -/obj/item/book/granter/spell/mimery_guns - spell = /obj/effect/proc_holder/spell/aimed/finger_guns - spellname = "Finger Guns" - name = "Guide to Advanced Mimery Vol 2" - desc = "" - icon_state ="bookmime" - remarks = list("...") - -/obj/item/book/granter/spell/mimery_guns/attack_self(mob/user) - . = ..() - if(!.) - return - if(!locate(/obj/effect/proc_holder/spell/targeted/mime/speak) in user.mind.spell_list) - user.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/mime/speak) diff --git a/code/modules/spells/spell_types/shadow_walk.dm b/code/modules/spells/spell_types/shadow_walk.dm index 25bb638055..2c6623c596 100644 --- a/code/modules/spells/spell_types/shadow_walk.dm +++ b/code/modules/spells/spell_types/shadow_walk.dm @@ -47,9 +47,6 @@ /obj/effect/dummy/phased_mob/shadow/relaymove(mob/user, direction) var/turf/newLoc = get_step(src,direction) - if(isspaceturf(newLoc)) - to_chat(user, "It really would not be wise to go into space.") - return forceMove(newLoc) check_light_level() diff --git a/code/modules/spells/spell_types/shapeshift.dm b/code/modules/spells/spell_types/shapeshift.dm index 0794e0f697..49222fc728 100644 --- a/code/modules/spells/spell_types/shapeshift.dm +++ b/code/modules/spells/spell_types/shapeshift.dm @@ -19,8 +19,7 @@ var/shapeshift_type var/list/possible_shapes = list(/mob/living/simple_animal/mouse,\ /mob/living/simple_animal/pet/dog/corgi,\ - /mob/living/simple_animal/hostile/poison/giant_spider/hunter/viper,\ - /mob/living/simple_animal/hostile/construct/armored) + /mob/living/simple_animal/hostile/poison/giant_spider/hunter/viper) /obj/effect/proc_holder/spell/targeted/shapeshift/cast(list/targets,mob/user = usr) if(src in user.mob_spell_list) diff --git a/code/modules/spells/spell_types/touch_attacks.dm b/code/modules/spells/spell_types/touch_attacks.dm index c1d80d2a3e..2216b2502d 100644 --- a/code/modules/spells/spell_types/touch_attacks.dm +++ b/code/modules/spells/spell_types/touch_attacks.dm @@ -56,19 +56,6 @@ to_chat(user, "[drawmessage]") return TRUE - -/obj/effect/proc_holder/spell/targeted/touch/disintegrate - name = "Smite" - desc = "" - hand_path = /obj/item/melee/touch_attack/disintegrate - - school = "evocation" - charge_max = 600 - clothes_req = TRUE - cooldown_min = 200 //100 deciseconds reduction per rank - - action_icon_state = "gib" - /obj/effect/proc_holder/spell/targeted/touch/flesh_to_stone name = "Flesh to Stone" desc = "" diff --git a/code/modules/spells/spell_types/turf_teleport.dm b/code/modules/spells/spell_types/turf_teleport.dm index dc6d81b115..880458668e 100644 --- a/code/modules/spells/spell_types/turf_teleport.dm +++ b/code/modules/spells/spell_types/turf_teleport.dm @@ -6,7 +6,6 @@ var/inner_tele_radius = 1 var/outer_tele_radius = 2 - var/include_space = FALSE //whether it includes space tiles in possible teleport locations var/include_dense = FALSE //whether it includes dense tiles in possible teleport locations var/sound1 = 'sound/blank.ogg' var/sound2 = 'sound/blank.ogg' @@ -18,8 +17,6 @@ for(var/turf/T in range(target,outer_tele_radius)) if(T in range(target,inner_tele_radius)) continue - if(isspaceturf(T) && !include_space) - continue if(T.density && !include_dense) continue if(T.x>world.maxx-outer_tele_radius || T.xI feel less hungry...
") - owner.adjust_nutrition(50) - addtimer(CALLBACK(src, PROC_REF(synth_cool)), 50) - -/obj/item/organ/cyberimp/chest/nutriment/proc/synth_cool() - synthesizing = FALSE - -/obj/item/organ/cyberimp/chest/nutriment/emp_act(severity) - . = ..() - if(!owner || . & EMP_PROTECT_SELF) - return - owner.reagents.add_reagent(/datum/reagent/toxin/bad_food, poison_amount / severity) - to_chat(owner, "I feel like my insides are burning.") - - -/obj/item/organ/cyberimp/chest/nutriment/plus - name = "Nutriment pump implant PLUS" - desc = "" - icon_state = "chest_implant" - implant_color = "#006607" - hunger_threshold = NUTRITION_LEVEL_HUNGRY - poison_amount = 10 - -/obj/item/organ/cyberimp/chest/reviver - name = "Reviver implant" - desc = "" - icon_state = "chest_implant" - implant_color = "#AD0000" - slot = ORGAN_SLOT_HEART_AID - var/revive_cost = 0 - var/reviving = 0 - var/cooldown = 0 - -/obj/item/organ/cyberimp/chest/reviver/on_life() - if(reviving) - if(owner.stat == UNCONSCIOUS) - addtimer(CALLBACK(src, PROC_REF(heal)), 30) - else - cooldown = revive_cost + world.time - reviving = FALSE - to_chat(owner, "My reviver implant shuts down and starts recharging. It will be ready again in [DisplayTimeText(revive_cost)].") - return - - if(cooldown > world.time) - return - if(owner.stat != UNCONSCIOUS) - return - if(owner.suiciding) - return - - revive_cost = 0 - reviving = TRUE - to_chat(owner, "I feel a faint buzzing as my reviver implant starts patching my wounds...") - -/obj/item/organ/cyberimp/chest/reviver/proc/heal() - if(owner.getOxyLoss()) - owner.adjustOxyLoss(-5) - revive_cost += 5 - if(owner.getBruteLoss()) - owner.adjustBruteLoss(-2) - revive_cost += 40 - if(owner.getFireLoss()) - owner.adjustFireLoss(-2) - revive_cost += 40 - if(owner.getToxLoss()) - owner.adjustToxLoss(-1) - revive_cost += 40 - -/obj/item/organ/cyberimp/chest/reviver/emp_act(severity) - . = ..() - if(!owner || . & EMP_PROTECT_SELF) - return - - if(reviving) - revive_cost += 200 - else - cooldown += 200 - - if(ishuman(owner)) - var/mob/living/carbon/human/H = owner - if(H.stat != DEAD && prob(50 / severity) && H.can_heartattack()) - H.set_heartattack(TRUE) - to_chat(H, "I feel a horrible agony in my chest!") - addtimer(CALLBACK(src, PROC_REF(undo_heart_attack)), 600 / severity) - -/obj/item/organ/cyberimp/chest/reviver/proc/undo_heart_attack() - var/mob/living/carbon/human/H = owner - if(!istype(H)) - return - H.set_heartattack(FALSE) - if(H.stat == CONSCIOUS) - to_chat(H, "I feel my heart beating again!") - - -/obj/item/organ/cyberimp/chest/thrusters - name = "implantable thrusters set" - desc = "An implantable set of thruster ports. They use the gas from environment or subject's internals for propulsion in zero-gravity areas. \ - Unlike regular jetpacks, this device has no stabilization system." - slot = ORGAN_SLOT_THRUSTERS - icon_state = "imp_jetpack" - implant_overlay = null - implant_color = null - actions_types = list(/datum/action/item_action/organ_action/toggle) - w_class = WEIGHT_CLASS_NORMAL - var/on = FALSE - var/datum/effect_system/trail_follow/ion/ion_trail - -/obj/item/organ/cyberimp/chest/thrusters/Insert(mob/living/carbon/M, special = 0) - . = ..() - if(!ion_trail) - ion_trail = new - ion_trail.set_up(M) - -/obj/item/organ/cyberimp/chest/thrusters/Remove(mob/living/carbon/M, special = 0) - if(on) - toggle(silent = TRUE) - ..() - -/obj/item/organ/cyberimp/chest/thrusters/ui_action_click() - toggle() - -/obj/item/organ/cyberimp/chest/thrusters/proc/toggle(silent = FALSE) - if(!on) - if((organ_flags & ORGAN_FAILING)) - if(!silent) - to_chat(owner, "My thrusters set seems to be broken!") - return 0 - on = TRUE - if(allow_thrust(0.01)) - ion_trail.start() - RegisterSignal(owner, COMSIG_MOVABLE_MOVED, PROC_REF(move_react)) - owner.add_movespeed_modifier(MOVESPEED_ID_CYBER_THRUSTER, priority=100, multiplicative_slowdown=-2, movetypes=FLOATING, conflict=MOVE_CONFLICT_JETPACK) - if(!silent) - to_chat(owner, "I turn my thrusters set on.") - else - ion_trail.stop() - UnregisterSignal(owner, COMSIG_MOVABLE_MOVED) - owner.remove_movespeed_modifier(MOVESPEED_ID_CYBER_THRUSTER) - if(!silent) - to_chat(owner, "I turn my thrusters set off.") - on = FALSE - update_icon() - -/obj/item/organ/cyberimp/chest/thrusters/update_icon() - if(on) - icon_state = "imp_jetpack-on" - else - icon_state = "imp_jetpack" - for(var/X in actions) - var/datum/action/A = X - A.UpdateButtonIcon() - -/obj/item/organ/cyberimp/chest/thrusters/proc/move_react() - allow_thrust(0.01) - -/obj/item/organ/cyberimp/chest/thrusters/proc/allow_thrust(num) - if(!on || !owner) - return 0 - - var/turf/T = get_turf(owner) - if(!T) // No more runtimes from being stuck in nullspace. - return 0 - - // Priority 1: use air from environment. - var/datum/gas_mixture/environment = T.return_air() - if(environment && environment.return_pressure() > 30) - return 1 - - // Priority 3: use internals tank. - var/obj/item/tank/I = owner.internal - if(I && I.air_contents && I.air_contents.total_moles() > num) - var/datum/gas_mixture/removed = I.air_contents.remove(num) - if(removed.total_moles() > 0.005) - T.assume_air(removed) - return 1 - else - T.assume_air(removed) - - toggle(silent = TRUE) - return 0 diff --git a/code/modules/surgery/organs/augments_eyes.dm b/code/modules/surgery/organs/augments_eyes.dm deleted file mode 100644 index 0e6cd60cc3..0000000000 --- a/code/modules/surgery/organs/augments_eyes.dm +++ /dev/null @@ -1,54 +0,0 @@ -/obj/item/organ/cyberimp/eyes - name = "cybernetic eye implant" - desc = "" - icon_state = "eye_implant" - implant_overlay = "eye_implant_overlay" - slot = ORGAN_SLOT_EYES - zone = BODY_ZONE_PRECISE_R_EYE - w_class = WEIGHT_CLASS_TINY - -// HUD implants -/obj/item/organ/cyberimp/eyes/hud - name = "HUD implant" - desc = "" - slot = ORGAN_SLOT_HUD - var/HUD_type = 0 - var/HUD_trait = null - -/obj/item/organ/cyberimp/eyes/hud/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = FALSE) - ..() - if(HUD_type) - var/datum/atom_hud/H = GLOB.huds[HUD_type] - H.add_hud_to(M) - if(HUD_trait) - ADD_TRAIT(M, HUD_trait, ORGAN_TRAIT) - -/obj/item/organ/cyberimp/eyes/hud/Remove(mob/living/carbon/M, special = 0) - if(HUD_type) - var/datum/atom_hud/H = GLOB.huds[HUD_type] - H.remove_hud_from(M) - if(HUD_trait) - REMOVE_TRAIT(M, HUD_trait, ORGAN_TRAIT) - ..() - -/obj/item/organ/cyberimp/eyes/hud/medical - name = "Medical HUD implant" - desc = "" - HUD_type = DATA_HUD_MEDICAL_ADVANCED - HUD_trait = TRAIT_MEDICAL_HUD - -/obj/item/organ/cyberimp/eyes/hud/security - name = "Security HUD implant" - desc = "" - HUD_type = DATA_HUD_SECURITY_ADVANCED - HUD_trait = TRAIT_SECURITY_HUD - -/obj/item/organ/cyberimp/eyes/hud/diagnostic - name = "Diagnostic HUD implant" - desc = "" - HUD_type = DATA_HUD_DIAGNOSTIC_ADVANCED - -/obj/item/organ/cyberimp/eyes/hud/security/syndicate - name = "Contraband Security HUD Implant" - desc = "" - syndicate_implant = TRUE diff --git a/code/modules/surgery/organs/augments_internal.dm b/code/modules/surgery/organs/augments_internal.dm deleted file mode 100644 index e6ea9d50b1..0000000000 --- a/code/modules/surgery/organs/augments_internal.dm +++ /dev/null @@ -1,177 +0,0 @@ - -/obj/item/organ/cyberimp - name = "cybernetic implant" - desc = "" - status = ORGAN_ROBOTIC - organ_flags = ORGAN_SYNTHETIC - var/implant_color = "#FFFFFF" - var/implant_overlay - var/syndicate_implant = FALSE //Makes the implant invisible to health analyzers and medical HUDs. - -/obj/item/organ/cyberimp/New(mob/M = null) - if(iscarbon(M)) - src.Insert(M) - if(implant_overlay) - var/mutable_appearance/overlay = mutable_appearance(icon, implant_overlay) - overlay.color = implant_color - add_overlay(overlay) - return ..() - - - -//[[[[BRAIN]]]] - -/obj/item/organ/cyberimp/brain - name = "cybernetic brain implant" - desc = "" - icon_state = "brain_implant" - implant_overlay = "brain_implant_overlay" - zone = BODY_ZONE_HEAD - w_class = WEIGHT_CLASS_TINY - -/obj/item/organ/cyberimp/brain/emp_act(severity) - . = ..() - if(!owner || . & EMP_PROTECT_SELF) - return - var/stun_amount = 200/severity - owner.Stun(stun_amount) - to_chat(owner, "My body seizes up!") - - -/obj/item/organ/cyberimp/brain/anti_drop - name = "anti-drop implant" - desc = "" - var/active = 0 - var/list/stored_items = list() - implant_color = "#DE7E00" - slot = ORGAN_SLOT_BRAIN_ANTIDROP - actions_types = list(/datum/action/item_action/organ_action/toggle) - -/obj/item/organ/cyberimp/brain/anti_drop/ui_action_click() - active = !active - if(active) - for(var/obj/item/I in owner.held_items) - stored_items += I - - var/list/L = owner.get_empty_held_indexes() - if(LAZYLEN(L) == owner.held_items.len) - to_chat(owner, "I are not holding any items, my hands relax...") - active = 0 - stored_items = list() - else - for(var/obj/item/I in stored_items) - to_chat(owner, "My [owner.get_held_index_name(owner.get_held_index_of_item(I))]'s grip tightens.") - ADD_TRAIT(I, TRAIT_NODROP, ANTI_DROP_IMPLANT_TRAIT) - - else - release_items() - to_chat(owner, "My hands relax...") - - -/obj/item/organ/cyberimp/brain/anti_drop/emp_act(severity) - . = ..() - if(!owner || . & EMP_PROTECT_SELF) - return - var/range = severity ? 10 : 5 - var/atom/A - if(active) - release_items() - for(var/obj/item/I in stored_items) - A = pick(oview(range)) - I.throw_at(A, range, 2) - to_chat(owner, "My [owner.get_held_index_name(owner.get_held_index_of_item(I))] spasms and throws the [I.name]!") - stored_items = list() - - -/obj/item/organ/cyberimp/brain/anti_drop/proc/release_items() - for(var/obj/item/I in stored_items) - REMOVE_TRAIT(I, TRAIT_NODROP, ANTI_DROP_IMPLANT_TRAIT) - stored_items = list() - - -/obj/item/organ/cyberimp/brain/anti_drop/Remove(mob/living/carbon/M, special = 0) - if(active) - ui_action_click() - ..() - -/obj/item/organ/cyberimp/brain/anti_stun - name = "CNS Rebooter implant" - desc = "" - implant_color = "#FFFF00" - slot = ORGAN_SLOT_BRAIN_ANTISTUN - - var/static/list/signalCache = list( - COMSIG_LIVING_STATUS_STUN, - COMSIG_LIVING_STATUS_KNOCKDOWN, - COMSIG_LIVING_STATUS_IMMOBILIZE, - COMSIG_LIVING_STATUS_PARALYZE, - ) - - var/stun_cap_amount = 40 - -/obj/item/organ/cyberimp/brain/anti_stun/Remove(mob/living/carbon/M, special = FALSE) - . = ..() - UnregisterSignal(M, signalCache) - -/obj/item/organ/cyberimp/brain/anti_stun/Insert() - . = ..() - RegisterSignal(owner, signalCache, PROC_REF(on_signal)) - -/obj/item/organ/cyberimp/brain/anti_stun/proc/on_signal(datum/source, amount) - if(!(organ_flags & ORGAN_FAILING) && amount > 0) - addtimer(CALLBACK(src, PROC_REF(clear_stuns)), stun_cap_amount, TIMER_UNIQUE|TIMER_OVERRIDE) - -/obj/item/organ/cyberimp/brain/anti_stun/proc/clear_stuns() - if(owner || !(organ_flags & ORGAN_FAILING)) - owner.SetStun(0) - owner.SetKnockdown(0) - owner.SetImmobilized(0) - owner.SetParalyzed(0) - -/obj/item/organ/cyberimp/brain/anti_stun/emp_act(severity) - . = ..() - if((organ_flags & ORGAN_FAILING) || . & EMP_PROTECT_SELF) - return - organ_flags |= ORGAN_FAILING - addtimer(CALLBACK(src, PROC_REF(reboot)), 90 / severity) - -/obj/item/organ/cyberimp/brain/anti_stun/proc/reboot() - organ_flags &= ~ORGAN_FAILING - -//[[[[MOUTH]]]] -/obj/item/organ/cyberimp/mouth - zone = BODY_ZONE_PRECISE_MOUTH - -/obj/item/organ/cyberimp/mouth/breathing_tube - name = "breathing tube implant" - desc = "" - icon_state = "implant_mask" - slot = ORGAN_SLOT_BREATHING_TUBE - w_class = WEIGHT_CLASS_TINY - -/obj/item/organ/cyberimp/mouth/breathing_tube/emp_act(severity) - . = ..() - if(!owner || . & EMP_PROTECT_SELF) - return - if(prob(60/severity)) - to_chat(owner, "My breathing tube suddenly closes!") - owner.losebreath += 2 - -//BOX O' IMPLANTS - -/obj/item/storage/box/cyber_implants - name = "boxed cybernetic implants" - desc = "" - icon_state = "cyber_implants" - var/list/boxed = list( - /obj/item/autosurgeon/thermal_eyes, - /obj/item/autosurgeon/xray_eyes, - /obj/item/autosurgeon/anti_stun, - /obj/item/autosurgeon/reviver) - var/amount = 5 - -/obj/item/storage/box/cyber_implants/PopulateContents() - var/implant - while(contents.len <= amount) - implant = pick(boxed) - new implant(src) diff --git a/code/modules/surgery/organs/autosurgeon.dm b/code/modules/surgery/organs/autosurgeon.dm deleted file mode 100644 index 0571e2bc04..0000000000 --- a/code/modules/surgery/organs/autosurgeon.dm +++ /dev/null @@ -1,96 +0,0 @@ -#define INFINITE -1 - -/obj/item/autosurgeon - name = "autosurgeon" - desc = "" - icon = 'icons/obj/device.dmi' - icon_state = "autoimplanter" - item_state = "nothing" - w_class = WEIGHT_CLASS_SMALL - var/obj/item/organ/storedorgan - var/organ_type = /obj/item/organ - var/uses = INFINITE - var/starting_organ - -/obj/item/autosurgeon/Initialize(mapload) - . = ..() - if(starting_organ) - insert_organ(new starting_organ(src)) - -/obj/item/autosurgeon/proc/insert_organ(obj/item/I) - storedorgan = I - I.forceMove(src) - name = "[initial(name)] ([storedorgan.name])" - -/obj/item/autosurgeon/attack_self(mob/user)//when the object it used... - if(!uses) - to_chat(user, "[src] has already been used. The tools are dull and won't reactivate.") - return - else if(!storedorgan) - to_chat(user, "[src] currently has no implant stored.") - return - storedorgan.Insert(user)//insert stored organ into the user - user.visible_message("[user] presses a button on [src], and you hear a short mechanical noise.", "I feel a sharp sting as [src] plunges into my body.") - playsound(get_turf(user), 'sound/blank.ogg', 50, TRUE) - storedorgan = null - name = initial(name) - if(uses != INFINITE) - uses-- - if(!uses) - desc = "" - -/obj/item/autosurgeon/attack_self_tk(mob/user) - return //stops TK fuckery - -/obj/item/autosurgeon/attackby(obj/item/I, mob/user, params) - if(istype(I, organ_type)) - if(storedorgan) - to_chat(user, "[src] already has an implant stored.") - return - else if(!uses) - to_chat(user, "[src] has already been used up.") - return - if(!user.transferItemToLoc(I, src)) - return - storedorgan = I - to_chat(user, "I insert the [I] into [src].") - else - return ..() - -/obj/item/autosurgeon/screwdriver_act(mob/living/user, obj/item/I) - if(..()) - return TRUE - if(!storedorgan) - to_chat(user, "There's no implant in [src] for you to remove!") - else - var/atom/drop_loc = user.drop_location() - for(var/J in src) - var/atom/movable/AM = J - AM.forceMove(drop_loc) - - to_chat(user, "I remove the [storedorgan] from [src].") - I.play_tool_sound(src) - storedorgan = null - if(uses != INFINITE) - uses-- - if(!uses) - desc = "" - return TRUE - -/obj/item/autosurgeon/cmo - desc = "" - uses = 1 - starting_organ = /obj/item/organ/cyberimp/eyes/hud/medical - - -/obj/item/autosurgeon/thermal_eyes - starting_organ = /obj/item/organ/eyes/robotic/thermals - -/obj/item/autosurgeon/xray_eyes - starting_organ = /obj/item/organ/eyes/robotic/xray - -/obj/item/autosurgeon/anti_stun - starting_organ = /obj/item/organ/cyberimp/brain/anti_stun - -/obj/item/autosurgeon/reviver - starting_organ = /obj/item/organ/cyberimp/chest/reviver diff --git a/code/modules/surgery/organs/brain.dm b/code/modules/surgery/organs/brain.dm index 36f0ed81ef..0a54111854 100644 --- a/code/modules/surgery/organs/brain.dm +++ b/code/modules/surgery/organs/brain.dm @@ -95,9 +95,6 @@ /obj/item/organ/brain/attackby(obj/item/O, mob/user, params) user.changeNext_move(CLICK_CD_MELEE) - if(istype(O, /obj/item/organ_storage)) - return //Borg organ bags shouldn't be killing brains - if((organ_flags & ORGAN_FAILING) && O.is_drainable() && O.reagents.has_reagent(/datum/reagent/medicine/mannitol)) //attempt to heal the brain . = TRUE //don't do attack animation. if(brain_death || brainmob?.health <= HEALTH_THRESHOLD_DEAD) //if the brain is fucked anyway, do nothing diff --git a/code/modules/surgery/organs/lungs.dm b/code/modules/surgery/organs/lungs.dm index b8d516607f..bf4101c189 100644 --- a/code/modules/surgery/organs/lungs.dm +++ b/code/modules/surgery/organs/lungs.dm @@ -63,310 +63,6 @@ var/crit_stabilizing_reagent = /datum/reagent/medicine/epinephrine - -/obj/item/organ/lungs/proc/check_breath(datum/gas_mixture/breath, mob/living/carbon/human/H) - if(H.status_flags & GODMODE) - return - if(HAS_TRAIT(H, TRAIT_NOBREATH)) - return - - if(!breath || (breath.total_moles() == 0)) - if(H.reagents.has_reagent(crit_stabilizing_reagent, needs_metabolizing = TRUE)) - return - if(H.health >= H.crit_threshold) - H.adjustOxyLoss(HUMAN_MAX_OXYLOSS) - else if(!HAS_TRAIT(H, TRAIT_NOCRITDAMAGE)) - H.adjustOxyLoss(HUMAN_CRIT_MAX_OXYLOSS) - - H.failed_last_breath = TRUE - if(safe_oxygen_min) - H.throw_alert("not_enough_oxy", /atom/movable/screen/alert/not_enough_oxy) - else if(safe_toxins_min) - H.throw_alert("not_enough_tox", /atom/movable/screen/alert/not_enough_tox) - else if(safe_co2_min) - H.throw_alert("not_enough_co2", /atom/movable/screen/alert/not_enough_co2) - else if(safe_nitro_min) - H.throw_alert("not_enough_nitro", /atom/movable/screen/alert/not_enough_nitro) - return FALSE - - var/gas_breathed = 0 - - var/list/breath_gases = breath.gases - - breath.assert_gases(/datum/gas/oxygen, /datum/gas/plasma, /datum/gas/carbon_dioxide, /datum/gas/nitrous_oxide, /datum/gas/bz, /datum/gas/nitrogen, /datum/gas/tritium, /datum/gas/nitryl, /datum/gas/pluoxium, /datum/gas/stimulum) - - //Partial pressures in our breath - var/O2_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/oxygen][MOLES])+(8*breath.get_breath_partial_pressure(breath_gases[/datum/gas/pluoxium][MOLES])) - var/N2_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/nitrogen][MOLES]) - var/Toxins_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/plasma][MOLES]) - var/CO2_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/carbon_dioxide][MOLES]) - - - //-- OXY --// - - //Too much oxygen! //Yes, some species may not like it. - if(safe_oxygen_max) - if(O2_pp > safe_oxygen_max) - var/ratio = (breath_gases[/datum/gas/oxygen][MOLES]/safe_oxygen_max) * 10 - H.apply_damage_type(CLAMP(ratio, oxy_breath_dam_min, oxy_breath_dam_max), oxy_damage_type) - H.throw_alert("too_much_oxy", /atom/movable/screen/alert/too_much_oxy) - else - H.clear_alert("too_much_oxy") - - //Too little oxygen! - if(safe_oxygen_min) - if(O2_pp < safe_oxygen_min) - gas_breathed = handle_too_little_breath(H, O2_pp, safe_oxygen_min, breath_gases[/datum/gas/oxygen][MOLES]) - H.throw_alert("not_enough_oxy", /atom/movable/screen/alert/not_enough_oxy) - else - H.failed_last_breath = FALSE - if(H.health >= H.crit_threshold) - H.adjustOxyLoss(-5) - gas_breathed = breath_gases[/datum/gas/oxygen][MOLES] - H.clear_alert("not_enough_oxy") - - //Exhale - breath_gases[/datum/gas/oxygen][MOLES] -= gas_breathed - breath_gases[/datum/gas/carbon_dioxide][MOLES] += gas_breathed - gas_breathed = 0 - - //-- Nitrogen --// - - //Too much nitrogen! - if(safe_nitro_max) - if(N2_pp > safe_nitro_max) - var/ratio = (breath_gases[/datum/gas/nitrogen][MOLES]/safe_nitro_max) * 10 - H.apply_damage_type(CLAMP(ratio, nitro_breath_dam_min, nitro_breath_dam_max), nitro_damage_type) - H.throw_alert("too_much_nitro", /atom/movable/screen/alert/too_much_nitro) - else - H.clear_alert("too_much_nitro") - - //Too little nitrogen! - if(safe_nitro_min) - if(N2_pp < safe_nitro_min) - gas_breathed = handle_too_little_breath(H, N2_pp, safe_nitro_min, breath_gases[/datum/gas/nitrogen][MOLES]) - H.throw_alert("nitro", /atom/movable/screen/alert/not_enough_nitro) - else - H.failed_last_breath = FALSE - if(H.health >= H.crit_threshold) - H.adjustOxyLoss(-5) - gas_breathed = breath_gases[/datum/gas/nitrogen][MOLES] - H.clear_alert("nitro") - - //Exhale - breath_gases[/datum/gas/nitrogen][MOLES] -= gas_breathed - breath_gases[/datum/gas/carbon_dioxide][MOLES] += gas_breathed - gas_breathed = 0 - - //-- CO2 --// - - //CO2 does not affect failed_last_breath. So if there was enough oxygen in the air but too much co2, this will hurt you, but only once per 4 ticks, instead of once per tick. - if(safe_co2_max) - if(CO2_pp > safe_co2_max) - if(!H.co2overloadtime) // If it's the first breath with too much CO2 in it, lets start a counter, then have them pass out after 12s or so. - H.co2overloadtime = world.time - else if(world.time - H.co2overloadtime > 120) - H.Unconscious(60) - H.apply_damage_type(3, co2_damage_type) // Lets hurt em a little, let them know we mean business - if(world.time - H.co2overloadtime > 300) // They've been in here 30s now, lets start to kill them for their own good! - H.apply_damage_type(8, co2_damage_type) - H.throw_alert("too_much_co2", /atom/movable/screen/alert/too_much_co2) - if(prob(20)) // Lets give them some chance to know somethings not right though I guess. - H.emote("cough") - - else - H.co2overloadtime = 0 - H.clear_alert("too_much_co2") - - //Too little CO2! - if(safe_co2_min) - if(CO2_pp < safe_co2_min) - gas_breathed = handle_too_little_breath(H, CO2_pp, safe_co2_min, breath_gases[/datum/gas/carbon_dioxide][MOLES]) - H.throw_alert("not_enough_co2", /atom/movable/screen/alert/not_enough_co2) - else - H.failed_last_breath = FALSE - if(H.health >= H.crit_threshold) - H.adjustOxyLoss(-5) - gas_breathed = breath_gases[/datum/gas/carbon_dioxide][MOLES] - H.clear_alert("not_enough_co2") - - //Exhale - breath_gases[/datum/gas/carbon_dioxide][MOLES] -= gas_breathed - breath_gases[/datum/gas/oxygen][MOLES] += gas_breathed - gas_breathed = 0 - - - //-- TOX --// - - //Too much toxins! - if(safe_toxins_max) - if(Toxins_pp > safe_toxins_max) - var/ratio = (breath_gases[/datum/gas/plasma][MOLES]/safe_toxins_max) * 10 - H.apply_damage_type(CLAMP(ratio, tox_breath_dam_min, tox_breath_dam_max), tox_damage_type) - H.throw_alert("too_much_tox", /atom/movable/screen/alert/too_much_tox) - else - H.clear_alert("too_much_tox") - - - //Too little toxins! - if(safe_toxins_min) - if(Toxins_pp < safe_toxins_min) - gas_breathed = handle_too_little_breath(H, Toxins_pp, safe_toxins_min, breath_gases[/datum/gas/plasma][MOLES]) - H.throw_alert("not_enough_tox", /atom/movable/screen/alert/not_enough_tox) - else - H.failed_last_breath = FALSE - if(H.health >= H.crit_threshold) - H.adjustOxyLoss(-5) - gas_breathed = breath_gases[/datum/gas/plasma][MOLES] - H.clear_alert("not_enough_tox") - - //Exhale - breath_gases[/datum/gas/plasma][MOLES] -= gas_breathed - breath_gases[/datum/gas/carbon_dioxide][MOLES] += gas_breathed - gas_breathed = 0 - - - //-- TRACES --// - - if(breath) // If there's some other shit in the air lets deal with it here. - - // N2O - - var/SA_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/nitrous_oxide][MOLES]) - if(SA_pp > SA_para_min) // Enough to make us stunned for a bit - H.Unconscious(60) // 60 gives them one second to wake up and run away a bit! - if(SA_pp > SA_sleep_min) // Enough to make us sleep as well - H.Sleeping(max(H.AmountSleeping() + 40, 200)) - else if(SA_pp > 0.01) // There is sleeping gas in their lungs, but only a little, so give them a bit of a warning - if(prob(20)) - H.emote(pick("giggle", "laugh")) - SEND_SIGNAL(owner, COMSIG_ADD_MOOD_EVENT, "chemical_euphoria", /datum/mood_event/chemical_euphoria) - else - SEND_SIGNAL(owner, COMSIG_CLEAR_MOOD_EVENT, "chemical_euphoria") - - - // Tritium - var/trit_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/tritium][MOLES]) - if (trit_pp > 50) - H.radiation += trit_pp/2 //If you're breathing in half an atmosphere of radioactive gas, you fucked up. - else - H.radiation += trit_pp/10 - - // Nitryl - var/nitryl_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/nitryl][MOLES]) - if (prob(nitryl_pp)) - to_chat(H, "My mouth feels like it's burning!") - if (nitryl_pp >40) - H.emote("breathgasp") - H.adjustFireLoss(10) - if (prob(nitryl_pp/2)) - to_chat(H, "My throat closes up!") - H.silent = max(H.silent, 3) - else - H.adjustFireLoss(nitryl_pp/4) - gas_breathed = breath_gases[/datum/gas/nitryl][MOLES] - if (gas_breathed > gas_stimulation_min) - H.reagents.add_reagent(/datum/reagent/nitryl,1) - - breath_gases[/datum/gas/nitryl][MOLES]-=gas_breathed - - // Stimulum - gas_breathed = breath_gases[/datum/gas/stimulum][MOLES] - if (gas_breathed > gas_stimulation_min) - var/existing = H.reagents.get_reagent_amount(/datum/reagent/stimulum) - H.reagents.add_reagent(/datum/reagent/stimulum,max(0, 1 - existing)) - breath_gases[/datum/gas/stimulum][MOLES]-=gas_breathed - - // Miasma - if (breath_gases[/datum/gas/miasma]) - var/miasma_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/miasma][MOLES]) - - // Miasma side effects - switch(miasma_pp) - if(0.25 to 5) - // At lower pp, give out a little warning - SEND_SIGNAL(owner, COMSIG_CLEAR_MOOD_EVENT, "smell") - if(prob(5)) - to_chat(owner, "There is an unpleasant smell in the air.") - if(5 to 15) - //At somewhat higher pp, warning becomes more obvious - if(prob(15)) - to_chat(owner, "I smell something horribly decayed inside this room.") - SEND_SIGNAL(owner, COMSIG_ADD_MOOD_EVENT, "smell", /datum/mood_event/disgust/bad_smell) - if(15 to 30) - //Small chance to vomit. By now, people have internals on anyway - if(prob(5)) - to_chat(owner, "The stench of rotting carcasses is unbearable!") - SEND_SIGNAL(owner, COMSIG_ADD_MOOD_EVENT, "smell", /datum/mood_event/disgust/nauseating_stench) - owner.vomit() - if(30 to INFINITY) - //Higher chance to vomit. Let the horror start - if(prob(15)) - to_chat(owner, "The stench of rotting carcasses is unbearable!") - SEND_SIGNAL(owner, COMSIG_ADD_MOOD_EVENT, "smell", /datum/mood_event/disgust/nauseating_stench) - owner.vomit() - else - SEND_SIGNAL(owner, COMSIG_CLEAR_MOOD_EVENT, "smell") - - // In a full miasma atmosphere with 101.34 pKa, about 10 disgust per breath, is pretty low compared to threshholds - // Then again, this is a purely hypothetical scenario and hardly reachable - owner.adjust_disgust(0.1 * miasma_pp) - - breath_gases[/datum/gas/miasma][MOLES]-=gas_breathed - - // Clear out moods when no miasma at all - else - SEND_SIGNAL(owner, COMSIG_CLEAR_MOOD_EVENT, "smell") - - handle_breath_temperature(breath, H) - breath.garbage_collect() - return TRUE - - -/obj/item/organ/lungs/proc/handle_too_little_breath(mob/living/carbon/human/H = null, breath_pp = 0, safe_breath_min = 0, true_pp = 0) - . = 0 - if(!H || !safe_breath_min) //the other args are either: Ok being 0 or Specifically handled. - return FALSE - - if(prob(20)) - H.emote("breathgasp") - if(breath_pp > 0) - var/ratio = safe_breath_min/breath_pp - H.adjustOxyLoss(min(5*ratio, HUMAN_MAX_OXYLOSS)) // Don't fuck them up too fast (space only does HUMAN_MAX_OXYLOSS after all! - H.failed_last_breath = TRUE - . = true_pp*ratio/6 - else - H.adjustOxyLoss(HUMAN_MAX_OXYLOSS) - H.failed_last_breath = TRUE - - -/obj/item/organ/lungs/proc/handle_breath_temperature(datum/gas_mixture/breath, mob/living/carbon/human/H) // called by human/life, handles temperatures - var/breath_temperature = breath.temperature - - if(!HAS_TRAIT(H, TRAIT_RESISTCOLD)) // COLD DAMAGE - var/cold_modifier = H.dna.species.coldmod - if(breath_temperature < cold_level_3_threshold) - H.apply_damage_type(cold_level_3_damage*cold_modifier, cold_damage_type) - if(breath_temperature > cold_level_3_threshold && breath_temperature < cold_level_2_threshold) - H.apply_damage_type(cold_level_2_damage*cold_modifier, cold_damage_type) - if(breath_temperature > cold_level_2_threshold && breath_temperature < cold_level_1_threshold) - H.apply_damage_type(cold_level_1_damage*cold_modifier, cold_damage_type) - if(breath_temperature < cold_level_1_threshold) - if(prob(20)) - to_chat(H, "I feel [cold_message] in my [name]!") - - if(!HAS_TRAIT(H, TRAIT_RESISTHEAT)) // HEAT DAMAGE - var/heat_modifier = H.dna.species.heatmod - if(breath_temperature > heat_level_1_threshold && breath_temperature < heat_level_2_threshold) - H.apply_damage_type(heat_level_1_damage*heat_modifier, heat_damage_type) - if(breath_temperature > heat_level_2_threshold && breath_temperature < heat_level_3_threshold) - H.apply_damage_type(heat_level_2_damage*heat_modifier, heat_damage_type) - if(breath_temperature > heat_level_3_threshold) - H.apply_damage_type(heat_level_3_damage*heat_modifier, heat_damage_type) - if(breath_temperature > heat_level_1_threshold) - if(prob(20)) - to_chat(H, "I feel [hot_message] in my [name]!") - /obj/item/organ/lungs/on_life() ..() if((!failed) && ((organ_flags & ORGAN_FAILING))) @@ -398,12 +94,6 @@ safe_toxins_max = 0 //We breathe this to gain POWER. -/obj/item/organ/lungs/slime/check_breath(datum/gas_mixture/breath, mob/living/carbon/human/H) - . = ..() - if (breath && breath.gases[/datum/gas/plasma]) - var/plasma_pp = breath.get_breath_partial_pressure(breath.gases[/datum/gas/plasma][MOLES]) - owner.blood_volume += (0.2 * plasma_pp) // 10/s when breathing literally nothing but plasma, which will suffocate you. - /obj/item/organ/lungs/cybernetic name = "cybernetic lungs" desc = "" diff --git a/code/modules/surgery/organs/vocal_cords.dm b/code/modules/surgery/organs/vocal_cords.dm index cc11df11e7..49d8e524aa 100644 --- a/code/modules/surgery/organs/vocal_cords.dm +++ b/code/modules/surgery/organs/vocal_cords.dm @@ -139,10 +139,6 @@ if(L.can_hear() && !L.anti_magic_check(FALSE, TRUE) && L.stat != DEAD) if(L == user && !include_speaker) continue - if(ishuman(L)) - var/mob/living/carbon/human/H = L - if(istype(H.ears, /obj/item/clothing/ears/earmuffs)) - continue listeners += L if(!listeners.len) diff --git a/code/modules/surgery/surgeries/limb_replacement.dm b/code/modules/surgery/surgeries/limb_replacement.dm index 2f04acc7ba..50e555fa74 100644 --- a/code/modules/surgery/surgeries/limb_replacement.dm +++ b/code/modules/surgery/surgeries/limb_replacement.dm @@ -13,7 +13,6 @@ name = "Replace limb" implements = list( /obj/item/bodypart = 80, - /obj/item/organ_storage = 80, ) time = 3.2 SECONDS surgery_flags = SURGERY_INCISED | SURGERY_RETRACTED | SURGERY_BROKEN @@ -21,8 +20,6 @@ skill_median = SKILL_LEVEL_EXPERT /datum/surgery_step/replace_limb/preop(mob/user, mob/living/target, target_zone, obj/item/tool, datum/intent/intent) - if(istype(tool, /obj/item/organ_storage) && istype(tool.contents[1], /obj/item/bodypart)) - tool = tool.contents[1] var/obj/item/bodypart/aug = tool if(!istype(aug) || aug.status != BODYPART_ROBOTIC) to_chat(user, "That's not an augment, silly!") @@ -43,11 +40,6 @@ /datum/surgery_step/replace_limb/success(mob/user, mob/living/target, target_zone, obj/item/tool, datum/surgery/surgery) var/obj/item/bodypart/existing = target.get_bodypart(check_zone(target_zone)) if(existing) - if(istype(tool, /obj/item/organ_storage)) - tool.icon_state = initial(tool.icon_state) - tool.desc = initial(tool.desc) - tool.cut_overlays() - tool = tool.contents[1] var/obj/item/bodypart/bodypart = tool if(istype(bodypart) && user.temporarilyRemoveItemFromInventory(bodypart)) if(bodypart.replace_limb(target, special = TRUE) && bodypart.attach_wound) diff --git a/code/modules/surgery/surgeries/organ_manipulation.dm b/code/modules/surgery/surgeries/organ_manipulation.dm index adccef462e..5afba7d8eb 100644 --- a/code/modules/surgery/surgeries/organ_manipulation.dm +++ b/code/modules/surgery/surgeries/organ_manipulation.dm @@ -18,7 +18,7 @@ BODY_ZONE_PRECISE_MOUTH, BODY_ZONE_PRECISE_STOMACH, BODY_ZONE_PRECISE_GROIN, - BODY_ZONE_L_ARM, + BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, ) steps = list( @@ -35,8 +35,7 @@ time = 6.4 SECONDS accept_hand = TRUE implements = list( - /obj/item/organ = 80, - /obj/item/organ_storage = 80, + /obj/item/organ = 80, /obj/item/reagent_containers/food/snacks/organ = 0, ) target_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey) @@ -75,15 +74,6 @@ if(istype(tool, /obj/item/reagent_containers/food/snacks/organ)) to_chat(user, "[tool] was bitten by someone! It's too damaged to use!") return FALSE - - if(istype(tool, /obj/item/organ_storage)) - if(!length(tool.contents)) - to_chat(user, "There is nothing inside [tool]!") - return FALSE - tool = tool.contents[1] - if(!isorgan(tool)) - to_chat(user, "I cannot put [tool] inside [target]'s [parse_zone(target_zone)]!") - return FALSE var/obj/item/organ/organ_tool = tool if(istype(organ_tool)) @@ -114,7 +104,7 @@ var/obj/item/organ/final_organ = organs[selected] if(QDELETED(final_organ)) return FALSE - + user.select_organ_slot(final_organ.slot) display_results(user, target, "I begin to extract [final_organ] from [target]'s [parse_zone(target_zone)]...", "[user] begins to extract [final_organ] from [target]'s [parse_zone(target_zone)].", @@ -123,14 +113,6 @@ return TRUE /datum/surgery_step/manipulate_organs/success(mob/user, mob/living/target, target_zone, obj/item/tool, datum/intent/intent) - if(istype(tool, /obj/item/organ_storage)) - tool.icon_state = initial(tool.icon_state) - tool.desc = initial(tool.desc) - tool.cut_overlays() - tool = tool.contents[1] - if(!isorgan(tool)) - return FALSE - var/obj/item/organ/organ_tool = tool if(istype(organ_tool) && user.temporarilyRemoveItemFromInventory(organ_tool)) organ_tool.Insert(target) diff --git a/code/modules/surgery/surgeries/prosthetic_replacement.dm b/code/modules/surgery/surgeries/prosthetic_replacement.dm index 20285e7754..dd08248b3e 100644 --- a/code/modules/surgery/surgeries/prosthetic_replacement.dm +++ b/code/modules/surgery/surgeries/prosthetic_replacement.dm @@ -19,7 +19,6 @@ name = "Implant limb" implements = list( /obj/item/bodypart = 80, - /obj/item/organ_storage = 80, ) target_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey) possible_locs = list( @@ -37,15 +36,6 @@ skill_median = SKILL_LEVEL_JOURNEYMAN /datum/surgery_step/add_prosthetic/preop(mob/user, mob/living/target, target_zone, obj/item/tool, datum/intent/intent) - if(istype(tool, /obj/item/organ_storage)) - if(!length(tool.contents)) - to_chat(user, "There is nothing inside [tool]!") - return FALSE - tool = tool.contents[1] - if(!isbodypart(tool)) - to_chat(user, "[tool] cannot be attached!") - return FALSE - var/obj/item/bodypart/bodypart = tool if(ismonkey(target) && bodypart.animal_origin != MONKEY_BODYPART) to_chat(user, "[bodypart] doesn't match the patient's morphology.") @@ -64,14 +54,6 @@ return TRUE /datum/surgery_step/add_prosthetic/success(mob/user, mob/living/target, target_zone, obj/item/tool, datum/intent/intent) - if(istype(tool, /obj/item/organ_storage)) - tool.icon_state = initial(tool.icon_state) - tool.desc = initial(tool.desc) - tool.cut_overlays() - tool = tool.contents[1] - if(!isbodypart(tool)) - return FALSE - var/obj/item/bodypart/bodypart = tool if(bodypart.attach_limb(target) && bodypart.attach_wound) bodypart.add_wound(bodypart.attach_wound) diff --git a/code/modules/surgery/surgery_tools.dm b/code/modules/surgery/surgery_tools.dm deleted file mode 100644 index 1afd27b1f0..0000000000 --- a/code/modules/surgery/surgery_tools.dm +++ /dev/null @@ -1,315 +0,0 @@ -/obj/item/retractor - name = "retractor" - desc = "" - icon = 'icons/obj/surgery.dmi' - icon_state = "retractor" - lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' - item_state = "clamps" - custom_materials = list(/datum/material/iron=6000, /datum/material/glass=3000) - flags_1 = CONDUCT_1 - item_flags = SURGICAL_TOOL - w_class = WEIGHT_CLASS_TINY - tool_behaviour = TOOL_RETRACTOR - toolspeed = 1 - -/obj/item/retractor/augment - desc = "" - toolspeed = 0.5 - - -/obj/item/hemostat - name = "hemostat" - desc = "" - icon = 'icons/obj/surgery.dmi' - icon_state = "hemostat" - lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' - item_state = "clamps" - custom_materials = list(/datum/material/iron=5000, /datum/material/glass=2500) - flags_1 = CONDUCT_1 - item_flags = SURGICAL_TOOL - w_class = WEIGHT_CLASS_TINY - attack_verb = list("attacked", "pinched") - tool_behaviour = TOOL_HEMOSTAT - toolspeed = 1 - -/obj/item/hemostat/augment - desc = "" - toolspeed = 0.5 - - -/obj/item/cautery - name = "cautery" - desc = "" - icon = 'icons/obj/surgery.dmi' - icon_state = "cautery" - lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' - item_state = "cautery" - custom_materials = list(/datum/material/iron=2500, /datum/material/glass=750) - flags_1 = CONDUCT_1 - item_flags = SURGICAL_TOOL - w_class = WEIGHT_CLASS_TINY - attack_verb = list("burnt") - tool_behaviour = TOOL_CAUTERY - toolspeed = 1 - -/obj/item/cautery/augment - desc = "" - toolspeed = 0.5 - - -/obj/item/surgicaldrill - name = "surgical drill" - desc = "" - icon = 'icons/obj/surgery.dmi' - icon_state = "drill" - lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' - hitsound = 'sound/blank.ogg' - custom_materials = list(/datum/material/iron=10000, /datum/material/glass=6000) - flags_1 = CONDUCT_1 - item_flags = SURGICAL_TOOL - force = 15 - w_class = WEIGHT_CLASS_NORMAL - attack_verb = list("drilled") - tool_behaviour = TOOL_DRILL - toolspeed = 1 - -/obj/item/surgicaldrill/augment - desc = "" - hitsound = 'sound/blank.ogg' - force = 10 - w_class = WEIGHT_CLASS_SMALL - toolspeed = 0.5 - - -/obj/item/scalpel - name = "scalpel" - desc = "" - icon = 'icons/obj/surgery.dmi' - icon_state = "scalpel" - lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' - item_state = "scalpel" - flags_1 = CONDUCT_1 - item_flags = SURGICAL_TOOL - force = 10 - w_class = WEIGHT_CLASS_TINY - throwforce = 5 - throw_speed = 3 - throw_range = 5 - custom_materials = list(/datum/material/iron=4000, /datum/material/glass=1000) - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - hitsound = 'sound/blank.ogg' - sharpness = IS_SHARP_ACCURATE - tool_behaviour = TOOL_SCALPEL - toolspeed = 1 - -/obj/item/scalpel/Initialize() - . = ..() - AddComponent(/datum/component/butchering, 80 * toolspeed, 100, 0) - -/obj/item/scalpel/augment - desc = "" - toolspeed = 0.5 - -/obj/item/scalpel/suicide_act(mob/user) - user.visible_message("[user] is slitting [user.p_their()] [pick("wrists", "throat", "stomach")] with [src]! It looks like [user.p_theyre()] trying to commit suicide!") - return (BRUTELOSS) - - -/obj/item/circular_saw - name = "circular saw" - desc = "" - icon = 'icons/obj/surgery.dmi' - icon_state = "saw" - lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' - hitsound = 'sound/blank.ogg' - mob_throw_hit_sound = 'sound/blank.ogg' - flags_1 = CONDUCT_1 - item_flags = SURGICAL_TOOL - force = 15 - w_class = WEIGHT_CLASS_NORMAL - throwforce = 9 - throw_speed = 2 - throw_range = 5 - custom_materials = list(/datum/material/iron=10000, /datum/material/glass=6000) - attack_verb = list("attacked", "slashed", "sawed", "cut") - sharpness = IS_SHARP - tool_behaviour = TOOL_SAW - toolspeed = 1 - -/obj/item/circular_saw/Initialize() - . = ..() - AddComponent(/datum/component/butchering, 40 * toolspeed, 100, 5, 'sound/blank.ogg') //saws are very accurate and fast at butchering - -/obj/item/circular_saw/augment - desc = "" - w_class = WEIGHT_CLASS_SMALL - force = 10 - toolspeed = 0.5 - - -/obj/item/surgical_drapes - name = "surgical drapes" - desc = "" - icon = 'icons/obj/surgery.dmi' - icon_state = "surgical_drapes" - lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' - item_state = "drapes" - w_class = WEIGHT_CLASS_TINY - attack_verb = list("slapped") - -/obj/item/organ_storage //allows medical cyborgs to manipulate organs without hands - name = "organ storage bag" - desc = "" - icon = 'icons/obj/storage.dmi' - icon_state = "evidenceobj" - item_flags = SURGICAL_TOOL - -/obj/item/organ_storage/afterattack(obj/item/I, mob/user, proximity) - . = ..() - if(!proximity) - return - if(contents.len) - to_chat(user, "[src] already has something inside it!") - return - if(!isorgan(I) && !isbodypart(I)) - to_chat(user, "[src] can only hold body parts!") - return - - user.visible_message("[user] puts [I] into [src].", "I put [I] inside [src].") - icon_state = "evidence" - var/xx = I.pixel_x - var/yy = I.pixel_y - I.pixel_x = 0 - I.pixel_y = 0 - var/image/img = image("icon"=I, "layer"=FLOAT_LAYER) - img.plane = FLOAT_PLANE - I.pixel_x = xx - I.pixel_y = yy - add_overlay(img) - add_overlay("evidence") - desc = "" - I.forceMove(src) - w_class = I.w_class - -/obj/item/organ_storage/attack_self(mob/user) - if(contents.len) - var/obj/item/I = contents[1] - user.visible_message("[user] dumps [I] from [src].", "I dump [I] from [src].") - cut_overlays() - I.forceMove(get_turf(src)) - icon_state = "evidenceobj" - desc = "" - else - to_chat(user, "[src] is empty.") - return - -/obj/item/surgical_processor //allows medical cyborgs to scan and initiate advanced surgeries - name = "\improper Surgical Processor" - desc = "" - icon = 'icons/obj/device.dmi' - icon_state = "spectrometer" - item_flags = NOBLUDGEON - var/list/advanced_surgery_steps = list() - -/obj/item/surgical_processor/afterattack(obj/item/O, mob/user, proximity) - . = ..() - if(!proximity) - return - if(istype(O, /obj/item/disk/surgery)) - to_chat(user, "I load the surgery protocol from [O] into [src].") - var/obj/item/disk/surgery/D = O - if(do_after(user, 10, target = O)) - advanced_surgery_steps |= D.surgery_steps - return TRUE - return - -/obj/item/scalpel/advanced - name = "laser scalpel" - desc = "" - icon = 'icons/obj/surgery.dmi' - icon_state = "scalpel_a" - hitsound = 'sound/blank.ogg' - force = 16 - toolspeed = 0.7 - light_color = LIGHT_COLOR_GREEN - sharpness = IS_SHARP_ACCURATE - -/obj/item/scalpel/advanced/Initialize() - . = ..() - set_light(1) - -/obj/item/scalpel/advanced/attack_self(mob/user) - playsound(get_turf(user), 'sound/blank.ogg', 50, TRUE) - if(tool_behaviour == TOOL_SCALPEL) - tool_behaviour = TOOL_SAW - to_chat(user, "I increase the power of [src], now it can cut bones.") - set_light(2) - force += 1 //we don't want to ruin sharpened stuff - icon_state = "saw_a" - else - tool_behaviour = TOOL_SCALPEL - to_chat(user, "I lower the power of [src], it can no longer cut bones.") - set_light(1) - force -= 1 - icon_state = "scalpel_a" - -/obj/item/scalpel/advanced/examine() - . = ..() - . += " It's set to [tool_behaviour == TOOL_SCALPEL ? "scalpel" : "saw"] mode." - -/obj/item/retractor/advanced - name = "mechanical pinches" - desc = "" - icon = 'icons/obj/surgery.dmi' - icon_state = "retractor_a" - toolspeed = 0.7 - -/obj/item/retractor/advanced/attack_self(mob/user) - playsound(get_turf(user), 'sound/blank.ogg', 50, TRUE) - if(tool_behaviour == TOOL_RETRACTOR) - tool_behaviour = TOOL_HEMOSTAT - to_chat(user, "I configure the gears of [src], they are now in hemostat mode.") - icon_state = "hemostat_a" - else - tool_behaviour = TOOL_RETRACTOR - to_chat(user, "I configure the gears of [src], they are now in retractor mode.") - icon_state = "retractor_a" - -/obj/item/retractor/advanced/examine() - . = ..() - . += " It resembles a [tool_behaviour == TOOL_RETRACTOR ? "retractor" : "hemostat"]." - -/obj/item/surgicaldrill/advanced - name = "searing tool" - desc = "" - icon = 'icons/obj/surgery.dmi' - icon_state = "surgicaldrill_a" - hitsound = 'sound/blank.ogg' - toolspeed = 0.7 - light_color = LIGHT_COLOR_RED - -/obj/item/surgicaldrill/advanced/Initialize() - . = ..() - set_light(1) - -/obj/item/surgicaldrill/advanced/attack_self(mob/user) - playsound(get_turf(user), 'sound/blank.ogg', 50, TRUE) - if(tool_behaviour == TOOL_DRILL) - tool_behaviour = TOOL_CAUTERY - to_chat(user, "I focus the lenses of [src], it is now in mending mode.") - icon_state = "cautery_a" - else - tool_behaviour = TOOL_DRILL - to_chat(user, "I dilate the lenses of [src], it is now in drilling mode.") - icon_state = "surgicaldrill_a" - -/obj/item/surgicaldrill/advanced/examine() - . = ..() - . += " It's set to [tool_behaviour == TOOL_DRILL ? "drilling" : "mending"] mode." diff --git a/code/modules/unit_tests/create_and_destroy.dm b/code/modules/unit_tests/create_and_destroy.dm index 1e712c57f8..0e95ce276c 100644 --- a/code/modules/unit_tests/create_and_destroy.dm +++ b/code/modules/unit_tests/create_and_destroy.dm @@ -28,8 +28,6 @@ GLOBAL_VAR_INIT(running_create_and_destroy, FALSE) /obj/machinery/launchpad/briefcase, /obj/item/storage/box/syndicate/bundle_A, // can contain a launchpad briefcase //template types - /obj/item/gun/magic, - /obj/item/gun/magic/staff, //template type again /obj/item/storage/fancy, //needs a mob passed to view it diff --git a/code/modules/vehicles/bicycle.dm b/code/modules/vehicles/bicycle.dm deleted file mode 100644 index 45dc6203ad..0000000000 --- a/code/modules/vehicles/bicycle.dm +++ /dev/null @@ -1,20 +0,0 @@ -/obj/vehicle/ridden/bicycle - name = "bicycle" - desc = "" - icon_state = "bicycle" - fall_off_if_missing_arms = TRUE - -/obj/vehicle/ridden/bicycle/Initialize() - . = ..() - var/datum/component/riding/D = LoadComponent(/datum/component/riding) - D.set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0, 4), TEXT_SOUTH = list(0, 4), TEXT_EAST = list(0, 4), TEXT_WEST = list( 0, 4))) - D.vehicle_move_delay = 0 - - -/obj/vehicle/ridden/bicycle/tesla_act() // :::^^^))) - name = "fried bicycle" - desc = "" - color = rgb(63, 23, 4) - can_buckle = FALSE - for(var/m in buckled_mobs) - unbuckle_mob(m,1) diff --git a/code/modules/vehicles/cars/car.dm b/code/modules/vehicles/cars/car.dm deleted file mode 100644 index edda57a304..0000000000 --- a/code/modules/vehicles/cars/car.dm +++ /dev/null @@ -1,95 +0,0 @@ -/obj/vehicle/sealed/car - layer = ABOVE_MOB_LAYER - anchored = TRUE - default_driver_move = FALSE - var/car_traits = NONE //Bitflag for special behavior such as kidnapping - var/engine_sound = 'sound/blank.ogg' - var/last_enginesound_time - var/engine_sound_length = 20 //Set this to the length of the engine sound - var/escape_time = 60 //Time it takes to break out of the car - -/obj/vehicle/sealed/car/Initialize() - . = ..() - var/datum/component/riding/D = LoadComponent(/datum/component/riding) - D.vehicle_move_delay = movedelay - D.slowvalue = 0 - -/obj/vehicle/sealed/car/generate_actions() - . = ..() - initialize_controller_action_type(/datum/action/vehicle/sealed/remove_key, VEHICLE_CONTROL_DRIVE) - if(car_traits & CAN_KIDNAP) - initialize_controller_action_type(/datum/action/vehicle/sealed/DumpKidnappedMobs, VEHICLE_CONTROL_DRIVE) - -/obj/vehicle/sealed/car/driver_move(mob/user, direction) - if(key_type && !is_key(inserted_key)) - to_chat(user, "[src] has no key inserted!") - return FALSE - var/datum/component/riding/R = GetComponent(/datum/component/riding) - R.handle_ride(user, direction) - if(world.time < last_enginesound_time + engine_sound_length) - return - last_enginesound_time = world.time - playsound(src, engine_sound, 100, TRUE) - return TRUE - -/obj/vehicle/sealed/car/MouseDrop_T(atom/dropping, mob/M) - if(M.stat || M.restrained()) - return FALSE - if((car_traits & CAN_KIDNAP) && isliving(dropping) && M != dropping) - var/mob/living/L = dropping - L.visible_message("[M] starts forcing [L] into [src]!") - mob_try_forced_enter(M, L) - return ..() - -/obj/vehicle/sealed/car/mob_try_exit(mob/M, mob/user, silent = FALSE) - if(M == user && (occupants[M] & VEHICLE_CONTROL_KIDNAPPED)) - to_chat(user, "I push against the back of \the [src]'s trunk to try and get out.") - if(!do_after(user, escape_time, target = src)) - return FALSE - to_chat(user,"[user] gets out of [src].") - mob_exit(M, silent) - return TRUE - mob_exit(M, silent) - return TRUE - -/obj/vehicle/sealed/car/attacked_by(obj/item/I, mob/living/user) - if(!I.force) - return - if(occupants[user]) - to_chat(user, "My attack bounces off \the [src]'s padded interior.") - return - return ..() - -/obj/vehicle/sealed/car/attack_hand(mob/living/user) - . = ..() - if(!(car_traits & CAN_KIDNAP)) - return - if(occupants[user]) - return - to_chat(user, "I start opening [src]'s trunk.") - if(do_after(user, 30)) - if(return_amount_of_controllers_with_flag(VEHICLE_CONTROL_KIDNAPPED)) - to_chat(user, "The people stuck in [src]'s trunk all come tumbling out.") - DumpSpecificMobs(VEHICLE_CONTROL_KIDNAPPED) - else - to_chat(user, "It seems [src]'s trunk was empty.") - -/obj/vehicle/sealed/car/proc/mob_try_forced_enter(mob/forcer, mob/M, silent = FALSE) - if(!istype(M)) - return FALSE - if(occupant_amount() >= max_occupants) - return FALSE - var/atom/old_loc = loc - if(do_mob(forcer, M, get_enter_delay(M), extra_checks=CALLBACK(src, TYPE_PROC_REF(/obj/vehicle/sealed/car, is_car_stationary), old_loc))) - mob_forced_enter(M, silent) - return TRUE - return FALSE - -/obj/vehicle/sealed/car/proc/is_car_stationary(atom/old_loc) - return (old_loc == loc) - -/obj/vehicle/sealed/car/proc/mob_forced_enter(mob/M, silent = FALSE) - if(!silent) - M.visible_message("[M] is forced into \the [src]!") - M.forceMove(src) - add_occupant(M, VEHICLE_CONTROL_KIDNAPPED) diff --git a/code/modules/vehicles/cars/clowncar.dm b/code/modules/vehicles/cars/clowncar.dm deleted file mode 100644 index 3468bd302d..0000000000 --- a/code/modules/vehicles/cars/clowncar.dm +++ /dev/null @@ -1,202 +0,0 @@ -/obj/vehicle/sealed/car/clowncar - name = "clown car" - desc = "" - icon_state = "clowncar" - max_integrity = 150 - armor = list("melee" = 70, "bullet" = 40, "laser" = 40, "energy" = 0, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 80) - enter_delay = 20 - max_occupants = 50 - movedelay = 0.6 - car_traits = CAN_KIDNAP - key_type = /obj/item/bikehorn - key_type_exact = FALSE - var/droppingoil = FALSE - var/RTDcooldown = 150 - var/lastRTDtime = 0 - var/thankscount - var/cannonmode = FALSE - var/cannonbusy = FALSE - -/obj/vehicle/sealed/car/clowncar/generate_actions() - . = ..() - initialize_controller_action_type(/datum/action/vehicle/sealed/horn/clowncar, VEHICLE_CONTROL_DRIVE) - initialize_controller_action_type(/datum/action/vehicle/sealed/Thank, VEHICLE_CONTROL_KIDNAPPED) - -/obj/vehicle/sealed/car/clowncar/auto_assign_occupant_flags(mob/M) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(H.mind && H.mind.assigned_role == "Clown") //Ensures only clowns can drive the car. (Including more at once) - add_control_flags(H, VEHICLE_CONTROL_DRIVE|VEHICLE_CONTROL_PERMISSION) - RegisterSignal(H, COMSIG_MOB_CLICKON, PROC_REF(FireCannon)) - M.log_message("has entered [src] as a possible driver", LOG_ATTACK) - return - add_control_flags(M, VEHICLE_CONTROL_KIDNAPPED) - -/obj/vehicle/sealed/car/clowncar/mob_forced_enter(mob/M, silent = FALSE) - . = ..() - playsound(src, pick('sound/blank.ogg'), 75) - -/obj/vehicle/sealed/car/clowncar/after_add_occupant(mob/M, control_flags) - . = ..() - if(return_controllers_with_flag(VEHICLE_CONTROL_KIDNAPPED).len >= 30) - for(var/i in return_drivers()) - var/mob/voreman = i - voreman.client.give_award(/datum/award/achievement/misc/round_and_full, voreman) - -/obj/vehicle/sealed/car/clowncar/attack_animal(mob/living/simple_animal/M) - if((M.loc != src) || M.environment_smash & (ENVIRONMENT_SMASH_WALLS|ENVIRONMENT_SMASH_RWALLS)) - return ..() - -/obj/vehicle/sealed/car/clowncar/mob_exit(mob/M, silent = FALSE, randomstep = FALSE) - . = ..() - UnregisterSignal(M, COMSIG_MOB_CLICKON) - -/obj/vehicle/sealed/car/clowncar/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) - . = ..() - if(prob(33)) - visible_message("[src] spews out a ton of space lube!") - new /obj/effect/particle_effect/foam(loc) //YEET - -/obj/vehicle/sealed/car/clowncar/attacked_by(obj/item/I, mob/living/user) - . = ..() - if(istype(I, /obj/item/reagent_containers/food/snacks/grown/banana)) - var/obj/item/reagent_containers/food/snacks/grown/banana/banana = I - obj_integrity += min(banana.seed.potency, max_integrity-obj_integrity) - to_chat(user, "I use the [banana] to repair the [src]!") - qdel(banana) - -/obj/vehicle/sealed/car/clowncar/Bump(atom/movable/M) - . = ..() - if(isliving(M)) - var/mob/living/L = M - if(iscarbon(L)) - var/mob/living/carbon/C = L - C.Paralyze(40) //I play to make sprites go horizontal - L.visible_message("[src] rams into [L] and sucks [L.p_them()] up!") //fuck off shezza this isn't ERP. - mob_forced_enter(L) - playsound(src, pick('sound/blank.ogg'), 75) - log_combat(src, M, "sucked up") - else if(istype(M, /turf/closed)) - visible_message("[src] rams into [M] and crashes!") - playsound(src, pick('sound/blank.ogg'), 75) - playsound(src, 'sound/blank.ogg', 75) - DumpMobs(TRUE) - log_combat(src, M, "crashed into", null, "dumping all passengers") - -/obj/vehicle/sealed/car/clowncar/emag_act(mob/user) - if(obj_flags & EMAGGED) - return - obj_flags |= EMAGGED - to_chat(user, "I scramble \the [src]'s child safety lock, and a panel with six colorful buttons appears!") - initialize_controller_action_type(/datum/action/vehicle/sealed/RollTheDice, VEHICLE_CONTROL_DRIVE) - initialize_controller_action_type(/datum/action/vehicle/sealed/Cannon, VEHICLE_CONTROL_DRIVE) - AddComponent(/datum/component/waddling) - -/obj/vehicle/sealed/car/clowncar/Destroy() - playsound(src, 'sound/blank.ogg', 100) - return ..() - -/obj/vehicle/sealed/car/clowncar/after_move(direction) - . = ..() - if(droppingoil) - new /obj/effect/decal/cleanable/oil/slippery(loc) - -/obj/vehicle/sealed/car/clowncar/proc/RollTheDice(mob/user) - if(world.time - lastRTDtime < RTDcooldown) - to_chat(user, "The button panel is currently recharging.") - return - lastRTDtime = world.time - var/randomnum = rand(1,6) - switch(randomnum) - if(1) - visible_message("[user] presses one of the colorful buttons on [src], and a special banana peel drops out of it.") - new /obj/item/grown/bananapeel/specialpeel(loc) - if(2) - visible_message("[user] presses one of the colorful buttons on [src], and unknown chemicals flood out of it.") - var/datum/reagents/R = new/datum/reagents(300) - R.my_atom = src - R.add_reagent(get_random_reagent_id(), 100) - var/datum/effect_system/foam_spread/foam = new - foam.set_up(200, loc, R) - foam.start() - if(3) - visible_message("[user] presses one of the colorful buttons on [src], and the clown car turns on its singularity disguise system.") - icon = 'icons/obj/singularity.dmi' - icon_state = "singularity_s1" - addtimer(CALLBACK(src, PROC_REF(ResetIcon)), 100) - if(4) - visible_message("[user] presses one of the colorful buttons on [src], and the clown car spews out a cloud of laughing gas.") - var/datum/reagents/R = new/datum/reagents(300) - R.my_atom = src - R.add_reagent(/datum/reagent/consumable/superlaughter, 50) - var/datum/effect_system/smoke_spread/chem/smoke = new() - smoke.set_up(R, 4) - smoke.attach(src) - smoke.start() - if(5) - visible_message("[user] presses one of the colorful buttons on [src], and the clown car starts dropping an oil trail.") - droppingoil = TRUE - addtimer(CALLBACK(src, PROC_REF(StopDroppingOil)), 30) - if(6) - visible_message("[user] presses one of the colorful buttons on [src], and the clown car lets out a comedic toot.") - playsound(src, 'sound/blank.ogg', 100) - for(var/mob/living/L in orange(loc, 6)) - L.emote("laughs") - for(var/mob/living/L in occupants) - L.emote("laughs") - -/obj/vehicle/sealed/car/clowncar/proc/ResetIcon() - icon = initial(icon) - icon_state = initial(icon_state) - -/obj/vehicle/sealed/car/clowncar/proc/StopDroppingOil() - droppingoil = FALSE - -/obj/vehicle/sealed/car/clowncar/proc/ToggleCannon() - cannonbusy = TRUE - if(cannonmode) - cannonmode = FALSE - flick("clowncar_fromfire", src) - icon_state = "clowncar" - addtimer(CALLBACK(src, PROC_REF(LeaveCannonMode)), 20) - playsound(src, 'sound/blank.ogg', 75) - visible_message("The [src] starts going back into mobile mode.") - else - canmove = FALSE - flick("clowncar_tofire", src) - icon_state = "clowncar_fire" - visible_message("The [src] opens up and reveals a large cannon.") - addtimer(CALLBACK(src, PROC_REF(EnterCannonMode)), 20) - playsound(src, 'sound/blank.ogg', 75) - - -/obj/vehicle/sealed/car/clowncar/proc/EnterCannonMode() - mouse_pointer = 'icons/mecha/mecha_mouse.dmi' - cannonmode = TRUE - cannonbusy = FALSE - for(var/mob/living/L in return_controllers_with_flag(VEHICLE_CONTROL_DRIVE)) - L.update_mouse_pointer() - -/obj/vehicle/sealed/car/clowncar/proc/LeaveCannonMode() - canmove = TRUE - cannonbusy = FALSE - mouse_pointer = null - for(var/mob/living/L in return_controllers_with_flag(VEHICLE_CONTROL_DRIVE)) - L.update_mouse_pointer() - -/obj/vehicle/sealed/car/clowncar/proc/FireCannon(mob/user, atom/A, params) - if(cannonmode && return_controllers_with_flag(VEHICLE_CONTROL_KIDNAPPED).len) - var/mob/living/L = pick(return_controllers_with_flag(VEHICLE_CONTROL_KIDNAPPED)) - mob_exit(L, TRUE) - flick("clowncar_recoil", src) - playsound(src, pick('sound/blank.ogg'), 75) - L.throw_at(A, 10, 2) - log_combat(user, L, "fired", src, "towards [A]") //this doesn't catch if the mob hits something between the car and the target - return COMSIG_MOB_CANCEL_CLICKON - -/obj/vehicle/sealed/car/clowncar/proc/ThanksCounter() - thankscount++ - if(thankscount >= 100) - for(var/i in return_drivers()) - var/mob/busdriver = i - busdriver.client.give_award(/datum/award/achievement/misc/the_best_driver, busdriver) diff --git a/code/modules/vehicles/lavaboat.dm b/code/modules/vehicles/lavaboat.dm deleted file mode 100644 index 867ae70c5f..0000000000 --- a/code/modules/vehicles/lavaboat.dm +++ /dev/null @@ -1,72 +0,0 @@ - -//Boat - -/obj/vehicle/ridden/lavaboat - name = "lava boat" - desc = "" - icon_state = "goliath_boat" - icon = 'icons/obj/lavaland/dragonboat.dmi' - var/allowed_turf = /turf/open/lava - resistance_flags = LAVA_PROOF | FIRE_PROOF - can_buckle = TRUE - legs_required = 0 - arms_required = 0 - -/obj/vehicle/ridden/lavaboat/Initialize() - . = ..() - var/datum/component/riding/D = LoadComponent(/datum/component/riding) - D.keytype = /obj/item/oar - D.allowed_turf_typecache = typecacheof(allowed_turf) - -/obj/item/oar - name = "oar" - icon = 'icons/obj/vehicles.dmi' - icon_state = "oar" - item_state = "oar" - lefthand_file = 'icons/mob/inhands/misc/lavaland_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/lavaland_righthand.dmi' - desc = "" - force = 12 - w_class = WEIGHT_CLASS_NORMAL - resistance_flags = LAVA_PROOF | FIRE_PROOF - -/datum/crafting_recipe/oar - name = "Goliath Bone Oar" - result = /obj/item/oar - reqs = list(/obj/item/stack/sheet/bone = 2) - time = 15 - category = CAT_NONE - -/datum/crafting_recipe/boat - name = "Goliath Hide Boat" - result = /obj/vehicle/ridden/lavaboat - reqs = list(/obj/item/stack/sheet/animalhide/goliath_hide = 3) - time = 50 - category = CAT_NONE - -//Dragon Boat - - -/obj/item/ship_in_a_bottle - name = "ship in a bottle" - desc = "" - icon = 'icons/obj/lavaland/artefacts.dmi' - icon_state = "ship_bottle" - -/obj/item/ship_in_a_bottle/attack_self(mob/user) - to_chat(user, "You're not sure how they get the ships in these things, but you're pretty sure you know how to get it out.") - playsound(user.loc, 'sound/blank.ogg', 100, TRUE) - new /obj/vehicle/ridden/lavaboat/dragon(get_turf(src)) - qdel(src) - -/obj/vehicle/ridden/lavaboat/dragon - name = "mysterious boat" - desc = "" - icon_state = "dragon_boat" - -/obj/vehicle/ridden/lavaboat/dragon/Initialize() - . = ..() - var/datum/component/riding/D = LoadComponent(/datum/component/riding) - D.vehicle_move_delay = 1 - D.set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(1, 2), TEXT_SOUTH = list(1, 2), TEXT_EAST = list(1, 2), TEXT_WEST = list( 1, 2))) - D.keytype = null diff --git a/code/modules/vehicles/pimpin_ride.dm b/code/modules/vehicles/pimpin_ride.dm deleted file mode 100644 index e437ef33d1..0000000000 --- a/code/modules/vehicles/pimpin_ride.dm +++ /dev/null @@ -1,76 +0,0 @@ -//PIMP-CART -/obj/vehicle/ridden/janicart - name = "janicart (pimpin' ride)" - desc = "" - icon_state = "pussywagon" - key_type = /obj/item/key/janitor - var/obj/item/storage/bag/trash/mybag = null - var/floorbuffer = FALSE - -/obj/vehicle/ridden/janicart/Initialize(mapload) - . = ..() - update_icon() - var/datum/component/riding/D = LoadComponent(/datum/component/riding) - D.set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0, 4), TEXT_SOUTH = list(0, 7), TEXT_EAST = list(-12, 7), TEXT_WEST = list( 12, 7))) - - if(floorbuffer) - AddElement(/datum/element/cleaning) - -/obj/vehicle/ridden/janicart/Destroy() - if(mybag) - qdel(mybag) - mybag = null - . = ..() - -/obj/item/janiupgrade - name = "floor buffer upgrade" - desc = "" - icon = 'icons/obj/vehicles.dmi' - icon_state = "upgrade" - -/obj/vehicle/ridden/janicart/examine(mob/user) - . += ..() - if(floorbuffer) - . += "It has been upgraded with a floor buffer." - -/obj/vehicle/ridden/janicart/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/storage/bag/trash)) - if(mybag) - to_chat(user, "[src] already has a trashbag hooked!") - return - if(!user.transferItemToLoc(I, src)) - return - to_chat(user, "I hook the trashbag onto [src].") - mybag = I - update_icon() - else if(istype(I, /obj/item/janiupgrade)) - if(floorbuffer) - to_chat(user, "[src] already has a floor buffer!") - return - floorbuffer = TRUE - qdel(I) - to_chat(user, "I upgrade [src] with the floor buffer.") - AddElement(/datum/element/cleaning) - update_icon() - else - return ..() - -/obj/vehicle/ridden/janicart/update_icon() - cut_overlays() - if(mybag) - add_overlay("cart_garbage") - if(floorbuffer) - add_overlay("cart_buffer") - -/obj/vehicle/ridden/janicart/attack_hand(mob/user) - . = ..() - if(.) - return - else if(mybag) - mybag.forceMove(get_turf(user)) - user.put_in_hands(mybag) - mybag = null - update_icon() - -/obj/vehicle/ridden/janicart/upgraded - floorbuffer = TRUE diff --git a/code/modules/vehicles/scooter.dm b/code/modules/vehicles/scooter.dm deleted file mode 100644 index 751b3393fd..0000000000 --- a/code/modules/vehicles/scooter.dm +++ /dev/null @@ -1,297 +0,0 @@ -/obj/vehicle/ridden/scooter - name = "scooter" - desc = "" - icon_state = "scooter" - are_legs_exposed = TRUE - fall_off_if_missing_arms = TRUE - -/obj/vehicle/ridden/scooter/Initialize() - . = ..() - var/datum/component/riding/D = LoadComponent(/datum/component/riding) - D.set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0), TEXT_SOUTH = list(-2), TEXT_EAST = list(0), TEXT_WEST = list( 2))) - - -/obj/vehicle/ridden/scooter/wrench_act(mob/living/user, obj/item/I) - ..() - to_chat(user, "I begin to remove the handlebars...") - if(I.use_tool(src, user, 40, volume=50)) - var/obj/vehicle/ridden/scooter/skateboard/S = new(drop_location()) - new /obj/item/stack/rods(drop_location(), 2) - to_chat(user, "I remove the handlebars from [src].") - if(has_buckled_mobs()) - var/mob/living/carbon/H = buckled_mobs[1] - unbuckle_mob(H) - S.buckle_mob(H) - qdel(src) - return TRUE - -/obj/vehicle/ridden/scooter/Moved() - . = ..() - for(var/m in buckled_mobs) - var/mob/living/buckled_mob = m - if(buckled_mob.get_num_legs(FALSE) > 0) - buckled_mob.pixel_y = 5 - else - buckled_mob.pixel_y = -4 - -/obj/vehicle/ridden/scooter/buckle_mob(mob/living/M, force = FALSE, check_loc = TRUE) - if(!istype(M)) - return FALSE - if(M.get_num_legs() < legs_required && M.get_num_arms() < arms_required) - to_chat(M, "I don't think it'd be a good idea trying to ride \the [src]...") - return FALSE - return ..() - -/obj/vehicle/ridden/scooter/skateboard - name = "improvised skateboard" - desc = "" - icon_state = "skateboard" - density = FALSE - arms_required = 0 - fall_off_if_missing_arms = FALSE - var/datum/effect_system/spark_spread/sparks - ///Whether the board is currently grinding - var/grinding = FALSE - ///Stores the time of the last crash plus a short cooldown, affects availability and outcome of certain actions - var/next_crash - ///Stores the default icon state - var/board_icon = "skateboard" - ///The handheld item counterpart for the board - var/board_item_type = /obj/item/melee/skateboard - ///Stamina drain multiplier - var/instability = 10 - -/obj/vehicle/ridden/scooter/skateboard/Initialize() - . = ..() - var/datum/component/riding/D = LoadComponent(/datum/component/riding) - D.vehicle_move_delay = 1.5 - D.set_vehicle_dir_layer(SOUTH, ABOVE_MOB_LAYER) - D.set_vehicle_dir_layer(NORTH, OBJ_LAYER) - D.set_vehicle_dir_layer(EAST, OBJ_LAYER) - D.set_vehicle_dir_layer(WEST, OBJ_LAYER) - sparks = new - sparks.set_up(1, 0, src) - sparks.attach(src) - -/obj/vehicle/ridden/scooter/skateboard/Destroy() - if(sparks) - QDEL_NULL(sparks) - . = ..() - -/obj/vehicle/ridden/scooter/skateboard/relaymove() - if (grinding || world.time < next_crash) - return FALSE - return ..() - -/obj/vehicle/ridden/scooter/skateboard/generate_actions() - . = ..() - initialize_controller_action_type(/datum/action/vehicle/ridden/scooter/skateboard/ollie, VEHICLE_CONTROL_DRIVE) - -/obj/vehicle/ridden/scooter/skateboard/post_buckle_mob(mob/living/M)//allows skateboards to be non-dense but still allows 2 skateboarders to collide with each other - density = TRUE - return ..() - -/obj/vehicle/ridden/scooter/skateboard/post_unbuckle_mob(mob/living/M) - if(!has_buckled_mobs()) - density = FALSE - return ..() - -/obj/vehicle/ridden/scooter/skateboard/Bump(atom/A) - . = ..() - if(A.density && has_buckled_mobs()) - var/mob/living/H = buckled_mobs[1] - H.adjustStaminaLoss(instability*6) - playsound(src, 'sound/blank.ogg', 40, TRUE) - if(!iscarbon(H) || H.getStaminaLoss() >= 100 || grinding || world.time < next_crash) - var/atom/throw_target = get_edge_target_turf(H, pick(GLOB.cardinals)) - unbuckle_mob(H) - H.throw_at(throw_target, 3, 2) - var/head_slot = H.get_item_by_slot(SLOT_HEAD) - if(!head_slot || !(istype(head_slot,/obj/item/clothing/head/helmet) || istype(head_slot,/obj/item/clothing/head/hardhat))) - H.adjustOrganLoss(ORGAN_SLOT_BRAIN, 5) - H.updatehealth() - visible_message("[src] crashes into [A], sending [H] flying!") - H.Paralyze(80) - else - var/backdir = turn(dir, 180) - vehicle_move(backdir) - H.spin(4, 1) - next_crash = world.time + 10 - -///Moves the vehicle forward and if it lands on a table, repeats -/obj/vehicle/ridden/scooter/skateboard/proc/grind() - vehicle_move(dir) - if(has_buckled_mobs() && locate(/obj/structure/table) in loc.contents) - var/mob/living/L = buckled_mobs[1] - L.adjustStaminaLoss(instability*0.5) - if (L.getStaminaLoss() >= 100) - playsound(src, 'sound/blank.ogg', 20, TRUE) - unbuckle_mob(L) - var/atom/throw_target = get_edge_target_turf(src, pick(GLOB.cardinals)) - L.throw_at(throw_target, 2, 2) - visible_message("[L] loses [L.p_their()] footing and slams on the ground!") - L.Paralyze(40) - grinding = FALSE - icon_state = board_icon - return - else - playsound(src, 'sound/blank.ogg', 50, TRUE) - if(prob (25)) - var/turf/location = get_turf(loc) - if(location) - location.hotspot_expose(1000,1000) - sparks.start() //the most radical way to start plasma fires - addtimer(CALLBACK(src, PROC_REF(grind)), 2) - return - else - grinding = FALSE - icon_state = board_icon - -/obj/vehicle/ridden/scooter/skateboard/MouseDrop(atom/over_object) - . = ..() - var/mob/living/carbon/M = usr - if(!istype(M) || M.incapacitated() || !Adjacent(M)) - return - if(has_buckled_mobs() && over_object == M) - to_chat(M, "I can't lift this up when somebody's on it.") - return - if(over_object == M) - var/board = new board_item_type(get_turf(M)) - M.put_in_hands(board) - qdel(src) - -/obj/vehicle/ridden/scooter/skateboard/pro - name = "skateboard" - desc = "" - icon_state = "skateboard2" - board_icon = "skateboard2" - board_item_type = /obj/item/melee/skateboard/pro - instability = 6 - -/obj/vehicle/ridden/scooter/skateboard/hoverboard/ - name = "hoverboard" - desc = "" - board_item_type = /obj/item/melee/skateboard/hoverboard - instability = 3 - icon_state = "hoverboard_red" - board_icon = "hoverboard_red" - -/obj/vehicle/ridden/scooter/skateboard/hoverboard/screwdriver_act(mob/living/user, obj/item/I) - return FALSE - -/obj/vehicle/ridden/scooter/skateboard/hoverboard/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/stack/rods)) - return - else - return ..() - -/obj/vehicle/ridden/scooter/skateboard/hoverboard/admin - name = "\improper Board Of Directors" - desc = "" - board_item_type = /obj/item/melee/skateboard/hoverboard/admin - instability = 0 - icon_state = "hoverboard_nt" - board_icon = "hoverboard_nt" - -//CONSTRUCTION -/obj/item/scooter_frame - name = "scooter frame" - desc = "" - icon = 'icons/obj/vehicles.dmi' - icon_state = "scooter_frame" - w_class = WEIGHT_CLASS_NORMAL - -/obj/item/scooter_frame/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/stack/sheet/metal)) - if(!I.tool_start_check(user, amount=5)) - return - to_chat(user, "I begin to add wheels to [src].") - if(I.use_tool(src, user, 80, volume=50, amount=5)) - to_chat(user, "I finish making wheels for [src].") - new /obj/vehicle/ridden/scooter/skateboard(user.loc) - qdel(src) - else - return ..() - -/obj/item/scooter_frame/wrench_act(mob/living/user, obj/item/I) - ..() - to_chat(user, "I deconstruct [src].") - new /obj/item/stack/rods(drop_location(), 10) - I.play_tool_sound(src) - qdel(src) - return TRUE - -/obj/vehicle/ridden/scooter/skateboard/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/stack/rods)) - if(!I.tool_start_check(user, amount=2)) - return - to_chat(user, "I begin making handlebars for [src].") - if(I.use_tool(src, user, 25, volume=50, amount=2)) - to_chat(user, "I add the rods to [src], creating handlebars.") - var/obj/vehicle/ridden/scooter/S = new(loc) - if(has_buckled_mobs()) - var/mob/living/carbon/H = buckled_mobs[1] - unbuckle_mob(H) - S.buckle_mob(H) - qdel(src) - else - return ..() - -/obj/vehicle/ridden/scooter/skateboard/screwdriver_act(mob/living/user, obj/item/I) - if(..()) - return TRUE - to_chat(user, "I begin to deconstruct and remove the wheels on [src]...") - if(I.use_tool(src, user, 20, volume=50)) - to_chat(user, "I deconstruct the wheels on [src].") - new /obj/item/stack/sheet/metal(drop_location(), 5) - new /obj/item/scooter_frame(drop_location()) - if(has_buckled_mobs()) - var/mob/living/carbon/H = buckled_mobs[1] - unbuckle_mob(H) - qdel(src) - return TRUE - -/obj/vehicle/ridden/scooter/skateboard/wrench_act(mob/living/user, obj/item/I) - return - -//Wheelys -/obj/vehicle/ridden/scooter/wheelys - name = "Wheely-Heels" - desc = "" - icon = null - density = FALSE - -/obj/vehicle/ridden/scooter/wheelys/Initialize() - . = ..() - var/datum/component/riding/D = LoadComponent(/datum/component/riding) - D.vehicle_move_delay = 0 - D.set_vehicle_dir_layer(SOUTH, ABOVE_MOB_LAYER) - D.set_vehicle_dir_layer(NORTH, OBJ_LAYER) - D.set_vehicle_dir_layer(EAST, OBJ_LAYER) - D.set_vehicle_dir_layer(WEST, OBJ_LAYER) - -/obj/vehicle/ridden/scooter/wheelys/post_unbuckle_mob(mob/living/M) - if(!has_buckled_mobs()) - to_chat(M, "I pop the Wheely-Heels' wheels back into place.") - moveToNullspace() - return ..() - -/obj/vehicle/ridden/scooter/wheelys/post_buckle_mob(mob/living/M) - to_chat(M, "I pop out the Wheely-Heels' wheels.") - return ..() - -/obj/vehicle/ridden/scooter/wheelys/Bump(atom/A) - . = ..() - if(A.density && has_buckled_mobs()) - var/mob/living/H = buckled_mobs[1] - var/atom/throw_target = get_edge_target_turf(H, pick(GLOB.cardinals)) - unbuckle_mob(H) - H.throw_at(throw_target, 4, 3) - H.Paralyze(30) - H.adjustStaminaLoss(10) - var/head_slot = H.get_item_by_slot(SLOT_HEAD) - if(!head_slot || !(istype(head_slot,/obj/item/clothing/head/helmet) || istype(head_slot,/obj/item/clothing/head/hardhat))) - H.adjustOrganLoss(ORGAN_SLOT_BRAIN, 1) - H.updatehealth() - visible_message("[src] crashes into [A], sending [H] flying!") - playsound(src, 'sound/blank.ogg', 50, TRUE) diff --git a/code/modules/vehicles/secway.dm b/code/modules/vehicles/secway.dm deleted file mode 100644 index d6feca7cc1..0000000000 --- a/code/modules/vehicles/secway.dm +++ /dev/null @@ -1,54 +0,0 @@ - -/obj/vehicle/ridden/secway - name = "secway" - desc = "" - icon_state = "secway" - max_integrity = 60 - armor = list("melee" = 10, "bullet" = 0, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 60) - key_type = /obj/item/key/security - integrity_failure = 0.5 - -/obj/vehicle/ridden/secway/Initialize() - . = ..() - var/datum/component/riding/D = LoadComponent(/datum/component/riding) - D.vehicle_move_delay = 1.75 - D.set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0, 4), TEXT_SOUTH = list(0, 4), TEXT_EAST = list(0, 4), TEXT_WEST = list( 0, 4))) - -/obj/vehicle/ridden/secway/obj_break() - START_PROCESSING(SSobj, src) - return ..() - -/obj/vehicle/ridden/secway/process() - if(obj_integrity >= integrity_failure * max_integrity) - return PROCESS_KILL - if(prob(20)) - return - var/datum/effect_system/smoke_spread/smoke = new - smoke.set_up(0, src) - smoke.start() - -/obj/vehicle/ridden/secway/attackby(obj/item/W, mob/user, params) - if(W.tool_behaviour == TOOL_WELDER && user.used_intent.type != INTENT_HARM) - if(obj_integrity < max_integrity) - if(W.use_tool(src, user, 0, volume = 50, amount = 1)) - user.visible_message("[user] repairs some damage to [name].", "I repair some damage to \the [src].") - obj_integrity += min(10, max_integrity-obj_integrity) - if(obj_integrity == max_integrity) - to_chat(user, "It looks to be fully repaired now.") - return TRUE - return ..() - -/obj/vehicle/ridden/secway/obj_destruction() - explosion(src, -1, 0, 2, 4, flame_range = 3) - return ..() - -/obj/vehicle/ridden/secway/Destroy() - STOP_PROCESSING(SSobj,src) - return ..() - -/obj/vehicle/ridden/secway/bullet_act(obj/projectile/P) - if(prob(60) && buckled_mobs) - for(var/mob/M in buckled_mobs) - M.bullet_act(P) - return TRUE - return ..() diff --git a/code/modules/vehicles/speedbike.dm b/code/modules/vehicles/speedbike.dm deleted file mode 100644 index c4d7a4d020..0000000000 --- a/code/modules/vehicles/speedbike.dm +++ /dev/null @@ -1,93 +0,0 @@ - -/obj/vehicle/ridden/space - name = "Generic Space Vehicle!" - -/obj/vehicle/ridden/space/Initialize() - . = ..() - var/datum/component/riding/D = LoadComponent(/datum/component/riding) - D.override_allow_spacemove = TRUE - -/obj/vehicle/ridden/space/speedbike - name = "Speedbike" - icon = 'icons/obj/bike.dmi' - icon_state = "speedbike_blue" - layer = LYING_MOB_LAYER - var/overlay_state = "cover_blue" - var/mutable_appearance/overlay - -/obj/vehicle/ridden/space/speedbike/Initialize() - . = ..() - overlay = mutable_appearance(icon, overlay_state, ABOVE_MOB_LAYER) - add_overlay(overlay) - var/datum/component/riding/D = LoadComponent(/datum/component/riding) - D.set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0, -8), TEXT_SOUTH = list(0, 4), TEXT_EAST = list(-10, 5), TEXT_WEST = list( 10, 5))) - D.vehicle_move_delay = 0 - D.set_vehicle_dir_offsets(NORTH, -16, -16) - D.set_vehicle_dir_offsets(SOUTH, -16, -16) - D.set_vehicle_dir_offsets(EAST, -18, 0) - D.set_vehicle_dir_offsets(WEST, -18, 0) - -/obj/vehicle/ridden/space/speedbike/Move(newloc,move_dir) - if(has_buckled_mobs()) - new /obj/effect/temp_visual/dir_setting/speedbike_trail(loc,move_dir) - . = ..() - -/obj/vehicle/ridden/space/speedbike/red - icon_state = "speedbike_red" - overlay_state = "cover_red" - -//BM SPEEDWAGON - -/obj/vehicle/ridden/space/speedwagon - name = "BM Speedwagon" - desc = "" - icon = 'icons/obj/car.dmi' - icon_state = "speedwagon" - layer = LYING_MOB_LAYER - var/static/mutable_appearance/overlay - max_buckled_mobs = 4 - var/crash_all = FALSE //CHAOS - pixel_y = -48 - pixel_x = -48 - -/obj/vehicle/ridden/space/speedwagon/Initialize() - . = ..() - overlay = mutable_appearance(icon, "speedwagon_cover", ABOVE_MOB_LAYER) - add_overlay(overlay) - var/datum/component/riding/D = LoadComponent(/datum/component/riding) - D.vehicle_move_delay = 0 - D.set_riding_offsets(1, list(TEXT_NORTH = list(-10, -4), TEXT_SOUTH = list(16, 3), TEXT_EAST = list(-4, 30), TEXT_WEST = list(4, -3))) - D.set_riding_offsets(2, list(TEXT_NORTH = list(19, -5, 4), TEXT_SOUTH = list(-13, 3, 4), TEXT_EAST = list(-4, -3, 4.1), TEXT_WEST = list(4, 28, 3.9))) - D.set_riding_offsets(3, list(TEXT_NORTH = list(-10, -18, 4.2), TEXT_SOUTH = list(16, 25, 3.9), TEXT_EAST = list(-22, 30), TEXT_WEST = list(22, -3, 4.1))) - D.set_riding_offsets(4, list(TEXT_NORTH = list(19, -18, 4.2), TEXT_SOUTH = list(-13, 25, 3.9), TEXT_EAST = list(-22, 3, 3.9), TEXT_WEST = list(22, 28))) - D.set_vehicle_dir_offsets(NORTH, -48, -48) - D.set_vehicle_dir_offsets(SOUTH, -48, -48) - D.set_vehicle_dir_offsets(EAST, -48, -48) - D.set_vehicle_dir_offsets(WEST, -48, -48) - for(var/i in GLOB.cardinals) - D.set_vehicle_dir_layer(i, BELOW_MOB_LAYER) - -/obj/vehicle/ridden/space/speedwagon/Bump(atom/movable/A) - . = ..() - if(A.density && has_buckled_mobs()) - var/atom/throw_target = get_edge_target_turf(A, dir) - if(crash_all) - A.throw_at(throw_target, 4, 3) - visible_message("[src] crashes into [A]!") - playsound(src, 'sound/blank.ogg', 50, TRUE) - if(ishuman(A)) - var/mob/living/carbon/human/H = A - H.Paralyze(100) - H.adjustStaminaLoss(30) - H.apply_damage(rand(20,35), BRUTE) - if(!crash_all) - H.throw_at(throw_target, 4, 3) - visible_message("[src] crashes into [H]!") - playsound(src, 'sound/blank.ogg', 50, TRUE) - -/obj/vehicle/ridden/space/speedwagon/Moved() - . = ..() - if(has_buckled_mobs()) - for(var/atom/A in range(2, src)) - if(!(A in buckled_mobs)) - Bump(A) diff --git a/code/modules/vehicles/vehicle_actions.dm b/code/modules/vehicles/vehicle_actions.dm index f2de97759c..b5bd8e2b82 100644 --- a/code/modules/vehicles/vehicle_actions.dm +++ b/code/modules/vehicles/vehicle_actions.dm @@ -153,78 +153,3 @@ /datum/action/vehicle/sealed/DumpKidnappedMobs/Trigger() vehicle_entered_target.visible_message("[vehicle_entered_target] starts dumping the people inside of it.") vehicle_entered_target.DumpSpecificMobs(VEHICLE_CONTROL_KIDNAPPED) - - -/datum/action/vehicle/sealed/RollTheDice - name = "Press Colorful Button" - desc = "" - button_icon_state = "car_rtd" - -/datum/action/vehicle/sealed/RollTheDice/Trigger() - if(istype(vehicle_entered_target, /obj/vehicle/sealed/car/clowncar)) - var/obj/vehicle/sealed/car/clowncar/C = vehicle_entered_target - C.RollTheDice(owner) - -/datum/action/vehicle/sealed/Cannon - name = "Toggle Siege Mode" - desc = "" - button_icon_state = "car_cannon" - -/datum/action/vehicle/sealed/Cannon/Trigger() - if(istype(vehicle_entered_target, /obj/vehicle/sealed/car/clowncar)) - var/obj/vehicle/sealed/car/clowncar/C = vehicle_entered_target - if(C.cannonbusy) - to_chat(owner, "Please wait for the vehicle to finish its current action first.") - C.ToggleCannon() - -/datum/action/vehicle/sealed/Thank - name = "Thank the Clown Car Driver" - desc = "" - button_icon_state = "car_thanktheclown" - var/last_thank_time - -/datum/action/vehicle/sealed/Thank/Trigger() - if(istype(vehicle_entered_target, /obj/vehicle/sealed/car/clowncar)) - var/obj/vehicle/sealed/car/clowncar/C = vehicle_entered_target - if(world.time >= last_thank_time + 60) - var/mob/living/carbon/human/clown = pick(C.return_drivers()) - owner.say("Thank you for the fun ride, [clown.name]!") - last_thank_time = world.time - C.ThanksCounter() - -/datum/action/vehicle/ridden/scooter/skateboard/ollie - name = "Ollie" - desc = "" - button_icon_state = "skateboard_ollie" - ///Cooldown to next jump - var/next_ollie - -/datum/action/vehicle/ridden/scooter/skateboard/ollie/Trigger() - if(world.time > next_ollie) - var/obj/vehicle/ridden/scooter/skateboard/V = vehicle_target - if (V.grinding) - return - var/mob/living/L = owner - var/turf/landing_turf = get_step(V.loc, V.dir) - L.adjustStaminaLoss(V.instability*2) - if (L.getStaminaLoss() >= 100) - playsound(src, 'sound/blank.ogg', 20, TRUE) - V.unbuckle_mob(L) - L.throw_at(landing_turf, 2, 2) - L.Paralyze(40) - V.visible_message("[L] misses the landing and falls on [L.p_their()] face!") - else - L.spin(4, 1) - animate(L, pixel_y = -6, time = 4) - animate(V, pixel_y = -6, time = 3) - playsound(V, 'sound/blank.ogg', 50, TRUE) - passtable_on(L, VEHICLE_TRAIT) - V.pass_flags |= PASSTABLE - L.Move(landing_turf, vehicle_target.dir) - passtable_off(L, VEHICLE_TRAIT) - V.pass_flags &= ~PASSTABLE - if(locate(/obj/structure/table) in V.loc.contents) - V.grinding = TRUE - V.icon_state = "[V.board_icon]-grind" - addtimer(CALLBACK(V, TYPE_PROC_REF(/obj/vehicle/ridden/scooter/skateboard, grind)), 2) - next_ollie = world.time + 5 diff --git a/code/modules/vehicles/wheelchair.dm b/code/modules/vehicles/wheelchair.dm deleted file mode 100644 index 47efe81e2e..0000000000 --- a/code/modules/vehicles/wheelchair.dm +++ /dev/null @@ -1,115 +0,0 @@ -/obj/vehicle/ridden/wheelchair //ported from Hippiestation (by Jujumatic) - name = "wheelchair" - desc = "" - icon = 'icons/obj/vehicles.dmi' - icon_state = "wheelchair" - layer = OBJ_LAYER - max_integrity = 100 - armor = list("melee" = 10, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 30) //Wheelchairs aren't super tough yo - legs_required = 0 //You'll probably be using this if you don't have legs - canmove = TRUE - density = FALSE //Thought I couldn't fix this one easily, phew - // Run speed delay is multiplied with this for vehicle move delay. - var/delay_multiplier = 6.7 - -/obj/vehicle/ridden/wheelchair/Initialize() - . = ..() - var/datum/component/riding/D = LoadComponent(/datum/component/riding) - D.vehicle_move_delay = 0 - D.set_vehicle_dir_layer(SOUTH, OBJ_LAYER) - D.set_vehicle_dir_layer(NORTH, ABOVE_MOB_LAYER) - D.set_vehicle_dir_layer(EAST, OBJ_LAYER) - D.set_vehicle_dir_layer(WEST, OBJ_LAYER) - -/obj/vehicle/ridden/wheelchair/ComponentInitialize() //Since it's technically a chair I want it to have chair properties - . = ..() - AddComponent(/datum/component/simple_rotation,ROTATION_ALTCLICK | ROTATION_CLOCKWISE, CALLBACK(src, PROC_REF(can_user_rotate)),CALLBACK(src, PROC_REF(can_be_rotated)),null) - -/obj/vehicle/ridden/wheelchair/obj_destruction(damage_flag) - new /obj/item/stack/rods(drop_location(), 1) - new /obj/item/stack/sheet/metal(drop_location(), 1) - return ..() - -/obj/vehicle/ridden/wheelchair/Destroy() - if(has_buckled_mobs()) - var/mob/living/carbon/H = buckled_mobs[1] - unbuckle_mob(H) - return ..() - -/obj/vehicle/ridden/wheelchair/driver_move(mob/living/user, direction) - if(istype(user)) - if(canmove && (user.get_num_arms() < arms_required)) - to_chat(user, "I don't have enough arms to operate the wheels!") - canmove = FALSE - addtimer(VARSET_CALLBACK(src, canmove, TRUE), 20) - return FALSE - set_move_delay(user) - return ..() - -/obj/vehicle/ridden/wheelchair/proc/set_move_delay(mob/living/user) - var/datum/component/riding/D = GetComponent(/datum/component/riding) - //1.5 (movespeed as of this change) multiplied by 6.7 gets ABOUT 10 (rounded), the old constant for the wheelchair that gets divided by how many arms they have - //if that made no sense this simply makes the wheelchair speed change along with movement speed delay - D.vehicle_move_delay = round(CONFIG_GET(number/movedelay/run_delay) * delay_multiplier) / min(user.get_num_arms(), 2) - -/obj/vehicle/ridden/wheelchair/Moved() - . = ..() - cut_overlays() - playsound(src, 'sound/blank.ogg', 75, TRUE) - if(has_buckled_mobs()) - handle_rotation_overlayed() - - -/obj/vehicle/ridden/wheelchair/post_buckle_mob(mob/living/user) - . = ..() - handle_rotation_overlayed() - -/obj/vehicle/ridden/wheelchair/post_unbuckle_mob() - . = ..() - cut_overlays() - -/obj/vehicle/ridden/wheelchair/setDir(newdir) - ..() - handle_rotation(newdir) - -/obj/vehicle/ridden/wheelchair/wrench_act(mob/living/user, obj/item/I) //Attackby should stop it attacking the wheelchair after moving away during decon - ..() - to_chat(user, "I begin to detach the wheels...") - if(I.use_tool(src, user, 40, volume=50)) - to_chat(user, "I detach the wheels and deconstruct the chair.") - new /obj/item/stack/rods(drop_location(), 6) - new /obj/item/stack/sheet/metal(drop_location(), 4) - qdel(src) - return TRUE - -/obj/vehicle/ridden/wheelchair/proc/handle_rotation(direction) - if(has_buckled_mobs()) - handle_rotation_overlayed() - for(var/m in buckled_mobs) - var/mob/living/buckled_mob = m - buckled_mob.setDir(direction) - -/obj/vehicle/ridden/wheelchair/proc/handle_rotation_overlayed() - cut_overlays() - var/image/V = image(icon = icon, icon_state = "wheelchair_overlay", layer = FLY_LAYER, dir = src.dir) - add_overlay(V) - - - -/obj/vehicle/ridden/wheelchair/proc/can_be_rotated(mob/living/user) - return TRUE - -/obj/vehicle/ridden/wheelchair/proc/can_user_rotate(mob/living/user) - var/mob/living/L = user - if(istype(L)) - if(!user.canUseTopic(src, BE_CLOSE, ismonkey(user))) - return FALSE - if(isobserver(user) && CONFIG_GET(flag/ghost_interaction)) - return TRUE - return FALSE - -/obj/vehicle/ridden/wheelchair/the_whip/driver_move(mob/living/user, direction) - if(istype(user)) - var/datum/component/riding/D = GetComponent(/datum/component/riding) - D.vehicle_move_delay = round(CONFIG_GET(number/movedelay/run_delay) * 6.7) / user.get_num_arms() - return ..() diff --git a/modular/Neu_Farming/code/fermenting_barrel.dm b/modular/Neu_Farming/code/fermenting_barrel.dm index b1758ce243..75a41d38fa 100644 --- a/modular/Neu_Farming/code/fermenting_barrel.dm +++ b/modular/Neu_Farming/code/fermenting_barrel.dm @@ -87,7 +87,7 @@ /datum/crafting_recipe/fermenting_barrel name = "Wooden Barrel" result = /obj/structure/fermenting_barrel - reqs = list(/obj/item/stack/sheet/mineral/wood = 30) + reqs = list(/obj/item/grown/log = 5) time = 50 category = CAT_NONE diff --git a/stonekeep.dme b/stonekeep.dme index db03bbfda6..a23e397264 100644 --- a/stonekeep.dme +++ b/stonekeep.dme @@ -191,7 +191,6 @@ #include "code\_globalvars\lists\client.dm" #include "code\_globalvars\lists\flavor_misc.dm" #include "code\_globalvars\lists\keybindings.dm" -#include "code\_globalvars\lists\maintenance_loot.dm" #include "code\_globalvars\lists\mapping.dm" #include "code\_globalvars\lists\mobs.dm" #include "code\_globalvars\lists\names.dm" @@ -407,8 +406,6 @@ #include "code\datums\character_flaw\limbloss.dm" #include "code\datums\components\_component.dm" #include "code\datums\components\anti_magic.dm" -#include "code\datums\components\archaeology.dm" -#include "code\datums\components\armor_plate.dm" #include "code\datums\components\art.dm" #include "code\datums\components\bane.dm" #include "code\datums\components\beauty.dm" @@ -440,7 +437,6 @@ #include "code\datums\components\mood.dm" #include "code\datums\components\movable_lighting.dm" #include "code\datums\components\orbiter.dm" -#include "code\datums\components\paintable.dm" #include "code\datums\components\pollutant.dm" #include "code\datums\components\punchcooldown.dm" #include "code\datums\components\rad_insulation.dm" @@ -455,33 +451,21 @@ #include "code\datums\components\soulstoned.dm" #include "code\datums\components\spawner.dm" #include "code\datums\components\spill.dm" -#include "code\datums\components\spooky.dm" #include "code\datums\components\squeak.dm" #include "code\datums\components\summoning.dm" #include "code\datums\components\swarming.dm" #include "code\datums\components\tactical.dm" #include "code\datums\components\temporary_pollutor.dm" #include "code\datums\components\tether.dm" -#include "code\datums\components\thermite.dm" #include "code\datums\components\waddling.dm" #include "code\datums\components\wearertargeting.dm" #include "code\datums\components\wet_floor.dm" #include "code\datums\components\crafting\crafting.dm" #include "code\datums\components\crafting\guncrafting.dm" #include "code\datums\components\crafting\recipes.dm" -#include "code\datums\components\crafting\tailoring.dm" #include "code\datums\components\decals\blood.dm" -#include "code\datums\components\fantasy\_fantasy.dm" -#include "code\datums\components\fantasy\affix.dm" -#include "code\datums\components\fantasy\prefixes.dm" -#include "code\datums\components\fantasy\suffixes.dm" #include "code\datums\components\storage\storage.dm" #include "code\datums\components\storage\concrete\_concrete.dm" -#include "code\datums\components\storage\concrete\bag_of_holding.dm" -#include "code\datums\components\storage\concrete\bluespace.dm" -#include "code\datums\components\storage\concrete\implant.dm" -#include "code\datums\components\storage\concrete\pockets.dm" -#include "code\datums\components\storage\concrete\rped.dm" #include "code\datums\components\storage\concrete\stack.dm" #include "code\datums\elements\_element.dm" #include "code\datums\elements\cleaning.dm" @@ -515,19 +499,9 @@ #include "code\datums\keybinding\movement.dm" #include "code\datums\looping_sounds\_looping_sound.dm" #include "code\datums\looping_sounds\item_sounds.dm" -#include "code\datums\looping_sounds\machinery_sounds.dm" #include "code\datums\looping_sounds\weather.dm" #include "code\datums\martial\_martial.dm" -#include "code\datums\martial\boxing.dm" -#include "code\datums\martial\cqc.dm" -#include "code\datums\martial\krav_maga.dm" -#include "code\datums\martial\mushpunch.dm" -#include "code\datums\martial\plasma_fist.dm" -#include "code\datums\martial\psychotic_brawl.dm" -#include "code\datums\martial\sleeping_carp.dm" -#include "code\datums\martial\wrestling.dm" #include "code\datums\materials\_material.dm" -#include "code\datums\materials\basemats.dm" #include "code\datums\migrants\migrant_assignment.dm" #include "code\datums\migrants\migrant_job.dm" #include "code\datums\migrants\migrant_pref.dm" @@ -555,7 +529,6 @@ #include "code\datums\mutations\actions.dm" #include "code\datums\mutations\body.dm" #include "code\datums\mutations\chameleon.dm" -#include "code\datums\mutations\cold.dm" #include "code\datums\mutations\hulk.dm" #include "code\datums\mutations\radioactive.dm" #include "code\datums\mutations\sight.dm" @@ -612,7 +585,6 @@ #include "code\game\communications.dm" #include "code\game\data_huds.dm" #include "code\game\say.dm" -#include "code\game\shuttle_engines.dm" #include "code\game\sound.dm" #include "code\game\world.dm" #include "code\game\area\areas.dm" @@ -641,6 +613,7 @@ #include "code\game\objects\buckling.dm" #include "code\game\objects\empulse.dm" #include "code\game\objects\examine.dm" +#include "code\game\objects\fluff.dm" #include "code\game\objects\inhands_rogue.dm" #include "code\game\objects\items.dm" #include "code\game\objects\obj_defense.dm" @@ -655,6 +628,7 @@ #include "code\game\objects\effects\forcefields.dm" #include "code\game\objects\effects\glowshroom.dm" #include "code\game\objects\effects\landmarks.dm" +#include "code\game\objects\effects\light_effect.dm" #include "code\game\objects\effects\mines.dm" #include "code\game\objects\effects\misc.dm" #include "code\game\objects\effects\overlays.dm" @@ -687,13 +661,11 @@ #include "code\game\objects\effects\effect_system\effects_sparks.dm" #include "code\game\objects\effects\effect_system\effects_water.dm" #include "code\game\objects\effects\particles\weather.dm" -#include "code\game\objects\effects\spawners\bundle.dm" #include "code\game\objects\effects\spawners\gibspawner.dm" #include "code\game\objects\effects\spawners\lootdrop.dm" #include "code\game\objects\effects\spawners\roguemapgen.dm" #include "code\game\objects\effects\spawners\structure.dm" #include "code\game\objects\effects\spawners\traps.dm" -#include "code\game\objects\effects\spawners\vaultspawner.dm" #include "code\game\objects\effects\temporary_visuals\cult.dm" #include "code\game\objects\effects\temporary_visuals\miscellaneous.dm" #include "code\game\objects\effects\temporary_visuals\temporary_visual.dm" @@ -701,95 +673,40 @@ #include "code\game\objects\effects\temporary_visuals\projectiles\muzzle.dm" #include "code\game\objects\effects\temporary_visuals\projectiles\projectile_effects.dm" #include "code\game\objects\effects\temporary_visuals\projectiles\tracer.dm" +#include "code\game\objects\items\beartraps.dm" +#include "code\game\objects\items\bedsheets.dm" #include "code\game\objects\items\blueprints.dm" -#include "code\game\objects\items\bodybag.dm" +#include "code\game\objects\items\boxes.dm" #include "code\game\objects\items\candle.dm" -#include "code\game\objects\items\cardboard_cutouts.dm" -#include "code\game\objects\items\charter.dm" #include "code\game\objects\items\chromosome.dm" #include "code\game\objects\items\cigs_lighters.dm" -#include "code\game\objects\items\clown_items.dm" #include "code\game\objects\items\cosmetics.dm" #include "code\game\objects\items\courtroom.dm" -#include "code\game\objects\items\crayons.dm" #include "code\game\objects\items\debug_items.dm" -#include "code\game\objects\items\dehy_carp.dm" #include "code\game\objects\items\dice.dm" #include "code\game\objects\items\dna_injector.dm" -#include "code\game\objects\items\documents.dm" #include "code\game\objects\items\eightball.dm" #include "code\game\objects\items\etherealdiscoball.dm" -#include "code\game\objects\items\extinguisher.dm" #include "code\game\objects\items\flight_potion.dm" -#include "code\game\objects\items\gift.dm" +#include "code\game\objects\items\glass_shard.dm" #include "code\game\objects\items\granters.dm" -#include "code\game\objects\items\handcuffs.dm" -#include "code\game\objects\items\his_grace.dm" -#include "code\game\objects\items\holy_weapons.dm" #include "code\game\objects\items\honeycomb.dm" #include "code\game\objects\items\hot_potato.dm" #include "code\game\objects\items\hourglass.dm" #include "code\game\objects\items\kitchen.dm" -#include "code\game\objects\items\latexballoon.dm" #include "code\game\objects\items\manuals.dm" -#include "code\game\objects\items\miscellaneous.dm" -#include "code\game\objects\items\mop.dm" #include "code\game\objects\items\paint.dm" -#include "code\game\objects\items\paiwire.dm" -#include "code\game\objects\items\pet_carrier.dm" -#include "code\game\objects\items\plushes.dm" -#include "code\game\objects\items\pneumaticCannon.dm" -#include "code\game\objects\items\powerfist.dm" -#include "code\game\objects\items\religion.dm" #include "code\game\objects\items\scrolls.dm" #include "code\game\objects\items\sharpener.dm" #include "code\game\objects\items\shooting_range.dm" -#include "code\game\objects\items\signs.dm" -#include "code\game\objects\items\singularityhammer.dm" +#include "code\game\objects\items\soap.dm" #include "code\game\objects\items\taster.dm" -#include "code\game\objects\items\theft_tools.dm" #include "code\game\objects\items\toys.dm" #include "code\game\objects\items\trash.dm" -#include "code\game\objects\items\twohanded.dm" #include "code\game\objects\items\vending_items.dm" #include "code\game\objects\items\weaponry.dm" -#include "code\game\objects\items\devices\beacon.dm" -#include "code\game\objects\items\devices\chameleonproj.dm" -#include "code\game\objects\items\devices\desynchronizer.dm" #include "code\game\objects\items\devices\flashlight.dm" -#include "code\game\objects\items\devices\forcefieldprojector.dm" -#include "code\game\objects\items\devices\geiger_counter.dm" -#include "code\game\objects\items\devices\gps.dm" -#include "code\game\objects\items\devices\instruments.dm" -#include "code\game\objects\items\devices\lightreplacer.dm" -#include "code\game\objects\items\devices\megaphone.dm" #include "code\game\objects\items\devices\reverse_bear_trap.dm" -#include "code\game\objects\items\devices\swapper.dm" -#include "code\game\objects\items\devices\taperecorder.dm" -#include "code\game\objects\items\grenades\antigravity.dm" -#include "code\game\objects\items\grenades\clusterbuster.dm" -#include "code\game\objects\items\grenades\emgrenade.dm" -#include "code\game\objects\items\grenades\flashbang.dm" -#include "code\game\objects\items\grenades\ghettobomb.dm" -#include "code\game\objects\items\grenades\grenade.dm" -#include "code\game\objects\items\grenades\smokebomb.dm" -#include "code\game\objects\items\grenades\spawnergrenade.dm" -#include "code\game\objects\items\grenades\syndieminibomb.dm" -#include "code\game\objects\items\implants\implant.dm" -#include "code\game\objects\items\implants\implant_chem.dm" -#include "code\game\objects\items\implants\implant_clown.dm" -#include "code\game\objects\items\implants\implant_exile.dm" -#include "code\game\objects\items\implants\implant_explosive.dm" -#include "code\game\objects\items\implants\implant_freedom.dm" -#include "code\game\objects\items\implants\implant_krav_maga.dm" -#include "code\game\objects\items\implants\implant_misc.dm" -#include "code\game\objects\items\implants\implant_spell.dm" -#include "code\game\objects\items\implants\implant_stealth.dm" -#include "code\game\objects\items\implants\implant_storage.dm" -#include "code\game\objects\items\implants\implant_track.dm" -#include "code\game\objects\items\implants\implantcase.dm" -#include "code\game\objects\items\implants\implanter.dm" -#include "code\game\objects\items\implants\implantpad.dm" #include "code\game\objects\items\melee\misc.dm" #include "code\game\objects\items\melee\transforming.dm" #include "code\game\objects\items\rogueitems\bags.dm" @@ -844,39 +761,17 @@ #include "code\game\objects\items\rogueweapons\ranged\crossbows.dm" #include "code\game\objects\items\rogueweapons\ranged\flintlock.dm" #include "code\game\objects\items\rogueweapons\ranged\slings.dm" -#include "code\game\objects\items\stacks\bscrystal.dm" #include "code\game\objects\items\stacks\cash.dm" #include "code\game\objects\items\stacks\medical.dm" -#include "code\game\objects\items\stacks\rods.dm" #include "code\game\objects\items\stacks\stack.dm" -#include "code\game\objects\items\stacks\sheets\glass.dm" -#include "code\game\objects\items\stacks\sheets\leather.dm" -#include "code\game\objects\items\stacks\sheets\mineral.dm" -#include "code\game\objects\items\stacks\sheets\sheet_types.dm" +#include "code\game\objects\items\stacks\sheets\hides.dm" #include "code\game\objects\items\stacks\sheets\sheets.dm" -#include "code\game\objects\items\stacks\tiles\light.dm" -#include "code\game\objects\items\stacks\tiles\tile_mineral.dm" -#include "code\game\objects\items\stacks\tiles\tile_types.dm" #include "code\game\objects\items\storage\backpack.dm" -#include "code\game\objects\items\storage\bags.dm" +#include "code\game\objects\items\storage\bag.dm" #include "code\game\objects\items\storage\belt.dm" #include "code\game\objects\items\storage\book.dm" -#include "code\game\objects\items\storage\boxes.dm" -#include "code\game\objects\items\storage\briefcase.dm" #include "code\game\objects\items\storage\fancy.dm" -#include "code\game\objects\items\storage\firstaid.dm" -#include "code\game\objects\items\storage\lockbox.dm" -#include "code\game\objects\items\storage\secure.dm" #include "code\game\objects\items\storage\storage.dm" -#include "code\game\objects\items\storage\toolbox.dm" -#include "code\game\objects\items\tanks\tank_types.dm" -#include "code\game\objects\items\tanks\tanks.dm" -#include "code\game\objects\items\tanks\watertank.dm" -#include "code\game\objects\items\tools\crowbar.dm" -#include "code\game\objects\items\tools\screwdriver.dm" -#include "code\game\objects\items\tools\weldingtool.dm" -#include "code\game\objects\items\tools\wirecutters.dm" -#include "code\game\objects\items\tools\wrench.dm" #include "code\game\objects\lighting\_base_light.dm" #include "code\game\objects\lighting\_base_roguelight.dm" #include "code\game\objects\lighting\_base_roguestreet.dm" @@ -885,41 +780,25 @@ #include "code\game\objects\lighting\sunlight.dm" #include "code\game\objects\structures\artstuff.dm" #include "code\game\objects\structures\barricades.dm" -#include "code\game\objects\structures\barsigns.dm" #include "code\game\objects\structures\bearpelt.dm" -#include "code\game\objects\structures\bedsheet_bin.dm" +#include "code\game\objects\structures\curtain.dm" +#include "code\game\objects\structures\deer_trophy.dm" #include "code\game\objects\structures\displaycase.dm" #include "code\game\objects\structures\divine.dm" -#include "code\game\objects\structures\dresser.dm" #include "code\game\objects\structures\dystation.dm" -#include "code\game\objects\structures\extinguisher.dm" -#include "code\game\objects\structures\false_walls.dm" #include "code\game\objects\structures\fence.dm" #include "code\game\objects\structures\fireaxe.dm" -#include "code\game\objects\structures\fireplace.dm" -#include "code\game\objects\structures\flora.dm" #include "code\game\objects\structures\fluff.dm" -#include "code\game\objects\structures\ghost_role_spawners.dm" -#include "code\game\objects\structures\girders.dm" -#include "code\game\objects\structures\grille.dm" #include "code\game\objects\structures\guillotine.dm" -#include "code\game\objects\structures\guncase.dm" -#include "code\game\objects\structures\headpike.dm" #include "code\game\objects\structures\hell.dm" -#include "code\game\objects\structures\janicart.dm" #include "code\game\objects\structures\kitchen_spike.dm" #include "code\game\objects\structures\ladders.dm" -#include "code\game\objects\structures\lattice.dm" #include "code\game\objects\structures\life_candle.dm" -#include "code\game\objects\structures\loom.dm" #include "code\game\objects\structures\maneater.dm" #include "code\game\objects\structures\mannequin.dm" #include "code\game\objects\structures\memorial.dm" #include "code\game\objects\structures\mineral_doors.dm" #include "code\game\objects\structures\mirror.dm" -#include "code\game\objects\structures\mop_bucket.dm" -#include "code\game\objects\structures\morgue.dm" -#include "code\game\objects\structures\musician.dm" #include "code\game\objects\structures\noticeboard.dm" #include "code\game\objects\structures\petrified_statue.dm" #include "code\game\objects\structures\pillory.dm" @@ -927,21 +806,17 @@ #include "code\game\objects\structures\roguetent.dm" #include "code\game\objects\structures\roguewindow.dm" #include "code\game\objects\structures\safe.dm" -#include "code\game\objects\structures\showcase.dm" -#include "code\game\objects\structures\shower.dm" #include "code\game\objects\structures\spawner.dm" #include "code\game\objects\structures\spirit_board.dm" #include "code\game\objects\structures\stairs.dm" #include "code\game\objects\structures\statues.dm" -#include "code\game\objects\structures\table_frames.dm" #include "code\game\objects\structures\tables_racks.dm" #include "code\game\objects\structures\target_stake.dm" +#include "code\game\objects\structures\toilet.dm" #include "code\game\objects\structures\traps.dm" #include "code\game\objects\structures\traveltile.dm" #include "code\game\objects\structures\walldeco.dm" -#include "code\game\objects\structures\watercloset.dm" #include "code\game\objects\structures\well.dm" -#include "code\game\objects\structures\window.dm" #include "code\game\objects\structures\beds_chairs\bed.dm" #include "code\game\objects\structures\beds_chairs\chair.dm" #include "code\game\objects\structures\beds_chairs\pew.dm" @@ -950,16 +825,6 @@ #include "code\game\objects\structures\crates_lockers\closets.dm" #include "code\game\objects\structures\crates_lockers\crates.dm" #include "code\game\objects\structures\crates_lockers\roguetown.dm" -#include "code\game\objects\structures\crates_lockers\closets\bodybag.dm" -#include "code\game\objects\structures\crates_lockers\closets\cardboardbox.dm" -#include "code\game\objects\structures\crates_lockers\closets\gimmick.dm" -#include "code\game\objects\structures\crates_lockers\closets\infinite.dm" -#include "code\game\objects\structures\crates_lockers\closets\l3closet.dm" -#include "code\game\objects\structures\crates_lockers\closets\wardrobe.dm" -#include "code\game\objects\structures\crates_lockers\crates\bins.dm" -#include "code\game\objects\structures\crates_lockers\crates\critter.dm" -#include "code\game\objects\structures\crates_lockers\crates\large.dm" -#include "code\game\objects\structures\crates_lockers\crates\wooden.dm" #include "code\game\objects\structures\decorations\bones.dm" #include "code\game\objects\structures\decorations\stone_path.dm" #include "code\game\objects\structures\roguetown\bell.dm" @@ -970,11 +835,6 @@ #include "code\game\objects\structures\roguetown\portal.dm" #include "code\game\objects\structures\roguetown\redstone.dm" #include "code\game\objects\structures\roguetown\rogueflora.dm" -#include "code\game\objects\structures\signs\_signs.dm" -#include "code\game\objects\structures\signs\signs_departments.dm" -#include "code\game\objects\structures\signs\signs_maps.dm" -#include "code\game\objects\structures\signs\signs_plaques.dm" -#include "code\game\objects\structures\signs\signs_warning.dm" #include "code\game\turfs\baseturf_skipover.dm" #include "code\game\turfs\change_turf.dm" #include "code\game\turfs\turf.dm" @@ -984,8 +844,6 @@ #include "code\game\turfs\closed\transparent.dm" #include "code\game\turfs\closed\walls.dm" #include "code\game\turfs\closed\wall\mineral_walls.dm" -#include "code\game\turfs\closed\wall\misc_walls.dm" -#include "code\game\turfs\closed\wall\reinf_walls.dm" #include "code\game\turfs\closed\wall\roguewalls.dm" #include "code\game\turfs\open\_open.dm" #include "code\game\turfs\open\floor.dm" @@ -995,19 +853,8 @@ #include "code\game\turfs\open\river.dm" #include "code\game\turfs\open\transparent.dm" #include "code\game\turfs\open\water.dm" -#include "code\game\turfs\open\floor\fancy_floor.dm" -#include "code\game\turfs\open\floor\light_floor.dm" -#include "code\game\turfs\open\floor\mineral_floor.dm" -#include "code\game\turfs\open\floor\misc_floor.dm" -#include "code\game\turfs\open\floor\plasteel_floor.dm" -#include "code\game\turfs\open\floor\plating.dm" -#include "code\game\turfs\open\floor\reinf_floor.dm" +#include "code\game\turfs\open\floor\carpet.dm" #include "code\game\turfs\open\floor\roguefloor.dm" -#include "code\game\turfs\open\floor\plating\asteroid.dm" -#include "code\game\turfs\open\floor\plating\dirt.dm" -#include "code\game\turfs\open\floor\plating\misc_plating.dm" -#include "code\game\turfs\open\space\space.dm" -#include "code\game\turfs\open\space\transit.dm" #include "code\modules\admin\admin.dm" #include "code\modules\admin\admin_investigate.dm" #include "code\modules\admin\admin_ranks.dm" @@ -1102,8 +949,6 @@ #include "code\modules\antagonists\roguetown\villain\zizocult.dm" #include "code\modules\antagonists\roguetown\villain\zomble.dm" #include "code\modules\antagonists\traitor\datum_traitor.dm" -#include "code\modules\antagonists\wizard\equipment\artefact.dm" -#include "code\modules\antagonists\wizard\equipment\soulstone.dm" #include "code\modules\atmospherics\environmental\LINDA_fire.dm" #include "code\modules\atmospherics\environmental\LINDA_system.dm" #include "code\modules\atmospherics\environmental\LINDA_turf_tile.dm" @@ -1112,10 +957,6 @@ #include "code\modules\atmospherics\gasmixtures\immutable_mixtures.dm" #include "code\modules\atmospherics\gasmixtures\reactions.dm" #include "code\modules\awaymissions\corpse.dm" -#include "code\modules\awaymissions\exile.dm" -#include "code\modules\awaymissions\pamphlet.dm" -#include "code\modules\awaymissions\signpost.dm" -#include "code\modules\awaymissions\super_secret_room.dm" #include "code\modules\awaymissions\zlevel.dm" #include "code\modules\buildmode\bm_mode.dm" #include "code\modules\buildmode\buildmode.dm" @@ -1132,14 +973,9 @@ #include "code\modules\buildmode\submodes\variable_edit.dm" #include "code\modules\cargo\centcom_podlauncher.dm" #include "code\modules\cargo\exports.dm" -#include "code\modules\cargo\gondolapod.dm" #include "code\modules\cargo\order.dm" #include "code\modules\cargo\supplypod.dm" -#include "code\modules\cargo\exports\gear.dm" -#include "code\modules\cargo\exports\manifest.dm" -#include "code\modules\cargo\exports\materials.dm" #include "code\modules\cargo\exports\seeds.dm" -#include "code\modules\cargo\exports\sheets.dm" #include "code\modules\cargo\packsrogue\_pack.dm" #include "code\modules\cargo\packsrogue\_rogue.dm" #include "code\modules\cargo\packsrogue\apparel.dm" @@ -1182,33 +1018,12 @@ #include "code\modules\client\verbs\suicide.dm" #include "code\modules\client\verbs\who.dm" #include "code\modules\clothing\clothing.dm" -#include "code\modules\clothing\ears\_ears.dm" #include "code\modules\clothing\glasses\_glasses.dm" -#include "code\modules\clothing\glasses\engine_goggles.dm" -#include "code\modules\clothing\glasses\hud.dm" #include "code\modules\clothing\gloves\_gloves.dm" -#include "code\modules\clothing\gloves\boxing.dm" -#include "code\modules\clothing\gloves\color.dm" -#include "code\modules\clothing\gloves\miscellaneous.dm" #include "code\modules\clothing\head\_head.dm" -#include "code\modules\clothing\head\beanie.dm" -#include "code\modules\clothing\head\collectable.dm" -#include "code\modules\clothing\head\hardhat.dm" -#include "code\modules\clothing\head\helmet.dm" -#include "code\modules\clothing\head\jobs.dm" -#include "code\modules\clothing\head\misc.dm" -#include "code\modules\clothing\head\misc_special.dm" -#include "code\modules\clothing\head\soft_caps.dm" #include "code\modules\clothing\masks\_masks.dm" -#include "code\modules\clothing\masks\boxing.dm" -#include "code\modules\clothing\masks\breath.dm" -#include "code\modules\clothing\masks\gasmask.dm" -#include "code\modules\clothing\masks\hailer.dm" #include "code\modules\clothing\masks\miscellaneous.dm" #include "code\modules\clothing\neck\_neck.dm" -#include "code\modules\clothing\outfits\event.dm" -#include "code\modules\clothing\outfits\standard.dm" -#include "code\modules\clothing\outfits\vr.dm" #include "code\modules\clothing\outfits\vv_outfit.dm" #include "code\modules\clothing\rogueclothes\armor.dm" #include "code\modules\clothing\rogueclothes\cloaks.dm" @@ -1227,45 +1042,11 @@ #include "code\modules\clothing\rogueclothes\npc\goblin.dm" #include "code\modules\clothing\rogueclothes\npc\orc.dm" #include "code\modules\clothing\shoes\_shoes.dm" -#include "code\modules\clothing\shoes\bananashoes.dm" -#include "code\modules\clothing\shoes\colour.dm" -#include "code\modules\clothing\shoes\magboots.dm" -#include "code\modules\clothing\shoes\miscellaneous.dm" #include "code\modules\clothing\suits\_suits.dm" -#include "code\modules\clothing\suits\armor.dm" -#include "code\modules\clothing\suits\bio.dm" -#include "code\modules\clothing\suits\chaplainsuits.dm" #include "code\modules\clothing\suits\cloaks.dm" -#include "code\modules\clothing\suits\labcoat.dm" -#include "code\modules\clothing\suits\miscellaneous.dm" #include "code\modules\clothing\suits\toggles.dm" -#include "code\modules\clothing\suits\utility.dm" -#include "code\modules\clothing\suits\wiz_robe.dm" #include "code\modules\clothing\under\_under.dm" #include "code\modules\clothing\under\accessories.dm" -#include "code\modules\clothing\under\color.dm" -#include "code\modules\clothing\under\costume.dm" -#include "code\modules\clothing\under\miscellaneous.dm" -#include "code\modules\clothing\under\pants.dm" -#include "code\modules\clothing\under\shorts.dm" -#include "code\modules\clothing\under\skirt_dress.dm" -#include "code\modules\clothing\under\suits.dm" -#include "code\modules\clothing\under\syndicate.dm" -#include "code\modules\clothing\under\trek.dm" -#include "code\modules\clothing\under\jobs\cargo.dm" -#include "code\modules\clothing\under\jobs\centcom.dm" -#include "code\modules\clothing\under\jobs\command.dm" -#include "code\modules\clothing\under\jobs\engineering.dm" -#include "code\modules\clothing\under\jobs\medical.dm" -#include "code\modules\clothing\under\jobs\rnd.dm" -#include "code\modules\clothing\under\jobs\security.dm" -#include "code\modules\clothing\under\jobs\civilian\civilian.dm" -#include "code\modules\clothing\under\jobs\civilian\clown_mime.dm" -#include "code\modules\clothing\under\jobs\civilian\curator.dm" -#include "code\modules\clothing\under\jobs\Plasmaman\civilian_service.dm" -#include "code\modules\clothing\under\jobs\Plasmaman\engineering.dm" -#include "code\modules\clothing\under\jobs\Plasmaman\medsci.dm" -#include "code\modules\clothing\under\jobs\Plasmaman\security.dm" #include "code\modules\detectivework\detective_work.dm" #include "code\modules\detectivework\evidence.dm" #include "code\modules\detectivework\footprints_and_rag.dm" @@ -1299,9 +1080,6 @@ #include "code\modules\flufftext\Dreaming.dm" #include "code\modules\flufftext\Hallucination.dm" #include "code\modules\food_and_drinks\food.dm" -#include "code\modules\food_and_drinks\drinks\drinks.dm" -#include "code\modules\food_and_drinks\drinks\drinks\bottle.dm" -#include "code\modules\food_and_drinks\drinks\drinks\drinkingglass.dm" #include "code\modules\food_and_drinks\food\condiment.dm" #include "code\modules\food_and_drinks\food\customizables.dm" #include "code\modules\food_and_drinks\food\snacks.dm" @@ -1322,18 +1100,12 @@ #include "code\modules\food_and_drinks\food\snacks_vend.dm" #include "code\modules\food_and_drinks\food\snacks\dough.dm" #include "code\modules\food_and_drinks\food\snacks\meat.dm" -#include "code\modules\food_and_drinks\kitchen_machinery\food_cart.dm" -#include "code\modules\food_and_drinks\kitchen_machinery\grill.dm" -#include "code\modules\food_and_drinks\kitchen_machinery\icecream_vat.dm" #include "code\modules\food_and_drinks\recipes\drinks_recipes.dm" #include "code\modules\food_and_drinks\recipes\food_mixtures.dm" -#include "code\modules\games\cas.dm" #include "code\modules\goonchat\browserOutput.dm" -#include "code\modules\holiday\easter.dm" #include "code\modules\holiday\holidays.dm" #include "code\modules\hydroponics\grown.dm" #include "code\modules\hydroponics\growninedible.dm" -#include "code\modules\hydroponics\hydroitemdefines.dm" #include "code\modules\hydroponics\plant_genes.dm" #include "code\modules\hydroponics\sample.dm" #include "code\modules\hydroponics\seeds.dm" @@ -1504,7 +1276,6 @@ #include "code\modules\library\lib_items.dm" #include "code\modules\library\lib_machines.dm" #include "code\modules\library\random_books.dm" -#include "code\modules\library\soapstone.dm" #include "code\modules\lighting\lighting_area.dm" #include "code\modules\lighting\lighting_atom.dm" #include "code\modules\lighting\lighting_atom_additions.dm" @@ -1526,8 +1297,6 @@ #include "code\modules\mapping\space_management\space_transition.dm" #include "code\modules\mapping\space_management\traits.dm" #include "code\modules\mapping\space_management\zlevel_manager.dm" -#include "code\modules\mining\ores_coins.dm" -#include "code\modules\mining\lavaland\ash_flora.dm" #include "code\modules\mob\death.dm" #include "code\modules\mob\emote.dm" #include "code\modules\mob\inventory.dm" @@ -1641,17 +1410,10 @@ #include "code\modules\mob\living\carbon\human\species_types\dullahan.dm" #include "code\modules\mob\living\carbon\human\species_types\ethereal.dm" #include "code\modules\mob\living\carbon\human\species_types\felinid.dm" -#include "code\modules\mob\living\carbon\human\species_types\flypeople.dm" -#include "code\modules\mob\living\carbon\human\species_types\golems.dm" #include "code\modules\mob\living\carbon\human\species_types\lizardpeople.dm" -#include "code\modules\mob\living\carbon\human\species_types\mothmen.dm" -#include "code\modules\mob\living\carbon\human\species_types\mushpeople.dm" -#include "code\modules\mob\living\carbon\human\species_types\plasmamen.dm" -#include "code\modules\mob\living\carbon\human\species_types\podpeople.dm" #include "code\modules\mob\living\carbon\human\species_types\shadowpeople.dm" #include "code\modules\mob\living\carbon\human\species_types\skeletons.dm" #include "code\modules\mob\living\carbon\human\species_types\snail.dm" -#include "code\modules\mob\living\carbon\human\species_types\synths.dm" #include "code\modules\mob\living\carbon\human\species_types\vampire.dm" #include "code\modules\mob\living\carbon\human\species_types\zombies.dm" #include "code\modules\mob\living\carbon\human\species_types\roguetown\roguetown_species.dm" @@ -1704,48 +1466,30 @@ #include "code\modules\mob\living\carbon\spirit\spirit_defense.dm" #include "code\modules\mob\living\carbon\spirit\update_icons.dm" #include "code\modules\mob\living\simple_animal\animal_defense.dm" -#include "code\modules\mob\living\simple_animal\constructs.dm" -#include "code\modules\mob\living\simple_animal\corpse.dm" #include "code\modules\mob\living\simple_animal\damage_procs.dm" #include "code\modules\mob\living\simple_animal\examine.dm" #include "code\modules\mob\living\simple_animal\parrot.dm" -#include "code\modules\mob\living\simple_animal\shade.dm" #include "code\modules\mob\living\simple_animal\simple_animal.dm" #include "code\modules\mob\living\simple_animal\status_procs.dm" #include "code\modules\mob\living\simple_animal\topic.dm" #include "code\modules\mob\living\simple_animal\friendly\butterfly.dm" #include "code\modules\mob\living\simple_animal\friendly\cat.dm" #include "code\modules\mob\living\simple_animal\friendly\cockroach.dm" -#include "code\modules\mob\living\simple_animal\friendly\crab.dm" #include "code\modules\mob\living\simple_animal\friendly\dog.dm" -#include "code\modules\mob\living\simple_animal\friendly\farm_animals.dm" #include "code\modules\mob\living\simple_animal\friendly\fox.dm" -#include "code\modules\mob\living\simple_animal\friendly\gondola.dm" +#include "code\modules\mob\living\simple_animal\friendly\grensch.dm" #include "code\modules\mob\living\simple_animal\friendly\lizard.dm" #include "code\modules\mob\living\simple_animal\friendly\mouse.dm" -#include "code\modules\mob\living\simple_animal\friendly\penguin.dm" #include "code\modules\mob\living\simple_animal\friendly\pet.dm" -#include "code\modules\mob\living\simple_animal\friendly\sloth.dm" #include "code\modules\mob\living\simple_animal\friendly\snake.dm" -#include "code\modules\mob\living\simple_animal\hostile\bear.dm" -#include "code\modules\mob\living\simple_animal\hostile\carp.dm" #include "code\modules\mob\living\simple_animal\hostile\dark_wizard.dm" -#include "code\modules\mob\living\simple_animal\hostile\eyeballs.dm" #include "code\modules\mob\living\simple_animal\hostile\faithless.dm" #include "code\modules\mob\living\simple_animal\hostile\giant_spider.dm" #include "code\modules\mob\living\simple_animal\hostile\goose.dm" #include "code\modules\mob\living\simple_animal\hostile\hostile.dm" #include "code\modules\mob\living\simple_animal\hostile\illusion.dm" -#include "code\modules\mob\living\simple_animal\hostile\killertomato.dm" -#include "code\modules\mob\living\simple_animal\hostile\mushroom.dm" #include "code\modules\mob\living\simple_animal\hostile\netherworld.dm" -#include "code\modules\mob\living\simple_animal\hostile\pirate.dm" -#include "code\modules\mob\living\simple_animal\hostile\skeleton.dm" #include "code\modules\mob\living\simple_animal\hostile\statue.dm" -#include "code\modules\mob\living\simple_animal\hostile\syndicate.dm" -#include "code\modules\mob\living\simple_animal\hostile\tree.dm" -#include "code\modules\mob\living\simple_animal\hostile\venus_human_trap.dm" -#include "code\modules\mob\living\simple_animal\hostile\wizard.dm" #include "code\modules\mob\living\simple_animal\hostile\zombie.dm" #include "code\modules\mob\living\simple_animal\hostile\bosses\boss.dm" #include "code\modules\mob\living\simple_animal\hostile\gorilla\emotes.dm" @@ -1757,11 +1501,8 @@ #include "code\modules\mob\living\simple_animal\hostile\jungle\mook.dm" #include "code\modules\mob\living\simple_animal\hostile\jungle\seedling.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\bat.dm" -#include "code\modules\mob\living\simple_animal\hostile\retaliate\clown.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\frog.dm" -#include "code\modules\mob\living\simple_animal\hostile\retaliate\ghost.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\retaliate.dm" -#include "code\modules\mob\living\simple_animal\hostile\retaliate\spaceman.dm" #include "code\modules\mob\living\simple_animal\hostile\roguetown\crow.dm" #include "code\modules\mob\living\simple_animal\hostile\roguetown\haunt.dm" #include "code\modules\mob\living\simple_animal\hostile\roguetown\smallrat.dm" @@ -1791,20 +1532,11 @@ #include "code\modules\mob\living\simple_animal\rogue\farm\goat.dm" #include "code\modules\mob\living\simple_animal\rogue\farm\trufflepig.dm" #include "code\modules\mob\living\simple_animal\rogue\game\saiga.dm" -#include "code\modules\paperwork\carbonpaper.dm" -#include "code\modules\paperwork\clipboard.dm" #include "code\modules\paperwork\contract.dm" -#include "code\modules\paperwork\filingcabinet.dm" -#include "code\modules\paperwork\folders.dm" -#include "code\modules\paperwork\handlabeler.dm" #include "code\modules\paperwork\paper.dm" #include "code\modules\paperwork\paper_cutter.dm" #include "code\modules\paperwork\paper_premade.dm" -#include "code\modules\paperwork\paperbin.dm" -#include "code\modules\paperwork\paperplane.dm" -#include "code\modules\paperwork\pen.dm" #include "code\modules\paperwork\rogue.dm" -#include "code\modules\paperwork\stamps.dm" #include "code\modules\paperwork\papers\scrap.dm" #include "code\modules\photography\_pictures.dm" #include "code\modules\photography\photos\album.dm" @@ -1815,109 +1547,23 @@ #include "code\modules\procedural_mapping\mapGeneratorObj.dm" #include "code\modules\procedural_mapping\mapGeneratorReadme.dm" #include "code\modules\procedural_mapping\mapGeneratorModules\helpers.dm" -#include "code\modules\procedural_mapping\mapGeneratorModules\nature.dm" #include "code\modules\procedural_mapping\mapGenerators\cellular.dm" -#include "code\modules\procedural_mapping\mapGenerators\nature.dm" -#include "code\modules\procedural_mapping\mapGenerators\repair.dm" -#include "code\modules\procedural_mapping\mapGenerators\shuttle.dm" -#include "code\modules\procedural_mapping\mapGenerators\syndicate.dm" #include "code\modules\projectiles\gun.dm" -#include "code\modules\projectiles\pins.dm" #include "code\modules\projectiles\projectile.dm" #include "code\modules\projectiles\ammunition\_ammunition.dm" #include "code\modules\projectiles\ammunition\_firing.dm" -#include "code\modules\projectiles\ammunition\ballistic\lmg.dm" -#include "code\modules\projectiles\ammunition\ballistic\pistol.dm" -#include "code\modules\projectiles\ammunition\ballistic\revolver.dm" -#include "code\modules\projectiles\ammunition\ballistic\rifle.dm" -#include "code\modules\projectiles\ammunition\ballistic\shotgun.dm" -#include "code\modules\projectiles\ammunition\ballistic\smg.dm" -#include "code\modules\projectiles\ammunition\ballistic\sniper.dm" -#include "code\modules\projectiles\ammunition\caseless\_caseless.dm" -#include "code\modules\projectiles\ammunition\caseless\foam.dm" -#include "code\modules\projectiles\ammunition\caseless\misc.dm" -#include "code\modules\projectiles\ammunition\caseless\rocket.dm" -#include "code\modules\projectiles\ammunition\energy\_energy.dm" -#include "code\modules\projectiles\ammunition\energy\ebow.dm" -#include "code\modules\projectiles\ammunition\energy\laser.dm" -#include "code\modules\projectiles\ammunition\energy\lmg.dm" -#include "code\modules\projectiles\ammunition\energy\plasma.dm" -#include "code\modules\projectiles\ammunition\energy\special.dm" -#include "code\modules\projectiles\ammunition\energy\stun.dm" -#include "code\modules\projectiles\ammunition\special\magic.dm" -#include "code\modules\projectiles\ammunition\special\syringe.dm" -#include "code\modules\projectiles\boxes_magazines\_box_magazine.dm" -#include "code\modules\projectiles\boxes_magazines\ammo_boxes.dm" -#include "code\modules\projectiles\boxes_magazines\external\grenade.dm" -#include "code\modules\projectiles\boxes_magazines\external\lmg.dm" -#include "code\modules\projectiles\boxes_magazines\external\pistol.dm" -#include "code\modules\projectiles\boxes_magazines\external\rechargable.dm" -#include "code\modules\projectiles\boxes_magazines\external\rifle.dm" -#include "code\modules\projectiles\boxes_magazines\external\shotgun.dm" -#include "code\modules\projectiles\boxes_magazines\external\smg.dm" -#include "code\modules\projectiles\boxes_magazines\external\sniper.dm" -#include "code\modules\projectiles\boxes_magazines\external\toy.dm" -#include "code\modules\projectiles\boxes_magazines\internal\_cylinder.dm" +#include "code\modules\projectiles\boxes_magazines\_ammo_box.dm" #include "code\modules\projectiles\boxes_magazines\internal\_internal.dm" -#include "code\modules\projectiles\boxes_magazines\internal\grenade.dm" -#include "code\modules\projectiles\boxes_magazines\internal\misc.dm" -#include "code\modules\projectiles\boxes_magazines\internal\revolver.dm" -#include "code\modules\projectiles\boxes_magazines\internal\rifle.dm" -#include "code\modules\projectiles\boxes_magazines\internal\shotgun.dm" -#include "code\modules\projectiles\boxes_magazines\internal\toy.dm" #include "code\modules\projectiles\guns\ballistic.dm" -#include "code\modules\projectiles\guns\magic.dm" -#include "code\modules\projectiles\guns\ballistic\automatic.dm" -#include "code\modules\projectiles\guns\ballistic\laser_gatling.dm" #include "code\modules\projectiles\guns\ballistic\launchers.dm" -#include "code\modules\projectiles\guns\ballistic\pistol.dm" #include "code\modules\projectiles\guns\ballistic\revolver.dm" -#include "code\modules\projectiles\guns\ballistic\rifle.dm" -#include "code\modules\projectiles\guns\ballistic\shotgun.dm" -#include "code\modules\projectiles\guns\ballistic\toy.dm" -#include "code\modules\projectiles\guns\magic\staff.dm" -#include "code\modules\projectiles\guns\magic\wand.dm" -#include "code\modules\projectiles\guns\misc\chem_gun.dm" -#include "code\modules\projectiles\guns\misc\grenade_launcher.dm" -#include "code\modules\projectiles\guns\misc\medbeam.dm" -#include "code\modules\projectiles\guns\misc\syringe_gun.dm" #include "code\modules\projectiles\projectile\beams.dm" #include "code\modules\projectiles\projectile\bullets.dm" #include "code\modules\projectiles\projectile\magic.dm" -#include "code\modules\projectiles\projectile\bullets\_incendiary.dm" -#include "code\modules\projectiles\projectile\bullets\dart_syringe.dm" -#include "code\modules\projectiles\projectile\bullets\dnainjector.dm" -#include "code\modules\projectiles\projectile\bullets\grenade.dm" -#include "code\modules\projectiles\projectile\bullets\lmg.dm" -#include "code\modules\projectiles\projectile\bullets\pistol.dm" -#include "code\modules\projectiles\projectile\bullets\revolver.dm" -#include "code\modules\projectiles\projectile\bullets\rifle.dm" -#include "code\modules\projectiles\projectile\bullets\shotgun.dm" -#include "code\modules\projectiles\projectile\bullets\smg.dm" -#include "code\modules\projectiles\projectile\bullets\sniper.dm" -#include "code\modules\projectiles\projectile\bullets\special.dm" -#include "code\modules\projectiles\projectile\energy\_energy.dm" -#include "code\modules\projectiles\projectile\energy\ebow.dm" -#include "code\modules\projectiles\projectile\energy\misc.dm" -#include "code\modules\projectiles\projectile\energy\net_snare.dm" -#include "code\modules\projectiles\projectile\energy\nuclear_particle.dm" -#include "code\modules\projectiles\projectile\energy\stun.dm" #include "code\modules\projectiles\projectile\magic\spellcard.dm" #include "code\modules\projectiles\projectile\reusable\_reusable.dm" -#include "code\modules\projectiles\projectile\reusable\foam_dart.dm" -#include "code\modules\projectiles\projectile\special\curse.dm" -#include "code\modules\projectiles\projectile\special\floral.dm" -#include "code\modules\projectiles\projectile\special\hallucination.dm" -#include "code\modules\projectiles\projectile\special\ion.dm" -#include "code\modules\projectiles\projectile\special\meteor.dm" -#include "code\modules\projectiles\projectile\special\mindflayer.dm" -#include "code\modules\projectiles\projectile\special\neurotoxin.dm" -#include "code\modules\projectiles\projectile\special\plasma.dm" -#include "code\modules\projectiles\projectile\special\rocket.dm" -#include "code\modules\projectiles\projectile\special\temperature.dm" #include "code\modules\reagents\chem_splash.dm" #include "code\modules\reagents\reagent_containers.dm" -#include "code\modules\reagents\reagent_dispenser.dm" #include "code\modules\reagents\roguespill.dm" #include "code\modules\reagents\chemistry\colors.dm" #include "code\modules\reagents\chemistry\holder.dm" @@ -1950,7 +1596,6 @@ #include "code\modules\reagents\reagent_containers\patch.dm" #include "code\modules\reagents\reagent_containers\pill.dm" #include "code\modules\reagents\reagent_containers\powderspice.dm" -#include "code\modules\reagents\reagent_containers\spray.dm" #include "code\modules\reagents\reagent_containers\syringes.dm" #include "code\modules\roguetown\mapgen\ambushmarkers.dm" #include "code\modules\roguetown\mapgen\beach.dm" @@ -2048,22 +1693,17 @@ #include "code\modules\spells\roguetown\acolyte\pestra.dm" #include "code\modules\spells\spell_types\aimed.dm" #include "code\modules\spells\spell_types\area_teleport.dm" -#include "code\modules\spells\spell_types\barnyard.dm" #include "code\modules\spells\spell_types\bloodcrawl.dm" #include "code\modules\spells\spell_types\conjure.dm" -#include "code\modules\spells\spell_types\construct_spells.dm" #include "code\modules\spells\spell_types\curse.dm" -#include "code\modules\spells\spell_types\devil_boons.dm" #include "code\modules\spells\spell_types\emplosion.dm" #include "code\modules\spells\spell_types\ethereal_jaunt.dm" #include "code\modules\spells\spell_types\explosion.dm" #include "code\modules\spells\spell_types\forcewall.dm" #include "code\modules\spells\spell_types\genetic.dm" #include "code\modules\spells\spell_types\godhand.dm" -#include "code\modules\spells\spell_types\infinite_guns.dm" #include "code\modules\spells\spell_types\inflict_handler.dm" #include "code\modules\spells\spell_types\knock.dm" -#include "code\modules\spells\spell_types\lichdom.dm" #include "code\modules\spells\spell_types\lightning.dm" #include "code\modules\spells\spell_types\mime.dm" #include "code\modules\spells\spell_types\mind_transfer.dm" @@ -2084,7 +1724,6 @@ #include "code\modules\surgery\_surgery.dm" #include "code\modules\surgery\_surgery_step.dm" #include "code\modules\surgery\surgery_helpers.dm" -#include "code\modules\surgery\surgery_tools.dm" #include "code\modules\surgery\surgery_tools_rogue.dm" #include "code\modules\surgery\bodyparts\_bodyparts.dm" #include "code\modules\surgery\bodyparts\bodypart_dismemberment.dm" @@ -2096,10 +1735,6 @@ #include "code\modules\surgery\bodyparts\bodypart_features\features.dm" #include "code\modules\surgery\organs\_organ_dna.dm" #include "code\modules\surgery\organs\appendix.dm" -#include "code\modules\surgery\organs\augments_chest.dm" -#include "code\modules\surgery\organs\augments_eyes.dm" -#include "code\modules\surgery\organs\augments_internal.dm" -#include "code\modules\surgery\organs\autosurgeon.dm" #include "code\modules\surgery\organs\brain.dm" #include "code\modules\surgery\organs\ears.dm" #include "code\modules\surgery\organs\eyes.dm" @@ -2148,19 +1783,10 @@ #include "code\modules\underworld\underworld.dm" #include "code\modules\unit_tests\_unit_tests.dm" #include "code\modules\vehicles\_vehicle.dm" -#include "code\modules\vehicles\bicycle.dm" -#include "code\modules\vehicles\lavaboat.dm" -#include "code\modules\vehicles\pimpin_ride.dm" #include "code\modules\vehicles\ridden.dm" -#include "code\modules\vehicles\scooter.dm" #include "code\modules\vehicles\sealed.dm" -#include "code\modules\vehicles\secway.dm" -#include "code\modules\vehicles\speedbike.dm" #include "code\modules\vehicles\vehicle_actions.dm" #include "code\modules\vehicles\vehicle_key.dm" -#include "code\modules\vehicles\wheelchair.dm" -#include "code\modules\vehicles\cars\car.dm" -#include "code\modules\vehicles\cars\clowncar.dm" #include "code\modules\zombie\items.dm" #include "code\modules\zombie\organs.dm" #include "interface\interface.dm" diff --git a/tools/UpdatePaths/Scripts/65504_floor_repathing.txt b/tools/UpdatePaths/Scripts/65504_floor_repathing.txt index 6af8bd10fa..70cbcbf79d 100644 --- a/tools/UpdatePaths/Scripts/65504_floor_repathing.txt +++ b/tools/UpdatePaths/Scripts/65504_floor_repathing.txt @@ -1,5 +1,5 @@ /turf/open/floor/plating/dirt : /turf/open/misc/dirt{@OLD} -/turf/open/floor/plating/dirt/dark : /turf/open/misc/dirt/dark{@OLD} +/turf/open/floor/rogue/dirt : /turf/open/misc/dirt/dark{@OLD} /turf/open/floor/plating/dirt/jungle : /turf/open/misc/dirt/jungle{@OLD} /turf/open/floor/plating/dirt/jungle/dark : /turf/open/misc/dirt/jungle/dark{@OLD} /turf/open/floor/plating/dirt/jungle/wasteland : /turf/open/misc/dirt/jungle/wasteland{@OLD}