diff --git a/_maps/RandomZLevels/Academy.dmm b/_maps/RandomZLevels/Academy.dmm index a7fab7df3a7..4d715cb369e 100644 --- a/_maps/RandomZLevels/Academy.dmm +++ b/_maps/RandomZLevels/Academy.dmm @@ -34,7 +34,7 @@ "aH" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster) "aI" = (/obj/structure/cult/tome,/obj/item/weapon/staff,/turf/simulated/floor/wood,/area/awaymission/academy/headmaster) "aJ" = (/obj/structure/stool/bed/chair/wood/wings{dir = 8},/turf/simulated/floor/wood,/area/awaymission/academy/headmaster) -"aK" = (/obj/item/clothing/suit/space/rig/wizard,/obj/item/clothing/head/helmet/space/rig/wizard,/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/awaymission/academy/headmaster) +"aK" = (/obj/item/clothing/suit/space/hardsuit/wizard,/obj/item/clothing/head/helmet/space/hardsuit/wizard,/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/awaymission/academy/headmaster) "aL" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/briefcase,/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster) "aM" = (/obj/structure/table/reinforced,/obj/item/weapon/coin/plasma,/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster) "aN" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster) @@ -126,7 +126,7 @@ "cv" = (/turf/simulated/floor/plating,/area/awaymission/academy/headmaster) "cw" = (/obj/machinery/door/window{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating,/area/awaymission/academy/headmaster) "cx" = (/obj/structure/table,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/academy/headmaster) -"cy" = (/obj/structure/table,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/item/weapon/cable_coil/random,/turf/simulated/floor,/area/awaymission/academy/classrooms) +"cy" = (/obj/structure/table,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/item/stack/cable_coil/random,/turf/simulated/floor,/area/awaymission/academy/classrooms) "cz" = (/turf/simulated/floor{icon_state = "red"; dir = 8},/area/awaymission/academy/classrooms) "cA" = (/obj/item/target,/turf/simulated/floor/engine,/area/awaymission/academy/classrooms) "cB" = (/turf/simulated/floor{icon_state = "red"; dir = 4},/area/awaymission/academy/classrooms) @@ -255,7 +255,7 @@ "eU" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor{dir = 8; icon_state = "chapel"},/area/awaymission/academy/classrooms) "eV" = (/obj/structure/mineral_door/wood,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/academy/classrooms) "eW" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor{icon_state = "escape"; dir = 6},/area/awaymission/academy/classrooms) -"eX" = (/obj/structure/table,/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/item/weapon/reagent_containers/food/snacks/spellburger,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/awaymission/academy/classrooms) +"eX" = (/obj/structure/table,/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/item/weapon/reagent_containers/food/snacks/burger/spell,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/awaymission/academy/classrooms) "eY" = (/turf/simulated/floor/plating{tag = "icon-warnplate (SOUTHWEST)"; icon_state = "warnplate"; dir = 10},/area/awaymission/academy) "eZ" = (/obj/structure/window/reinforced,/turf/simulated/floor,/area/awaymission/academy/classrooms) "fa" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/carpet,/area/awaymission/academy/classrooms) @@ -313,7 +313,7 @@ "ga" = (/obj/structure/table,/obj/item/weapon/pen/red,/turf/simulated/floor,/area/awaymission/academy/classrooms) "gb" = (/obj/structure/table,/obj/item/weapon/scalpel,/turf/simulated/floor{icon_state = "whitehall"; dir = 4},/area/awaymission/academy/classrooms) "gc" = (/obj/structure/stool/bed/chair/wood/normal,/turf/simulated/floor/wood,/area/awaymission/academy/classrooms) -"gd" = (/obj/structure/bookcase,/obj/item/weapon/book/manual/engineering_hacking,/turf/simulated/floor/wood,/area/awaymission/academy/classrooms) +"gd" = (/obj/structure/bookcase,/obj/item/weapon/book/manual/wiki/engineering_hacking,/turf/simulated/floor/wood,/area/awaymission/academy/classrooms) "ge" = (/obj/structure/bookcase,/turf/simulated/floor/wood,/area/awaymission/academy/classrooms) "gf" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/academy/academyaft) "gg" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft) @@ -344,7 +344,7 @@ "gF" = (/obj/structure/window/reinforced,/obj/item/ammo_casing,/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/awaymission/academy/classrooms) "gG" = (/mob/living/simple_animal/hostile/bear,/turf/simulated/floor/plating,/area/awaymission/academy/classrooms) "gH" = (/obj/structure/bookcase,/obj/item/weapon/book/manual/hydroponics_pod_people,/turf/simulated/floor/wood,/area/awaymission/academy/classrooms) -"gI" = (/obj/structure/bookcase,/obj/item/weapon/book/manual/barman_recipes,/obj/item/weapon/book/manual/security_space_law,/obj/item/weapon/book/manual/security_space_law,/turf/simulated/floor/wood,/area/awaymission/academy/classrooms) +"gI" = (/obj/structure/bookcase,/obj/item/weapon/book/manual/barman_recipes,/obj/item/weapon/book/manual/wiki/security_space_law,/obj/item/weapon/book/manual/wiki/security_space_law,/turf/simulated/floor/wood,/area/awaymission/academy/classrooms) "gJ" = (/obj/structure/stool,/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms) "gK" = (/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/awaymission/academy/classrooms) "gL" = (/obj/machinery/light/small{dir = 8},/mob/living/simple_animal/hostile/bear,/turf/simulated/floor/plating,/area/awaymission/academy/classrooms) @@ -403,18 +403,18 @@ "hM" = (/obj/structure/closet,/obj/item/candle,/obj/item/candle,/obj/item/weapon/storage/box/matches,/turf/simulated/floor,/area/awaymission/academy/academyaft) "hN" = (/obj/structure/closet,/obj/item/weapon/storage/belt/soulstone,/obj/item/clothing/under/schoolgirl,/turf/simulated/floor,/area/awaymission/academy/academyaft) "hO" = (/obj/structure/closet,/obj/item/clothing/under/blackskirt,/obj/item/clothing/glasses/regular,/turf/simulated/floor,/area/awaymission/academy/academyaft) -"hP" = (/obj/structure/closet,/obj/item/clothing/under/lightpurple,/obj/item/clothing/shoes/sandal,/turf/simulated/floor,/area/awaymission/academy/academyaft) +"hP" = (/obj/structure/closet,/obj/item/clothing/under/color/lightpurple,/obj/item/clothing/shoes/sandal,/turf/simulated/floor,/area/awaymission/academy/academyaft) "hQ" = (/obj/structure/closet,/obj/item/weapon/lipstick/random,/obj/item/clothing/under/schoolgirl,/turf/simulated/floor,/area/awaymission/academy/academyaft) "hR" = (/turf/simulated/floor/wood,/area/awaymission/academy/academyaft) -"hS" = (/obj/structure/closet,/obj/item/clothing/under/lightpurple,/obj/item/weapon/staff,/turf/simulated/floor,/area/awaymission/academy/academyaft) +"hS" = (/obj/structure/closet,/obj/item/clothing/under/color/lightpurple,/obj/item/weapon/staff,/turf/simulated/floor,/area/awaymission/academy/academyaft) "hT" = (/obj/structure/closet,/obj/item/weapon/storage/wallet/random,/obj/item/clothing/glasses/regular/hipster,/turf/simulated/floor,/area/awaymission/academy/academyaft) "hU" = (/obj/structure/closet,/obj/item/clothing/head/wizard/fake,/obj/item/clothing/suit/wizrobe/fake,/turf/simulated/floor,/area/awaymission/academy/academyaft) -"hV" = (/obj/structure/closet,/obj/item/weapon/reagent_containers/food/drinks/beer,/obj/item/clothing/under/purple,/obj/item/weapon/contraband/poster,/turf/simulated/floor,/area/awaymission/academy/academyaft) +"hV" = (/obj/structure/closet,/obj/item/weapon/reagent_containers/food/drinks/beer,/obj/item/clothing/under/color/purple,/obj/item/weapon/contraband/poster,/turf/simulated/floor,/area/awaymission/academy/academyaft) "hW" = (/obj/structure/closet,/obj/item/weapon/storage/box/snappops,/obj/item/weapon/storage/backpack,/obj/item/weapon/paper{info = "Current Grade: F. Educator's Notes: No improvement shown despite multiple private lessons. Suggest additional tutilage."; name = "Pyromancy Evaluation"},/turf/simulated/floor,/area/awaymission/academy/academyaft) "hX" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft) "hY" = (/obj/effect/decal/cleanable/oil,/turf/simulated/floor,/area/awaymission/academy/academyaft) "hZ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor,/area/awaymission/academy/academyaft) -"ia" = (/obj/item/weapon/cable_coil/random,/turf/simulated/floor{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft) +"ia" = (/obj/item/stack/cable_coil/random,/turf/simulated/floor{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft) "ib" = (/obj/structure/rack,/obj/item/stack/sheet/mineral/plasma{amount = 50},/turf/simulated/floor{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft) "ic" = (/turf/simulated/floor/grass,/area/awaymission/academy/academyaft) "id" = (/obj/structure/rack,/obj/item/weapon/circuitboard/telecomms/broadcaster,/obj/item/weapon/circuitboard/telecomms/receiver,/obj/item/weapon/circuitboard/telecomms/relay,/turf/simulated/floor{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft) @@ -442,7 +442,7 @@ "iz" = (/obj/machinery/power/port_gen/pacman,/turf/simulated/floor{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft) "iA" = (/obj/structure/toilet{dir = 8},/obj/machinery/light/small{dir = 1},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/awaymission/academy/academyaft) "iB" = (/obj/item/weapon/paper,/turf/simulated/floor/wood,/area/awaymission/academy/academyaft) -"iC" = (/obj/item/weapon/cable_coil/random,/turf/simulated/floor,/area/awaymission/academy/academyaft) +"iC" = (/obj/item/stack/cable_coil/random,/turf/simulated/floor,/area/awaymission/academy/academyaft) "iD" = (/obj/machinery/door/airlock/maintenance_hatch,/turf/simulated/floor/plating,/area/awaymission/academy/academyaft) "iE" = (/obj/item/device/multitool,/turf/simulated/floor/engine,/area/awaymission/academy/academyaft) "iF" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/engine,/area/awaymission/academy/academyaft) @@ -517,7 +517,7 @@ "jW" = (/turf/simulated/floor/plating,/area/awaymission/academy/academygate) "jX" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/carpet,/area/awaymission/academy/academygate) "jY" = (/obj/machinery/power/apc{dir = 1; environ = 3; equipment = 3; locked = 0; req_access = ""},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/carpet,/area/awaymission/academy/academygate) -"jZ" = (/obj/item/weapon/cable_coil/random,/turf/simulated/floor/plating,/area/awaymission/academy/academygate) +"jZ" = (/obj/item/stack/cable_coil/random,/turf/simulated/floor/plating,/area/awaymission/academy/academygate) "ka" = (/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating,/area/awaymission/academy/academygate) "kb" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plating,/area/awaymission/academy/academygate) "kc" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/carpet,/area/awaymission/academy/academygate) diff --git a/_maps/RandomZLevels/blackmarketpackers.dmm b/_maps/RandomZLevels/blackmarketpackers.dmm index f127a7c95d0..12f9ed60419 100644 --- a/_maps/RandomZLevels/blackmarketpackers.dmm +++ b/_maps/RandomZLevels/blackmarketpackers.dmm @@ -291,7 +291,7 @@ "fE" = (/turf/simulated/floor{icon_state = "bar"},/area/awaymission/BMPship/Aft) "fF" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/plating,/area/awaymission/BMPship/Aft) "fG" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"},/turf/simulated/shuttle/plating,/area/awaymission/BMPship/Aft) -"fH" = (/obj/structure/rack,/obj/item/weapon/cell/high,/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/awaymission/BMPship/Aft) +"fH" = (/obj/structure/rack,/obj/item/weapon/stock_parts/cell/high,/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/awaymission/BMPship/Aft) "fI" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/awaymission/BMPship/Aft) "fJ" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/BMPship/Fore) "fK" = (/turf/simulated/floor{tag = "icon-carpetside (SOUTHWEST)"; icon_state = "carpetside"; dir = 10},/area/awaymission/BMPship/Fore) @@ -320,7 +320,7 @@ "gh" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/BMPship/Aft) "gi" = (/obj/structure/mopbucket,/turf/simulated/shuttle/plating,/area/awaymission/BMPship/Aft) "gj" = (/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/kitchenknife,/turf/simulated/shuttle/plating,/area/awaymission/BMPship/Aft) -"gk" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/item/weapon/cell/high,/turf/simulated/floor,/area/awaymission/BMPship/Aft) +"gk" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/item/weapon/stock_parts/cell/high,/turf/simulated/floor,/area/awaymission/BMPship/Aft) "gl" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s5"; icon_state = "swall_s5"; dir = 2},/area/awaymission/BMPship/Fore) "gm" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/floor{tag = "icon-carpetside"; icon_state = "carpetside"},/area/awaymission/BMPship/Fore) "gn" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/door/unpowered/shuttle,/turf/simulated/floor{tag = "icon-carpetside"; icon_state = "carpetside"},/area/awaymission/BMPship/Fore) @@ -335,7 +335,7 @@ "gw" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/shuttle/plating,/area/awaymission/BMPship/Aft) "gx" = (/obj/structure/window/reinforced,/turf/simulated/shuttle/plating,/area/awaymission/BMPship/Aft) "gy" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/shuttle/plating,/area/awaymission/BMPship/Aft) -"gz" = (/obj/item/weapon/cable_coil,/turf/simulated/floor/plating,/area/awaymission/BMPship/Aft) +"gz" = (/obj/item/stack/cable_coil,/turf/simulated/floor/plating,/area/awaymission/BMPship/Aft) "gA" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/awaymission/BMPship/Aft) "gB" = (/obj/item/stack/sheet/mineral/uranium{amount = 50},/turf/simulated/floor/engine,/area/awaymission/BMPship/Aft) "gC" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s5"; icon_state = "swall_s5"; dir = 2},/area/space) @@ -357,7 +357,7 @@ "gS" = (/turf/simulated/floor/plating/airless{tag = "icon-platingdmg2"; icon_state = "platingdmg2"},/area/awaymission/BMPship/Fore) "gT" = (/obj/item/weapon/shard,/turf/simulated/floor/plating/airless{tag = "icon-platingdmg1"; icon_state = "platingdmg1"},/area/awaymission/BMPship/Fore) "gU" = (/obj/structure/stool,/turf/simulated/floor/plating/airless{tag = "icon-platingdmg3"; icon_state = "platingdmg3"},/area/awaymission/BMPship/Fore) -"gV" = (/obj/item/weapon/cable_coil{amount = 5},/turf/simulated/floor/plating/airless,/area/awaymission/BMPship/Fore) +"gV" = (/obj/item/stack/cable_coil{amount = 5},/turf/simulated/floor/plating/airless,/area/awaymission/BMPship/Fore) "gW" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating/airless,/area/awaymission/BMPship/Fore) "gX" = (/turf/simulated/floor{tag = "icon-plating"; icon_state = "plating"},/area/awaymission/BMPship/Midship) "gY" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/BMPship/Midship) @@ -405,7 +405,7 @@ "hO" = (/turf/simulated/floor/plating{tag = "icon-platingdmg3"; icon_state = "platingdmg3"},/area/awaymission) "hP" = (/obj/item/apc_frame,/turf/simulated/floor/plating/airless,/area/awaymission) "hQ" = (/obj/structure/ore_box,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating/airless,/area/awaymission) -"hR" = (/obj/item/weapon/cable_coil{amount = 5},/turf/simulated/floor/plating/airless,/area/awaymission) +"hR" = (/obj/item/stack/cable_coil{amount = 5},/turf/simulated/floor/plating/airless,/area/awaymission) "hS" = (/obj/structure/ore_box,/turf/simulated/floor/plating/airless,/area/awaymission) "hT" = (/obj/machinery/computer/arcade,/turf/simulated/floor,/area/awaymission/BMPship/Aft) "hU" = (/obj/effect/decal/remains/human,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor,/area/awaymission/BMPship/Aft) diff --git a/_maps/RandomZLevels/centcomAway.dmm b/_maps/RandomZLevels/centcomAway.dmm index e47775466b6..bacbe6b4aa9 100644 --- a/_maps/RandomZLevels/centcomAway.dmm +++ b/_maps/RandomZLevels/centcomAway.dmm @@ -602,12 +602,12 @@ "lD" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{pixel_x = -28},/turf/simulated/floor{icon_state = "white"},/area/awaymission/centcomAway/thunderdome) "lE" = (/turf/simulated/floor{icon_state = "white"},/area/awaymission/centcomAway/thunderdome) "lF" = (/obj/structure/closet/secure_closet/personal,/turf/simulated/floor{icon_state = "white"},/area/awaymission/centcomAway/thunderdome) -"lG" = (/obj/structure/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/brown,/obj/item/clothing/suit/armor/tdome/red,/obj/item/clothing/head/helmet/thunderdome,/obj/item/weapon/hatchet,/obj/item/weapon/shield/riot,/turf/simulated/floor{icon_state = "dark"},/area/awaymission/centcomAway/thunderdome) +"lG" = (/obj/structure/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/sneakers/brown,/obj/item/clothing/suit/armor/tdome/red,/obj/item/clothing/head/helmet/thunderdome,/obj/item/weapon/hatchet,/obj/item/weapon/shield/riot,/turf/simulated/floor{icon_state = "dark"},/area/awaymission/centcomAway/thunderdome) "lH" = (/turf/simulated/floor{icon_state = "dark"},/area/awaymission/centcomAway/thunderdome) "lI" = (/obj/machinery/recharger{pixel_y = 4},/turf/simulated/floor/plating,/area/awaymission/centcomAway/thunderdome) "lJ" = (/obj/machinery/door/poddoor{id = "XCCtdome"; name = "XCC Thunderdome"},/turf/simulated/floor{icon_state = "delivery"},/area/awaymission/centcomAway/thunderdome) "lK" = (/obj/machinery/igniter,/turf/simulated/floor{icon_state = "floor"},/area/awaymission/centcomAway/thunderdome) -"lL" = (/obj/structure/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/brown,/obj/item/clothing/suit/armor/tdome/green,/obj/item/clothing/head/helmet/thunderdome,/obj/item/weapon/hatchet,/obj/item/weapon/shield/riot,/turf/simulated/floor{icon_state = "dark"},/area/awaymission/centcomAway/thunderdome) +"lL" = (/obj/structure/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/sneakers/brown,/obj/item/clothing/suit/armor/tdome/green,/obj/item/clothing/head/helmet/thunderdome,/obj/item/weapon/hatchet,/obj/item/weapon/shield/riot,/turf/simulated/floor{icon_state = "dark"},/area/awaymission/centcomAway/thunderdome) "lM" = (/obj/structure/table/reinforced,/obj/item/device/taperecorder,/obj/item/device/tape/random,/turf/simulated/floor{icon_state = "floor"},/area/awaymission/centcomAway/general) "lN" = (/obj/structure/mirror{pixel_x = 28},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor{icon_state = "white"},/area/awaymission/centcomAway/thunderdome) "lO" = (/obj/machinery/door/airlock/centcom{name = "Centcom Security"; opacity = 1; req_access_txt = "101"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/centcomAway/courtroom) diff --git a/_maps/RandomZLevels/challenge.dmm b/_maps/RandomZLevels/challenge.dmm index 5e560a3c08d..a80f1112962 100644 --- a/_maps/RandomZLevels/challenge.dmm +++ b/_maps/RandomZLevels/challenge.dmm @@ -102,7 +102,7 @@ "bX" = (/obj/machinery/door_control{id = "challenge"; name = "Gateway Lockdown"; pixel_x = -4; pixel_y = 26; req_access_txt = "0"},/turf/simulated/floor/carpet,/area/awaymission/challenge/end) "bY" = (/turf/simulated/floor/carpet,/area/awaymission/challenge/end) "bZ" = (/obj/structure/mirror{pixel_y = 28},/turf/simulated/floor/wood,/area/awaymission/challenge/end) -"ca" = (/obj/machinery/light{dir = 1},/obj/structure/rack,/obj/item/clothing/suit/armor/swat,/obj/item/clothing/head/helmet/space/deathsquad,/turf/simulated/floor/wood,/area/awaymission/challenge/end) +"ca" = (/obj/machinery/light{dir = 1},/obj/structure/rack,/obj/item/clothing/suit/armor/heavy,/obj/item/clothing/head/helmet/space/deathsquad,/turf/simulated/floor/wood,/area/awaymission/challenge/end) "cb" = (/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/challenge/end) "cc" = (/obj/structure/stool/bed/chair{dir = 1},/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = 28},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/challenge/end) "cd" = (/turf/simulated/floor{icon_state = "dark"},/area/awaymission/challenge/end) @@ -121,7 +121,7 @@ "cq" = (/obj/structure/table/woodentable,/obj/item/weapon/melee/chainofcommand,/obj/item/weapon/stamp,/turf/simulated/floor/carpet,/area/awaymission/challenge/end) "cr" = (/obj/structure/table/woodentable,/obj/item/weapon/paper{info = "Congratulations,

Your station has been selected to carry out the Gateway Project.

The equipment will be shipped to you at the start of the next quarter.
You are to prepare a secure location to house the equipment as outlined in the attached documents.

--Nanotrasen Blue Space Research"; name = "Confidential Correspondence, Pg 1"; pixel_x = 0; pixel_y = 0},/obj/item/weapon/folder/blue,/turf/simulated/floor/carpet,/area/awaymission/challenge/end) "cs" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green{pixel_x = 1; pixel_y = 5},/turf/simulated/floor/carpet,/area/awaymission/challenge/end) -"ct" = (/obj/structure/rack,/obj/item/weapon/gun/projectile/automatic/silenced,/turf/simulated/floor/wood,/area/awaymission/challenge/end) +"ct" = (/obj/structure/rack,/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/silenced,/turf/simulated/floor/wood,/area/awaymission/challenge/end) "cu" = (/mob/living/simple_animal/hostile/syndicate/melee,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/challenge/end) "cv" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor/wood,/area/awaymission/challenge/end) "cw" = (/obj/structure/rack,/obj/item/weapon/gun/projectile/automatic/l6_saw,/turf/simulated/floor/wood,/area/awaymission/challenge/end) diff --git a/_maps/RandomZLevels/example.dmm b/_maps/RandomZLevels/example.dmm index e1920ee74b8..01c640a1847 100644 --- a/_maps/RandomZLevels/example.dmm +++ b/_maps/RandomZLevels/example.dmm @@ -89,7 +89,7 @@ "bK" = (/obj/structure/stool/bed/chair/wood/normal{tag = "icon-wooden_chair (EAST)"; icon_state = "wooden_chair"; dir = 4},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/example) "bL" = (/obj/structure/table/woodentable,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/example) "bM" = (/obj/structure/stool/bed/chair/wood/normal{tag = "icon-wooden_chair (WEST)"; icon_state = "wooden_chair"; dir = 8},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/example) -"bN" = (/obj/structure/bookcase{density = 0; pixel_y = 32},/obj/item/weapon/book/manual/security_space_law,/obj/item/weapon/book/manual/security_space_law,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/example) +"bN" = (/obj/structure/bookcase{density = 0; pixel_y = 32},/obj/item/weapon/book/manual/wiki/security_space_law,/obj/item/weapon/book/manual/wiki/security_space_law,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/example) "bO" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/drinks/bottle/wine,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/example) "bP" = (/obj/structure/stool/bed/chair/wood/normal{tag = "icon-wooden_chair (NORTH)"; icon_state = "wooden_chair"; dir = 1},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/example) "bQ" = (/obj/machinery/vending/snack,/turf/simulated/floor,/area/awaymission/example) @@ -101,7 +101,7 @@ "bW" = (/obj/structure/table,/obj/item/device/analyzer,/turf/simulated/floor,/area/awaymission/example) "bX" = (/obj/structure/table,/obj/item/weapon/rack_parts,/turf/simulated/floor,/area/awaymission/example) "bY" = (/obj/structure/table,/obj/item/device/toner,/turf/simulated/floor,/area/awaymission/example) -"bZ" = (/obj/structure/table,/obj/item/weapon/wirecutters,/obj/item/weapon/cable_coil/yellow,/turf/simulated/floor,/area/awaymission/example) +"bZ" = (/obj/structure/table,/obj/item/weapon/wirecutters,/obj/item/stack/cable_coil/yellow,/turf/simulated/floor,/area/awaymission/example) "ca" = (/obj/structure/table,/obj/item/weapon/wrench,/turf/simulated/floor,/area/awaymission/example) "cb" = (/obj/machinery/vending/assist,/turf/simulated/floor,/area/awaymission/example) "cc" = (/obj/structure/ladder{id = "example"},/turf/simulated/floor/plating,/area/awaymission/example) @@ -123,7 +123,7 @@ "cs" = (/obj/effect/landmark{name = "awaystart"},/obj/machinery/light_construct/small{tag = "icon-bulb-construct-stage1 (WEST)"; icon_state = "bulb-construct-stage1"; dir = 8},/turf/simulated/floor,/area/awaymission/example) "ct" = (/obj/effect/landmark{name = "awaystart"},/obj/item/weapon/mop,/turf/simulated/floor,/area/awaymission/example) "cu" = (/obj/structure/closet,/turf/simulated/floor,/area/awaymission/example) -"cv" = (/obj/structure/table,/obj/item/weapon/cell/high,/turf/simulated/floor,/area/awaymission/example) +"cv" = (/obj/structure/table,/obj/item/weapon/stock_parts/cell/high,/turf/simulated/floor,/area/awaymission/example) "cw" = (/obj/structure/stool,/obj/effect/landmark{name = "awaystart"},/turf/simulated/floor,/area/awaymission/example) "cx" = (/obj/structure/mopbucket,/obj/machinery/light_construct/small{dir = 4},/turf/simulated/floor,/area/awaymission/example) diff --git a/_maps/RandomZLevels/listeningpost.dmm b/_maps/RandomZLevels/listeningpost.dmm index 4edd744fc31..0848187f530 100644 --- a/_maps/RandomZLevels/listeningpost.dmm +++ b/_maps/RandomZLevels/listeningpost.dmm @@ -15,7 +15,7 @@ "o" = (/obj/structure/table,/obj/item/weapon/paper{info = "Nothing of interest to report."; name = "november report"},/obj/item/weapon/pen,/turf/simulated/floor,/area/awaymission/listeningpost) "p" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; freerange = 1; frequency = 1213; name = "Syndicate Intercom"; pixel_x = 32; subspace_transmission = 1; syndie = 1},/turf/simulated/floor,/area/awaymission/listeningpost) "q" = (/obj/structure/rack,/obj/item/clothing/suit/space/syndicate,/obj/item/clothing/mask/gas,/obj/item/clothing/head/helmet/space/syndicate,/turf/simulated/floor,/area/awaymission/listeningpost) -"r" = (/obj/machinery/door/airlock,/obj/structure/safe/floor,/obj/item/weapon/paper{info = "I wonder how much longer they will accept my empty reports. They will cancel the case soon without results. When the pickup comes, I will tell them I have lost faith in our cause, and beg them to consider a diplomatic solution. How many nuclear teams have been dispatched with those nukes? I must try and prevent more from ever being sent. If they will not listen to reason, I will detonate the warehouse myself. Maybe some day in the immediate future, space will be peaceful, though I don't intend to live to see it. And that is why I write this down- it is my sacrifice that stabilised your worlds, traveller. Spare a thought for me, and please attempt to prevent nuclear proliferation, should it ever rear it's ugly head again. -Donk Co. Operative #451"; name = "odd report"},/obj/item/weapon/gun/projectile/automatic/silenced,/obj/item/weapon/silencer,/turf/simulated/floor,/area/awaymission/listeningpost) +"r" = (/obj/machinery/door/airlock,/obj/structure/safe/floor,/obj/item/weapon/paper{info = "I wonder how much longer they will accept my empty reports. They will cancel the case soon without results. When the pickup comes, I will tell them I have lost faith in our cause, and beg them to consider a diplomatic solution. How many nuclear teams have been dispatched with those nukes? I must try and prevent more from ever being sent. If they will not listen to reason, I will detonate the warehouse myself. Maybe some day in the immediate future, space will be peaceful, though I don't intend to live to see it. And that is why I write this down- it is my sacrifice that stabilised your worlds, traveller. Spare a thought for me, and please attempt to prevent nuclear proliferation, should it ever rear it's ugly head again. -Donk Co. Operative #451"; name = "odd report"},/obj/item/weapon/gun/projectile/automatic/pistol,/turf/simulated/floor,/area/awaymission/listeningpost) "s" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/mineral,/area/mine/unexplored) "t" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/mineral,/area/mine/unexplored) "u" = (/obj/structure/disposaloutlet{dir = 4},/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/plating/airless,/area/space) diff --git a/_maps/RandomZLevels/spacebattle.dmm b/_maps/RandomZLevels/spacebattle.dmm index d156e3644fa..2bc373f7cf5 100644 --- a/_maps/RandomZLevels/spacebattle.dmm +++ b/_maps/RandomZLevels/spacebattle.dmm @@ -10,21 +10,21 @@ "aj" = (/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate2) "ak" = (/obj/machinery/door/airlock/external,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate2) "al" = (/mob/living/simple_animal/hostile/syndicate/ranged,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate2) -"am" = (/obj/structure/table/reinforced,/obj/item/clothing/suit/space/rig/syndi,/obj/item/clothing/head/helmet/space/rig/syndi,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate2) +"am" = (/obj/structure/table/reinforced,/obj/item/clothing/suit/space/hardsuit/syndi,/obj/item/clothing/head/helmet/space/hardsuit/syndi,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate2) "an" = (/obj/structure/table/reinforced,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate2) "ao" = (/obj/machinery/sleeper,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate2) "ap" = (/obj/effect/landmark{name = "awaystart"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate2) "aq" = (/mob/living/simple_animal/hostile/syndicate/melee,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate2) "ar" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate2) "as" = (/obj/structure/table/reinforced,/obj/item/weapon/grenade/empgrenade,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate2) -"at" = (/obj/structure/table/reinforced,/obj/item/ammo_casing/a12mm,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate2) +"at" = (/obj/structure/table/reinforced,/obj/item/ammo_casing/c10mm,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate2) "au" = (/obj/structure/table/reinforced,/obj/item/weapon/gun/projectile/automatic/c20r,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate2) "av" = (/turf/space,/turf/simulated/shuttle/wall{dir = 8; icon_state = "diagonalWall3"},/area/awaymission/spacebattle/syndicate3) "aw" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion_r (NORTH)"; icon_state = "propulsion_r"; dir = 1},/turf/space,/area/awaymission/spacebattle/syndicate3) "ax" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion (NORTH)"; icon_state = "propulsion"; dir = 1},/turf/space,/area/awaymission/spacebattle/syndicate3) "ay" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion_l (NORTH)"; icon_state = "propulsion_l"; dir = 1},/turf/space,/area/awaymission/spacebattle/syndicate3) "az" = (/turf/space,/turf/simulated/shuttle/wall{dir = 1; icon_state = "diagonalWall3"},/area/awaymission/spacebattle/syndicate3) -"aA" = (/obj/structure/table/reinforced,/obj/item/weapon/gun/projectile/automatic/silenced,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate2) +"aA" = (/obj/structure/table/reinforced,/obj/item/weapon/gun/projectile/automatic/pistol,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate2) "aB" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/awaymission/spacebattle/syndicate3) "aC" = (/obj/structure/shuttle/engine/heater{tag = "icon-heater (NORTH)"; icon_state = "heater"; dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating/airless,/area/awaymission/spacebattle/syndicate3) "aD" = (/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate3) @@ -33,7 +33,7 @@ "aG" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "diagonalWall3"},/area/awaymission/spacebattle/syndicate2) "aH" = (/obj/structure/stool/bed/chair,/mob/living/simple_animal/hostile/syndicate,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate2) "aI" = (/turf/space,/turf/simulated/shuttle/wall{dir = 4; icon_state = "diagonalWall3"},/area/awaymission/spacebattle/syndicate2) -"aJ" = (/obj/structure/table/reinforced,/obj/item/clothing/suit/space/rig/syndi,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate3) +"aJ" = (/obj/structure/table/reinforced,/obj/item/clothing/suit/space/hardsuit/syndi,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate3) "aK" = (/obj/structure/table/reinforced,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate3) "aL" = (/obj/structure/table/reinforced,/obj/item/weapon/gun/projectile/automatic/deagle,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate3) "aM" = (/obj/machinery/computer/shuttle,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate2) @@ -57,7 +57,7 @@ "be" = (/obj/effect/landmark{name = "awaystart"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate1) "bf" = (/obj/machinery/porta_turret{dir = 8; emagged = 1; installation = /obj/item/weapon/gun/energy/lasercannon},/turf/simulated/floor/plating,/area/awaymission/spacebattle/syndicate2) "bg" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate3) -"bh" = (/obj/structure/table/reinforced,/obj/item/clothing/suit/space/rig/syndi,/obj/item/clothing/head/helmet/space/rig/syndi,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate1) +"bh" = (/obj/structure/table/reinforced,/obj/item/clothing/suit/space/hardsuit/syndi,/obj/item/clothing/head/helmet/space/hardsuit/syndi,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate1) "bi" = (/obj/structure/table/reinforced,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate1) "bj" = (/obj/structure/table/reinforced,/obj/item/clothing/gloves/combat,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate1) "bk" = (/obj/machinery/sleeper,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate1) @@ -126,9 +126,9 @@ "cv" = (/turf/simulated/shuttle/wall{tag = "icon-swallc1"; icon_state = "swallc1"},/area/awaymission/spacebattle/cruiser) "cw" = (/turf/simulated/shuttle/wall{tag = "icon-swallc2"; icon_state = "swallc2"},/area/awaymission/spacebattle/cruiser) "cx" = (/obj/machinery/power/smes/magical{desc = "A high-capacity superconducting magnetic energy storage (SMES) unit."; name = "power storage unit"},/turf/simulated/floor,/area/awaymission/spacebattle/cruiser) -"cy" = (/obj/item/ammo_casing/a12mm,/obj/item/ammo_casing/a12mm,/turf/simulated/floor{tag = "icon-damaged2"; icon_state = "damaged2"},/area/awaymission/spacebattle/cruiser) -"cz" = (/obj/item/stack/sheet/metal,/obj/item/ammo_casing/a12mm,/turf/simulated/floor,/area/awaymission/spacebattle/cruiser) -"cA" = (/obj/item/ammo_casing/a12mm,/obj/item/ammo_casing/a12mm,/obj/item/ammo_casing/a12mm,/obj/item/ammo_casing/a12mm,/turf/simulated/floor,/area/awaymission/spacebattle/cruiser) +"cy" = (/obj/item/ammo_casing/c10mm,/obj/item/ammo_casing/c10mm,/turf/simulated/floor{tag = "icon-damaged2"; icon_state = "damaged2"},/area/awaymission/spacebattle/cruiser) +"cz" = (/obj/item/stack/sheet/metal,/obj/item/ammo_casing/c10mm,/turf/simulated/floor,/area/awaymission/spacebattle/cruiser) +"cA" = (/obj/item/ammo_casing/c10mm,/obj/item/ammo_casing/c10mm,/obj/item/ammo_casing/c10mm,/obj/item/ammo_casing/c10mm,/turf/simulated/floor,/area/awaymission/spacebattle/cruiser) "cB" = (/obj/structure/closet/cabinet,/turf/simulated/floor,/area/awaymission/spacebattle/cruiser) "cC" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet,/turf/simulated/floor,/area/awaymission/spacebattle/cruiser) "cD" = (/obj/machinery/vending/cigarette,/turf/simulated/floor,/area/awaymission/spacebattle/cruiser) @@ -141,8 +141,8 @@ "cK" = (/obj/structure/table/reinforced,/obj/machinery/microwave,/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/awaymission/spacebattle/cruiser) "cL" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/floor/plating,/area/awaymission/spacebattle/cruiser) "cM" = (/turf/simulated/floor/plating,/area/awaymission/spacebattle/cruiser) -"cN" = (/obj/item/ammo_casing/a12mm,/obj/item/ammo_casing/a12mm,/turf/simulated/floor,/area/awaymission/spacebattle/cruiser) -"cO" = (/obj/item/ammo_casing/a12mm,/turf/simulated/floor,/area/awaymission/spacebattle/cruiser) +"cN" = (/obj/item/ammo_casing/c10mm,/obj/item/ammo_casing/c10mm,/turf/simulated/floor,/area/awaymission/spacebattle/cruiser) +"cO" = (/obj/item/ammo_casing/c10mm,/turf/simulated/floor,/area/awaymission/spacebattle/cruiser) "cP" = (/turf/simulated/floor{tag = "icon-damaged2"; icon_state = "damaged2"},/area/awaymission/spacebattle/cruiser) "cQ" = (/obj/effect/landmark{name = "awaystart"},/turf/simulated/floor,/area/awaymission/spacebattle/cruiser) "cR" = (/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/awaymission/spacebattle/cruiser) @@ -276,9 +276,9 @@ "fp" = (/obj/structure/closet/crate,/obj/item/clothing/glasses/material,/turf/simulated/floor/plating,/area/awaymission/spacebattle/cruiser) "fq" = (/obj/structure/closet/crate,/obj/item/weapon/light/tube,/obj/item/weapon/light/tube,/obj/item/weapon/light/tube,/turf/simulated/floor/plating,/area/awaymission/spacebattle/cruiser) "fr" = (/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/awaymission/spacebattle/cruiser) -"fs" = (/obj/effect/landmark/corpse/syndicatesoldier,/obj/item/weapon/gun/projectile/automatic/c20r,/obj/item/ammo_casing/a12mm,/obj/item/ammo_casing/a12mm,/obj/effect/decal/cleanable/blood,/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/awaymission/spacebattle/cruiser) -"ft" = (/obj/item/ammo_casing/a12mm,/obj/item/ammo_casing/a12mm,/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/awaymission/spacebattle/cruiser) -"fu" = (/obj/effect/landmark/corpse/bridgeofficer{mobname = "Walter Strider"; name = "Walter Strider"},/obj/item/weapon/gun/projectile/shotgun/combat,/obj/item/ammo_casing/a12mm,/obj/item/ammo_casing/a12mm,/obj/effect/decal/cleanable/blood,/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/awaymission/spacebattle/cruiser) +"fs" = (/obj/effect/landmark/corpse/syndicatesoldier,/obj/item/weapon/gun/projectile/automatic/c20r,/obj/item/ammo_casing/c10mm,/obj/item/ammo_casing/c10mm,/obj/effect/decal/cleanable/blood,/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/awaymission/spacebattle/cruiser) +"ft" = (/obj/item/ammo_casing/c10mm,/obj/item/ammo_casing/c10mm,/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/awaymission/spacebattle/cruiser) +"fu" = (/obj/effect/landmark/corpse/bridgeofficer{mobname = "Walter Strider"; name = "Walter Strider"},/obj/item/weapon/gun/projectile/shotgun/combat,/obj/item/ammo_casing/c10mm,/obj/item/ammo_casing/c10mm,/obj/effect/decal/cleanable/blood,/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/awaymission/spacebattle/cruiser) "fv" = (/obj/item/ammo_casing/shotgun,/turf/simulated/floor{dir = 1; icon_state = "bluecorner"},/area/awaymission/spacebattle/cruiser) "fw" = (/obj/item/ammo_casing/a357,/obj/item/ammo_casing/a357,/obj/item/weapon/gun/projectile/revolver/mateba,/obj/effect/landmark/corpse/commander{mobname = "Aaron Bowden"; name = "Aaron Bowden"},/obj/effect/decal/cleanable/blood,/turf/simulated/floor,/area/awaymission/spacebattle/cruiser) "fx" = (/obj/structure/stool/bed/chair{dir = 4},/obj/effect/decal/cleanable/blood,/turf/simulated/floor,/area/awaymission/spacebattle/cruiser) @@ -297,11 +297,11 @@ "fK" = (/obj/structure/artilleryplaceholder{tag = "icon-12"; icon_state = "12"},/turf/simulated/floor/plating/airless,/area/awaymission/spacebattle/cruiser) "fL" = (/obj/structure/closet/crate/internals,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/storage/firstaid/o2,/turf/simulated/floor/plating,/area/awaymission/spacebattle/cruiser) "fM" = (/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/awaymission/spacebattle/cruiser) -"fN" = (/obj/item/ammo_casing/a12mm,/obj/item/ammo_casing/a12mm,/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/awaymission/spacebattle/cruiser) -"fO" = (/obj/item/ammo_casing/shotgun,/obj/item/ammo_casing/a12mm,/obj/item/ammo_casing/a12mm,/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/awaymission/spacebattle/cruiser) +"fN" = (/obj/item/ammo_casing/c10mm,/obj/item/ammo_casing/c10mm,/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/awaymission/spacebattle/cruiser) +"fO" = (/obj/item/ammo_casing/shotgun,/obj/item/ammo_casing/c10mm,/obj/item/ammo_casing/c10mm,/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/awaymission/spacebattle/cruiser) "fP" = (/obj/item/ammo_casing/shotgun,/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/awaymission/spacebattle/cruiser) -"fQ" = (/obj/effect/landmark/corpse/syndicatesoldier,/obj/item/weapon/gun/projectile/automatic/c20r,/obj/item/ammo_casing/a12mm,/obj/item/ammo_casing/a12mm,/obj/effect/decal/cleanable/blood,/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/awaymission/spacebattle/cruiser) -"fR" = (/obj/item/ammo_casing/a12mm,/turf/simulated/floor{dir = 8; icon_state = "bluecorner"},/area/awaymission/spacebattle/cruiser) +"fQ" = (/obj/effect/landmark/corpse/syndicatesoldier,/obj/item/weapon/gun/projectile/automatic/c20r,/obj/item/ammo_casing/c10mm,/obj/item/ammo_casing/c10mm,/obj/effect/decal/cleanable/blood,/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/awaymission/spacebattle/cruiser) +"fR" = (/obj/item/ammo_casing/c10mm,/turf/simulated/floor{dir = 8; icon_state = "bluecorner"},/area/awaymission/spacebattle/cruiser) "fS" = (/obj/machinery/computer/communications,/turf/simulated/floor{tag = "icon-bluefull"; icon_state = "bluefull"},/area/awaymission/spacebattle/cruiser) "fT" = (/obj/structure/artilleryplaceholder{tag = "icon-13"; icon_state = "13"},/turf/simulated/floor/plating/airless,/area/awaymission/spacebattle/cruiser) "fU" = (/obj/structure/artilleryplaceholder{tag = "icon-14"; icon_state = "14"},/turf/simulated/floor/plating/airless,/area/awaymission/spacebattle/cruiser) @@ -382,7 +382,7 @@ "hr" = (/obj/structure/largecrate,/turf/simulated/floor/plating,/area/awaymission/spacebattle/cruiser) "hs" = (/obj/structure/closet/crate/secure/plasma,/obj/item/weapon/tank/plasma,/turf/simulated/floor/plating,/area/awaymission/spacebattle/cruiser) "ht" = (/obj/structure/closet/crate/medical,/obj/item/weapon/storage/firstaid/fire,/turf/simulated/floor/plating,/area/awaymission/spacebattle/cruiser) -"hu" = (/obj/structure/rack,/obj/item/clothing/suit/space/rig,/obj/item/clothing/head/helmet/space/rig,/turf/simulated/floor,/area/awaymission/spacebattle/cruiser) +"hu" = (/obj/structure/rack,/obj/item/clothing/suit/space/hardsuit,/obj/item/clothing/head/helmet/space/hardsuit,/turf/simulated/floor,/area/awaymission/spacebattle/cruiser) "hv" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor{dir = 5; icon_state = "warning"},/area/awaymission/spacebattle/cruiser) "hw" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/engine,/area/awaymission/spacebattle/cruiser) "hx" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/engine,/area/awaymission/spacebattle/cruiser) @@ -390,7 +390,7 @@ "hz" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion_l (WEST)"; icon_state = "propulsion_l"; dir = 8},/turf/space,/area/awaymission/spacebattle/syndicate7) "hA" = (/obj/structure/largecrate,/mob/living/simple_animal/corgi/puppy,/turf/simulated/floor/plating,/area/awaymission/spacebattle/cruiser) "hB" = (/obj/structure/closet/crate,/obj/item/weapon/paint/anycolor,/turf/simulated/floor/plating,/area/awaymission/spacebattle/cruiser) -"hC" = (/obj/structure/closet/crate,/obj/item/weapon/cell/high,/obj/item/weapon/cell/high,/turf/simulated/floor/plating,/area/awaymission/spacebattle/cruiser) +"hC" = (/obj/structure/closet/crate,/obj/item/weapon/stock_parts/cell/high,/obj/item/weapon/stock_parts/cell/high,/turf/simulated/floor/plating,/area/awaymission/spacebattle/cruiser) "hD" = (/obj/structure/closet/crate/medical,/obj/item/weapon/storage/firstaid/regular,/turf/simulated/floor/plating,/area/awaymission/spacebattle/cruiser) "hE" = (/obj/structure/closet/crate/medical,/obj/item/weapon/tank/anesthetic,/turf/simulated/floor/plating,/area/awaymission/spacebattle/cruiser) "hF" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/floor{icon_state = "white"},/area/awaymission/spacebattle/cruiser) @@ -428,7 +428,7 @@ "il" = (/mob/living/simple_animal/hostile/syndicate/ranged/space,/turf/simulated/floor{icon_state = "freezerfloor"},/area/awaymission/spacebattle/cruiser) "im" = (/obj/effect/landmark/corpse/doctor{mobname = "Herbert West"; name = "Herbert West"},/obj/effect/decal/cleanable/blood,/turf/simulated/floor{icon_state = "white"},/area/awaymission/spacebattle/cruiser) "in" = (/obj/effect/landmark/corpse/engineer{mobname = "Carth Robinson"; name = "Carth Robinson"},/obj/effect/decal/cleanable/blood,/turf/simulated/floor{icon_state = "freezerfloor"},/area/awaymission/spacebattle/cruiser) -"io" = (/obj/item/ammo_casing/a12mm,/obj/item/ammo_casing/a12mm,/obj/item/ammo_casing/a12mm,/obj/item/ammo_casing/a12mm,/turf/simulated/floor{icon_state = "freezerfloor"},/area/awaymission/spacebattle/cruiser) +"io" = (/obj/item/ammo_casing/c10mm,/obj/item/ammo_casing/c10mm,/obj/item/ammo_casing/c10mm,/obj/item/ammo_casing/c10mm,/turf/simulated/floor{icon_state = "freezerfloor"},/area/awaymission/spacebattle/cruiser) "ip" = (/obj/machinery/sleeper,/turf/simulated/floor{icon_state = "white"},/area/awaymission/spacebattle/cruiser) "iq" = (/obj/machinery/sleep_console,/turf/simulated/floor{icon_state = "white"},/area/awaymission/spacebattle/cruiser) "ir" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "diagonalWall3"},/area/awaymission/spacebattle/syndicate7) @@ -484,7 +484,7 @@ "jp" = (/turf/simulated/wall/mineral/plasma,/area/awaymission/spacebattle/secret) "jq" = (/turf/simulated/floor{tag = "icon-alienvault"; icon_state = "alienvault"},/area/awaymission/spacebattle/secret) "jr" = (/obj/machinery/door/airlock/plasma,/turf/simulated/wall/mineral/plasma,/area/awaymission/spacebattle/secret) -"js" = (/obj/item/clothing/suit/space/rig/wizard,/obj/item/clothing/head/helmet/space/rig/wizard,/turf/simulated/floor{tag = "icon-alienvault"; icon_state = "alienvault"},/area/awaymission/spacebattle/secret) +"js" = (/obj/item/clothing/suit/space/hardsuit/wizard,/obj/item/clothing/head/helmet/space/hardsuit/wizard,/turf/simulated/floor{tag = "icon-alienvault"; icon_state = "alienvault"},/area/awaymission/spacebattle/secret) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/_maps/RandomZLevels/spacehotel.dmm b/_maps/RandomZLevels/spacehotel.dmm index 2b2ec65d76a..37119d795d7 100644 --- a/_maps/RandomZLevels/spacehotel.dmm +++ b/_maps/RandomZLevels/spacehotel.dmm @@ -5,7 +5,7 @@ "ae" = (/obj/machinery/power/apc{step_y = 0},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/unsimulated/wall,/area/awaymission) "af" = (/obj/machinery/power/terminal,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/awaymission) "ag" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/awaymission) -"ah" = (/obj/item/weapon/cable_coil/random,/obj/effect/decal/remains/human,/turf/simulated/floor/plating,/area/awaymission) +"ah" = (/obj/item/stack/cable_coil/random,/obj/effect/decal/remains/human,/turf/simulated/floor/plating,/area/awaymission) "ai" = (/turf/simulated/floor/plating,/area/awaymission) "aj" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/awaymission) "ak" = (/obj/machinery/power/smes/magical,/turf/simulated/shuttle/plating,/area/awaymission) @@ -188,7 +188,7 @@ "dF" = (/obj/structure/closet/secure_closet/freezer/fridge,/turf/simulated/floor,/area/awaymission) "dG" = (/obj/structure/kitchenspike,/obj/effect/decal/cleanable/blood,/turf/simulated/floor,/area/awaymission) "dH" = (/obj/machinery/door/airlock,/obj/effect/decal/cleanable/blood/old,/turf/simulated/floor,/area/awaymission) -"dI" = (/obj/item/weapon/bananapeel,/obj/item/toy/spinningtoy,/turf/simulated/floor/carpet,/area/awaymission) +"dI" = (/obj/item/weapon/grown/bananapeel,/obj/item/toy/spinningtoy,/turf/simulated/floor/carpet,/area/awaymission) "dJ" = (/obj/structure/barricade/wooden,/turf/simulated/floor/carpet,/area/awaymission) "dK" = (/obj/item/target/syndicate,/turf/simulated/floor/carpet,/area/awaymission) "dL" = (/obj/item/trash/candy,/turf/simulated/floor/carpet,/area/awaymission) diff --git a/_maps/RandomZLevels/stationCollision.dmm b/_maps/RandomZLevels/stationCollision.dmm index f25531c9396..878dbb8e934 100644 --- a/_maps/RandomZLevels/stationCollision.dmm +++ b/_maps/RandomZLevels/stationCollision.dmm @@ -61,7 +61,7 @@ "bi" = (/obj/machinery/vending/cola,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/syndishuttle) "bj" = (/obj/machinery/vending/cigarette,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/syndishuttle) "bk" = (/obj/machinery/vending/coffee,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/syndishuttle) -"bl" = (/obj/structure/closet/syndicate,/obj/item/clothing/suit/space/rig/syndi,/obj/item/clothing/head/helmet/space/rig/syndi,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/syndishuttle) +"bl" = (/obj/structure/closet/syndicate,/obj/item/clothing/suit/space/hardsuit/syndi,/obj/item/clothing/head/helmet/space/hardsuit/syndi,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/syndishuttle) "bm" = (/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/syndishuttle) "bn" = (/obj/structure/closet/syndicate,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/syndishuttle) "bo" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion (EAST)"; icon_state = "propulsion"; dir = 4},/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/awaymission/syndishuttle) @@ -290,7 +290,7 @@ "fD" = (/obj/structure/table/holotable,/obj/item/weapon/gun/energy/floragun{pixel_x = 2; pixel_y = 3},/obj/machinery/light,/obj/item/weapon/gun/energy/taser{pixel_x = -2; pixel_y = -2},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research) "fE" = (/obj/structure/target_stake,/obj/item/weapon/grown/sunflower,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research) "fF" = (/obj/item/ammo_casing/c45,/obj/item/ammo_casing/c45{pixel_x = 7},/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/northblock) -"fG" = (/obj/item/clothing/suit/space/syndicate,/obj/item/clothing/under/syndicate,/obj/item/clothing/head/helmet/space/syndicate,/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/obj/item/clothing/shoes/syndigaloshes,/obj/effect/decal/cleanable/blood/splatter,/obj/item/weapon/gun/projectile/automatic/silenced/sc_silenced,/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/northblock) +"fG" = (/obj/item/clothing/suit/space/syndicate,/obj/item/clothing/under/syndicate,/obj/item/clothing/head/helmet/space/syndicate,/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/obj/item/clothing/shoes/syndigaloshes,/obj/effect/decal/cleanable/blood/splatter,/obj/item/weapon/gun/projectile/automatic/pistol,/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/northblock) "fH" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/airless,/area/awaymission/midblock) "fI" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/awaymission/midblock) "fJ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/airless{icon_state = "damaged5"},/area/awaymission/midblock) @@ -390,7 +390,7 @@ "hz" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/item/clothing/suit/space/syndicate,/obj/item/weapon/paper/sc_safehint_paper_prison,/obj/item/weapon/gun/projectile/shotgun/sc_pump,/turf/simulated/floor,/area/awaymission/arrivalblock) "hA" = (/obj/structure/window/reinforced,/turf/simulated/floor,/area/awaymission/arrivalblock) "hB" = (/obj/machinery/door/window/southleft{name = "Windoor"},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/awaymission/arrivalblock) -"hC" = (/obj/item/ammo_casing/a12mm{pixel_x = 2; pixel_y = 5},/obj/item/ammo_casing/a12mm{pixel_x = -4; pixel_y = -5},/obj/item/ammo_casing/a12mm,/turf/simulated/floor/airless,/area/awaymission/midblock) +"hC" = (/obj/item/ammo_casing/c10mm{pixel_x = 2; pixel_y = 5},/obj/item/ammo_casing/c10mm{pixel_x = -4; pixel_y = -5},/obj/item/ammo_casing/c10mm,/turf/simulated/floor/airless,/area/awaymission/midblock) "hD" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/airless,/area/awaymission/midblock) "hE" = (/obj/structure/sink/kitchen{pixel_y = 32},/turf/simulated/floor,/area/awaymission/midblock) "hF" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/condiment/enzyme,/obj/item/weapon/reagent_containers/food/condiment/peppermill,/obj/item/weapon/reagent_containers/food/condiment/saltshaker{pixel_x = 4; pixel_y = 4},/turf/simulated/floor,/area/awaymission/midblock) @@ -409,12 +409,12 @@ "hS" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor,/area/awaymission/midblock) "hT" = (/obj/effect/decal/remains/human,/obj/item/weapon/butch,/obj/item/weapon/kitchenknife,/obj/item/clothing/head/chefhat,/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor,/area/awaymission/midblock) "hU" = (/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor,/area/awaymission/midblock) -"hV" = (/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/obj/item/ammo_casing/a12mm,/obj/item/weapon/paper/sc_safehint_paper_caf,/obj/item/clothing/under/syndicate,/obj/effect/decal/cleanable/blood/splatter,/obj/item/weapon/gun/projectile/automatic/c20r/sc_c20r,/turf/simulated/floor,/area/awaymission/midblock) +"hV" = (/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/obj/item/ammo_casing/c10mm,/obj/item/weapon/paper/sc_safehint_paper_caf,/obj/item/clothing/under/syndicate,/obj/effect/decal/cleanable/blood/splatter,/obj/item/weapon/gun/projectile/automatic/c20r/sc_c20r,/turf/simulated/floor,/area/awaymission/midblock) "hW" = (/obj/machinery/light/small,/turf/simulated/floor{icon_state = "dark"},/area/awaymission/midblock) "hX" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/midblock) "hY" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/midblock) "hZ" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/arrivalblock) -"ia" = (/obj/effect/decal/cleanable/blood/splatter,/obj/item/ammo_casing/a12mm,/obj/item/ammo_casing/a12mm,/turf/simulated/floor,/area/awaymission/arrivalblock) +"ia" = (/obj/effect/decal/cleanable/blood/splatter,/obj/item/ammo_casing/c10mm,/obj/item/ammo_casing/c10mm,/turf/simulated/floor,/area/awaymission/arrivalblock) "ib" = (/obj/machinery/power/apc{cell_type = 7500; dir = 8; name = "Arrivals Block APC"; pixel_x = -28},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor{icon_state = "red"; dir = 8},/area/awaymission/arrivalblock) "ic" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/awaymission/arrivalblock) "id" = (/obj/structure/stool/bed/chair{dir = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/awaymission/arrivalblock) @@ -423,13 +423,13 @@ "ig" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/airless,/area/awaymission/midblock) "ih" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/awaymission/midblock) "ii" = (/obj/machinery/microwave{pixel_x = -2; pixel_y = 7},/obj/structure/table,/turf/simulated/floor,/area/awaymission/midblock) -"ij" = (/obj/structure/stool,/obj/item/ammo_casing/a12mm,/turf/simulated/floor,/area/awaymission/midblock) -"ik" = (/obj/item/ammo_casing/a12mm,/obj/item/ammo_casing/a12mm,/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor,/area/awaymission/midblock) -"il" = (/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/obj/item/ammo_casing/a12mm,/obj/item/clothing/under/syndicate,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/item/weapon/gun/projectile/automatic/c20r/sc_c20r,/turf/simulated/floor,/area/awaymission/midblock) -"im" = (/obj/structure/stool/bed/chair{dir = 4},/obj/item/ammo_casing/a12mm,/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor,/area/awaymission/midblock) -"in" = (/obj/structure/table,/obj/item/ammo_casing/a12mm,/turf/simulated/floor,/area/awaymission/midblock) -"io" = (/obj/structure/stool/bed/chair{dir = 8},/obj/item/ammo_casing/a12mm,/obj/item/ammo_casing/a12mm,/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor,/area/awaymission/midblock) -"ip" = (/obj/item/ammo_casing/a12mm,/turf/simulated/floor,/area/awaymission/arrivalblock) +"ij" = (/obj/structure/stool,/obj/item/ammo_casing/c10mm,/turf/simulated/floor,/area/awaymission/midblock) +"ik" = (/obj/item/ammo_casing/c10mm,/obj/item/ammo_casing/c10mm,/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor,/area/awaymission/midblock) +"il" = (/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/obj/item/ammo_casing/c10mm,/obj/item/clothing/under/syndicate,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/item/weapon/gun/projectile/automatic/c20r/sc_c20r,/turf/simulated/floor,/area/awaymission/midblock) +"im" = (/obj/structure/stool/bed/chair{dir = 4},/obj/item/ammo_casing/c10mm,/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor,/area/awaymission/midblock) +"in" = (/obj/structure/table,/obj/item/ammo_casing/c10mm,/turf/simulated/floor,/area/awaymission/midblock) +"io" = (/obj/structure/stool/bed/chair{dir = 8},/obj/item/ammo_casing/c10mm,/obj/item/ammo_casing/c10mm,/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor,/area/awaymission/midblock) +"ip" = (/obj/item/ammo_casing/c10mm,/turf/simulated/floor,/area/awaymission/arrivalblock) "iq" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor,/area/awaymission/arrivalblock) "ir" = (/turf/simulated/floor{icon_state = "red"; dir = 10},/area/awaymission/arrivalblock) "is" = (/turf/simulated/floor{icon_state = "red"},/area/awaymission/arrivalblock) @@ -440,14 +440,14 @@ "ix" = (/obj/structure/closet/secure_closet/freezer/fridge,/obj/machinery/light,/turf/simulated/floor,/area/awaymission/midblock) "iy" = (/obj/structure/closet/secure_closet/freezer/kitchen,/turf/simulated/floor,/area/awaymission/midblock) "iz" = (/obj/machinery/door/window/eastright{name = "Windoor"},/turf/simulated/floor,/area/awaymission/midblock) -"iA" = (/obj/item/ammo_casing/a12mm,/turf/simulated/floor,/area/awaymission/midblock) -"iB" = (/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/obj/item/ammo_casing/a12mm,/obj/item/ammo_casing/a12mm,/obj/item/clothing/under/syndicate,/obj/effect/decal/cleanable/blood/splatter,/obj/item/weapon/gun/projectile/automatic/c20r/sc_c20r,/turf/simulated/floor,/area/awaymission/midblock) -"iC" = (/obj/item/ammo_casing/a12mm,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor,/area/awaymission/midblock) -"iD" = (/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/obj/item/ammo_casing/a12mm,/obj/item/clothing/under/syndicate,/obj/effect/decal/cleanable/blood/splatter,/obj/item/weapon/gun/projectile/automatic/c20r/sc_c20r,/turf/simulated/floor,/area/awaymission/midblock) -"iE" = (/obj/item/ammo_casing/a12mm,/obj/item/ammo_casing/a12mm,/turf/simulated/floor,/area/awaymission/midblock) +"iA" = (/obj/item/ammo_casing/c10mm,/turf/simulated/floor,/area/awaymission/midblock) +"iB" = (/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/obj/item/ammo_casing/c10mm,/obj/item/ammo_casing/c10mm,/obj/item/clothing/under/syndicate,/obj/effect/decal/cleanable/blood/splatter,/obj/item/weapon/gun/projectile/automatic/c20r/sc_c20r,/turf/simulated/floor,/area/awaymission/midblock) +"iC" = (/obj/item/ammo_casing/c10mm,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor,/area/awaymission/midblock) +"iD" = (/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/obj/item/ammo_casing/c10mm,/obj/item/clothing/under/syndicate,/obj/effect/decal/cleanable/blood/splatter,/obj/item/weapon/gun/projectile/automatic/c20r/sc_c20r,/turf/simulated/floor,/area/awaymission/midblock) +"iE" = (/obj/item/ammo_casing/c10mm,/obj/item/ammo_casing/c10mm,/turf/simulated/floor,/area/awaymission/midblock) "iF" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor,/area/awaymission/midblock) "iG" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/shard{icon_state = "medium"},/obj/item/stack/rods,/turf/simulated/floor/plating,/area/awaymission/arrivalblock) -"iH" = (/obj/effect/decal/remains/human,/obj/item/ammo_casing/a12mm,/turf/simulated/floor,/area/awaymission/arrivalblock) +"iH" = (/obj/effect/decal/remains/human,/obj/item/ammo_casing/c10mm,/turf/simulated/floor,/area/awaymission/arrivalblock) "iI" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/arrivalblock) "iJ" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/arrivalblock) "iK" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/arrivalblock) @@ -464,8 +464,8 @@ "iV" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/airless,/area/awaymission/southblock) "iW" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/airless,/area/awaymission/southblock) "iX" = (/turf/simulated/floor/airless,/area/awaymission/southblock) -"iY" = (/obj/item/ammo_casing/a12mm,/turf/simulated/floor/airless,/area/awaymission/southblock) -"iZ" = (/obj/item/ammo_casing/a12mm{pixel_x = -4; pixel_y = 3},/turf/simulated/floor/airless,/area/awaymission/southblock) +"iY" = (/obj/item/ammo_casing/c10mm,/turf/simulated/floor/airless,/area/awaymission/southblock) +"iZ" = (/obj/item/ammo_casing/c10mm{pixel_x = -4; pixel_y = 3},/turf/simulated/floor/airless,/area/awaymission/southblock) "ja" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/airless,/area/awaymission/southblock) "jb" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/airless,/area/awaymission/southblock) "jc" = (/turf/simulated/wall,/area/awaymission/southblock) @@ -479,7 +479,7 @@ "jk" = (/turf/simulated/floor/airless{icon_state = "damaged4"},/area/awaymission/southblock) "jl" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/airless,/area/awaymission/southblock) "jm" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/airless,/area/awaymission/southblock) -"jn" = (/obj/item/ammo_casing/a12mm{pixel_y = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/airless,/area/awaymission/southblock) +"jn" = (/obj/item/ammo_casing/c10mm{pixel_y = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/airless,/area/awaymission/southblock) "jo" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/airless,/area/awaymission/southblock) "jp" = (/obj/structure/sign/bluecross{pixel_y = -32},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/airless,/area/awaymission/southblock) "jq" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/airless,/area/awaymission/southblock) @@ -495,10 +495,10 @@ "jA" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/southblock) "jB" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/southblock) "jC" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/southblock) -"jD" = (/obj/item/ammo_casing/a12mm,/obj/item/ammo_casing/a12mm,/turf/simulated/floor,/area/awaymission/arrivalblock) +"jD" = (/obj/item/ammo_casing/c10mm,/obj/item/ammo_casing/c10mm,/turf/simulated/floor,/area/awaymission/arrivalblock) "jE" = (/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor,/area/awaymission/arrivalblock) "jF" = (/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/turf/simulated/floor,/area/awaymission/arrivalblock) -"jG" = (/obj/machinery/light{dir = 1},/obj/item/ammo_casing/a12mm,/turf/simulated/floor,/area/awaymission/arrivalblock) +"jG" = (/obj/machinery/light{dir = 1},/obj/item/ammo_casing/c10mm,/turf/simulated/floor,/area/awaymission/arrivalblock) "jH" = (/obj/structure/sign/vacuum{pixel_y = 32},/turf/simulated/floor,/area/awaymission/arrivalblock) "jI" = (/obj/structure/closet/toolcloset,/turf/simulated/floor,/area/awaymission/southblock) "jJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor,/area/awaymission/southblock) @@ -519,7 +519,7 @@ "jY" = (/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/awaymission/southblock) "jZ" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/southblock) "ka" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/arrivalblock) -"kb" = (/obj/effect/decal/cleanable/blood/splatter,/obj/item/ammo_casing/a12mm,/turf/simulated/floor,/area/awaymission/arrivalblock) +"kb" = (/obj/effect/decal/cleanable/blood/splatter,/obj/item/ammo_casing/c10mm,/turf/simulated/floor,/area/awaymission/arrivalblock) "kc" = (/obj/structure/sign/pods{pixel_y = -32},/turf/simulated/floor,/area/awaymission/arrivalblock) "kd" = (/obj/structure/sign/vacuum{pixel_y = -32},/turf/simulated/floor,/area/awaymission/arrivalblock) "ke" = (/obj/machinery/portable_atmospherics/scrubber,/turf/simulated/floor,/area/awaymission/southblock) @@ -586,7 +586,7 @@ "ln" = (/obj/machinery/light/small,/turf/simulated/floor/wood,/area/awaymission/southblock) "lo" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/awaymission/arrivalblock) "lp" = (/obj/structure/table,/obj/item/weapon/book/manual/hydroponics_pod_people,/turf/simulated/floor,/area/awaymission/arrivalblock) -"lq" = (/obj/item/weapon/grown/deathnettle,/obj/item/clothing/shoes/brown,/obj/item/clothing/under/rank/hydroponics,/obj/effect/decal/remains/human,/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor,/area/awaymission/arrivalblock) +"lq" = (/obj/item/weapon/grown/nettle/death,/obj/item/clothing/shoes/sneakers/brown,/obj/item/clothing/under/rank/hydroponics,/obj/effect/decal/remains/human,/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor,/area/awaymission/arrivalblock) "lr" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor{tag = "icon-whitehall (WEST)"; icon_state = "whitehall"; dir = 8},/area/awaymission/southblock) "ls" = (/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"; tag = ""},/turf/simulated/floor,/area/awaymission/southblock) "lt" = (/obj/structure/stool/bed,/obj/structure/window/reinforced/tinted,/obj/item/weapon/bedsheet/medical,/turf/simulated/floor{icon_state = "whitehall"; dir = 4},/area/awaymission/southblock) diff --git a/_maps/RandomZLevels/wildwest.dmm b/_maps/RandomZLevels/wildwest.dmm index b3409eb2b18..e61c72e96a7 100644 --- a/_maps/RandomZLevels/wildwest.dmm +++ b/_maps/RandomZLevels/wildwest.dmm @@ -50,11 +50,11 @@ "aX" = (/obj/effect/forcefield{desc = "You can't get in. Heh."; layer = 1; name = "Blocker"},/turf/simulated/wall/mineral/sandstone,/area/awaymission/wwmines) "aY" = (/obj/effect/decal/cleanable/blood/gibs/body{tag = "icon-gibup1"; icon_state = "gibup1"},/turf/simulated/floor/plating/ironsand{tag = "icon-ironsand1"; icon_state = "ironsand1"},/area/awaymission/wwmines) "aZ" = (/obj/effect/mine/dnascramble,/turf/simulated/floor/plating/ironsand{tag = "icon-ironsand1"; icon_state = "ironsand1"},/area/awaymission/wwmines) -"ba" = (/obj/effect/mine/dnascramble,/obj/item/ammo_box/a12mm,/turf/simulated/floor/plating/ironsand{tag = "icon-ironsand1"; icon_state = "ironsand1"},/area/awaymission/wwmines) +"ba" = (/obj/effect/mine/dnascramble,/obj/item/ammo_box/c10mm,/turf/simulated/floor/plating/ironsand{tag = "icon-ironsand1"; icon_state = "ironsand1"},/area/awaymission/wwmines) "bb" = (/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plating,/area/awaymission/wwrefine) "bc" = (/turf/simulated/floor/plating,/area/awaymission/wwrefine) "bd" = (/obj/machinery/door/airlock/sandstone,/turf/simulated/floor/plating,/area/awaymission/wwrefine) -"be" = (/obj/item/ammo_box/a12mm,/turf/simulated/floor/plating/ironsand{tag = "icon-ironsand1"; icon_state = "ironsand1"},/area/awaymission/wwmines) +"be" = (/obj/item/ammo_box/c10mm,/turf/simulated/floor/plating/ironsand{tag = "icon-ironsand1"; icon_state = "ironsand1"},/area/awaymission/wwmines) "bf" = (/mob/living/simple_animal/hostile/syndicate/ranged,/turf/simulated/floor/plating/ironsand{tag = "icon-ironsand1"; icon_state = "ironsand1"},/area/awaymission/wwmines) "bg" = (/turf/simulated/wall/mineral/sandstone,/area/space) "bh" = (/obj/structure/largecrate,/turf/simulated/floor/plating,/area/awaymission/wwrefine) @@ -68,7 +68,7 @@ "bp" = (/obj/effect/decal/cleanable/blood/gibs/body,/turf/simulated/floor/wood,/area/awaymission/wwmines) "bq" = (/obj/effect/landmark/corpse/miner/rig,/turf/simulated/floor/plating,/area/awaymission/wwrefine) "br" = (/obj/structure/lattice,/turf/space,/area/space) -"bs" = (/obj/effect/mine/dnascramble,/obj/item/ammo_box/a12mm,/turf/simulated/floor/wood,/area/awaymission/wwmines) +"bs" = (/obj/effect/mine/dnascramble,/obj/item/ammo_box/c10mm,/turf/simulated/floor/wood,/area/awaymission/wwmines) "bt" = (/obj/structure/closet/crate,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plating,/area/awaymission/wwrefine) "bu" = (/turf/simulated/wall/mineral/sandstone,/area/awaymission/wwmines) "bv" = (/obj/structure/window/reinforced{tag = "icon-fwindow"; icon_state = "fwindow"},/turf/space,/area/space) @@ -112,7 +112,7 @@ "ch" = (/obj/structure/table/woodentable,/obj/item/weapon/gun/projectile,/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/awaymission/wwmines) "ci" = (/obj/structure/mineral_door/wood{tag = "icon-woodopening"; icon_state = "woodopening"},/turf/simulated/floor/wood,/area/awaymission/wwmines) "cj" = (/obj/structure/stool,/turf/simulated/floor/carpet,/area/awaymission/wwmines) -"ck" = (/obj/item/ammo_box/a12mm,/turf/simulated/floor/carpet,/area/awaymission/wwmines) +"ck" = (/obj/item/ammo_box/c10mm,/turf/simulated/floor/carpet,/area/awaymission/wwmines) "cl" = (/obj/structure/stool,/turf/simulated/floor/wood,/area/awaymission/wwmines) "cm" = (/obj/structure/bookcase{tag = "icon-book-5"; icon_state = "book-5"},/turf/simulated/floor/wood,/area/awaymission/wwgov) "cn" = (/turf/simulated/floor/wood,/area/awaymission/wwgov) @@ -129,7 +129,7 @@ "cy" = (/obj/structure/stool/bed/chair/wood/wings,/turf/simulated/floor/wood,/area/awaymission/wwgov) "cz" = (/turf/simulated/floor{tag = "icon-stage_bleft"; icon_state = "stage_bleft"},/area/awaymission/wwgov) "cA" = (/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor/wood,/area/awaymission/wwmines) -"cB" = (/obj/effect/mine/plasma,/obj/item/ammo_box/a12mm,/turf/simulated/floor/plating/ironsand{tag = "icon-ironsand1"; icon_state = "ironsand1"},/area/awaymission/wwmines) +"cB" = (/obj/effect/mine/plasma,/obj/item/ammo_box/c10mm,/turf/simulated/floor/plating/ironsand{tag = "icon-ironsand1"; icon_state = "ironsand1"},/area/awaymission/wwmines) "cC" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/toolbox/electrical,/turf/simulated/floor/wood,/area/awaymission/wwgov) "cD" = (/obj/structure/table/woodentable,/obj/item/clothing/gloves/yellow,/obj/item/device/multitool,/turf/simulated/floor/wood,/area/awaymission/wwgov) "cE" = (/obj/structure/stool/bed/chair/wood/normal{dir = 4},/turf/simulated/floor/wood,/area/awaymission/wwgov) @@ -157,9 +157,9 @@ "da" = (/obj/structure/stool/bed/chair/wood/normal{dir = 4},/turf/simulated/floor/wood,/area/awaymission/wwmines) "db" = (/obj/structure/stool/bed/chair/wood/normal{dir = 8},/turf/simulated/floor/wood,/area/awaymission/wwmines) "dc" = (/obj/structure/window/reinforced{tag = "icon-fwindow (WEST)"; icon_state = "fwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-fwindow (EAST)"; icon_state = "fwindow"; dir = 4},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/ironsand{tag = "icon-ironsand1"; icon_state = "ironsand1"},/area/awaymission/wwgov) -"dd" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/snacks/sliceable/creamcheesebread,/turf/simulated/floor{tag = "icon-stage_bleft"; icon_state = "stage_bleft"},/area/awaymission/wwgov) +"dd" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/snacks/sliceable/store/creamcheesebread,/turf/simulated/floor{tag = "icon-stage_bleft"; icon_state = "stage_bleft"},/area/awaymission/wwgov) "de" = (/obj/structure/table/woodentable,/obj/item/weapon/kitchen/rollingpin,/turf/simulated/floor{tag = "icon-stage_bleft"; icon_state = "stage_bleft"},/area/awaymission/wwgov) -"df" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/snacks/sliceable/lemoncake,/turf/simulated/floor{tag = "icon-stage_bleft"; icon_state = "stage_bleft"},/area/awaymission/wwgov) +"df" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/snacks/grown/citrus/lemon,/turf/simulated/floor{tag = "icon-stage_bleft"; icon_state = "stage_bleft"},/area/awaymission/wwgov) "dg" = (/obj/structure/window/reinforced{tag = "icon-fwindow (EAST)"; icon_state = "fwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-fwindow (WEST)"; icon_state = "fwindow"; dir = 8},/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-fwindow (NORTH)"; icon_state = "fwindow"; dir = 1},/turf/simulated/floor/plating/ironsand{tag = "icon-ironsand1"; icon_state = "ironsand1"},/area/awaymission/wwgov) "dh" = (/obj/effect/landmark/corpse/syndicatecommando{mobname = "Syndicate Commando"},/turf/simulated/floor/carpet,/area/awaymission/wwgov) "di" = (/obj/machinery/mineral/mint,/turf/simulated/floor/plating,/area/awaymission/wwrefine) @@ -175,7 +175,7 @@ "ds" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/drinks/bottle/patron,/turf/simulated/floor{tag = "icon-stage_bleft"; icon_state = "stage_bleft"},/area/awaymission/wwgov) "dt" = (/obj/effect/decal/cleanable/blood/tracks,/turf/simulated/floor/plating/ironsand{tag = "icon-ironsand1"; icon_state = "ironsand1"},/area/awaymission/wwmines) "du" = (/obj/effect/decal/cleanable/blood/tracks,/turf/simulated/floor/wood,/area/awaymission/wwmines) -"dv" = (/obj/effect/mine/plasma,/obj/item/ammo_box/a12mm,/turf/simulated/floor/wood,/area/awaymission/wwmines) +"dv" = (/obj/effect/mine/plasma,/obj/item/ammo_box/c10mm,/turf/simulated/floor/wood,/area/awaymission/wwmines) "dw" = (/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor/plating/ironsand{tag = "icon-ironsand1"; icon_state = "ironsand1"},/area/awaymission/wwmines) "dx" = (/turf/simulated/floor/plating/ironsand{tag = "icon-ironsand4"; icon_state = "ironsand4"},/area/awaymission/wwgov) "dy" = (/obj/effect/landmark/corpse/miner/rig,/turf/simulated/floor/wood,/area/awaymission/wwmines) @@ -332,7 +332,7 @@ "gt" = (/obj/machinery/washing_machine,/turf/simulated/floor/wood,/area/awaymission/wwmines) "gu" = (/obj/effect/decal/cleanable/blood/gibs/body{tag = "icon-gibup1"; icon_state = "gibup1"},/obj/structure/stool/bed/chair/wood/normal,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/awaymission/wwmines) "gv" = (/obj/item/weapon/hatchet,/turf/simulated/floor/wood,/area/awaymission/wwmines) -"gw" = (/obj/item/weapon/gun/projectile/automatic/silenced,/turf/simulated/floor/wood,/area/awaymission/wwmines) +"gw" = (/obj/item/weapon/gun/projectile/automatic/pistol,/turf/simulated/floor/wood,/area/awaymission/wwmines) "gx" = (/obj/item/weapon/gun/projectile/shotgun,/turf/simulated/floor/plating/ironsand{tag = "icon-ironsand1"; icon_state = "ironsand1"},/area/awaymission/wwmines) "gy" = (/obj/effect/landmark/corpse/syndicatecommando{mobname = "Syndicate Commando"},/turf/simulated/floor/grass,/area/awaymission/wwgov) "gz" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-fwindow (NORTH)"; icon_state = "fwindow"; dir = 1},/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-fwindow (WEST)"; icon_state = "fwindow"; dir = 8},/turf/simulated/floor,/area/awaymission/wwrefine) diff --git a/_maps/map_files/tgstation.2.1.3.dmm b/_maps/map_files/tgstation.2.1.3.dmm index 8483ed5e38b..1686714b1ad 100644 --- a/_maps/map_files/tgstation.2.1.3.dmm +++ b/_maps/map_files/tgstation.2.1.3.dmm @@ -6920,7 +6920,7 @@ "cDd" = (/turf/simulated/shuttle/floor,/turf/simulated/shuttle/wall{icon_state = "swall_f6"; dir = 2},/area/shuttle/transport1/centcom) "cDe" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom) "cDf" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows"; dir = 5},/area/centcom/ferry) -"cDg" = (/obj/effect/landmark{name = "Deathsquad"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry) +"cDg" = (/obj/machinery/door/airlock/centcom{name = "Transport Shuttle"; opacity = 1; req_access_txt = "101"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry) "cDh" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom) "cDi" = (/obj/structure/flora/bush,/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/area/syndicate_mothership) "cDj" = (/turf/unsimulated/floor{name = "plating"},/turf/simulated/shuttle/wall{icon_state = "swall_f9"; dir = 2},/area/shuttle/transport1/centcom) @@ -8371,7 +8371,7 @@ "deY" = (/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/abandoned) "deZ" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/abandoned) "dfa" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored) -"dfb" = (/obj/machinery/atmospherics/pipe/manifold,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/mine/laborcamp/security) +"dfb" = (/obj/machinery/door_control{id = "Labor"; name = "Labor Camp Lockdown"; pixel_x = 28; pixel_y = 7; req_access_txt = "2"},/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor,/area/mine/laborcamp/security) "dfc" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/machinery/atmospherics/pipe/simple{dir = 6},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/mine/laborcamp/security) "dfd" = (/obj/structure/girder,/turf/simulated/floor/plating{icon_plating = "asteroidplating"; icon_state = "asteroidplating"; temperature = 273.15},/area/mine/explored) "dfe" = (/obj/structure/door_assembly/door_assembly_eng,/obj/item/weapon/airlock_electronics,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/engine/secure_construction) @@ -8396,7 +8396,7 @@ "dfx" = (/obj/machinery/door/poddoor/preopen{id = "Labor"; name = "labor camp blast door"},/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/laborcamp) "dfy" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/turf/simulated/wall,/area/mine/laborcamp) "dfz" = (/obj/structure/plasticflaps,/obj/machinery/conveyor{dir = 2; id = "gulag"},/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/laborcamp) -"dfA" = (/obj/machinery/flasher{id = "Labor"; pixel_x = 0; pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold{dir = 4},/turf/simulated/wall,/area/mine/laborcamp) +"dfA" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/mine/laborcamp/security) "dfB" = (/obj/machinery/light_switch{pixel_x = -27; pixel_y = 0},/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/laborcamp) "dfC" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor{tag = "icon-asteroidwarning"; icon_state = "asteroidwarning"; temperature = 273.15},/area/mine/laborcamp) "dfD" = (/turf/simulated/floor{tag = "icon-asteroidwarning"; icon_state = "asteroidwarning"; temperature = 273.15},/area/mine/explored) @@ -8470,7 +8470,7 @@ "dgT" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"},/turf/simulated/wall/r_wall,/area/mine/laborcamp/security) "dgU" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor,/area/mine/laborcamp/security) "dgV" = (/obj/structure/stool/bed/chair/office/dark,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/mine/laborcamp/security) -"dgW" = (/obj/machinery/door_control{id = "Labor"; name = "Labor Camp Lockdown"; pixel_x = 28; pixel_y = 7; req_access_txt = "2"},/obj/machinery/flasher_button{id = "Labor"; pixel_x = 26; pixel_y = -3},/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor,/area/mine/laborcamp/security) +"dgW" = (/obj/machinery/atmospherics/pipe/manifold,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/flasher_button{id = "Labor"; pixel_x = 0; pixel_y = 26},/turf/simulated/floor,/area/mine/laborcamp/security) "dgX" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/mine/laborcamp/security) "dgY" = (/turf/simulated/floor/plating,/area/mine/laborcamp/security) "dgZ" = (/obj/machinery/atmospherics/pipe/manifold{dir = 8},/obj/machinery/meter,/turf/simulated/floor/plating,/area/mine/laborcamp/security) @@ -8884,14 +8884,14 @@ "doR" = (/obj/machinery/light/small,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "dark"},/area/security/prison) "doS" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; id_tag = "releaseatmo"; on = 1},/turf/simulated/floor{icon_state = "dark"},/area/security/prison) "doT" = (/obj/machinery/atmospherics/unary/vent_scrubber{id_tag = "releaseatmo"; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor{icon_state = "dark"},/area/security/prison) -"doU" = (/obj/machinery/door/airlock/centcom{name = "Transport Shuttle"; opacity = 1; req_access_txt = "109"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry) +"doU" = (/obj/machinery/atmospherics/pipe/simple,/obj/machinery/flasher{id = "Labor"; pixel_x = 0; pixel_y = -26},/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/laborcamp) "doV" = (/obj/machinery/light/small{dir = 8},/obj/item/weapon/wrench,/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/security/prison) "doW" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/portables_connector,/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/security/prison) "doX" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/engine/engineering) "doY" = (/obj/structure/window/reinforced,/obj/structure/stool/bed/chair,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "showroomfloor"},/area/security/prison) "doZ" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/ai_monitored/security/armory) "dpa" = (/obj/machinery/light{dir = 1},/obj/machinery/computer/security/telescreen{desc = "Used for watching Prison Wing holding areas."; name = "Prison Monitor"; network = list("Prison"); pixel_x = 0; pixel_y = 30},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/camera{c_tag = "Prison Hallway West"; network = list("SS13","Prison")},/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/prison) -"dpb" = (/obj/machinery/computer/shuttle/ferry/request,/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom) +"dpb" = (/obj/machinery/atmospherics/pipe/manifold{dir = 4},/obj/machinery/mineral/labor_points_checker,/turf/simulated/wall,/area/mine/laborcamp) "dpd" = (/obj/machinery/alarm{pixel_y = 23},/obj/structure/reagent_dispensers/peppertank{pixel_x = 30; pixel_y = 0},/obj/structure/closet/secure_closet/hos,/turf/simulated/floor/carpet,/area/security/hos) "dpe" = (/obj/machinery/atmospherics/pipe/simple{dir = 5; icon_state = "intact"; level = 2},/turf/simulated/wall,/area/security/prison) "dpf" = (/obj/structure/stool/bed,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "dark"},/area/security/prison) @@ -9561,11 +9561,11 @@ ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlah ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcBocBLcBMcBMcBocBNcBOcAncBPcBPcBPcBPcBOcBQcAlcAOcAOcAOcAOcBRcBScBRcBTcBJcBUcBUcBwcBVcBWcBXcATcBxcBAahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcBocBocBocBocBocBocBocBocBocBocBocBocBocBocBocBocBYcBocBocBQcBZcAncCacCbcCccBPcBZcBQcAlcBFcBHcCdcBFcBGcBGcBHcCecBkcBkcBkcCfcBXcBXcBXcATcBxcAQahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcBocCgcCgcCgcCgcCgcCgcCgcCgcCgcCgcCgcCgcCgcChcCicCjcCkcBocBQcBZcClcAncAncAncCmcBZcBQcAlcCncCocCocCpcBRcBScBRcCqcATcCrcATcATcATcATcATcATcCscAQahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl -ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcBocCgcCtcCucCvcCtcCucCucCucCwcCucCucCxcCycCzcCicDgcCkcBocBQcBZcAycAncAncAncAzcCAcBQcAlcCncCocCocCpcBFcBGcBHcAQcBWcATcCBcCCcATcCBcCCcATcCDcAQahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl -ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcCEcCEcCEcCEcCEcCEcCEcCEcCEcCEcCEcCEcCEcCEcCEcCEcCEcCEcCEcCEcCEcCEcCEcCEcCEcCEcCEcCEcCEcCEahlahlahlahlahlahlahlahlahlahlahlcBocCtcCFdpbcCHcCIcCJcCJcCJcCJcCJcCJcCKcCLcCMcCicDgcCkcBocBQcCAcAycAncAncAncAtcAjcAXcAlcCNcCocCocCpcAlahlahlcCOcBWcATcCBcCCcATcCBcCCcATcCDcCOahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl -ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcCEcCPcCPcCPcCPcCPcCPcCPcCPcCPcCQcCPcCPcCPcCRcCScCPcCPcCPcCRcCPcCPcCPcCPcCPcCPcCRcCPcCPcCEahlahlahlahlahlahlahlahlahlahlahlcBocCwcCGcCTcCGcCUcCGcCGcCGcCGcCGcCGcCUcCVcCWcCicDgcCXcBocCYcBocAscAncAncAncAncAncAncCocCocCocCocCpcCZahlahlcDacBWcATcCBcCCcATcCBcCCcATcCDcDaahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl -ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcCEcCPcCPcCPcCPcCQcCPcCPcCPcCPcCPcCPcCPcCPcCPcCPcCPcCRcCPcCPcCPcCPcCPcCRcCPcCPcCPcCPcCPcCEahlahlahlahlahlahlahlahlahlahlahlcBocDbcDccCGcDdcCIcDecDecDecDecDecDecCKcCLcDfcCicDgcCjdoUcCjcCjcAncAncAncAncAncAncAncCocCocCocCocCpcAlahlahlcDhcBWcATcCBcCCcATcCBcCCcATcCDcDhahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl -ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcCEcCPcCPcCPcCPcCPcCPcCPcDicCPcCPcCPcCPcCPcCQcCPcCPcCScCRcCPcCPcCRcCPcCPcCRcCScCPcCRcCPcCEahlahlahlahlahlahlahlahlahlahlahlcBocCgcDbcCucDjcDbcCucCucCucCwcCucCucDkcCycCzcCicDgcDlcBocCYcBocClcAncAncAncCmcAjcAXcAlcDmcCocCocCpcBFcBGcBHcAQcBWcATcCBcCCcATcCBcCCcATcCDcAQahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl +ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcBocCgcCtcCucCvcCtcCucCucCucCwcCucCucCxcCycCzcCicCjcCkcBocBQcBZcAycAncAncAncAzcCAcBQcAlcCncCocCocCpcBFcBGcBHcAQcBWcATcCBcCCcATcCBcCCcATcCDcAQahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl +ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcCEcCEcCEcCEcCEcCEcCEcCEcCEcCEcCEcCEcCEcCEcCEcCEcCEcCEcCEcCEcCEcCEcCEcCEcCEcCEcCEcCEcCEcCEahlahlahlahlahlahlahlahlahlahlahlcBocCtcCFcCGcCHcCIcCJcCJcCJcCJcCJcCJcCKcCLcCMcCicCjcCkcBocBQcCAcAycAncAncAncAtcAjcAXcAlcCNcCocCocCpcAlahlahlcCOcBWcATcCBcCCcATcCBcCCcATcCDcCOahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl +ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcCEcCPcCPcCPcCPcCPcCPcCPcCPcCPcCQcCPcCPcCPcCRcCScCPcCPcCPcCRcCPcCPcCPcCPcCPcCPcCRcCPcCPcCEahlahlahlahlahlahlahlahlahlahlahlcBocCwcCGcCTcCGcCUcCGcCGcCGcCGcCGcCGcCUcCVcCWcCicCjcCXcBocCYcBocAscAncAncAncAncAncAncCocCocCocCocCpcCZahlahlcDacBWcATcCBcCCcATcCBcCCcATcCDcDaahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl +ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcCEcCPcCPcCPcCPcCQcCPcCPcCPcCPcCPcCPcCPcCPcCPcCPcCPcCRcCPcCPcCPcCPcCPcCRcCPcCPcCPcCPcCPcCEahlahlahlahlahlahlahlahlahlahlahlcBocDbcDccCGcDdcCIcDecDecDecDecDecDecCKcCLcDfcCicCjcCjcDgcCjcCjcAncAncAncAncAncAncAncCocCocCocCocCpcAlahlahlcDhcBWcATcCBcCCcATcCBcCCcATcCDcDhahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl +ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcCEcCPcCPcCPcCPcCPcCPcCPcDicCPcCPcCPcCPcCPcCQcCPcCPcCScCRcCPcCPcCRcCPcCPcCRcCScCPcCRcCPcCEahlahlahlahlahlahlahlahlahlahlahlcBocCgcDbcCucDjcDbcCucCucCucCwcCucCucDkcCycCzcCicCjcDlcBocCYcBocClcAncAncAncCmcAjcAXcAlcDmcCocCocCpcBFcBGcBHcAQcBWcATcCBcCCcATcCBcCCcATcCDcAQahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcCEcCPcCPcCPcCPcCPcCPcCPcCPcCPcCPcCPcCPcCPcCPcCPcCPcCPcCPcCQcCPcCPcCRcCScCPcCPcCRcCPcCScCEahlahlahlahlahlahlahlahlahlahlahlcBocCgcCgcCgcCgcCgcCgcCgcCgcCgcCgcCgcCgcCgcDncCicCjcCkcBocBQcBOcAwcAncAncAncAxcBOcBQcAlcCncCocCocCpcBRcBScBRcCqcATcDocATcATcATcATcATcATcCscAQahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcCEcCPcCPcCPcCPcCPcCPcCPcCPcCPcCPcCPcCPcCPcCPcCPcCQcCPcCPcCPcCPcCPcCScCPcCRcCScCPcCRcCPcCEahlahlahlahlahlahlahlahlahlahlahlcDpcDpcDpcDpcDpcDpcDpcDpcDpcDpcDpcDpcDpcDpcDpcDpcDqcDpcDpcBQcBZcAwcAncAncAncAxcBZcBQcAlcBFcBHcDrcBFcBGcBGcBHcCecBkcBkcDscBkcDtcBAcDucABcADcDvahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcCEcCPcCPcCPcCPcCPcCPcDwcDwcDwcDwcDwcDwcDwcCPcCPcCPcCPcCPcCPcCPcCRcCPcCPcDicCScCPcCPcCPcCEahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcDpcBQcCAcAwcAncAncAncAxcCAcBQcAlcCocCocCocCpcBRcBScBRcCqcDxcDxcDxcDycAQcBycBxcBxcDzcBAahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl @@ -10259,16 +10259,16 @@ ahlahlahlahlahlahlahlahlahlahlahjahlahlahlahlahlahlahlddZdeEdeFdeGdeHddZdeIdetde ahlahlahlahlahlahlahlahlahlahlahjahlahlahlahlahldeQddZddZddZdeRdgideTddZdeUdghddZddZddZddZddZdeWdeudeXddMddMddMddMddMddMddMddMddMdaEdaEdaEahlahlahlahldaAdaAdaAdaAdaAdaAdaAdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCddHddHddHdaWdeYdeZdeYdaWddHddHddHddHddHdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaAdaAdaEdcldcldcldcldcldcldcldcldcldcldcldcldaEahlahlahlahlahlahlahldaEdaEdaEdaEdaEdaEdaEdaEdaEdaEdcldcldcldcldcldfadcldcldcldcldaEdaEdaEdaEdaEdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaEdaEdaEdaEdaEdaEahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl ahlahlahlahlahlahlahlahlahlahldtuahjahjahjahjahjdeQdgudgvddZdffdfgdgwdgqdgtdfgdgpddZdfhdfhdfhdevdeNdeNddMddMddMddMddMddMddMddMddMdaEdaEdaEdaEdaEahldaAdaAdaAdaAdaAdaAdaAdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCddHddHdaWdfidewdfjdaWddHddHddHddHdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaAdaAdaEdaEdcldcldcldcldcldcldcldcldaEdaEdaEdaEahlahlahlahlahlahlahlahldaEdaEdaEdaEdaEdaEdaEdaEdaEdaEdaEdcldcldcldfadcldcldaEdaEdaEdaEdaEdaEdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaEdaEdaEdaEdaEdaEahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl ahlahlahlahlahlahlahlahlahlahlahjdfkdfkdfkdfkdfkdeQdfUdfVdfRdfSdfHdfTdfgdffdfgdfgdfrdfhdfhdeNdeNdeNdeNdfsddMddMddMddMddMddMddMddMddMdaEdaEdaEdaEahldaAdaAdaAdaAdaAdaAdaAdaCdaCdaCdaCdaCdaCdaCdaDdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCddHddHddHdftdfudfvddHddHddHddHdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaDdaCdaCdaCdaCdaCdaAdaAdaAdaEdaEdaEdaEdaEdcldclddaddadaEdaAdaAdaAahlahlahlahlahlahlahlahldaEdaEdaEdaEdaEdaEdaEdaEdaEdaEdaEdaEdcldcldfadcldcldaEdaEdaEdaEdaEdaEdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaEdaEdaEdaEdaEdaEahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl -ahlahlahlahlahlahlahlahlahlahlahjdfkdfkdfkdfkdfkdeQdgfdggdfydgddfHdfAdfgdffdfXdfgddZdfCdfDdfDdeNdeNdevdevddMddMddMddMddMddMddMddMddMddMdaEdaEdaEahldaAdaAdaAdaAdaAdaAdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCddHddHddHddHddHdfEddHddHddHddHdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaAdaAdaAdaAdaAdaEdaEdaEdaEdaEdaEdaAdaAdaAahlahlahlahlahlahlahlahldaEdaEdaEdaHdaHdaHdaEdaEdaEdaEdaEdaEdcldcldfadcldcldcldaEdaEdaEdaEdaEdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaEdaEdaEdaEdaEdaEahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl +ahlahlahlahlahlahlahlahlahlahlahjdfkdfkdfkdfkdfkdeQdgfdggdfydgddfHdpbdfgdffdfXdfgddZdfCdfDdfDdeNdeNdevdevddMddMddMddMddMddMddMddMddMddMdaEdaEdaEahldaAdaAdaAdaAdaAdaAdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCddHddHddHddHddHdfEddHddHddHddHdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaAdaAdaAdaAdaAdaEdaEdaEdaEdaEdaEdaAdaAdaAahlahlahlahlahlahlahlahldaEdaEdaEdaHdaHdaHdaEdaEdaEdaEdaEdaEdcldcldfadcldcldcldaEdaEdaEdaEdaEdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaEdaEdaEdaEdaEdaEahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl ahlahlahlahlahlahlahlahlahlahlahjdfkdfkdfkdfkdfkdeQddZddZddZdfBdfgdfFdfHdfGdfIdfJdfKdfLdfLdfMdfNdeNdevdevdfOddMddMddMddMddMddMddMddMddMdaEdaEdaEahldaAdaAdaAdaAdaAdaAdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCddHddHddHddHddHddHddHdfEddHddHdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaAdaAdaAdaAdaAdaAdaAdaAdaAdaAdaAdaAahlahlahlahlahlahlahlahlahldaEdaEdaEdaHdaHdaHdaEdaEdaEdaEdaEdcldcldfPdfQdcldcldaEdaEdaEdaEdaEdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaEdaEdaEdaEdaEdaEahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl ahlahlahlahlahlahlahlahlahlahlahjdfkdfkdfkdfkdfkdfqdfwdfqdfxdfgdfgdffdfgdfgdfWdfzddZdfYdfZdgadeNdeNdevdevdgbddMddMddMddMddMddMddMddMddMddMdaEdaEahldaAdaAdaAdaAdaAdaAdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCddHddHddHddHdfEddHddHddHddHddHdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaAdaAdaAdaAdaAdaAdaAdaAdaAahlahlahlahlahlahlahlahlahldaEdaEdaEdaHdaHdaHdaHdaHdaEdaEdaEdcldcldcldfadcldcldcldaEdaEdaEdaEdaEdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaEdaEdaEdaEdaEdaEahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl ahlahlahlahlahlahlahlahlahlahlahjdfkdfkdfkdfkdfkdeQddZddZddZdfgdfgdffdfIdgcddZdfpddZdfhdfhdfhdevdevdevdevdgeddZddMddMddMddMddMddMddMddMddMddMdaEahldaAdaAdaAdaAdaAdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCddHddHddHddHddHddHddHddHddHddHdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaAdaAdaAdaAahlahlahlahlahlahlahlahldaEdaEdaEdaEdaHdaHdaHdaHdaEdaEdaEdcldcldcldfadcldcldcldaEdaEdaEdaEdaEdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaEdaEdaEdaEdaEdaEdaEahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl -ahlahlahlahlahlahlahlahlahlahlahjdfkdfkdfkdfkdfkahlahlddZdfldfgdfgdffdfndfodfndfmddZdgjdgkdevdevdevdevdfsddMddMddMddMddMddMddMddMddMddMddMddMdaEahjdaAdaAdaAdaAdaAdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCddHddHddHddHddHddHddHddHddHdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaAdaAdaAdaAahlahlahlahlahlahlahlahlahldaEdaEdaEdaHdaHdaHdaHdaEdaEdaEdcldcldcldfadcldcldcldaEdaEdaEdaEdaEdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaEdaEdaEdaEdaEdaEdaEahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl +ahlahlahlahlahlahlahlahlahlahlahjdfkdfkdfkdfkdfkahlahlddZdfldfgdfgdoUdfndfodfndfmddZdgjdgkdevdevdevdevdfsddMddMddMddMddMddMddMddMddMddMddMddMdaEahjdaAdaAdaAdaAdaAdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCddHddHddHddHddHddHddHddHddHdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaAdaAdaAdaAahlahlahlahlahlahlahlahlahldaEdaEdaEdaHdaHdaHdaHdaEdaEdaEdcldcldcldfadcldcldcldaEdaEdaEdaEdaEdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaEdaEdaEdaEdaEdaEdaEahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl ahlahlahlahlahlahlahlahlahlahlahjdfkdfkdfkdfkdfkdgldgmdgmdgmdgmdgndgodgmdgmdgmddZdgmdgmdfddevdeNdevdevdfsddMddMddMddMddMddMddMddMddMddMddMddMdaEahlahldaAdaAdaAdaAdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCddHddHddHddHddHddHdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaAdaAdaAdaAdaAahlahlahlahlahlahlahlahldaEdaEdaEdaEdaHdaHdaHdaEdaEdaEdcldcldcldfadcldcldcldaEdaEdaEdaEdaEdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaEdaEdaEdaEdaEdaEdaEahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl -ahlahlahlahlahlahlahlahlahlahlahjdfkdfkdfkdfkdfkdeVdgYdeVdgsdgFdfcdfbdeScMZcMfcMedgrdgydfhdfhdevdevdevddMddMddMddMddMddMddMddMddMddMddMddMddMddMdaEahlahldaAdaAdaAdaAdaAdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCddHddHddHdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaAdaAdaAdaAahlahlahlahlahlahlahlahldaEdaEdaEdaEdaHdaHdaHdaHdaEdaEdaEdcldcldfadcldcldcldcldaEdaEdaEdaEdaEdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaEdaEdaEdaEdaEdaEdaEahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl +ahlahlahlahlahlahlahlahlahlahlahjdfkdfkdfkdfkdfkdeVdfAdeVdgsdgFdfcdgWdeScMZcMfcMedgrdgydfhdfhdevdevdevddMddMddMddMddMddMddMddMddMddMddMddMddMddMdaEahlahldaAdaAdaAdaAdaAdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCddHddHddHdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaAdaAdaAdaAahlahlahlahlahlahlahlahldaEdaEdaEdaEdaHdaHdaHdaHdaEdaEdaEdcldcldfadcldcldcldcldaEdaEdaEdaEdaEdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaEdaEdaEdaEdaEdaEdaEahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl ahlahlahlahlahlahlahlahlahlahlahjdfkdfkdfkdfkdfkdgldgmdgmdgmcLGdgodgmdgmdgAcLEdgodgmdgmdfhdfhdevdevddMddMddMddMddMddMddMddMddMddMddMddMddMddMddMdaEdaEahlahldaAdaAdaAdaAdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaAdaAdaAahlahlahlahlahlahlahlahldaEdaEdaEdaEdaHdaHdaHdaHdaEdaEdaEdcldcldfadcldcldcldcldaEdaEdaEdaEdaEdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaEdaEdaEdaEdaEahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl ahlahlahlahlahlahlahlahlahlahlahjdfkdfkdfkdfkdfkdgldgDdtwcLycKWcapdgmbJZdgKbtGavRdgNdgOdgPdgQdgRddMddMddMddMddMddMddMddMddMddMddMddMddMddMddMddMddMdaEahlahldaAdaAdaAdaAdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaDdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaDdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaAdaAdaAdaAahlahlahlahlahlahlahldaEdaEdaEdaEdaHdaHdaHdaHdaEdaEdaEdcldcldfPdgSdfQdcldcldaEdaEdaEdaEdaEdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaEdaEdaEdaEdaEdaEahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl -ahlahlahlahlahlahlahlahlahlahlahjdfkdfkdfkdfkdfkdgTdgUdgrdgVdgrdgWdgmdgXdgYdgYdgZdhadgmddMddMddMddMddMddMddMddMddMddMddMddMddMddMddMddMddMddMddMddMdaEdaEahldaAdaAdaAdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaAdaAdaAdaAahlahlahlahlahlahlahlahldaEdaEdaEdaHdaHdaHdaHdaEdaEdaEdcldcldcldcldfadcldcldaEdaEdaEdaEdaEdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaEdaEdaEdaEdaEdaEahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl +ahlahlahlahlahlahlahlahlahlahlahjdfkdfkdfkdfkdfkdgTdgUdgrdgVdgrdfbdgmdgXdgYdgYdgZdhadgmddMddMddMddMddMddMddMddMddMddMddMddMddMddMddMddMddMddMddMddMdaEdaEahldaAdaAdaAdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaAdaAdaAdaAahlahlahlahlahlahlahlahldaEdaEdaEdaHdaHdaHdaHdaEdaEdaEdcldcldcldcldfadcldcldaEdaEdaEdaEdaEdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaEdaEdaEdaEdaEdaEahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl ahlahlahlahlahlahlahlahlahjahjahjahjahjahjahjahjdhbdhcdhddhedhfdhgdgmdhhdhidhjdhkdhadgmddMddMddMddMddMddMddMddMddMddMddMddMddMddMddMddMddMddMddMddMddMdaEahldaAdaAdaAdaAdaAdaCdaCdaCdaCdaCdaCdaCdaCdaDdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaKdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaAdaAdaAdaAahlahlahlahlahlahlahlahldaEdaEdaEdaHdaHdaHdaHdaEdaEdaEdaEdcldcldcldfadcldcldaEdaEdaEdaEdaEdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaEdaEdaEdaEdaEdaEdaEahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl ahlahlahlahlahlahlahlahlahlahlahjahlahlahlahlahlduudhmdhndgmdgmdgmdgmdgmdgmdgmdgmdgmdgmddMddMddMddMddMddMddMddMddMddMddMddMddMddMddMddMddMddMddMddMddMdaEahlahldaAdaAdaAdaAdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaAdaAdaAdaAdaAahlahlahlahlahlahlahlahldaEdaEdaEdaHdaHdaHdaHdaEdaEdaEdcldcldhodeCdeDdcldaEdaEdaEdaEdaEdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaEdaEdaEdaEdaEdaEdaEdaEahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahldaEdaEdaEdaEddMddMddMddMddMddMddMddMddMddMddMddMddMddMddMddMddMddMddMddMddMddMddMddMddMddMddMddMddMddMddMddMdaEahjdaAdaAdaAdaAdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaDdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaAdaAdaAdaAdaAdaAahlahlahlahlahlahlahldaEdaEdaEdaEdaHdaHdaHdaEdaEdaEdcldcldeydePdeAdcldaEdaEdaEdaEdaEdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaHdaEdaEdaEdaEdaEdaEdaEdaEdaEdaEahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl diff --git a/code/ATMOSPHERICS/atmospherics.dm b/code/ATMOSPHERICS/atmospherics.dm index d91a2044b00..ca07bb0ff8e 100644 --- a/code/ATMOSPHERICS/atmospherics.dm +++ b/code/ATMOSPHERICS/atmospherics.dm @@ -10,7 +10,7 @@ Pipelines + Other Objects -> Pipe network */ -obj/machinery/atmospherics +/obj/machinery/atmospherics anchored = 1 idle_power_usage = 0 active_power_usage = 0 @@ -20,46 +20,46 @@ obj/machinery/atmospherics -obj/machinery/atmospherics/var/initialize_directions = 0 -obj/machinery/atmospherics/var/pipe_color +/obj/machinery/atmospherics/var/initialize_directions = 0 +/obj/machinery/atmospherics/var/pipe_color -obj/machinery/atmospherics/process() +/obj/machinery/atmospherics/process() if(gc_destroyed) //comments on /vg/ imply that GC'd pipes still process return PROCESS_KILL build_network() -obj/machinery/atmospherics/proc/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference) +/obj/machinery/atmospherics/proc/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference) // Check to see if should be added to network. Add self if so and adjust variables appropriately. // Note don't forget to have neighbors look as well! return null -obj/machinery/atmospherics/proc/build_network() +/obj/machinery/atmospherics/proc/build_network() // Called to build a network from this node return null -obj/machinery/atmospherics/proc/return_network(obj/machinery/atmospherics/reference) +/obj/machinery/atmospherics/proc/return_network(obj/machinery/atmospherics/reference) // Returns pipe_network associated with connection to reference // Notes: should create network if necessary // Should never return null return null -obj/machinery/atmospherics/proc/reassign_network(datum/pipe_network/old_network, datum/pipe_network/new_network) +/obj/machinery/atmospherics/proc/reassign_network(datum/pipe_network/old_network, datum/pipe_network/new_network) // Used when two pipe_networks are combining -obj/machinery/atmospherics/proc/return_network_air(datum/network/reference) +/obj/machinery/atmospherics/proc/return_network_air(datum/network/reference) // Return a list of gas_mixture(s) in the object // associated with reference pipe_network for use in rebuilding the networks gases list // Is permitted to return null -obj/machinery/atmospherics/proc/disconnect(obj/machinery/atmospherics/reference) +/obj/machinery/atmospherics/proc/disconnect(obj/machinery/atmospherics/reference) -obj/machinery/atmospherics/update_icon() +/obj/machinery/atmospherics/update_icon() return null -obj/machinery/atmospherics/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) +/obj/machinery/atmospherics/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) if(can_unwrench && istype(W, /obj/item/weapon/wrench)) var/turf/T = src.loc if (level==1 && isturf(T) && T.intact) diff --git a/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm b/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm index 83affc6a0c3..923bb5ea0c2 100644 --- a/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm +++ b/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm @@ -1,4 +1,4 @@ -obj/machinery/atmospherics/binary +/obj/machinery/atmospherics/binary dir = SOUTH initialize_directions = SOUTH|NORTH use_power = 1 @@ -12,119 +12,119 @@ obj/machinery/atmospherics/binary var/datum/pipe_network/network1 var/datum/pipe_network/network2 - New() - ..() - switch(dir) - if(NORTH) - initialize_directions = NORTH|SOUTH - if(SOUTH) - initialize_directions = NORTH|SOUTH - if(EAST) - initialize_directions = EAST|WEST - if(WEST) - initialize_directions = EAST|WEST - air1 = new - air2 = new +/obj/machinery/atmospherics/binary/New() + ..() + switch(dir) + if(NORTH) + initialize_directions = NORTH|SOUTH + if(SOUTH) + initialize_directions = NORTH|SOUTH + if(EAST) + initialize_directions = EAST|WEST + if(WEST) + initialize_directions = EAST|WEST + air1 = new + air2 = new - air1.volume = 200 - air2.volume = 200 + air1.volume = 200 + air2.volume = 200 // Housekeeping and pipe network stuff below - network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference) - if(reference == node1) - network1 = new_network +/obj/machinery/atmospherics/binary/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference) + if(reference == node1) + network1 = new_network - else if(reference == node2) - network2 = new_network + else if(reference == node2) + network2 = new_network - if(new_network.normal_members.Find(src)) - return 0 + if(new_network.normal_members.Find(src)) + return 0 - new_network.normal_members += src + new_network.normal_members += src - return null + return null - Destroy() - loc = null +/obj/machinery/atmospherics/binary/Destroy() + loc = null - if(node1) - node1.disconnect(src) - del(network1) - if(node2) - node2.disconnect(src) - del(network2) + if(node1) + node1.disconnect(src) + del(network1) + if(node2) + node2.disconnect(src) + del(network2) + node1 = null + node2 = null + + ..() + +/obj/machinery/atmospherics/binary/initialize() + src.disconnect(src) + + var/node2_connect = dir + var/node1_connect = turn(dir, 180) + + for(var/obj/machinery/atmospherics/target in get_step(src,node1_connect)) + if(target.initialize_directions & get_dir(target,src)) + node1 = target + break + + for(var/obj/machinery/atmospherics/target in get_step(src,node2_connect)) + if(target.initialize_directions & get_dir(target,src)) + node2 = target + break + + update_icon() + +/obj/machinery/atmospherics/binary/build_network() + if(!network1 && node1) + network1 = new /datum/pipe_network() + network1.normal_members += src + network1.build_network(node1, src) + + if(!network2 && node2) + network2 = new /datum/pipe_network() + network2.normal_members += src + network2.build_network(node2, src) + + +/obj/machinery/atmospherics/binary/return_network(obj/machinery/atmospherics/reference) + build_network() + + if(reference==node1) + return network1 + + if(reference==node2) + return network2 + + return null + +/obj/machinery/atmospherics/binary/reassign_network(datum/pipe_network/old_network, datum/pipe_network/new_network) + if(network1 == old_network) + network1 = new_network + if(network2 == old_network) + network2 = new_network + + return 1 + +/obj/machinery/atmospherics/binary/return_network_air(datum/pipe_network/reference) + var/list/results = list() + + if(network1 == reference) + results += air1 + if(network2 == reference) + results += air2 + + return results + +/obj/machinery/atmospherics/binary/disconnect(obj/machinery/atmospherics/reference) + if(reference==node1) + del(network1) node1 = null + + else if(reference==node2) + del(network2) node2 = null - ..() - - initialize() - src.disconnect(src) - - var/node2_connect = dir - var/node1_connect = turn(dir, 180) - - for(var/obj/machinery/atmospherics/target in get_step(src,node1_connect)) - if(target.initialize_directions & get_dir(target,src)) - node1 = target - break - - for(var/obj/machinery/atmospherics/target in get_step(src,node2_connect)) - if(target.initialize_directions & get_dir(target,src)) - node2 = target - break - - update_icon() - - build_network() - if(!network1 && node1) - network1 = new /datum/pipe_network() - network1.normal_members += src - network1.build_network(node1, src) - - if(!network2 && node2) - network2 = new /datum/pipe_network() - network2.normal_members += src - network2.build_network(node2, src) - - - return_network(obj/machinery/atmospherics/reference) - build_network() - - if(reference==node1) - return network1 - - if(reference==node2) - return network2 - - return null - - reassign_network(datum/pipe_network/old_network, datum/pipe_network/new_network) - if(network1 == old_network) - network1 = new_network - if(network2 == old_network) - network2 = new_network - - return 1 - - return_network_air(datum/pipe_network/reference) - var/list/results = list() - - if(network1 == reference) - results += air1 - if(network2 == reference) - results += air2 - - return results - - disconnect(obj/machinery/atmospherics/reference) - if(reference==node1) - del(network1) - node1 = null - - else if(reference==node2) - del(network2) - node2 = null - - return null \ No newline at end of file + return null diff --git a/code/ATMOSPHERICS/components/binary_devices/circulator.dm b/code/ATMOSPHERICS/components/binary_devices/circulator.dm index 2142b7b06e2..a5a222736fb 100644 --- a/code/ATMOSPHERICS/components/binary_devices/circulator.dm +++ b/code/ATMOSPHERICS/components/binary_devices/circulator.dm @@ -17,54 +17,54 @@ density = 1 - proc/return_transfer_air() +/obj/machinery/atmospherics/binary/circulator/proc/return_transfer_air() - var/output_starting_pressure = air1.return_pressure() - var/input_starting_pressure = air2.return_pressure() + var/output_starting_pressure = air1.return_pressure() + var/input_starting_pressure = air2.return_pressure() - if(output_starting_pressure >= input_starting_pressure-10) - //Need at least 10 KPa difference to overcome friction in the mechanism - last_pressure_delta = 0 - return null + if(output_starting_pressure >= input_starting_pressure-10) + //Need at least 10 KPa difference to overcome friction in the mechanism + last_pressure_delta = 0 + return null - //Calculate necessary moles to transfer using PV = nRT - if(air2.temperature>0) - var/pressure_delta = (input_starting_pressure - output_starting_pressure)/2 + //Calculate necessary moles to transfer using PV = nRT + if(air2.temperature>0) + var/pressure_delta = (input_starting_pressure - output_starting_pressure)/2 - var/transfer_moles = pressure_delta*air1.volume/(air2.temperature * R_IDEAL_GAS_EQUATION) + var/transfer_moles = pressure_delta*air1.volume/(air2.temperature * R_IDEAL_GAS_EQUATION) - last_pressure_delta = pressure_delta + last_pressure_delta = pressure_delta - //world << "pressure_delta = [pressure_delta]; transfer_moles = [transfer_moles];" + //world << "pressure_delta = [pressure_delta]; transfer_moles = [transfer_moles];" - //Actually transfer the gas - var/datum/gas_mixture/removed = air2.remove(transfer_moles) + //Actually transfer the gas + var/datum/gas_mixture/removed = air2.remove(transfer_moles) - if(network1) - network1.update = 1 + if(network1) + network1.update = 1 - if(network2) - network2.update = 1 + if(network2) + network2.update = 1 - return removed + return removed - else - last_pressure_delta = 0 - - process() - ..() - update_icon() + else + last_pressure_delta = 0 +/obj/machinery/atmospherics/binary/circulator/process() + ..() update_icon() - if(stat & (BROKEN|NOPOWER)) - icon_state = "circ[side]-p" - else if(last_pressure_delta > 0) - if(last_pressure_delta > ONE_ATMOSPHERE) - icon_state = "circ[side]-run" - else - icon_state = "circ[side]-slow" - else - icon_state = "circ[side]-off" - return 1 \ No newline at end of file +/obj/machinery/atmospherics/binary/circulator/update_icon() + if(stat & (BROKEN|NOPOWER)) + icon_state = "circ[side]-p" + else if(last_pressure_delta > 0) + if(last_pressure_delta > ONE_ATMOSPHERE) + icon_state = "circ[side]-run" + else + icon_state = "circ[side]-slow" + else + icon_state = "circ[side]-off" + + return 1 diff --git a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm b/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm index b761ad7150f..e2332110eb0 100644 --- a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm @@ -9,191 +9,189 @@ desc = "Has a valve and pump attached to it. There are two ports." level = 1 - - high_volume - name = "large dual-port air vent" - - New() - ..() - - air1.volume = 1000 - air2.volume = 1000 - - var/on = 0 - var/pump_direction = 1 //0 = siphoning, 1 = releasing - - var/external_pressure_bound = ONE_ATMOSPHERE - var/input_pressure_min = 0 - var/output_pressure_max = 0 - - var/pressure_checks = 1 - //1: Do not pass external_pressure_bound - //2: Do not pass input_pressure_min - //4: Do not pass output_pressure_max - - update_icon() - if(on) - if(pump_direction) - icon_state = "[level == 1 && istype(loc, /turf/simulated) ? "h" : "" ]out" - else - icon_state = "[level == 1 && istype(loc, /turf/simulated) ? "h" : "" ]in" - else - icon_state = "[level == 1 && istype(loc, /turf/simulated) ? "h" : "" ]off" - on = 0 - - return - - hide(var/i) //to make the little pipe section invisible, the icon changes. - if(on) - if(pump_direction) - icon_state = "[i == 1 && istype(loc, /turf/simulated) ? "h" : "" ]out" - else - icon_state = "[i == 1 && istype(loc, /turf/simulated) ? "h" : "" ]in" - else - icon_state = "[i == 1 && istype(loc, /turf/simulated) ? "h" : "" ]off" - on = 0 - return - - process() - ..() - - if(!on) - return 0 - - var/datum/gas_mixture/environment = loc.return_air() - var/environment_pressure = environment.return_pressure() - - if(pump_direction) //input -> external - var/pressure_delta = 10000 - - if(pressure_checks&1) - pressure_delta = min(pressure_delta, (external_pressure_bound - environment_pressure)) - if(pressure_checks&2) - pressure_delta = min(pressure_delta, (air1.return_pressure() - input_pressure_min)) - - if(pressure_delta > 0) - if(air1.temperature > 0) - var/transfer_moles = pressure_delta*environment.volume/(air1.temperature * R_IDEAL_GAS_EQUATION) - - var/datum/gas_mixture/removed = air1.remove(transfer_moles) - - loc.assume_air(removed) - - if(network1) - network1.update = 1 - - else //external -> output - var/pressure_delta = 10000 - - if(pressure_checks&1) - pressure_delta = min(pressure_delta, (environment_pressure - external_pressure_bound)) - if(pressure_checks&4) - pressure_delta = min(pressure_delta, (output_pressure_max - air2.return_pressure())) - - if(pressure_delta > 0) - if(environment.temperature > 0) - var/transfer_moles = pressure_delta*air2.volume/(environment.temperature * R_IDEAL_GAS_EQUATION) - - var/datum/gas_mixture/removed = loc.remove_air(transfer_moles) - - air2.merge(removed) - - if(network2) - network2.update = 1 - - return 1 - - //Radio remote control - - proc - set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) - frequency = new_frequency - if(frequency) - radio_connection = radio_controller.add_object(src, frequency, filter = RADIO_ATMOSIA) - - broadcast_status() - if(!radio_connection) - return 0 - - var/datum/signal/signal = new - signal.transmission_method = 1 //radio signal - signal.source = src - - signal.data = list( - "tag" = id, - "device" = "ADVP", - "power" = on, - "direction" = pump_direction?("release"):("siphon"), - "checks" = pressure_checks, - "input" = input_pressure_min, - "output" = output_pressure_max, - "external" = external_pressure_bound, - "sigtype" = "status" - ) - radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) - - return 1 - var/frequency = 0 var/id = null var/datum/radio_frequency/radio_connection - initialize() - ..() - if(frequency) - set_frequency(frequency) +/obj/machinery/atmospherics/binary/dp_vent_pump/high_volume + name = "large dual-port air vent" - receive_signal(datum/signal/signal) +/obj/machinery/atmospherics/binary/dp_vent_pump/high_volume/New() + ..() - if(!signal.data["tag"] || (signal.data["tag"] != id) || (signal.data["sigtype"]!="command")) - return 0 - if("power" in signal.data) - on = text2num(signal.data["power"]) + air1.volume = 1000 + air2.volume = 1000 - if("power_toggle" in signal.data) - on = !on +var/on = 0 +var/pump_direction = 1 //0 = siphoning, 1 = releasing - if("set_direction" in signal.data) - pump_direction = text2num(signal.data["set_direction"]) +var/external_pressure_bound = ONE_ATMOSPHERE +var/input_pressure_min = 0 +var/output_pressure_max = 0 - if("checks" in signal.data) - pressure_checks = text2num(signal.data["checks"]) +var/pressure_checks = 1 +//1: Do not pass external_pressure_bound +//2: Do not pass input_pressure_min +//4: Do not pass output_pressure_max - if("purge" in signal.data) - pressure_checks &= ~1 - pump_direction = 0 +/obj/machinery/atmospherics/binary/dp_vent_pump/update_icon() + if(on) + if(pump_direction) + icon_state = "[level == 1 && istype(loc, /turf/simulated) ? "h" : "" ]out" + else + icon_state = "[level == 1 && istype(loc, /turf/simulated) ? "h" : "" ]in" + else + icon_state = "[level == 1 && istype(loc, /turf/simulated) ? "h" : "" ]off" + on = 0 - if("stabalize" in signal.data) - pressure_checks |= 1 - pump_direction = 1 + return - if("set_input_pressure" in signal.data) - input_pressure_min = Clamp( - text2num(signal.data["set_input_pressure"]), - 0, - ONE_ATMOSPHERE*50 - ) +/obj/machinery/atmospherics/binary/dp_vent_pump/hide(var/i) //to make the little pipe section invisible, the icon changes. + if(on) + if(pump_direction) + icon_state = "[i == 1 && istype(loc, /turf/simulated) ? "h" : "" ]out" + else + icon_state = "[i == 1 && istype(loc, /turf/simulated) ? "h" : "" ]in" + else + icon_state = "[i == 1 && istype(loc, /turf/simulated) ? "h" : "" ]off" + on = 0 + return - if("set_output_pressure" in signal.data) - output_pressure_max = Clamp( - text2num(signal.data["set_output_pressure"]), - 0, - ONE_ATMOSPHERE*50 - ) +/obj/machinery/atmospherics/binary/dp_vent_pump/process() + ..() - if("set_external_pressure" in signal.data) - external_pressure_bound = Clamp( - text2num(signal.data["set_external_pressure"]), - 0, - ONE_ATMOSPHERE*50 - ) + if(!on) + return 0 - if("status" in signal.data) - spawn(2) - broadcast_status() - return //do not update_icon - //if(signal.data["tag"]) + var/datum/gas_mixture/environment = loc.return_air() + var/environment_pressure = environment.return_pressure() + + if(pump_direction) //input -> external + var/pressure_delta = 10000 + + if(pressure_checks&1) + pressure_delta = min(pressure_delta, (external_pressure_bound - environment_pressure)) + if(pressure_checks&2) + pressure_delta = min(pressure_delta, (air1.return_pressure() - input_pressure_min)) + + if(pressure_delta > 0) + if(air1.temperature > 0) + var/transfer_moles = pressure_delta*environment.volume/(air1.temperature * R_IDEAL_GAS_EQUATION) + + var/datum/gas_mixture/removed = air1.remove(transfer_moles) + + loc.assume_air(removed) + + if(network1) + network1.update = 1 + + else //external -> output + var/pressure_delta = 10000 + + if(pressure_checks&1) + pressure_delta = min(pressure_delta, (environment_pressure - external_pressure_bound)) + if(pressure_checks&4) + pressure_delta = min(pressure_delta, (output_pressure_max - air2.return_pressure())) + + if(pressure_delta > 0) + if(environment.temperature > 0) + var/transfer_moles = pressure_delta*air2.volume/(environment.temperature * R_IDEAL_GAS_EQUATION) + + var/datum/gas_mixture/removed = loc.remove_air(transfer_moles) + + air2.merge(removed) + + if(network2) + network2.update = 1 + + return 1 + + //Radio remote control + +/obj/machinery/atmospherics/binary/dp_vent_pump/proc/set_frequency(new_frequency) + radio_controller.remove_object(src, frequency) + frequency = new_frequency + if(frequency) + radio_connection = radio_controller.add_object(src, frequency, filter = RADIO_ATMOSIA) + +/obj/machinery/atmospherics/binary/dp_vent_pump/proc/broadcast_status() + if(!radio_connection) + return 0 + + var/datum/signal/signal = new + signal.transmission_method = 1 //radio signal + signal.source = src + + signal.data = list( + "tag" = id, + "device" = "ADVP", + "power" = on, + "direction" = pump_direction?("release"):("siphon"), + "checks" = pressure_checks, + "input" = input_pressure_min, + "output" = output_pressure_max, + "external" = external_pressure_bound, + "sigtype" = "status" + ) + radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) + + return 1 + +/obj/machinery/atmospherics/binary/dp_vent_pump/initialize() + ..() + if(frequency) + set_frequency(frequency) + +/obj/machinery/atmospherics/binary/dp_vent_pump/receive_signal(datum/signal/signal) + + if(!signal.data["tag"] || (signal.data["tag"] != id) || (signal.data["sigtype"]!="command")) + return 0 + if("power" in signal.data) + on = text2num(signal.data["power"]) + + if("power_toggle" in signal.data) + on = !on + + if("set_direction" in signal.data) + pump_direction = text2num(signal.data["set_direction"]) + + if("checks" in signal.data) + pressure_checks = text2num(signal.data["checks"]) + + if("purge" in signal.data) + pressure_checks &= ~1 + pump_direction = 0 + + if("stabalize" in signal.data) + pressure_checks |= 1 + pump_direction = 1 + + if("set_input_pressure" in signal.data) + input_pressure_min = Clamp( + text2num(signal.data["set_input_pressure"]), + 0, + ONE_ATMOSPHERE*50 + ) + + if("set_output_pressure" in signal.data) + output_pressure_max = Clamp( + text2num(signal.data["set_output_pressure"]), + 0, + ONE_ATMOSPHERE*50 + ) + + if("set_external_pressure" in signal.data) + external_pressure_bound = Clamp( + text2num(signal.data["set_external_pressure"]), + 0, + ONE_ATMOSPHERE*50 + ) + + if("status" in signal.data) spawn(2) broadcast_status() - update_icon() \ No newline at end of file + return //do not update_icon + //if(signal.data["tag"]) + spawn(2) + broadcast_status() + update_icon() diff --git a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm index 9441b78e48d..8cea7ee9207 100644 --- a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm +++ b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm @@ -1,4 +1,4 @@ -obj/machinery/atmospherics/binary/passive_gate +/obj/machinery/atmospherics/binary/passive_gate //Tries to achieve target pressure at output (like a normal pump) except // Uses no power but can not transfer gases from a low pressure area to a high pressure area icon = 'icons/obj/atmospherics/passive_gate.dmi' @@ -16,156 +16,155 @@ obj/machinery/atmospherics/binary/passive_gate var/id = null var/datum/radio_frequency/radio_connection - update_icon() - if(stat & NOPOWER) - icon_state = "intact_off" - else if(node1 && node2) - icon_state = "intact_[on?("on"):("off")]" +/obj/machinery/atmospherics/binary/passive_gate/update_icon() + if(stat & NOPOWER) + icon_state = "intact_off" + else if(node1 && node2) + icon_state = "intact_[on?("on"):("off")]" + else + if(node1) + icon_state = "exposed_1_off" + else if(node2) + icon_state = "exposed_2_off" else - if(node1) - icon_state = "exposed_1_off" - else if(node2) - icon_state = "exposed_2_off" - else - icon_state = "exposed_3_off" - return + icon_state = "exposed_3_off" + return - process() - ..() - if(!on) - return 0 +/obj/machinery/atmospherics/binary/passive_gate/process() + ..() + if(!on) + return 0 - var/output_starting_pressure = air2.return_pressure() - var/input_starting_pressure = air1.return_pressure() + var/output_starting_pressure = air2.return_pressure() + var/input_starting_pressure = air1.return_pressure() - if(output_starting_pressure >= min(target_pressure,input_starting_pressure-10)) - //No need to pump gas if target is already reached or input pressure is too low - //Need at least 10 KPa difference to overcome friction in the mechanism - return 1 + if(output_starting_pressure >= min(target_pressure,input_starting_pressure-10)) + //No need to pump gas if target is already reached or input pressure is too low + //Need at least 10 KPa difference to overcome friction in the mechanism + return 1 - //Calculate necessary moles to transfer using PV = nRT - if((air1.total_moles() > 0) && (air1.temperature>0)) - var/pressure_delta = min(target_pressure - output_starting_pressure, (input_starting_pressure - output_starting_pressure)/2) - //Can not have a pressure delta that would cause output_pressure > input_pressure + //Calculate necessary moles to transfer using PV = nRT + if((air1.total_moles() > 0) && (air1.temperature>0)) + var/pressure_delta = min(target_pressure - output_starting_pressure, (input_starting_pressure - output_starting_pressure)/2) + //Can not have a pressure delta that would cause output_pressure > input_pressure - var/transfer_moles = pressure_delta*air2.volume/(air1.temperature * R_IDEAL_GAS_EQUATION) + var/transfer_moles = pressure_delta*air2.volume/(air1.temperature * R_IDEAL_GAS_EQUATION) - //Actually transfer the gas - var/datum/gas_mixture/removed = air1.remove(transfer_moles) - air2.merge(removed) + //Actually transfer the gas + var/datum/gas_mixture/removed = air1.remove(transfer_moles) + air2.merge(removed) - if(network1) - network1.update = 1 + if(network1) + network1.update = 1 - if(network2) - network2.update = 1 + if(network2) + network2.update = 1 - //Radio remote control +//Radio remote control - proc - set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) - frequency = new_frequency - if(frequency) - radio_connection = radio_controller.add_object(src, frequency, filter = RADIO_ATMOSIA) +/obj/machinery/atmospherics/binary/passive_gate/proc/set_frequency(new_frequency) + radio_controller.remove_object(src, frequency) + frequency = new_frequency + if(frequency) + radio_connection = radio_controller.add_object(src, frequency, filter = RADIO_ATMOSIA) - broadcast_status() - if(!radio_connection) - return 0 +/obj/machinery/atmospherics/binary/passive_gate/proc/broadcast_status() + if(!radio_connection) + return 0 - var/datum/signal/signal = new - signal.transmission_method = 1 //radio signal - signal.source = src + var/datum/signal/signal = new + signal.transmission_method = 1 //radio signal + signal.source = src - signal.data = list( - "tag" = id, - "device" = "AGP", - "power" = on, - "target_output" = target_pressure, - "sigtype" = "status" - ) + signal.data = list( + "tag" = id, + "device" = "AGP", + "power" = on, + "target_output" = target_pressure, + "sigtype" = "status" + ) - radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) + radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) - return 1 + return 1 - interact(mob/user as mob) - var/dat = {"Power: [on?"On":"Off"]
- Desirable output pressure: - [round(target_pressure,0.1)]kPa | Change - "} +/obj/machinery/atmospherics/binary/passive_gate/interact(mob/user as mob) + var/dat = {"Power: [on?"On":"Off"]
+ Desirable output pressure: + [round(target_pressure,0.1)]kPa | Change + "} - user << browse("[src.name] control[dat]", "window=atmo_pump") - onclose(user, "atmo_pump") + user << browse("[src.name] control[dat]", "window=atmo_pump") + onclose(user, "atmo_pump") - initialize() - ..() - if(frequency) - set_frequency(frequency) +/obj/machinery/atmospherics/binary/passive_gate/initialize() + ..() + if(frequency) + set_frequency(frequency) - receive_signal(datum/signal/signal) - if(!signal.data["tag"] || (signal.data["tag"] != id) || (signal.data["sigtype"]!="command")) - return 0 +/obj/machinery/atmospherics/binary/passive_gate/receive_signal(datum/signal/signal) + if(!signal.data["tag"] || (signal.data["tag"] != id) || (signal.data["sigtype"]!="command")) + return 0 - if("power" in signal.data) - on = text2num(signal.data["power"]) + if("power" in signal.data) + on = text2num(signal.data["power"]) - if("power_toggle" in signal.data) - on = !on + if("power_toggle" in signal.data) + on = !on - if("set_output_pressure" in signal.data) - target_pressure = Clamp( - text2num(signal.data["set_output_pressure"]), - 0, - ONE_ATMOSPHERE*50 - ) - - if("status" in signal.data) - spawn(2) - broadcast_status() - return //do not update_icon + if("set_output_pressure" in signal.data) + target_pressure = Clamp( + text2num(signal.data["set_output_pressure"]), + 0, + ONE_ATMOSPHERE*50 + ) + if("status" in signal.data) spawn(2) broadcast_status() - update_icon() + return //do not update_icon + + spawn(2) + broadcast_status() + update_icon() + return + + + +/obj/machinery/atmospherics/binary/passive_gate/attack_hand(user as mob) + if(..()) return - - - - attack_hand(user as mob) - if(..()) - return - src.add_fingerprint(usr) - if(!src.allowed(user)) - user << "\red Access denied." - return - usr.set_machine(src) - interact(user) + src.add_fingerprint(usr) + if(!src.allowed(user)) + user << "\red Access denied." return + usr.set_machine(src) + interact(user) + return - Topic(href,href_list) - if(..()) return - if(href_list["power"]) - on = !on - if(href_list["set_press"]) - var/new_pressure = input(usr,"Enter new output pressure (0-4500kPa)","Pressure control",src.target_pressure) as num - src.target_pressure = max(0, min(4500, new_pressure)) - usr.set_machine(src) - src.update_icon() - src.updateUsrDialog() - return +/obj/machinery/atmospherics/binary/passive_gate/Topic(href,href_list) + if(..()) return + if(href_list["power"]) + on = !on + if(href_list["set_press"]) + var/new_pressure = input(usr,"Enter new output pressure (0-4500kPa)","Pressure control",src.target_pressure) as num + src.target_pressure = max(0, min(4500, new_pressure)) + usr.set_machine(src) + src.update_icon() + src.updateUsrDialog() + return - power_change() - ..() - update_icon() +/obj/machinery/atmospherics/binary/passive_gate/power_change() + ..() + update_icon() - attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) - if (!istype(W, /obj/item/weapon/wrench)) - return ..() - if (on) - user << "\red You cannot unwrench this [src], turn it off first." - return 1 +/obj/machinery/atmospherics/binary/passive_gate/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) + if (!istype(W, /obj/item/weapon/wrench)) return ..() + if (on) + user << "\red You cannot unwrench this [src], turn it off first." + return 1 + return ..() diff --git a/code/ATMOSPHERICS/components/binary_devices/pump.dm b/code/ATMOSPHERICS/components/binary_devices/pump.dm index 025cfded082..fa0b11c7878 100644 --- a/code/ATMOSPHERICS/components/binary_devices/pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/pump.dm @@ -12,7 +12,7 @@ Thus, the two variables affect pump operation are set in New(): but overall network volume is also increased as this increases... */ -obj/machinery/atmospherics/binary/pump +/obj/machinery/atmospherics/binary/pump icon = 'icons/obj/atmospherics/pump.dmi' icon_state = "intact_off" @@ -28,157 +28,156 @@ obj/machinery/atmospherics/binary/pump var/id = null var/datum/radio_frequency/radio_connection - on - on = 1 - icon_state = "intact_on" +/obj/machinery/atmospherics/binary/pump/on + on = 1 + icon_state = "intact_on" - update_icon() - if(stat & NOPOWER) - icon_state = "intact_off" - else if(node1 && node2) - icon_state = "intact_[on?("on"):("off")]" +/obj/machinery/atmospherics/binary/pump/update_icon() + if(stat & NOPOWER) + icon_state = "intact_off" + else if(node1 && node2) + icon_state = "intact_[on?("on"):("off")]" + else + if(node1) + icon_state = "exposed_1_off" + else if(node2) + icon_state = "exposed_2_off" else - if(node1) - icon_state = "exposed_1_off" - else if(node2) - icon_state = "exposed_2_off" - else - icon_state = "exposed_3_off" + icon_state = "exposed_3_off" + return + +/obj/machinery/atmospherics/binary/pump/process() +// ..() + if(stat & (NOPOWER|BROKEN)) return + if(!on) + return 0 - process() -// ..() - if(stat & (NOPOWER|BROKEN)) - return - if(!on) - return 0 - - var/output_starting_pressure = air2.return_pressure() - - if( (target_pressure - output_starting_pressure) < 0.01) - //No need to pump gas if target is already reached! - return 1 - - //Calculate necessary moles to transfer using PV=nRT - if((air1.total_moles() > 0) && (air1.temperature>0)) - var/pressure_delta = target_pressure - output_starting_pressure - var/transfer_moles = pressure_delta*air2.volume/(air1.temperature * R_IDEAL_GAS_EQUATION) - - //Actually transfer the gas - var/datum/gas_mixture/removed = air1.remove(transfer_moles) - air2.merge(removed) - - if(network1) - network1.update = 1 - - if(network2) - network2.update = 1 + var/output_starting_pressure = air2.return_pressure() + if( (target_pressure - output_starting_pressure) < 0.01) + //No need to pump gas if target is already reached! return 1 + //Calculate necessary moles to transfer using PV=nRT + if((air1.total_moles() > 0) && (air1.temperature>0)) + var/pressure_delta = target_pressure - output_starting_pressure + var/transfer_moles = pressure_delta*air2.volume/(air1.temperature * R_IDEAL_GAS_EQUATION) + + //Actually transfer the gas + var/datum/gas_mixture/removed = air1.remove(transfer_moles) + air2.merge(removed) + + if(network1) + network1.update = 1 + + if(network2) + network2.update = 1 + + return 1 + //Radio remote control - proc - set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) - frequency = new_frequency - if(frequency) - radio_connection = radio_controller.add_object(src, frequency, filter = RADIO_ATMOSIA) +/obj/machinery/atmospherics/binary/pump/proc/set_frequency(new_frequency) + radio_controller.remove_object(src, frequency) + frequency = new_frequency + if(frequency) + radio_connection = radio_controller.add_object(src, frequency, filter = RADIO_ATMOSIA) - broadcast_status() - if(!radio_connection) - return 0 +/obj/machinery/atmospherics/binary/pump/proc/broadcast_status() + if(!radio_connection) + return 0 - var/datum/signal/signal = new - signal.transmission_method = 1 //radio signal - signal.source = src + var/datum/signal/signal = new + signal.transmission_method = 1 //radio signal + signal.source = src - signal.data = list( - "tag" = id, - "device" = "AGP", - "power" = on, - "target_output" = target_pressure, - "sigtype" = "status" - ) + signal.data = list( + "tag" = id, + "device" = "AGP", + "power" = on, + "target_output" = target_pressure, + "sigtype" = "status" + ) - radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) + radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) - return 1 + return 1 - interact(mob/user as mob) - var/dat = {"Power: [on?"On":"Off"]
- Desirable output pressure: - [round(target_pressure,0.1)]kPa | Change - "} +/obj/machinery/atmospherics/binary/pump/interact(mob/user as mob) + var/dat = {"Power: [on?"On":"Off"]
+ Desirable output pressure: + [round(target_pressure,0.1)]kPa | Change + "} - user << browse("[src.name] control[dat]", "window=atmo_pump") - onclose(user, "atmo_pump") + user << browse("[src.name] control[dat]", "window=atmo_pump") + onclose(user, "atmo_pump") - initialize() - ..() - if(frequency) - set_frequency(frequency) +/obj/machinery/atmospherics/binary/pump/initialize() + ..() + if(frequency) + set_frequency(frequency) - receive_signal(datum/signal/signal) - if(!signal.data["tag"] || (signal.data["tag"] != id) || (signal.data["sigtype"]!="command")) - return 0 +/obj/machinery/atmospherics/binary/pump/receive_signal(datum/signal/signal) + if(!signal.data["tag"] || (signal.data["tag"] != id) || (signal.data["sigtype"]!="command")) + return 0 - if("power" in signal.data) - on = text2num(signal.data["power"]) + if("power" in signal.data) + on = text2num(signal.data["power"]) - if("power_toggle" in signal.data) - on = !on + if("power_toggle" in signal.data) + on = !on - if("set_output_pressure" in signal.data) - target_pressure = Clamp( - text2num(signal.data["set_output_pressure"]), - 0, - ONE_ATMOSPHERE*50 - ) - - if("status" in signal.data) - spawn(2) - broadcast_status() - return //do not update_icon + if("set_output_pressure" in signal.data) + target_pressure = Clamp( + text2num(signal.data["set_output_pressure"]), + 0, + ONE_ATMOSPHERE*50 + ) + if("status" in signal.data) spawn(2) broadcast_status() - update_icon() + return //do not update_icon + + spawn(2) + broadcast_status() + update_icon() + return + + +/obj/machinery/atmospherics/binary/pump/attack_hand(user as mob) + if(..()) return - - - attack_hand(user as mob) - if(..()) - return - src.add_fingerprint(usr) - if(!src.allowed(user)) - user << "\red Access denied." - return - usr.set_machine(src) - interact(user) + src.add_fingerprint(usr) + if(!src.allowed(user)) + user << "\red Access denied." return + usr.set_machine(src) + interact(user) + return - Topic(href,href_list) - if(..()) return - if(href_list["power"]) - on = !on - if(href_list["set_press"]) - var/new_pressure = input(usr,"Enter new output pressure (0-4500kPa)","Pressure control",src.target_pressure) as num - src.target_pressure = max(0, min(4500, new_pressure)) - usr.set_machine(src) - src.update_icon() - src.updateUsrDialog() - return +/obj/machinery/atmospherics/binary/pump/Topic(href,href_list) + if(..()) return + if(href_list["power"]) + on = !on + if(href_list["set_press"]) + var/new_pressure = input(usr,"Enter new output pressure (0-4500kPa)","Pressure control",src.target_pressure) as num + src.target_pressure = max(0, min(4500, new_pressure)) + usr.set_machine(src) + src.update_icon() + src.updateUsrDialog() + return - power_change() - ..() - update_icon() +/obj/machinery/atmospherics/binary/pump/power_change() + ..() + update_icon() - attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) - if (!istype(W, /obj/item/weapon/wrench)) - return ..() - if (!(stat & NOPOWER) && on) - user << "\red You cannot unwrench this [src], turn it off first." - return 1 +/obj/machinery/atmospherics/binary/pump/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) + if (!istype(W, /obj/item/weapon/wrench)) return ..() + if (!(stat & NOPOWER) && on) + user << "\red You cannot unwrench this [src], turn it off first." + return 1 + return ..() diff --git a/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm b/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm index 049c3360362..2c6cd18c73d 100644 --- a/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm @@ -12,7 +12,7 @@ Thus, the two variables affect pump operation are set in New(): but overall network volume is also increased as this increases... */ -obj/machinery/atmospherics/binary/volume_pump +/obj/machinery/atmospherics/binary/volume_pump icon = 'icons/obj/atmospherics/volume_pump.dmi' icon_state = "intact_off" @@ -28,155 +28,154 @@ obj/machinery/atmospherics/binary/volume_pump var/id = null var/datum/radio_frequency/radio_connection - on - on = 1 - icon_state = "intact_on" +/obj/machinery/atmospherics/binary/volume_pump/on + on = 1 + icon_state = "intact_on" - update_icon() - if(stat & NOPOWER) - icon_state = "intact_off" - else if(node1 && node2) - icon_state = "intact_[on?("on"):("off")]" +/obj/machinery/atmospherics/binary/volume_pump/update_icon() + if(stat & NOPOWER) + icon_state = "intact_off" + else if(node1 && node2) + icon_state = "intact_[on?("on"):("off")]" + else + if(node1) + icon_state = "exposed_1_off" + else if(node2) + icon_state = "exposed_2_off" else - if(node1) - icon_state = "exposed_1_off" - else if(node2) - icon_state = "exposed_2_off" - else - icon_state = "exposed_3_off" - return + icon_state = "exposed_3_off" + return - process() -// ..() - if(stat & (NOPOWER|BROKEN)) - return - if(!on) - return 0 +/obj/machinery/atmospherics/binary/volume_pump/process() +// ..() + if(stat & (NOPOWER|BROKEN)) + return + if(!on) + return 0 // Pump mechanism just won't do anything if the pressure is too high/too low - var/input_starting_pressure = air1.return_pressure() - var/output_starting_pressure = air2.return_pressure() - - if((input_starting_pressure < 0.01) || (output_starting_pressure > 9000)) - return 1 - - var/transfer_ratio = max(1, transfer_rate/air1.volume) - - var/datum/gas_mixture/removed = air1.remove_ratio(transfer_ratio) - - air2.merge(removed) - - if(network1) - network1.update = 1 - - if(network2) - network2.update = 1 + var/input_starting_pressure = air1.return_pressure() + var/output_starting_pressure = air2.return_pressure() + if((input_starting_pressure < 0.01) || (output_starting_pressure > 9000)) return 1 - proc - set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) - frequency = new_frequency - if(frequency) - radio_connection = radio_controller.add_object(src, frequency) + var/transfer_ratio = max(1, transfer_rate/air1.volume) - broadcast_status() - if(!radio_connection) - return 0 + var/datum/gas_mixture/removed = air1.remove_ratio(transfer_ratio) - var/datum/signal/signal = new - signal.transmission_method = 1 //radio signal - signal.source = src + air2.merge(removed) - signal.data = list( - "tag" = id, - "device" = "APV", - "power" = on, - "transfer_rate" = transfer_rate, - "sigtype" = "status" - ) - radio_connection.post_signal(src, signal) + if(network1) + network1.update = 1 - return 1 + if(network2) + network2.update = 1 - interact(mob/user as mob) - var/dat = {"Power: [on?"On":"Off"]
- Desirable output flow: - [round(transfer_rate,1)]l/s | Change - "} + return 1 - user << browse("[src.name] control[dat]", "window=atmo_pump") - onclose(user, "atmo_pump") +/obj/machinery/atmospherics/binary/volume_pump/proc/set_frequency(new_frequency) + radio_controller.remove_object(src, frequency) + frequency = new_frequency + if(frequency) + radio_connection = radio_controller.add_object(src, frequency) + +/obj/machinery/atmospherics/binary/volume_pump/proc/broadcast_status() + if(!radio_connection) + return 0 + + var/datum/signal/signal = new + signal.transmission_method = 1 //radio signal + signal.source = src + + signal.data = list( + "tag" = id, + "device" = "APV", + "power" = on, + "transfer_rate" = transfer_rate, + "sigtype" = "status" + ) + radio_connection.post_signal(src, signal) + + return 1 + +/obj/machinery/atmospherics/binary/volume_pump/interact(mob/user as mob) + var/dat = {"Power: [on?"On":"Off"]
+ Desirable output flow: + [round(transfer_rate,1)]l/s | Change + "} + + user << browse("[src.name] control[dat]", "window=atmo_pump") + onclose(user, "atmo_pump") - initialize() - ..() +/obj/machinery/atmospherics/binary/volume_pump/initialize() + ..() - set_frequency(frequency) + set_frequency(frequency) - receive_signal(datum/signal/signal) - if(!signal.data["tag"] || (signal.data["tag"] != id) || (signal.data["sigtype"]!="command")) - return 0 +/obj/machinery/atmospherics/binary/volume_pump/receive_signal(datum/signal/signal) + if(!signal.data["tag"] || (signal.data["tag"] != id) || (signal.data["sigtype"]!="command")) + return 0 - if("power" in signal.data) - on = text2num(signal.data["power"]) + if("power" in signal.data) + on = text2num(signal.data["power"]) - if("power_toggle" in signal.data) - on = !on + if("power_toggle" in signal.data) + on = !on - if("set_transfer_rate" in signal.data) - transfer_rate = Clamp( - text2num(signal.data["set_transfer_rate"]), - 0, - air1.volume - ) - - if("status" in signal.data) - spawn(2) - broadcast_status() - return //do not update_icon + if("set_transfer_rate" in signal.data) + transfer_rate = Clamp( + text2num(signal.data["set_transfer_rate"]), + 0, + air1.volume + ) + if("status" in signal.data) spawn(2) broadcast_status() - update_icon() + return //do not update_icon + + spawn(2) + broadcast_status() + update_icon() - attack_hand(user as mob) - if(..()) - return - src.add_fingerprint(usr) - if(!src.allowed(user)) - user << "\red Access denied." - return - usr.set_machine(src) - interact(user) +/obj/machinery/atmospherics/binary/volume_pump/attack_hand(user as mob) + if(..()) return - - Topic(href,href_list) - if(..()) return - if(href_list["power"]) - on = !on - if(href_list["set_transfer_rate"]) - var/new_transfer_rate = input(usr,"Enter new output volume (0-200l/s)","Flow control",src.transfer_rate) as num - src.transfer_rate = max(0, min(200, new_transfer_rate)) - usr.set_machine(src) - src.update_icon() - src.updateUsrDialog() + src.add_fingerprint(usr) + if(!src.allowed(user)) + user << "\red Access denied." return + usr.set_machine(src) + interact(user) + return - power_change() - ..() - update_icon() +/obj/machinery/atmospherics/binary/volume_pump/Topic(href,href_list) + if(..()) return + if(href_list["power"]) + on = !on + if(href_list["set_transfer_rate"]) + var/new_transfer_rate = input(usr,"Enter new output volume (0-200l/s)","Flow control",src.transfer_rate) as num + src.transfer_rate = max(0, min(200, new_transfer_rate)) + usr.set_machine(src) + src.update_icon() + src.updateUsrDialog() + return + +/obj/machinery/atmospherics/binary/volume_pump/power_change() + ..() + update_icon() - attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) - if (!istype(W, /obj/item/weapon/wrench)) - return ..() - if (!(stat & NOPOWER) && on) - user << "\red You cannot unwrench this [src], turn it off first." - return 1 +/obj/machinery/atmospherics/binary/volume_pump/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) + if (!istype(W, /obj/item/weapon/wrench)) return ..() + if (!(stat & NOPOWER) && on) + user << "\red You cannot unwrench this [src], turn it off first." + return 1 + return ..() diff --git a/code/ATMOSPHERICS/components/portables_connector.dm b/code/ATMOSPHERICS/components/portables_connector.dm index 545163c9cf4..2f4bf80bed9 100644 --- a/code/ATMOSPHERICS/components/portables_connector.dm +++ b/code/ATMOSPHERICS/components/portables_connector.dm @@ -21,117 +21,117 @@ level = 0 - New() - initialize_directions = dir - ..() +/obj/machinery/atmospherics/portables_connector/New() + initialize_directions = dir + ..() - update_icon() - if(node) - icon_state = "[level == 1 && istype(loc, /turf/simulated) ? "h" : "" ]intact" - dir = get_dir(src, node) - else - icon_state = "exposed" +/obj/machinery/atmospherics/portables_connector/update_icon() + if(node) + icon_state = "[level == 1 && istype(loc, /turf/simulated) ? "h" : "" ]intact" + dir = get_dir(src, node) + else + icon_state = "exposed" + return + +/obj/machinery/atmospherics/portables_connector/hide(var/i) //to make the little pipe section invisible, the icon changes. + if(node) + icon_state = "[i == 1 && istype(loc, /turf/simulated) ? "h" : "" ]intact" + dir = get_dir(src, node) + else + icon_state = "exposed" + +/obj/machinery/atmospherics/portables_connector/process() + ..() + if(!on) return - - hide(var/i) //to make the little pipe section invisible, the icon changes. - if(node) - icon_state = "[i == 1 && istype(loc, /turf/simulated) ? "h" : "" ]intact" - dir = get_dir(src, node) - else - icon_state = "exposed" - - process() - ..() - if(!on) - return - if(!connected_device) - on = 0 - return - if(network) - network.update = 1 - return 1 + if(!connected_device) + on = 0 + return + if(network) + network.update = 1 + return 1 // Housekeeping and pipe network stuff below - network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference) - if(reference == node) - network = new_network +/obj/machinery/atmospherics/portables_connector/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference) + if(reference == node) + network = new_network - if(new_network.normal_members.Find(src)) - return 0 + if(new_network.normal_members.Find(src)) + return 0 - new_network.normal_members += src + new_network.normal_members += src - return null + return null - Destroy() - if(connected_device) - connected_device.disconnect() +/obj/machinery/atmospherics/portables_connector/Destroy() + if(connected_device) + connected_device.disconnect() - if(node) - node.disconnect(src) - del(network) + if(node) + node.disconnect(src) + del(network) + node = null + + ..() + +/obj/machinery/atmospherics/portables_connector/initialize() + src.disconnect(src) + + var/node_connect = dir + + for(var/obj/machinery/atmospherics/target in get_step(src,node_connect)) + if(target.initialize_directions & get_dir(target,src)) + node = target + break + + update_icon() + +/obj/machinery/atmospherics/portables_connector/build_network() + if(!network && node) + network = new /datum/pipe_network() + network.normal_members += src + network.build_network(node, src) + + +/obj/machinery/atmospherics/portables_connector/return_network(obj/machinery/atmospherics/reference) + build_network() + + if(reference==node) + return network + + if(reference==connected_device) + return network + + return null + +/obj/machinery/atmospherics/portables_connector/reassign_network(datum/pipe_network/old_network, datum/pipe_network/new_network) + if(network == old_network) + network = new_network + + return 1 + +/obj/machinery/atmospherics/portables_connector/return_network_air(datum/pipe_network/reference) + var/list/results = list() + + if(connected_device) + results += connected_device.air_contents + + return results + +/obj/machinery/atmospherics/portables_connector/disconnect(obj/machinery/atmospherics/reference) + if(reference==node) + del(network) node = null - ..() - - initialize() - src.disconnect(src) - - var/node_connect = dir - - for(var/obj/machinery/atmospherics/target in get_step(src,node_connect)) - if(target.initialize_directions & get_dir(target,src)) - node = target - break - - update_icon() - - build_network() - if(!network && node) - network = new /datum/pipe_network() - network.normal_members += src - network.build_network(node, src) + return null - return_network(obj/machinery/atmospherics/reference) - build_network() - - if(reference==node) - return network - - if(reference==connected_device) - return network - - return null - - reassign_network(datum/pipe_network/old_network, datum/pipe_network/new_network) - if(network == old_network) - network = new_network - +/obj/machinery/atmospherics/portables_connector/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) + if (!istype(W, /obj/item/weapon/wrench)) + return ..() + if (connected_device) + user << "\red You cannot unwrench this [src], dettach [connected_device] first." return 1 - - return_network_air(datum/pipe_network/reference) - var/list/results = list() - - if(connected_device) - results += connected_device.air_contents - - return results - - disconnect(obj/machinery/atmospherics/reference) - if(reference==node) - del(network) - node = null - - return null - - - attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) - if (!istype(W, /obj/item/weapon/wrench)) - return ..() - if (connected_device) - user << "\red You cannot unwrench this [src], dettach [connected_device] first." - return 1 - return ..() \ No newline at end of file + return ..() diff --git a/code/ATMOSPHERICS/components/trinary_devices/filter.dm b/code/ATMOSPHERICS/components/trinary_devices/filter.dm index 34757072946..e64eef54de3 100644 --- a/code/ATMOSPHERICS/components/trinary_devices/filter.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/filter.dm @@ -1,4 +1,4 @@ -obj/machinery/atmospherics/trinary/filter +/obj/machinery/atmospherics/trinary/filter icon = 'icons/obj/atmospherics/filter.dmi' icon_state = "intact_off" density = 1 @@ -28,117 +28,116 @@ Filter types: var/frequency = 0 var/datum/radio_frequency/radio_connection - proc - set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) - frequency = new_frequency - if(frequency) - radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA) +/obj/machinery/atmospherics/trinary/filter/proc/set_frequency(new_frequency) + radio_controller.remove_object(src, frequency) + frequency = new_frequency + if(frequency) + radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA) - New() - ..() - if(radio_controller) - initialize() +/obj/machinery/atmospherics/trinary/filter/New() + ..() + if(radio_controller) + initialize() - update_icon() - if(stat & NOPOWER) - icon_state = "intact_off" - else if(node2 && node3 && node1) - icon_state = "intact_[on?("on"):("off")]" - else - icon_state = "intact_off" - on = 0 +/obj/machinery/atmospherics/trinary/filter/update_icon() + if(stat & NOPOWER) + icon_state = "intact_off" + else if(node2 && node3 && node1) + icon_state = "intact_[on?("on"):("off")]" + else + icon_state = "intact_off" + on = 0 - return + return - power_change() - var/old_stat = stat - ..() - if(old_stat != stat) - update_icon() +/obj/machinery/atmospherics/trinary/filter/power_change() + var/old_stat = stat + ..() + if(old_stat != stat) + update_icon() - process() - ..() - if(!on) - return 0 +/obj/machinery/atmospherics/trinary/filter/process() + ..() + if(!on) + return 0 - var/output_starting_pressure = air3.return_pressure() - - if(output_starting_pressure >= target_pressure) - //No need to mix if target is already full! - return 1 - - //Calculate necessary moles to transfer using PV=nRT - - var/pressure_delta = target_pressure - output_starting_pressure - var/transfer_moles - - if(air1.temperature > 0) - transfer_moles = pressure_delta*air3.volume/(air1.temperature * R_IDEAL_GAS_EQUATION) - - //Actually transfer the gas - - if(transfer_moles > 0) - var/datum/gas_mixture/removed = air1.remove(transfer_moles) - - if(!removed) - return - var/datum/gas_mixture/filtered_out = new - filtered_out.temperature = removed.temperature - - switch(filter_type) - if(0) //removing plasma - filtered_out.toxins = removed.toxins - removed.toxins = 0 - - if(removed.trace_gases.len>0) - for(var/datum/gas/trace_gas in removed.trace_gases) - if(istype(trace_gas, /datum/gas/oxygen_agent_b)) - removed.trace_gases -= trace_gas - filtered_out.trace_gases += trace_gas - - if(1) //removing O2 - filtered_out.oxygen = removed.oxygen - removed.oxygen = 0 - - if(2) //removing N2 - filtered_out.nitrogen = removed.nitrogen - removed.nitrogen = 0 - - if(3) //removing CO2 - filtered_out.carbon_dioxide = removed.carbon_dioxide - removed.carbon_dioxide = 0 - - if(4)//removing N2O - if(removed.trace_gases.len>0) - for(var/datum/gas/trace_gas in removed.trace_gases) - if(istype(trace_gas, /datum/gas/sleeping_agent)) - removed.trace_gases -= trace_gas - filtered_out.trace_gases += trace_gas - - else - filtered_out = null - - - air2.merge(filtered_out) - air3.merge(removed) - - if(network2) - network2.update = 1 - - if(network3) - network3.update = 1 - - if(network1) - network1.update = 1 + var/output_starting_pressure = air3.return_pressure() + if(output_starting_pressure >= target_pressure) + //No need to mix if target is already full! return 1 - initialize() - set_frequency(frequency) - return ..() + //Calculate necessary moles to transfer using PV=nRT -obj/machinery/atmospherics/trinary/filter/attack_hand(user as mob) + var/pressure_delta = target_pressure - output_starting_pressure + var/transfer_moles + + if(air1.temperature > 0) + transfer_moles = pressure_delta*air3.volume/(air1.temperature * R_IDEAL_GAS_EQUATION) + + //Actually transfer the gas + + if(transfer_moles > 0) + var/datum/gas_mixture/removed = air1.remove(transfer_moles) + + if(!removed) + return + var/datum/gas_mixture/filtered_out = new + filtered_out.temperature = removed.temperature + + switch(filter_type) + if(0) //removing plasma + filtered_out.toxins = removed.toxins + removed.toxins = 0 + + if(removed.trace_gases.len>0) + for(var/datum/gas/trace_gas in removed.trace_gases) + if(istype(trace_gas, /datum/gas/oxygen_agent_b)) + removed.trace_gases -= trace_gas + filtered_out.trace_gases += trace_gas + + if(1) //removing O2 + filtered_out.oxygen = removed.oxygen + removed.oxygen = 0 + + if(2) //removing N2 + filtered_out.nitrogen = removed.nitrogen + removed.nitrogen = 0 + + if(3) //removing CO2 + filtered_out.carbon_dioxide = removed.carbon_dioxide + removed.carbon_dioxide = 0 + + if(4)//removing N2O + if(removed.trace_gases.len>0) + for(var/datum/gas/trace_gas in removed.trace_gases) + if(istype(trace_gas, /datum/gas/sleeping_agent)) + removed.trace_gases -= trace_gas + filtered_out.trace_gases += trace_gas + + else + filtered_out = null + + + air2.merge(filtered_out) + air3.merge(removed) + + if(network2) + network2.update = 1 + + if(network3) + network3.update = 1 + + if(network1) + network1.update = 1 + + return 1 + +/obj/machinery/atmospherics/trinary/filter/initialize() + set_frequency(frequency) + return ..() + +/obj/machinery/atmospherics/trinary/filter/attack_hand(user as mob) if(..()) return @@ -191,7 +190,7 @@ obj/machinery/atmospherics/trinary/filter/attack_hand(user as mob) onclose(user, "atmo_filter") return -obj/machinery/atmospherics/trinary/filter/Topic(href, href_list) +/obj/machinery/atmospherics/trinary/filter/Topic(href, href_list) if(..()) return usr.set_machine(src) diff --git a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm b/code/ATMOSPHERICS/components/trinary_devices/mixer.dm index 279d736f0ff..118dc5c7c87 100644 --- a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/mixer.dm @@ -1,4 +1,4 @@ -obj/machinery/atmospherics/trinary/mixer +/obj/machinery/atmospherics/trinary/mixer icon = 'icons/obj/atmospherics/mixer.dmi' icon_state = "intact_off" density = 1 @@ -17,132 +17,132 @@ obj/machinery/atmospherics/trinary/mixer //node 3 is the outlet, nodes 1 & 2 are intakes - update_icon() - if(stat & NOPOWER) - icon_state = "intact_off" - else if(node2 && node3 && node1) - icon_state = "intact_[on?("on"):("off")]" - else - icon_state = "intact_off" - on = 0 +/obj/machinery/atmospherics/trinary/mixer/update_icon() + if(stat & NOPOWER) + icon_state = "intact_off" + else if(node2 && node3 && node1) + icon_state = "intact_[on?("on"):("off")]" + else + icon_state = "intact_off" + on = 0 - return + return - power_change() - var/old_stat = stat - ..() - if(old_stat != stat) - update_icon() +/obj/machinery/atmospherics/trinary/mixer/power_change() + var/old_stat = stat + ..() + if(old_stat != stat) + update_icon() - New() - ..() - air3.volume = 300 +/obj/machinery/atmospherics/trinary/mixer/New() + ..() + air3.volume = 300 - process() - ..() - if(!on) - return 0 +/obj/machinery/atmospherics/trinary/mixer/process() + ..() + if(!on) + return 0 - var/output_starting_pressure = air3.return_pressure() - - if(output_starting_pressure >= target_pressure) - //No need to mix if target is already full! - return 1 - - //Calculate necessary moles to transfer using PV=nRT - - var/pressure_delta = target_pressure - output_starting_pressure - var/transfer_moles1 = 0 - var/transfer_moles2 = 0 - - if(air1.temperature > 0) - transfer_moles1 = (node1_concentration*pressure_delta)*air3.volume/(air1.temperature * R_IDEAL_GAS_EQUATION) - - if(air2.temperature > 0) - transfer_moles2 = (node2_concentration*pressure_delta)*air3.volume/(air2.temperature * R_IDEAL_GAS_EQUATION) - - var/air1_moles = air1.total_moles() - var/air2_moles = air2.total_moles() - - if((air1_moles < transfer_moles1) || (air2_moles < transfer_moles2)) - var/ratio = 0 - if (( transfer_moles1 > 0 ) && (transfer_moles2 >0 )) - ratio = min(air1_moles/transfer_moles1, air2_moles/transfer_moles2) - if (( transfer_moles2 == 0 ) && ( transfer_moles1 > 0 )) - ratio = air1_moles/transfer_moles1 - if (( transfer_moles1 == 0 ) && ( transfer_moles2 > 0 )) - ratio = air2_moles/transfer_moles2 - - transfer_moles1 *= ratio - transfer_moles2 *= ratio - - //Actually transfer the gas - - if(transfer_moles1 > 0) - var/datum/gas_mixture/removed1 = air1.remove(transfer_moles1) - air3.merge(removed1) - - if(transfer_moles2 > 0) - var/datum/gas_mixture/removed2 = air2.remove(transfer_moles2) - air3.merge(removed2) - - if(network1 && transfer_moles1) - network1.update = 1 - - if(network2 && transfer_moles2) - network2.update = 1 - - if(network3) - network3.update = 1 + var/output_starting_pressure = air3.return_pressure() + if(output_starting_pressure >= target_pressure) + //No need to mix if target is already full! return 1 - attack_hand(user as mob) - if(..()) - return - src.add_fingerprint(usr) - if(!src.allowed(user)) - user << "\red Access denied." - return - usr.set_machine(src) - var/dat = {"Power: [on?"On":"Off"]
- Desirable output pressure: - [target_pressure]kPa | Change -
- Node 1 Concentration: - - - - - [node1_concentration]([node1_concentration*100]%) - + - + -
- Node 2 Concentration: - - - - - [node2_concentration]([node2_concentration*100]%) - + - + - "} + //Calculate necessary moles to transfer using PV=nRT - user << browse("[src.name] control[dat]", "window=atmo_mixer") - onclose(user, "atmo_mixer") - return + var/pressure_delta = target_pressure - output_starting_pressure + var/transfer_moles1 = 0 + var/transfer_moles2 = 0 - Topic(href,href_list) - if(..()) return - if(href_list["power"]) - on = !on - if(href_list["set_press"]) - var/new_pressure = input(usr,"Enter new output pressure (0-4500kPa)","Pressure control",src.target_pressure) as num - src.target_pressure = max(0, min(4500, new_pressure)) - if(href_list["node1_c"]) - var/value = text2num(href_list["node1_c"]) - src.node1_concentration = max(0, min(1, src.node1_concentration + value)) - src.node2_concentration = max(0, min(1, src.node2_concentration - value)) - if(href_list["node2_c"]) - var/value = text2num(href_list["node2_c"]) - src.node2_concentration = max(0, min(1, src.node2_concentration + value)) - src.node1_concentration = max(0, min(1, src.node1_concentration - value)) - src.update_icon() - src.updateUsrDialog() + if(air1.temperature > 0) + transfer_moles1 = (node1_concentration*pressure_delta)*air3.volume/(air1.temperature * R_IDEAL_GAS_EQUATION) + + if(air2.temperature > 0) + transfer_moles2 = (node2_concentration*pressure_delta)*air3.volume/(air2.temperature * R_IDEAL_GAS_EQUATION) + + var/air1_moles = air1.total_moles() + var/air2_moles = air2.total_moles() + + if((air1_moles < transfer_moles1) || (air2_moles < transfer_moles2)) + var/ratio = 0 + if (( transfer_moles1 > 0 ) && (transfer_moles2 >0 )) + ratio = min(air1_moles/transfer_moles1, air2_moles/transfer_moles2) + if (( transfer_moles2 == 0 ) && ( transfer_moles1 > 0 )) + ratio = air1_moles/transfer_moles1 + if (( transfer_moles1 == 0 ) && ( transfer_moles2 > 0 )) + ratio = air2_moles/transfer_moles2 + + transfer_moles1 *= ratio + transfer_moles2 *= ratio + + //Actually transfer the gas + + if(transfer_moles1 > 0) + var/datum/gas_mixture/removed1 = air1.remove(transfer_moles1) + air3.merge(removed1) + + if(transfer_moles2 > 0) + var/datum/gas_mixture/removed2 = air2.remove(transfer_moles2) + air3.merge(removed2) + + if(network1 && transfer_moles1) + network1.update = 1 + + if(network2 && transfer_moles2) + network2.update = 1 + + if(network3) + network3.update = 1 + + return 1 + +/obj/machinery/atmospherics/trinary/mixer/attack_hand(user as mob) + if(..()) return + src.add_fingerprint(usr) + if(!src.allowed(user)) + user << "\red Access denied." + return + usr.set_machine(src) + var/dat = {"Power: [on?"On":"Off"]
+ Desirable output pressure: + [target_pressure]kPa | Change +
+ Node 1 Concentration: + - + - + [node1_concentration]([node1_concentration*100]%) + + + + +
+ Node 2 Concentration: + - + - + [node2_concentration]([node2_concentration*100]%) + + + + + "} + + user << browse("[src.name] control[dat]", "window=atmo_mixer") + onclose(user, "atmo_mixer") + return + +/obj/machinery/atmospherics/trinary/mixer/Topic(href,href_list) + if(..()) return + if(href_list["power"]) + on = !on + if(href_list["set_press"]) + var/new_pressure = input(usr,"Enter new output pressure (0-4500kPa)","Pressure control",src.target_pressure) as num + src.target_pressure = max(0, min(4500, new_pressure)) + if(href_list["node1_c"]) + var/value = text2num(href_list["node1_c"]) + src.node1_concentration = max(0, min(1, src.node1_concentration + value)) + src.node2_concentration = max(0, min(1, src.node2_concentration - value)) + if(href_list["node2_c"]) + var/value = text2num(href_list["node2_c"]) + src.node2_concentration = max(0, min(1, src.node2_concentration + value)) + src.node1_concentration = max(0, min(1, src.node1_concentration - value)) + src.update_icon() + src.updateUsrDialog() + return diff --git a/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm b/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm index 79af6de5272..deb86fb9f8e 100644 --- a/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm @@ -1,4 +1,4 @@ -obj/machinery/atmospherics/trinary +/obj/machinery/atmospherics/trinary dir = SOUTH initialize_directions = SOUTH|NORTH|WEST use_power = 1 @@ -15,148 +15,148 @@ obj/machinery/atmospherics/trinary var/datum/pipe_network/network2 var/datum/pipe_network/network3 - New() - ..() - switch(dir) - if(NORTH) - initialize_directions = EAST|NORTH|SOUTH - if(SOUTH) - initialize_directions = SOUTH|WEST|NORTH - if(EAST) - initialize_directions = EAST|WEST|SOUTH - if(WEST) - initialize_directions = WEST|NORTH|EAST - air1 = new - air2 = new - air3 = new +/obj/machinery/atmospherics/trinary/New() + ..() + switch(dir) + if(NORTH) + initialize_directions = EAST|NORTH|SOUTH + if(SOUTH) + initialize_directions = SOUTH|WEST|NORTH + if(EAST) + initialize_directions = EAST|WEST|SOUTH + if(WEST) + initialize_directions = WEST|NORTH|EAST + air1 = new + air2 = new + air3 = new - air1.volume = 200 - air2.volume = 200 - air3.volume = 200 + air1.volume = 200 + air2.volume = 200 + air3.volume = 200 // Housekeeping and pipe network stuff below - network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference) - if(reference == node1) - network1 = new_network +/obj/machinery/atmospherics/trinary/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference) + if(reference == node1) + network1 = new_network - else if(reference == node2) - network2 = new_network + else if(reference == node2) + network2 = new_network - else if (reference == node3) - network3 = new_network + else if (reference == node3) + network3 = new_network - if(new_network.normal_members.Find(src)) - return 0 + if(new_network.normal_members.Find(src)) + return 0 - new_network.normal_members += src + new_network.normal_members += src - return null + return null - Destroy() - if(node1) - node1.disconnect(src) - del(network1) - if(node2) - node2.disconnect(src) - del(network2) - if(node3) - node3.disconnect(src) - del(network3) +/obj/machinery/atmospherics/trinary/Destroy() + if(node1) + node1.disconnect(src) + del(network1) + if(node2) + node2.disconnect(src) + del(network2) + if(node3) + node3.disconnect(src) + del(network3) + node1 = null + node2 = null + node3 = null + + ..() + +/obj/machinery/atmospherics/trinary/initialize() + src.disconnect(src) + + var/node1_connect = turn(dir, -180) + var/node2_connect = turn(dir, -90) + var/node3_connect = dir + + for(var/obj/machinery/atmospherics/target in get_step(src,node1_connect)) + if(target.initialize_directions & get_dir(target,src)) + node1 = target + break + + for(var/obj/machinery/atmospherics/target in get_step(src,node2_connect)) + if(target.initialize_directions & get_dir(target,src)) + node2 = target + break + + for(var/obj/machinery/atmospherics/target in get_step(src,node3_connect)) + if(target.initialize_directions & get_dir(target,src)) + node3 = target + break + + update_icon() + +/obj/machinery/atmospherics/trinary/build_network() + if(!network1 && node1) + network1 = new /datum/pipe_network() + network1.normal_members += src + network1.build_network(node1, src) + + if(!network2 && node2) + network2 = new /datum/pipe_network() + network2.normal_members += src + network2.build_network(node2, src) + + if(!network3 && node3) + network3 = new /datum/pipe_network() + network3.normal_members += src + network3.build_network(node3, src) + + +/obj/machinery/atmospherics/trinary/return_network(obj/machinery/atmospherics/reference) + build_network() + + if(reference==node1) + return network1 + + if(reference==node2) + return network2 + + if(reference==node3) + return network3 + + return null + +/obj/machinery/atmospherics/trinary/reassign_network(datum/pipe_network/old_network, datum/pipe_network/new_network) + if(network1 == old_network) + network1 = new_network + if(network2 == old_network) + network2 = new_network + if(network3 == old_network) + network3 = new_network + + return 1 + +/obj/machinery/atmospherics/trinary/return_network_air(datum/pipe_network/reference) + var/list/results = list() + + if(network1 == reference) + results += air1 + if(network2 == reference) + results += air2 + if(network3 == reference) + results += air3 + + return results + +/obj/machinery/atmospherics/trinary/disconnect(obj/machinery/atmospherics/reference) + if(reference==node1) + del(network1) node1 = null + + else if(reference==node2) + del(network2) node2 = null + + else if(reference==node3) + del(network3) node3 = null - ..() - - initialize() - src.disconnect(src) - - var/node1_connect = turn(dir, -180) - var/node2_connect = turn(dir, -90) - var/node3_connect = dir - - for(var/obj/machinery/atmospherics/target in get_step(src,node1_connect)) - if(target.initialize_directions & get_dir(target,src)) - node1 = target - break - - for(var/obj/machinery/atmospherics/target in get_step(src,node2_connect)) - if(target.initialize_directions & get_dir(target,src)) - node2 = target - break - - for(var/obj/machinery/atmospherics/target in get_step(src,node3_connect)) - if(target.initialize_directions & get_dir(target,src)) - node3 = target - break - - update_icon() - - build_network() - if(!network1 && node1) - network1 = new /datum/pipe_network() - network1.normal_members += src - network1.build_network(node1, src) - - if(!network2 && node2) - network2 = new /datum/pipe_network() - network2.normal_members += src - network2.build_network(node2, src) - - if(!network3 && node3) - network3 = new /datum/pipe_network() - network3.normal_members += src - network3.build_network(node3, src) - - - return_network(obj/machinery/atmospherics/reference) - build_network() - - if(reference==node1) - return network1 - - if(reference==node2) - return network2 - - if(reference==node3) - return network3 - - return null - - reassign_network(datum/pipe_network/old_network, datum/pipe_network/new_network) - if(network1 == old_network) - network1 = new_network - if(network2 == old_network) - network2 = new_network - if(network3 == old_network) - network3 = new_network - - return 1 - - return_network_air(datum/pipe_network/reference) - var/list/results = list() - - if(network1 == reference) - results += air1 - if(network2 == reference) - results += air2 - if(network3 == reference) - results += air3 - - return results - - disconnect(obj/machinery/atmospherics/reference) - if(reference==node1) - del(network1) - node1 = null - - else if(reference==node2) - del(network2) - node2 = null - - else if(reference==node3) - del(network3) - node3 = null - - return null \ No newline at end of file + return null diff --git a/code/ATMOSPHERICS/components/unary/cold_sink.dm b/code/ATMOSPHERICS/components/unary/cold_sink.dm index b3632c84a16..ea66aa52d4f 100644 --- a/code/ATMOSPHERICS/components/unary/cold_sink.dm +++ b/code/ATMOSPHERICS/components/unary/cold_sink.dm @@ -12,30 +12,30 @@ var/current_temperature = T20C var/current_heat_capacity = 50000 //totally random - update_icon() - if(node) - icon_state = "intact_[on?("on"):("off")]" - else - icon_state = "exposed" +/obj/machinery/atmospherics/unary/cold_sink/update_icon() + if(node) + icon_state = "intact_[on?("on"):("off")]" + else + icon_state = "exposed" - on = 0 + on = 0 - return + return - process() - ..() - if(!on || !network) - return 0 - var/air_heat_capacity = air_contents.heat_capacity() - var/combined_heat_capacity = current_heat_capacity + air_heat_capacity - var/old_temperature = air_contents.temperature +/obj/machinery/atmospherics/unary/cold_sink/process() + ..() + if(!on || !network) + return 0 + var/air_heat_capacity = air_contents.heat_capacity() + var/combined_heat_capacity = current_heat_capacity + air_heat_capacity + var/old_temperature = air_contents.temperature - if(combined_heat_capacity > 0) - var/combined_energy = current_temperature*current_heat_capacity + air_heat_capacity*air_contents.temperature - air_contents.temperature = combined_energy/combined_heat_capacity + if(combined_heat_capacity > 0) + var/combined_energy = current_temperature*current_heat_capacity + air_heat_capacity*air_contents.temperature + air_contents.temperature = combined_energy/combined_heat_capacity - //todo: have current temperature affected. require power to bring down current temperature again + //todo: have current temperature affected. require power to bring down current temperature again - if(abs(old_temperature-air_contents.temperature) > 1) - network.update = 1 - return 1 \ No newline at end of file + if(abs(old_temperature-air_contents.temperature) > 1) + network.update = 1 + return 1 diff --git a/code/ATMOSPHERICS/components/unary/generator_input.dm b/code/ATMOSPHERICS/components/unary/generator_input.dm index 97714f1f6e3..8aa828e1174 100644 --- a/code/ATMOSPHERICS/components/unary/generator_input.dm +++ b/code/ATMOSPHERICS/components/unary/generator_input.dm @@ -8,14 +8,13 @@ var/update_cycle - update_icon() - if(node) - icon_state = "intact" - else - icon_state = "exposed" +/obj/machinery/atmospherics/unary/generator_input/update_icon() + if(node) + icon_state = "intact" + else + icon_state = "exposed" - return + return - proc - return_exchange_air() - return air_contents \ No newline at end of file +/obj/machinery/atmospherics/unary/generator_input/proc/return_exchange_air() + return air_contents diff --git a/code/ATMOSPHERICS/components/unary/heat_exchanger.dm b/code/ATMOSPHERICS/components/unary/heat_exchanger.dm index 017afeaf7e9..41b0ad9619c 100644 --- a/code/ATMOSPHERICS/components/unary/heat_exchanger.dm +++ b/code/ATMOSPHERICS/components/unary/heat_exchanger.dm @@ -12,57 +12,57 @@ var/obj/machinery/atmospherics/unary/heat_exchanger/partner = null var/update_cycle - update_icon() - if(node) - icon_state = "intact" - else - icon_state = "exposed" +/obj/machinery/atmospherics/unary/heat_exchanger/update_icon() + if(node) + icon_state = "intact" + else + icon_state = "exposed" - return + return - initialize() - if(!partner) - var/partner_connect = turn(dir,180) +/obj/machinery/atmospherics/unary/heat_exchanger/initialize() + if(!partner) + var/partner_connect = turn(dir,180) - for(var/obj/machinery/atmospherics/unary/heat_exchanger/target in get_step(src,partner_connect)) - if(target.dir & get_dir(src,target)) - partner = target - partner.partner = src - break + for(var/obj/machinery/atmospherics/unary/heat_exchanger/target in get_step(src,partner_connect)) + if(target.dir & get_dir(src,target)) + partner = target + partner.partner = src + break - ..() + ..() - process() - ..() - if(!partner) - return 0 +/obj/machinery/atmospherics/unary/heat_exchanger/process() + ..() + if(!partner) + return 0 - if(!air_master || air_master.current_cycle <= update_cycle) - return 0 + if(!air_master || air_master.current_cycle <= update_cycle) + return 0 - update_cycle = air_master.current_cycle - partner.update_cycle = air_master.current_cycle + update_cycle = air_master.current_cycle + partner.update_cycle = air_master.current_cycle - var/air_heat_capacity = air_contents.heat_capacity() - var/other_air_heat_capacity = partner.air_contents.heat_capacity() - var/combined_heat_capacity = other_air_heat_capacity + air_heat_capacity + var/air_heat_capacity = air_contents.heat_capacity() + var/other_air_heat_capacity = partner.air_contents.heat_capacity() + var/combined_heat_capacity = other_air_heat_capacity + air_heat_capacity - var/old_temperature = air_contents.temperature - var/other_old_temperature = partner.air_contents.temperature + var/old_temperature = air_contents.temperature + var/other_old_temperature = partner.air_contents.temperature - if(combined_heat_capacity > 0) - var/combined_energy = partner.air_contents.temperature*other_air_heat_capacity + air_heat_capacity*air_contents.temperature + if(combined_heat_capacity > 0) + var/combined_energy = partner.air_contents.temperature*other_air_heat_capacity + air_heat_capacity*air_contents.temperature - var/new_temperature = combined_energy/combined_heat_capacity - air_contents.temperature = new_temperature - partner.air_contents.temperature = new_temperature + var/new_temperature = combined_energy/combined_heat_capacity + air_contents.temperature = new_temperature + partner.air_contents.temperature = new_temperature - if(network) - if(abs(old_temperature-air_contents.temperature) > 1) - network.update = 1 + if(network) + if(abs(old_temperature-air_contents.temperature) > 1) + network.update = 1 - if(partner.network) - if(abs(other_old_temperature-partner.air_contents.temperature) > 1) - partner.network.update = 1 + if(partner.network) + if(abs(other_old_temperature-partner.air_contents.temperature) > 1) + partner.network.update = 1 - return 1 + return 1 diff --git a/code/ATMOSPHERICS/components/unary/heat_source.dm b/code/ATMOSPHERICS/components/unary/heat_source.dm index a19503b7b61..062bbd71110 100644 --- a/code/ATMOSPHERICS/components/unary/heat_source.dm +++ b/code/ATMOSPHERICS/components/unary/heat_source.dm @@ -14,30 +14,30 @@ var/current_temperature = T20C var/current_heat_capacity = 50000 //totally random - update_icon() - if(node) - icon_state = "intact_[on?("on"):("off")]" - else - icon_state = "exposed" +/obj/machinery/atmospherics/unary/heat_reservoir/update_icon() + if(node) + icon_state = "intact_[on?("on"):("off")]" + else + icon_state = "exposed" - on = 0 + on = 0 - return + return - process() - ..() - if(!on) - return 0 - var/air_heat_capacity = air_contents.heat_capacity() - var/combined_heat_capacity = current_heat_capacity + air_heat_capacity - var/old_temperature = air_contents.temperature +/obj/machinery/atmospherics/unary/heat_reservoir/process() + ..() + if(!on) + return 0 + var/air_heat_capacity = air_contents.heat_capacity() + var/combined_heat_capacity = current_heat_capacity + air_heat_capacity + var/old_temperature = air_contents.temperature - if(combined_heat_capacity > 0) - var/combined_energy = current_temperature*current_heat_capacity + air_heat_capacity*air_contents.temperature - air_contents.temperature = combined_energy/combined_heat_capacity + if(combined_heat_capacity > 0) + var/combined_energy = current_temperature*current_heat_capacity + air_heat_capacity*air_contents.temperature + air_contents.temperature = combined_energy/combined_heat_capacity - //todo: have current temperature affected. require power to bring up current temperature again + //todo: have current temperature affected. require power to bring up current temperature again - if(abs(old_temperature-air_contents.temperature) > 1) - network.update = 1 - return 1 \ No newline at end of file + if(abs(old_temperature-air_contents.temperature) > 1) + network.update = 1 + return 1 diff --git a/code/ATMOSPHERICS/components/unary/outlet_injector.dm b/code/ATMOSPHERICS/components/unary/outlet_injector.dm index 3a668a1dd0b..17d62269f5c 100644 --- a/code/ATMOSPHERICS/components/unary/outlet_injector.dm +++ b/code/ATMOSPHERICS/components/unary/outlet_injector.dm @@ -3,7 +3,7 @@ icon_state = "off" use_power = 1 - name = "air injector" + name = "Air Injector" desc = "Has a valve and pump attached to it" var/on = 0 @@ -17,134 +17,133 @@ level = 1 - update_icon() - if(node) - if(on && !(stat & NOPOWER)) - icon_state = "[level == 1 && istype(loc, /turf/simulated) ? "h" : "" ]on" - else - icon_state = "[level == 1 && istype(loc, /turf/simulated) ? "h" : "" ]off" +/obj/machinery/atmospherics/unary/outlet_injector/update_icon() + if(node) + if(on && !(stat & NOPOWER)) + icon_state = "[level == 1 && istype(loc, /turf/simulated) ? "h" : "" ]on" else - icon_state = "exposed" - on = 0 + icon_state = "[level == 1 && istype(loc, /turf/simulated) ? "h" : "" ]off" + else + icon_state = "exposed" + on = 0 - return + return - power_change() - var/old_stat = stat - ..() - if(old_stat != stat) - update_icon() - - - process() - ..() - injecting = 0 - - if(!on || stat & NOPOWER) - return 0 - - if(air_contents.temperature > 0) - var/transfer_moles = (air_contents.return_pressure())*volume_rate/(air_contents.temperature * R_IDEAL_GAS_EQUATION) - - var/datum/gas_mixture/removed = air_contents.remove(transfer_moles) - - loc.assume_air(removed) - air_update_turf() - - if(network) - network.update = 1 - - return 1 - - proc/inject() - if(on || injecting) - return 0 - - injecting = 1 - - if(air_contents.temperature > 0) - var/transfer_moles = (air_contents.return_pressure())*volume_rate/(air_contents.temperature * R_IDEAL_GAS_EQUATION) - - var/datum/gas_mixture/removed = air_contents.remove(transfer_moles) - - loc.assume_air(removed) - - if(network) - network.update = 1 - - flick("inject", src) - - proc - set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) - frequency = new_frequency - if(frequency) - radio_connection = radio_controller.add_object(src, frequency) - - broadcast_status() - if(!radio_connection) - return 0 - - var/datum/signal/signal = new - signal.transmission_method = 1 //radio signal - signal.source = src - - signal.data = list( - "tag" = id, - "device" = "AO", - "power" = on, - "volume_rate" = volume_rate, - //"timestamp" = world.time, - "sigtype" = "status" - ) - - radio_connection.post_signal(src, signal) - - return 1 - - initialize() - ..() - - set_frequency(frequency) - spawn(rand(25,50)) - broadcast_status() - - receive_signal(datum/signal/signal) - if(!signal.data["tag"] || (signal.data["tag"] != id) || (signal.data["sigtype"]!="command")) - return 0 - - if("power" in signal.data) - on = text2num(signal.data["power"]) - - if("power_toggle" in signal.data) - on = !on - - if("inject" in signal.data) - spawn inject() - return - - if("set_volume_rate" in signal.data) - var/number = text2num(signal.data["set_volume_rate"]) - volume_rate = Clamp(number, 0, air_contents.volume) - - if("status" in signal.data) - spawn(2) - broadcast_status() - return //do not update_icon - - //log_admin("DEBUG \[[world.timeofday]\]: outlet_injector/receive_signal: unknown command \"[signal.data["command"]]\"\n[signal.debug_print()]") - //return - spawn(2) - broadcast_status() +/obj/machinery/atmospherics/unary/outlet_injector/power_change() + var/old_stat = stat + ..() + if(old_stat != stat) update_icon() - hide(var/i) //to make the little pipe section invisible, the icon changes. - if(node) - if(on) - icon_state = "[i == 1 && istype(loc, /turf/simulated) ? "h" : "" ]on" - else - icon_state = "[i == 1 && istype(loc, /turf/simulated) ? "h" : "" ]off" + +/obj/machinery/atmospherics/unary/outlet_injector/process() + ..() + injecting = 0 + + if(!on || stat & NOPOWER) + return 0 + + if(air_contents.temperature > 0) + var/transfer_moles = (air_contents.return_pressure())*volume_rate/(air_contents.temperature * R_IDEAL_GAS_EQUATION) + + var/datum/gas_mixture/removed = air_contents.remove(transfer_moles) + + loc.assume_air(removed) + air_update_turf() + + if(network) + network.update = 1 + + return 1 + +/obj/machinery/atmospherics/unary/outlet_injector/proc/inject() + if(on || injecting) + return 0 + + injecting = 1 + + if(air_contents.temperature > 0) + var/transfer_moles = (air_contents.return_pressure())*volume_rate/(air_contents.temperature * R_IDEAL_GAS_EQUATION) + + var/datum/gas_mixture/removed = air_contents.remove(transfer_moles) + + loc.assume_air(removed) + + if(network) + network.update = 1 + + flick("inject", src) + +/obj/machinery/atmospherics/unary/outlet_injector/proc/set_frequency(new_frequency) + radio_controller.remove_object(src, frequency) + frequency = new_frequency + if(frequency) + radio_connection = radio_controller.add_object(src, frequency) + +/obj/machinery/atmospherics/unary/outlet_injector/proc/broadcast_status() + if(!radio_connection) + return 0 + + var/datum/signal/signal = new + signal.transmission_method = 1 //radio signal + signal.source = src + + signal.data = list( + "tag" = id, + "device" = "AO", + "power" = on, + "volume_rate" = volume_rate, + //"timestamp" = world.time, + "sigtype" = "status" + ) + + radio_connection.post_signal(src, signal) + + return 1 + +/obj/machinery/atmospherics/unary/outlet_injector/initialize() + ..() + + set_frequency(frequency) + spawn(rand(25,50)) + broadcast_status() + +/obj/machinery/atmospherics/unary/outlet_injector/receive_signal(datum/signal/signal) + if(!signal.data["tag"] || (signal.data["tag"] != id) || (signal.data["sigtype"]!="command")) + return 0 + + if("power" in signal.data) + on = text2num(signal.data["power"]) + + if("power_toggle" in signal.data) + on = !on + + if("inject" in signal.data) + spawn inject() + return + + if("set_volume_rate" in signal.data) + var/number = text2num(signal.data["set_volume_rate"]) + volume_rate = Clamp(number, 0, air_contents.volume) + + if("status" in signal.data) + spawn(2) + broadcast_status() + return //do not update_icon + + //log_admin("DEBUG \[[world.timeofday]\]: outlet_injector/receive_signal: unknown command \"[signal.data["command"]]\"\n[signal.debug_print()]") + //return + spawn(2) + broadcast_status() + update_icon() + +/obj/machinery/atmospherics/unary/outlet_injector/hide(var/i) //to make the little pipe section invisible, the icon changes. + if(node) + if(on) + icon_state = "[i == 1 && istype(loc, /turf/simulated) ? "h" : "" ]on" else - icon_state = "[i == 1 && istype(loc, /turf/simulated) ? "h" : "" ]exposed" - on = 0 - return \ No newline at end of file + icon_state = "[i == 1 && istype(loc, /turf/simulated) ? "h" : "" ]off" + else + icon_state = "[i == 1 && istype(loc, /turf/simulated) ? "h" : "" ]exposed" + on = 0 + return diff --git a/code/ATMOSPHERICS/components/unary/oxygen_generator.dm b/code/ATMOSPHERICS/components/unary/oxygen_generator.dm index f87b9982ce0..cbbb91683fd 100644 --- a/code/ATMOSPHERICS/components/unary/oxygen_generator.dm +++ b/code/ATMOSPHERICS/components/unary/oxygen_generator.dm @@ -1,4 +1,4 @@ -obj/machinery/atmospherics/unary/oxygen_generator +/obj/machinery/atmospherics/unary/oxygen_generator icon = 'icons/obj/atmospherics/oxygen_generator.dmi' icon_state = "intact_off" density = 1 @@ -13,37 +13,37 @@ obj/machinery/atmospherics/unary/oxygen_generator var/oxygen_content = 10 - update_icon() - if(node) - icon_state = "intact_[on?("on"):("off")]" - else - icon_state = "exposed_off" +/obj/machinery/atmospherics/unary/oxygen_generator/update_icon() + if(node) + icon_state = "intact_[on?("on"):("off")]" + else + icon_state = "exposed_off" - on = 0 + on = 0 - return + return - New() - ..() +/obj/machinery/atmospherics/unary/oxygen_generator/New() + ..() - air_contents.volume = 50 + air_contents.volume = 50 - process() - ..() - if(!on) - return 0 +/obj/machinery/atmospherics/unary/oxygen_generator/process() + ..() + if(!on) + return 0 - var/total_moles = air_contents.total_moles() + var/total_moles = air_contents.total_moles() - if(total_moles < oxygen_content) - var/current_heat_capacity = air_contents.heat_capacity() + if(total_moles < oxygen_content) + var/current_heat_capacity = air_contents.heat_capacity() - var/added_oxygen = oxygen_content - total_moles + var/added_oxygen = oxygen_content - total_moles - air_contents.temperature = (current_heat_capacity*air_contents.temperature + 20*added_oxygen*T0C)/(current_heat_capacity+20*added_oxygen) - air_contents.oxygen += added_oxygen + air_contents.temperature = (current_heat_capacity*air_contents.temperature + 20*added_oxygen*T0C)/(current_heat_capacity+20*added_oxygen) + air_contents.oxygen += added_oxygen - if(network) - network.update = 1 + if(network) + network.update = 1 - return 1 \ No newline at end of file + return 1 diff --git a/code/ATMOSPHERICS/components/unary/unary_base.dm b/code/ATMOSPHERICS/components/unary/unary_base.dm index 118c036c1ee..07465402083 100644 --- a/code/ATMOSPHERICS/components/unary/unary_base.dm +++ b/code/ATMOSPHERICS/components/unary/unary_base.dm @@ -9,91 +9,91 @@ var/datum/pipe_network/network - New() - ..() - initialize_directions = dir - air_contents = new +/obj/machinery/atmospherics/unary/New() + ..() + initialize_directions = dir + air_contents = new - air_contents.volume = 200 + air_contents.volume = 200 // Housekeeping and pipe network stuff below - network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference) - if(reference == node) - network = new_network +/obj/machinery/atmospherics/unary/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference) + if(reference == node) + network = new_network - if(new_network.normal_members.Find(src)) - return 0 + if(new_network.normal_members.Find(src)) + return 0 - new_network.normal_members += src + new_network.normal_members += src - return null + return null - Destroy() - if(node) - node.disconnect(src) - del(network) +/obj/machinery/atmospherics/unary/Destroy() + if(node) + node.disconnect(src) + del(network) - node = null + node = null - ..() + ..() - initialize(infiniteloop = 0) - if(!infiniteloop) - src.disconnect(src) +/obj/machinery/atmospherics/unary/initialize(infiniteloop = 0) + if(!infiniteloop) + src.disconnect(src) - var/node_connect = dir - - for(var/obj/machinery/atmospherics/target in get_step(src,node_connect)) - if(target.initialize_directions & get_dir(target,src)) - node = target - if(!infiniteloop) - target.initialize(1) - break - build_network() - - update_icon() - - default_change_direction_wrench(mob/user, obj/item/weapon/wrench/W) - if(..()) - initialize_directions = dir - if(node) - disconnect(node) - initialize() - . = 1 + var/node_connect = dir + for(var/obj/machinery/atmospherics/target in get_step(src,node_connect)) + if(target.initialize_directions & get_dir(target,src)) + node = target + if(!infiniteloop) + target.initialize(1) + break build_network() - if(!network && node) - network = new /datum/pipe_network() - network.normal_members += src - network.build_network(node, src) + + update_icon() + +/obj/machinery/atmospherics/unary/default_change_direction_wrench(mob/user, obj/item/weapon/wrench/W) + if(..()) + initialize_directions = dir + if(node) + disconnect(node) + initialize() + . = 1 + +/obj/machinery/atmospherics/unary/build_network() + if(!network && node) + network = new /datum/pipe_network() + network.normal_members += src + network.build_network(node, src) - return_network(obj/machinery/atmospherics/reference) - build_network() +/obj/machinery/atmospherics/unary/return_network(obj/machinery/atmospherics/reference) + build_network() - if(reference==node) - return network + if(reference==node) + return network - return null + return null - reassign_network(datum/pipe_network/old_network, datum/pipe_network/new_network) - if(network == old_network) - network = new_network +/obj/machinery/atmospherics/unary/reassign_network(datum/pipe_network/old_network, datum/pipe_network/new_network) + if(network == old_network) + network = new_network - return 1 + return 1 - return_network_air(datum/pipe_network/reference) - var/list/results = list() +/obj/machinery/atmospherics/unary/return_network_air(datum/pipe_network/reference) + var/list/results = list() - if(network == reference) - results += air_contents + if(network == reference) + results += air_contents - return results + return results - disconnect(obj/machinery/atmospherics/reference) - if(reference==node) - node = null - reference.disconnect(src) - del(network) +/obj/machinery/atmospherics/unary/disconnect(obj/machinery/atmospherics/reference) + if(reference==node) + node = null + reference.disconnect(src) + del(network) - return null \ No newline at end of file + return null diff --git a/code/ATMOSPHERICS/components/unary/vent_pump.dm b/code/ATMOSPHERICS/components/unary/vent_pump.dm index 348ab417363..fbf61bec3d9 100644 --- a/code/ATMOSPHERICS/components/unary/vent_pump.dm +++ b/code/ATMOSPHERICS/components/unary/vent_pump.dm @@ -32,286 +32,286 @@ var/radio_filter_out var/radio_filter_in - on - on = 1 - icon_state = "out" +/obj/machinery/atmospherics/unary/vent_pump/on + on = 1 + icon_state = "out" - siphon - pump_direction = 0 - icon_state = "off" +/obj/machinery/atmospherics/unary/vent_pump/siphon + pump_direction = 0 + icon_state = "off" - on - on = 1 - icon_state = "in" +/obj/machinery/atmospherics/unary/vent_pump/siphon/on + on = 1 + icon_state = "in" - New() - ..() - initial_loc = get_area(loc) - if (initial_loc.master) - initial_loc = initial_loc.master - area_uid = initial_loc.uid - if (!id_tag) - assign_uid() - id_tag = num2text(uid) - if(ticker && ticker.current_state == 3)//if the game is running - src.initialize() - src.broadcast_status() +/obj/machinery/atmospherics/unary/vent_pump/New() + ..() + initial_loc = get_area(loc) + if (initial_loc.master) + initial_loc = initial_loc.master + area_uid = initial_loc.uid + if (!id_tag) + assign_uid() + id_tag = num2text(uid) + if(ticker && ticker.current_state == 3)//if the game is running + src.initialize() + src.broadcast_status() - high_volume - name = "large air vent" - power_channel = EQUIP - New() - ..() - air_contents.volume = 1000 +/obj/machinery/atmospherics/unary/vent_pump/high_volume + name = "large air vent" + power_channel = EQUIP - update_icon() - if(welded) - icon_state = "[level == 1 && istype(loc, /turf/simulated) ? "h" : "" ]weld" - return - if(on && !(stat & (NOPOWER|BROKEN))) - if(pump_direction) - icon_state = "[level == 1 && istype(loc, /turf/simulated) ? "h" : "" ]out" - else - icon_state = "[level == 1 && istype(loc, /turf/simulated) ? "h" : "" ]in" +/obj/machinery/atmospherics/unary/vent_pump/high_volume/New() + ..() + air_contents.volume = 1000 + +/obj/machinery/atmospherics/unary/vent_pump/update_icon() + if(welded) + icon_state = "[level == 1 && istype(loc, /turf/simulated) ? "h" : "" ]weld" + return + if(on && !(stat & (NOPOWER|BROKEN))) + if(pump_direction) + icon_state = "[level == 1 && istype(loc, /turf/simulated) ? "h" : "" ]out" else - icon_state = "[level == 1 && istype(loc, /turf/simulated) ? "h" : "" ]off" + icon_state = "[level == 1 && istype(loc, /turf/simulated) ? "h" : "" ]in" + else + icon_state = "[level == 1 && istype(loc, /turf/simulated) ? "h" : "" ]off" + return + +/obj/machinery/atmospherics/unary/vent_pump/process() + ..() + if(stat & (NOPOWER|BROKEN)) + return + if (!node) + on = 0 + //broadcast_status() // from now air alarm/control computer should request update purposely --rastaf0 + if(!on) + return 0 + + if(welded) + return 0 + + var/datum/gas_mixture/environment = loc.return_air() + var/environment_pressure = environment.return_pressure() + + if(pump_direction) //internal -> external + var/pressure_delta = 10000 + + if(pressure_checks&1) + pressure_delta = min(pressure_delta, (external_pressure_bound - environment_pressure)) + if(pressure_checks&2) + pressure_delta = min(pressure_delta, (air_contents.return_pressure() - internal_pressure_bound)) + + if(pressure_delta > 0) + if(air_contents.temperature > 0) + var/transfer_moles = pressure_delta*environment.volume/(air_contents.temperature * R_IDEAL_GAS_EQUATION) + + var/datum/gas_mixture/removed = air_contents.remove(transfer_moles) + + loc.assume_air(removed) + air_update_turf() + + if(network) + network.update = 1 + + else //external -> internal + var/pressure_delta = 10000 + if(pressure_checks&1) + pressure_delta = min(pressure_delta, (environment_pressure - external_pressure_bound)) + if(pressure_checks&2) + pressure_delta = min(pressure_delta, (internal_pressure_bound - air_contents.return_pressure())) + + if(pressure_delta > 0) + if(environment.temperature > 0) + var/transfer_moles = pressure_delta*air_contents.volume/(environment.temperature * R_IDEAL_GAS_EQUATION) + + var/datum/gas_mixture/removed = loc.remove_air(transfer_moles) + if (isnull(removed)) //in space + return + + air_contents.merge(removed) + air_update_turf() + + if(network) + network.update = 1 + + return 1 + +//Radio remote control + +/obj/machinery/atmospherics/unary/vent_pump/proc/set_frequency(new_frequency) + radio_controller.remove_object(src, frequency) + frequency = new_frequency + if(frequency) + radio_connection = radio_controller.add_object(src, frequency,radio_filter_in) + +/obj/machinery/atmospherics/unary/vent_pump/proc/broadcast_status() + if(!radio_connection) + return 0 + + var/datum/signal/signal = new + signal.transmission_method = 1 //radio signal + signal.source = src + + signal.data = list( + "area" = src.area_uid, + "tag" = src.id_tag, + "device" = "AVP", + "power" = on, + "direction" = pump_direction?("release"):("siphon"), + "checks" = pressure_checks, + "internal" = internal_pressure_bound, + "external" = external_pressure_bound, + "timestamp" = world.time, + "sigtype" = "status" + ) + + if(!initial_loc.air_vent_names[id_tag]) + var/new_name = "\improper [initial_loc.name] vent pump #[initial_loc.air_vent_names.len+1]" + initial_loc.air_vent_names[id_tag] = new_name + src.name = new_name + initial_loc.air_vent_info[id_tag] = signal.data + + radio_connection.post_signal(src, signal, radio_filter_out) + + return 1 + + +/obj/machinery/atmospherics/unary/vent_pump/initialize() + ..() + + //some vents work his own spesial way + radio_filter_in = frequency==1439?(RADIO_FROM_AIRALARM):null + radio_filter_out = frequency==1439?(RADIO_TO_AIRALARM):null + if(frequency) + set_frequency(frequency) + +/obj/machinery/atmospherics/unary/vent_pump/receive_signal(datum/signal/signal) + if(stat & (NOPOWER|BROKEN)) + return + //log_admin("DEBUG \[[world.timeofday]\]: /obj/machinery/atmospherics/unary/vent_pump/receive_signal([signal.debug_print()])") + if(!signal.data["tag"] || (signal.data["tag"] != id_tag) || (signal.data["sigtype"]!="command")) + return 0 + + if("purge" in signal.data) + pressure_checks &= ~1 + pump_direction = 0 + + if("stabalize" in signal.data) + pressure_checks |= 1 + pump_direction = 1 + + if("power" in signal.data) + on = text2num(signal.data["power"]) + + if("power_toggle" in signal.data) + on = !on + + if("checks" in signal.data) + pressure_checks = text2num(signal.data["checks"]) + + if("checks_toggle" in signal.data) + pressure_checks = (pressure_checks?0:3) + + if("direction" in signal.data) + pump_direction = text2num(signal.data["direction"]) + + if("set_internal_pressure" in signal.data) + internal_pressure_bound = Clamp( + text2num(signal.data["set_internal_pressure"]), + 0, + ONE_ATMOSPHERE*50 + ) + + if("set_external_pressure" in signal.data) + external_pressure_bound = Clamp( + text2num(signal.data["set_external_pressure"]), + 0, + ONE_ATMOSPHERE*50 + ) + + if("adjust_internal_pressure" in signal.data) + internal_pressure_bound = Clamp( + internal_pressure_bound + text2num(signal.data["adjust_internal_pressure"]), + 0, + ONE_ATMOSPHERE*50 + ) + + if("adjust_external_pressure" in signal.data) + external_pressure_bound = Clamp( + external_pressure_bound + text2num(signal.data["adjust_external_pressure"]), + 0, + ONE_ATMOSPHERE*50 + ) + + if("init" in signal.data) + name = signal.data["init"] return - process() - ..() - if(stat & (NOPOWER|BROKEN)) - return - if (!node) - on = 0 - //broadcast_status() // from now air alarm/control computer should request update purposely --rastaf0 - if(!on) - return 0 - - if(welded) - return 0 - - var/datum/gas_mixture/environment = loc.return_air() - var/environment_pressure = environment.return_pressure() - - if(pump_direction) //internal -> external - var/pressure_delta = 10000 - - if(pressure_checks&1) - pressure_delta = min(pressure_delta, (external_pressure_bound - environment_pressure)) - if(pressure_checks&2) - pressure_delta = min(pressure_delta, (air_contents.return_pressure() - internal_pressure_bound)) - - if(pressure_delta > 0) - if(air_contents.temperature > 0) - var/transfer_moles = pressure_delta*environment.volume/(air_contents.temperature * R_IDEAL_GAS_EQUATION) - - var/datum/gas_mixture/removed = air_contents.remove(transfer_moles) - - loc.assume_air(removed) - air_update_turf() - - if(network) - network.update = 1 - - else //external -> internal - var/pressure_delta = 10000 - if(pressure_checks&1) - pressure_delta = min(pressure_delta, (environment_pressure - external_pressure_bound)) - if(pressure_checks&2) - pressure_delta = min(pressure_delta, (internal_pressure_bound - air_contents.return_pressure())) - - if(pressure_delta > 0) - if(environment.temperature > 0) - var/transfer_moles = pressure_delta*air_contents.volume/(environment.temperature * R_IDEAL_GAS_EQUATION) - - var/datum/gas_mixture/removed = loc.remove_air(transfer_moles) - if (isnull(removed)) //in space - return - - air_contents.merge(removed) - air_update_turf() - - if(network) - network.update = 1 - - return 1 - - //Radio remote control - - proc - set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) - frequency = new_frequency - if(frequency) - radio_connection = radio_controller.add_object(src, frequency,radio_filter_in) - - broadcast_status() - if(!radio_connection) - return 0 - - var/datum/signal/signal = new - signal.transmission_method = 1 //radio signal - signal.source = src - - signal.data = list( - "area" = src.area_uid, - "tag" = src.id_tag, - "device" = "AVP", - "power" = on, - "direction" = pump_direction?("release"):("siphon"), - "checks" = pressure_checks, - "internal" = internal_pressure_bound, - "external" = external_pressure_bound, - "timestamp" = world.time, - "sigtype" = "status" - ) - - if(!initial_loc.air_vent_names[id_tag]) - var/new_name = "\improper [initial_loc.name] vent pump #[initial_loc.air_vent_names.len+1]" - initial_loc.air_vent_names[id_tag] = new_name - src.name = new_name - initial_loc.air_vent_info[id_tag] = signal.data - - radio_connection.post_signal(src, signal, radio_filter_out) - - return 1 - - - initialize() - ..() - - //some vents work his own spesial way - radio_filter_in = frequency==1439?(RADIO_FROM_AIRALARM):null - radio_filter_out = frequency==1439?(RADIO_TO_AIRALARM):null - if(frequency) - set_frequency(frequency) - - receive_signal(datum/signal/signal) - if(stat & (NOPOWER|BROKEN)) - return - //log_admin("DEBUG \[[world.timeofday]\]: /obj/machinery/atmospherics/unary/vent_pump/receive_signal([signal.debug_print()])") - if(!signal.data["tag"] || (signal.data["tag"] != id_tag) || (signal.data["sigtype"]!="command")) - return 0 - - if("purge" in signal.data) - pressure_checks &= ~1 - pump_direction = 0 - - if("stabalize" in signal.data) - pressure_checks |= 1 - pump_direction = 1 - - if("power" in signal.data) - on = text2num(signal.data["power"]) - - if("power_toggle" in signal.data) - on = !on - - if("checks" in signal.data) - pressure_checks = text2num(signal.data["checks"]) - - if("checks_toggle" in signal.data) - pressure_checks = (pressure_checks?0:3) - - if("direction" in signal.data) - pump_direction = text2num(signal.data["direction"]) - - if("set_internal_pressure" in signal.data) - internal_pressure_bound = Clamp( - text2num(signal.data["set_internal_pressure"]), - 0, - ONE_ATMOSPHERE*50 - ) - - if("set_external_pressure" in signal.data) - external_pressure_bound = Clamp( - text2num(signal.data["set_external_pressure"]), - 0, - ONE_ATMOSPHERE*50 - ) - - if("adjust_internal_pressure" in signal.data) - internal_pressure_bound = Clamp( - internal_pressure_bound + text2num(signal.data["adjust_internal_pressure"]), - 0, - ONE_ATMOSPHERE*50 - ) - - if("adjust_external_pressure" in signal.data) - external_pressure_bound = Clamp( - external_pressure_bound + text2num(signal.data["adjust_external_pressure"]), - 0, - ONE_ATMOSPHERE*50 - ) - - if("init" in signal.data) - name = signal.data["init"] - return - - if("status" in signal.data) - spawn(2) - broadcast_status() - return //do not update_icon - - //log_admin("DEBUG \[[world.timeofday]\]: vent_pump/receive_signal: unknown command \"[signal.data["command"]]\"\n[signal.debug_print()]") + if("status" in signal.data) spawn(2) broadcast_status() - update_icon() - return + return //do not update_icon - hide(var/i) //to make the little pipe section invisible, the icon changes. - if(welded) - icon_state = "[i == 1 && istype(loc, /turf/simulated) ? "h" : "" ]weld" - return - if(on&&node) - if(pump_direction) - icon_state = "[i == 1 && istype(loc, /turf/simulated) ? "h" : "" ]out" - else - icon_state = "[i == 1 && istype(loc, /turf/simulated) ? "h" : "" ]in" + //log_admin("DEBUG \[[world.timeofday]\]: vent_pump/receive_signal: unknown command \"[signal.data["command"]]\"\n[signal.debug_print()]") + spawn(2) + broadcast_status() + update_icon() + return + +/obj/machinery/atmospherics/unary/vent_pump/hide(var/i) //to make the little pipe section invisible, the icon changes. + if(welded) + icon_state = "[i == 1 && istype(loc, /turf/simulated) ? "h" : "" ]weld" + return + if(on&&node) + if(pump_direction) + icon_state = "[i == 1 && istype(loc, /turf/simulated) ? "h" : "" ]out" else - icon_state = "[i == 1 && istype(loc, /turf/simulated) ? "h" : "" ]off" - on = 0 - return + icon_state = "[i == 1 && istype(loc, /turf/simulated) ? "h" : "" ]in" + else + icon_state = "[i == 1 && istype(loc, /turf/simulated) ? "h" : "" ]off" + on = 0 + return - attackby(obj/item/W, mob/user) - if (istype(W, /obj/item/weapon/wrench)&& !(stat & NOPOWER) && on) - user << "\red You cannot unwrench this [src], turn it off first." - return 1 - if(istype(W, /obj/item/weapon/weldingtool)) - var/obj/item/weapon/weldingtool/WT = W - if (WT.remove_fuel(0,user)) - user << "\blue Now welding the vent." - if(do_after(user, 20)) - if(!src || !WT.isOn()) return - playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1) - if(!welded) - user.visible_message("[user] welds the vent shut.", "You weld the vent shut.", "You hear welding.") - welded = 1 - update_icon() - else - user.visible_message("[user] unwelds the vent.", "You unweld the vent.", "You hear welding.") - welded = 0 - update_icon() +/obj/machinery/atmospherics/unary/vent_pump/attackby(obj/item/W, mob/user) + if (istype(W, /obj/item/weapon/wrench)&& !(stat & NOPOWER) && on) + user << "\red You cannot unwrench this [src], turn it off first." + return 1 + if(istype(W, /obj/item/weapon/weldingtool)) + var/obj/item/weapon/weldingtool/WT = W + if (WT.remove_fuel(0,user)) + user << "\blue Now welding the vent." + if(do_after(user, 20)) + if(!src || !WT.isOn()) return + playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1) + if(!welded) + user.visible_message("[user] welds the vent shut.", "You weld the vent shut.", "You hear welding.") + welded = 1 + update_icon() else - user << "\blue The welding tool needs to be on to start this task." + user.visible_message("[user] unwelds the vent.", "You unweld the vent.", "You hear welding.") + welded = 0 + update_icon() else - user << "\blue You need more welding fuel to complete this task." - return 1 + user << "\blue The welding tool needs to be on to start this task." else - return ..() + user << "\blue You need more welding fuel to complete this task." + return 1 + else + return ..() - examine() - set src in oview(1) - ..() - if(welded) - usr << "It seems welded shut." +/obj/machinery/atmospherics/unary/vent_pump/examine() + set src in oview(1) + ..() + if(welded) + usr << "It seems welded shut." - power_change() - if(powered(power_channel)) - stat &= ~NOPOWER - else - stat |= NOPOWER +/obj/machinery/atmospherics/unary/vent_pump/power_change() + if(powered(power_channel)) + stat &= ~NOPOWER + else + stat |= NOPOWER update_icon() /obj/machinery/atmospherics/unary/vent_pump/Destroy() diff --git a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm index 5ca05a05941..fcba70665d8 100644 --- a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm +++ b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm @@ -28,229 +28,228 @@ var/radio_filter_out var/radio_filter_in - New() - ..() - initial_loc = get_area(loc) - if (initial_loc.master) - initial_loc = initial_loc.master - area_uid = initial_loc.uid - if (!id_tag) - assign_uid() - id_tag = num2text(uid) - if(ticker && ticker.current_state == 3)//if the game is running - src.initialize() - src.broadcast_status() - - update_icon() - if(node && on && !(stat & (NOPOWER|BROKEN))) - if(scrubbing) - icon_state = "[level == 1 && istype(loc, /turf/simulated) ? "h" : "" ]on" - else - icon_state = "[level == 1 && istype(loc, /turf/simulated) ? "h" : "" ]in" - else - icon_state = "[level == 1 && istype(loc, /turf/simulated) ? "h" : "" ]off" - return - - proc - set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) - frequency = new_frequency - radio_connection = radio_controller.add_object(src, frequency, radio_filter_in) - - broadcast_status() - if(!radio_connection) - return 0 - - var/datum/signal/signal = new - signal.transmission_method = 1 //radio signal - signal.source = src - signal.data = list( - "area" = area_uid, - "tag" = id_tag, - "device" = "AScr", - "timestamp" = world.time, - "power" = on, - "scrubbing" = scrubbing, - "panic" = panic, - "filter_co2" = scrub_CO2, - "filter_toxins" = scrub_Toxins, - "filter_n2o" = scrub_N2O, - "sigtype" = "status" - ) - if(!initial_loc.air_scrub_names[id_tag]) - var/new_name = "\improper [initial_loc.name] air scrubber #[initial_loc.air_scrub_names.len+1]" - initial_loc.air_scrub_names[id_tag] = new_name - src.name = new_name - initial_loc.air_scrub_info[id_tag] = signal.data - radio_connection.post_signal(src, signal, radio_filter_out) - - return 1 - - initialize() - ..() - radio_filter_in = frequency==initial(frequency)?(RADIO_FROM_AIRALARM):null - radio_filter_out = frequency==initial(frequency)?(RADIO_TO_AIRALARM):null - if (frequency) - set_frequency(frequency) - - process() - ..() - if(stat & (NOPOWER|BROKEN)) - return - if (!node) - on = 0 - //broadcast_status() - if(!on) - return 0 - - - var/datum/gas_mixture/environment = loc.return_air() +/obj/machinery/atmospherics/unary/vent_scrubber/New() + ..() + initial_loc = get_area(loc) + if (initial_loc.master) + initial_loc = initial_loc.master + area_uid = initial_loc.uid + if (!id_tag) + assign_uid() + id_tag = num2text(uid) + if(ticker && ticker.current_state == 3)//if the game is running + src.initialize() + src.broadcast_status() +/obj/machinery/atmospherics/unary/vent_scrubber/update_icon() + if(node && on && !(stat & (NOPOWER|BROKEN))) if(scrubbing) - if((environment.toxins>0) || (environment.carbon_dioxide>0) || (environment.trace_gases.len>0)) - var/transfer_moles = min(1, volume_rate/environment.volume)*environment.total_moles() + icon_state = "[level == 1 && istype(loc, /turf/simulated) ? "h" : "" ]on" + else + icon_state = "[level == 1 && istype(loc, /turf/simulated) ? "h" : "" ]in" + else + icon_state = "[level == 1 && istype(loc, /turf/simulated) ? "h" : "" ]off" + return - //Take a gas sample - var/datum/gas_mixture/removed = loc.remove_air(transfer_moles) - if (isnull(removed)) //in space - return +/obj/machinery/atmospherics/unary/vent_scrubber/proc/set_frequency(new_frequency) + radio_controller.remove_object(src, frequency) + frequency = new_frequency + radio_connection = radio_controller.add_object(src, frequency, radio_filter_in) - //Filter it - var/datum/gas_mixture/filtered_out = new - filtered_out.temperature = removed.temperature - if(scrub_Toxins) - filtered_out.toxins = removed.toxins - removed.toxins = 0 - if(scrub_CO2) - filtered_out.carbon_dioxide = removed.carbon_dioxide - removed.carbon_dioxide = 0 +/obj/machinery/atmospherics/unary/vent_scrubber/proc/broadcast_status() + if(!radio_connection) + return 0 - if(removed.trace_gases.len>0) - for(var/datum/gas/trace_gas in removed.trace_gases) - if(istype(trace_gas, /datum/gas/oxygen_agent_b)) - removed.trace_gases -= trace_gas - filtered_out.trace_gases += trace_gas - else if(istype(trace_gas, /datum/gas/sleeping_agent) && scrub_N2O) - removed.trace_gases -= trace_gas - filtered_out.trace_gases += trace_gas + var/datum/signal/signal = new + signal.transmission_method = 1 //radio signal + signal.source = src + signal.data = list( + "area" = area_uid, + "tag" = id_tag, + "device" = "AScr", + "timestamp" = world.time, + "power" = on, + "scrubbing" = scrubbing, + "panic" = panic, + "filter_co2" = scrub_CO2, + "filter_toxins" = scrub_Toxins, + "filter_n2o" = scrub_N2O, + "sigtype" = "status" + ) + if(!initial_loc.air_scrub_names[id_tag]) + var/new_name = "\improper [initial_loc.name] air scrubber #[initial_loc.air_scrub_names.len+1]" + initial_loc.air_scrub_names[id_tag] = new_name + src.name = new_name + initial_loc.air_scrub_info[id_tag] = signal.data + radio_connection.post_signal(src, signal, radio_filter_out) + + return 1 + +/obj/machinery/atmospherics/unary/vent_scrubber/initialize() + ..() + radio_filter_in = frequency==initial(frequency)?(RADIO_FROM_AIRALARM):null + radio_filter_out = frequency==initial(frequency)?(RADIO_TO_AIRALARM):null + if (frequency) + set_frequency(frequency) + +/obj/machinery/atmospherics/unary/vent_scrubber/process() + ..() + if(stat & (NOPOWER|BROKEN)) + return + if (!node) + on = 0 + //broadcast_status() + if(!on) + return 0 - //Remix the resulting gases - air_contents.merge(filtered_out) + var/datum/gas_mixture/environment = loc.return_air() - loc.assume_air(removed) - air_update_turf() + if(scrubbing) + if((environment.toxins>0) || (environment.carbon_dioxide>0) || (environment.trace_gases.len>0)) + var/transfer_moles = min(1, volume_rate/environment.volume)*environment.total_moles() - if(network) - network.update = 1 - - else //Just siphoning all air - if (air_contents.return_pressure()>=50*ONE_ATMOSPHERE) + //Take a gas sample + var/datum/gas_mixture/removed = loc.remove_air(transfer_moles) + if (isnull(removed)) //in space return - var/transfer_moles = environment.total_moles()*(volume_rate/environment.volume) + //Filter it + var/datum/gas_mixture/filtered_out = new + filtered_out.temperature = removed.temperature + if(scrub_Toxins) + filtered_out.toxins = removed.toxins + removed.toxins = 0 + if(scrub_CO2) + filtered_out.carbon_dioxide = removed.carbon_dioxide + removed.carbon_dioxide = 0 - var/datum/gas_mixture/removed = loc.remove_air(transfer_moles) + if(removed.trace_gases.len>0) + for(var/datum/gas/trace_gas in removed.trace_gases) + if(istype(trace_gas, /datum/gas/oxygen_agent_b)) + removed.trace_gases -= trace_gas + filtered_out.trace_gases += trace_gas + else if(istype(trace_gas, /datum/gas/sleeping_agent) && scrub_N2O) + removed.trace_gases -= trace_gas + filtered_out.trace_gases += trace_gas - air_contents.merge(removed) + + //Remix the resulting gases + air_contents.merge(filtered_out) + + loc.assume_air(removed) air_update_turf() if(network) network.update = 1 - return 1 + else //Just siphoning all air + if (air_contents.return_pressure()>=50*ONE_ATMOSPHERE) + return + + var/transfer_moles = environment.total_moles()*(volume_rate/environment.volume) + + var/datum/gas_mixture/removed = loc.remove_air(transfer_moles) + + air_contents.merge(removed) + air_update_turf() + + if(network) + network.update = 1 + + return 1 /* //unused piece of code - hide(var/i) //to make the little pipe section invisible, the icon changes. - if(on&&node) - if(scrubbing) - icon_state = "[i == 1 && istype(loc, /turf/simulated) ? "h" : "" ]on" - else - icon_state = "[i == 1 && istype(loc, /turf/simulated) ? "h" : "" ]in" +/obj/machinery/atmospherics/unary/vent_scrubber/hide(var/i) //to make the little pipe section invisible, the icon changes. + if(on&&node) + if(scrubbing) + icon_state = "[i == 1 && istype(loc, /turf/simulated) ? "h" : "" ]on" else - icon_state = "[i == 1 && istype(loc, /turf/simulated) ? "h" : "" ]off" - on = 0 - return + icon_state = "[i == 1 && istype(loc, /turf/simulated) ? "h" : "" ]in" + else + icon_state = "[i == 1 && istype(loc, /turf/simulated) ? "h" : "" ]off" + on = 0 + return */ - receive_signal(datum/signal/signal) - if(stat & (NOPOWER|BROKEN)) - return - if(!signal.data["tag"] || (signal.data["tag"] != id_tag) || (signal.data["sigtype"]!="command")) - return 0 +/obj/machinery/atmospherics/unary/vent_scrubber/receive_signal(datum/signal/signal) + if(stat & (NOPOWER|BROKEN)) + return + if(!signal.data["tag"] || (signal.data["tag"] != id_tag) || (signal.data["sigtype"]!="command")) + return 0 - if("power" in signal.data) - on = text2num(signal.data["power"]) - if("power_toggle" in signal.data) - on = !on + if("power" in signal.data) + on = text2num(signal.data["power"]) + if("power_toggle" in signal.data) + on = !on - if("panic_siphon" in signal.data) //must be before if("scrubbing" thing - panic = text2num(signal.data["panic_siphon"]) - if(panic) - on = 1 - scrubbing = 0 - volume_rate = 2000 - else - scrubbing = 1 - volume_rate = initial(volume_rate) - if("toggle_panic_siphon" in signal.data) - panic = !panic - if(panic) - on = 1 - scrubbing = 0 - volume_rate = 2000 - else - scrubbing = 1 - volume_rate = initial(volume_rate) + if("panic_siphon" in signal.data) //must be before if("scrubbing" thing + panic = text2num(signal.data["panic_siphon"]) + if(panic) + on = 1 + scrubbing = 0 + volume_rate = 2000 + else + scrubbing = 1 + volume_rate = initial(volume_rate) + if("toggle_panic_siphon" in signal.data) + panic = !panic + if(panic) + on = 1 + scrubbing = 0 + volume_rate = 2000 + else + scrubbing = 1 + volume_rate = initial(volume_rate) - if("scrubbing" in signal.data) - scrubbing = text2num(signal.data["scrubbing"]) - if("toggle_scrubbing" in signal.data) - scrubbing = !scrubbing + if("scrubbing" in signal.data) + scrubbing = text2num(signal.data["scrubbing"]) + if("toggle_scrubbing" in signal.data) + scrubbing = !scrubbing - if("co2_scrub" in signal.data) - scrub_CO2 = text2num(signal.data["co2_scrub"]) - if("toggle_co2_scrub" in signal.data) - scrub_CO2 = !scrub_CO2 + if("co2_scrub" in signal.data) + scrub_CO2 = text2num(signal.data["co2_scrub"]) + if("toggle_co2_scrub" in signal.data) + scrub_CO2 = !scrub_CO2 - if("tox_scrub" in signal.data) - scrub_Toxins = text2num(signal.data["tox_scrub"]) - if("toggle_tox_scrub" in signal.data) - scrub_Toxins = !scrub_Toxins + if("tox_scrub" in signal.data) + scrub_Toxins = text2num(signal.data["tox_scrub"]) + if("toggle_tox_scrub" in signal.data) + scrub_Toxins = !scrub_Toxins - if("n2o_scrub" in signal.data) - scrub_N2O = text2num(signal.data["n2o_scrub"]) - if("toggle_n2o_scrub" in signal.data) - scrub_N2O = !scrub_N2O + if("n2o_scrub" in signal.data) + scrub_N2O = text2num(signal.data["n2o_scrub"]) + if("toggle_n2o_scrub" in signal.data) + scrub_N2O = !scrub_N2O - if("init" in signal.data) - name = signal.data["init"] - return - - if("status" in signal.data) - spawn(2) - broadcast_status() - return //do not update_icon - -// log_admin("DEBUG \[[world.timeofday]\]: vent_scrubber/receive_signal: unknown command \"[signal.data["command"]]\"\n[signal.debug_print()]") - spawn(2) - broadcast_status() - update_icon() + if("init" in signal.data) + name = signal.data["init"] return - power_change() - if(powered(power_channel)) - stat &= ~NOPOWER - else - stat |= NOPOWER - update_icon() + if("status" in signal.data) + spawn(2) + broadcast_status() + return //do not update_icon - attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) - if (!istype(W, /obj/item/weapon/wrench)) - return ..() - if (!(stat & NOPOWER) && on) - user << "\red You cannot unwrench this [src], turn it off first." - return 1 +// log_admin("DEBUG \[[world.timeofday]\]: vent_scrubber/receive_signal: unknown command \"[signal.data["command"]]\"\n[signal.debug_print()]") + spawn(2) + broadcast_status() + update_icon() + return + +/obj/machinery/atmospherics/unary/vent_scrubber/power_change() + if(powered(power_channel)) + stat &= ~NOPOWER + else + stat |= NOPOWER + update_icon() + +/obj/machinery/atmospherics/unary/vent_scrubber/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) + if (!istype(W, /obj/item/weapon/wrench)) return ..() + if (!(stat & NOPOWER) && on) + user << "\red You cannot unwrench this [src], turn it off first." + return 1 + return ..() /obj/machinery/atmospherics/unary/vent_scrubber/Destroy() if(initial_loc) diff --git a/code/ATMOSPHERICS/components/valve.dm b/code/ATMOSPHERICS/components/valve.dm index c67f47a403a..cb2af13543f 100644 --- a/code/ATMOSPHERICS/components/valve.dm +++ b/code/ATMOSPHERICS/components/valve.dm @@ -1,4 +1,4 @@ -obj/machinery/atmospherics/valve +/obj/machinery/atmospherics/valve icon = 'icons/obj/atmospherics/valve.dmi' icon_state = "valve0" @@ -18,295 +18,294 @@ obj/machinery/atmospherics/valve var/datum/pipe_network/network_node1 var/datum/pipe_network/network_node2 + var/frequency = 0 + var/id = null + var/datum/radio_frequency/radio_connection - open - open = 1 - icon_state = "valve1" +/obj/machinery/atmospherics/valve/open + open = 1 + icon_state = "valve1" - update_icon(animation) - if(animation) - flick("valve[src.open][!src.open]",src) - else - icon_state = "valve[open]" +/obj/machinery/atmospherics/valve/update_icon(animation) + if(animation) + flick("valve[src.open][!src.open]",src) + else + icon_state = "valve[open]" - New() - ..() - switch(dir) - if(NORTH || SOUTH) - initialize_directions = NORTH|SOUTH - if(EAST || WEST) - initialize_directions = EAST|WEST +/obj/machinery/atmospherics/valve/New() + ..() + switch(dir) + if(NORTH || SOUTH) + initialize_directions = NORTH|SOUTH + if(EAST || WEST) + initialize_directions = EAST|WEST - network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference) +/obj/machinery/atmospherics/valve/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference) - if(reference == node1) - network_node1 = new_network - if(open) - network_node2 = new_network - else if(reference == node2) - network_node2 = new_network - if(open) - network_node1 = new_network - - if(new_network.normal_members.Find(src)) - return 0 - - new_network.normal_members += src - + if(reference == node1) + network_node1 = new_network if(open) - if(reference == node1) - if(node2) - return node2.network_expand(new_network, src) - else if(reference == node2) - if(node1) - return node1.network_expand(new_network, src) + network_node2 = new_network + else if(reference == node2) + network_node2 = new_network + if(open) + network_node1 = new_network - return null + if(new_network.normal_members.Find(src)) + return 0 - Destroy() - if(node1) - node1.disconnect(src) - del(network_node1) - if(node2) - node2.disconnect(src) - del(network_node2) + new_network.normal_members += src - node1 = null - node2 = null + if(open) + if(reference == node1) + if(node2) + return node2.network_expand(new_network, src) + else if(reference == node2) + if(node1) + return node1.network_expand(new_network, src) - ..() + return null - proc/open() +/obj/machinery/atmospherics/valve/Destroy() + if(node1) + node1.disconnect(src) + del(network_node1) + if(node2) + node2.disconnect(src) + del(network_node2) - if(open) return 0 + node1 = null + node2 = null - open = 1 - update_icon() + ..() - if(network_node1&&network_node2) - network_node1.merge(network_node2) - network_node2 = network_node1 +/obj/machinery/atmospherics/valve/proc/open() - if(network_node1) - network_node1.update = 1 - else if(network_node2) - network_node2.update = 1 + if(open) return 0 - return 1 + open = 1 + update_icon() - proc/close() + if(network_node1&&network_node2) + network_node1.merge(network_node2) + network_node2 = network_node1 - if(!open) - return 0 + if(network_node1) + network_node1.update = 1 + else if(network_node2) + network_node2.update = 1 - open = 0 - update_icon() + return 1 - if(network_node1) - del(network_node1) - if(network_node2) - del(network_node2) +/obj/machinery/atmospherics/valve/proc/close() - build_network() + if(!open) + return 0 - return 1 + open = 0 + update_icon() - proc/normalize_dir() - if(dir==3) - dir = 1 - else if(dir==12) - dir = 4 + if(network_node1) + del(network_node1) + if(network_node2) + del(network_node2) - attack_ai(mob/user as mob) - return + build_network() - attack_paw(mob/user as mob) - return attack_hand(user) + return 1 - attack_hand(mob/user as mob) - src.add_fingerprint(usr) - update_icon(1) - sleep(10) - if (src.open) - src.close() - else - src.open() +/obj/machinery/atmospherics/valve/proc/normalize_dir() + if(dir==3) + dir = 1 + else if(dir==12) + dir = 4 - process() - ..() - . = PROCESS_KILL +/obj/machinery/atmospherics/valve/attack_ai(mob/user as mob) + return -/* if(open && (!node1 || !node2)) - close() - if(!node1) - if(!nodealert) - //world << "Missing node from [src] at [src.x],[src.y],[src.z]" - nodealert = 1 - else if (!node2) - if(!nodealert) - //world << "Missing node from [src] at [src.x],[src.y],[src.z]" - nodealert = 1 - else if (nodealert) - nodealert = 0 +/obj/machinery/atmospherics/valve/attack_paw(mob/user as mob) + return attack_hand(user) + +obj/machinery/atmospherics/valve/attack_hand(mob/user as mob) + src.add_fingerprint(usr) + update_icon(1) + sleep(10) + if (src.open) + src.close() + else + src.open() + +/obj/machinery/atmospherics/valve/process() + ..() + . = PROCESS_KILL + +/* if(open && (!node1 || !node2)) + close() + if(!node1) + if(!nodealert) + //world << "Missing node from [src] at [src.x],[src.y],[src.z]" + nodealert = 1 + else if (!node2) + if(!nodealert) + //world << "Missing node from [src] at [src.x],[src.y],[src.z]" + nodealert = 1 + else if (nodealert) + nodealert = 0 */ - return + return - initialize() - normalize_dir() +/obj/machinery/atmospherics/valve/initialize() + normalize_dir() - var/node1_dir - var/node2_dir + var/node1_dir + var/node2_dir - for(var/direction in cardinal) - if(direction&initialize_directions) - if (!node1_dir) - node1_dir = direction - else if (!node2_dir) - node2_dir = direction + for(var/direction in cardinal) + if(direction&initialize_directions) + if (!node1_dir) + node1_dir = direction + else if (!node2_dir) + node2_dir = direction - for(var/obj/machinery/atmospherics/target in get_step(src,node1_dir)) - if(target.initialize_directions & get_dir(target,src)) - node1 = target - break - for(var/obj/machinery/atmospherics/target in get_step(src,node2_dir)) - if(target.initialize_directions & get_dir(target,src)) - node2 = target - break + for(var/obj/machinery/atmospherics/target in get_step(src,node1_dir)) + if(target.initialize_directions & get_dir(target,src)) + node1 = target + break + for(var/obj/machinery/atmospherics/target in get_step(src,node2_dir)) + if(target.initialize_directions & get_dir(target,src)) + node2 = target + break - build_network() + build_network() - if(openDuringInit) - close() - open() - openDuringInit = 0 + if(openDuringInit) + close() + open() + openDuringInit = 0 /* - var/connect_directions - switch(dir) - if(NORTH) - connect_directions = NORTH|SOUTH - if(SOUTH) - connect_directions = NORTH|SOUTH - if(EAST) - connect_directions = EAST|WEST - if(WEST) - connect_directions = EAST|WEST - else - connect_directions = dir + var/connect_directions + switch(dir) + if(NORTH) + connect_directions = NORTH|SOUTH + if(SOUTH) + connect_directions = NORTH|SOUTH + if(EAST) + connect_directions = EAST|WEST + if(WEST) + connect_directions = EAST|WEST + else + connect_directions = dir - for(var/direction in cardinal) - if(direction&connect_directions) - for(var/obj/machinery/atmospherics/target in get_step(src,direction)) - if(target.initialize_directions & get_dir(target,src)) - connect_directions &= ~direction - node1 = target - break - if(node1) + for(var/direction in cardinal) + if(direction&connect_directions) + for(var/obj/machinery/atmospherics/target in get_step(src,direction)) + if(target.initialize_directions & get_dir(target,src)) + connect_directions &= ~direction + node1 = target break + if(node1) + break - for(var/direction in cardinal) - if(direction&connect_directions) - for(var/obj/machinery/atmospherics/target in get_step(src,direction)) - if(target.initialize_directions & get_dir(target,src)) - node2 = target - break - if(node1) + for(var/direction in cardinal) + if(direction&connect_directions) + for(var/obj/machinery/atmospherics/target in get_step(src,direction)) + if(target.initialize_directions & get_dir(target,src)) + node2 = target break + if(node1) + break */ +/obj/machinery/atmospherics/valve/build_network() + if(!network_node1 && node1) + network_node1 = new /datum/pipe_network() + network_node1.normal_members += src + network_node1.build_network(node1, src) + + if(!network_node2 && node2) + network_node2 = new /datum/pipe_network() + network_node2.normal_members += src + network_node2.build_network(node2, src) + + +/obj/machinery/atmospherics/valve/return_network(obj/machinery/atmospherics/reference) build_network() - if(!network_node1 && node1) - network_node1 = new /datum/pipe_network() - network_node1.normal_members += src - network_node1.build_network(node1, src) - if(!network_node2 && node2) - network_node2 = new /datum/pipe_network() - network_node2.normal_members += src - network_node2.build_network(node2, src) + if(reference==node1) + return network_node1 + if(reference==node2) + return network_node2 - return_network(obj/machinery/atmospherics/reference) - build_network() + return null - if(reference==node1) - return network_node1 +/obj/machinery/atmospherics/valve/reassign_network(datum/pipe_network/old_network, datum/pipe_network/new_network) + if(network_node1 == old_network) + network_node1 = new_network + if(network_node2 == old_network) + network_node2 = new_network - if(reference==node2) - return network_node2 + return 1 - return null +/obj/machinery/atmospherics/valve/return_network_air(datum/network/reference) + return null - reassign_network(datum/pipe_network/old_network, datum/pipe_network/new_network) - if(network_node1 == old_network) - network_node1 = new_network - if(network_node2 == old_network) - network_node2 = new_network +/obj/machinery/atmospherics/valve/disconnect(obj/machinery/atmospherics/reference) + if(reference==node1) + del(network_node1) + node1 = null - return 1 + else if(reference==node2) + del(network_node2) + node2 = null - return_network_air(datum/network/reference) - return null + return null - disconnect(obj/machinery/atmospherics/reference) - if(reference==node1) - del(network_node1) - node1 = null +/obj/machinery/atmospherics/valve/digital // can be controlled by AI + name = "digital valve" + desc = "A digitally controlled valve." + icon = 'icons/obj/atmospherics/digital_valve.dmi' - else if(reference==node2) - del(network_node2) - node2 = null +/obj/machinery/atmospherics/valve/digital/attack_ai(mob/user as mob) + return src.attack_hand(user) - return null +/obj/machinery/atmospherics/valve/digital/attack_hand(mob/user as mob) + if(!src.allowed(user)) + user << "\red Access denied." + return + ..() - digital // can be controlled by AI - name = "digital valve" - desc = "A digitally controlled valve." - icon = 'icons/obj/atmospherics/digital_valve.dmi' +//Radio remote control - attack_ai(mob/user as mob) - return src.attack_hand(user) +/obj/machinery/atmospherics/valve/digital/proc + set_frequency(new_frequency) + radio_controller.remove_object(src, frequency) + frequency = new_frequency + if(frequency) + radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA) - attack_hand(mob/user as mob) - if(!src.allowed(user)) - user << "\red Access denied." - return - ..() +/obj/machinery/atmospherics/valve/digital/initialize() + ..() + if(frequency) + set_frequency(frequency) - //Radio remote control +/obj/machinery/atmospherics/valve/digital/receive_signal(datum/signal/signal) + if(!signal.data["tag"] || (signal.data["tag"] != id)) + return 0 - proc - set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) - frequency = new_frequency - if(frequency) - radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA) + switch(signal.data["command"]) + if("valve_open") + if(!open) + open() - var/frequency = 0 - var/id = null - var/datum/radio_frequency/radio_connection + if("valve_close") + if(open) + close() - initialize() - ..() - if(frequency) - set_frequency(frequency) - - receive_signal(datum/signal/signal) - if(!signal.data["tag"] || (signal.data["tag"] != id)) - return 0 - - switch(signal.data["command"]) - if("valve_open") - if(!open) - open() - - if("valve_close") - if(open) - close() - - if("valve_toggle") - if(open) - close() - else - open() + if("valve_toggle") + if(open) + close() + else + open() diff --git a/code/ATMOSPHERICS/datum_pipe_network.dm b/code/ATMOSPHERICS/datum_pipe_network.dm index ce74f6cfbfc..7956edb5a34 100644 --- a/code/ATMOSPHERICS/datum_pipe_network.dm +++ b/code/ATMOSPHERICS/datum_pipe_network.dm @@ -1,6 +1,6 @@ var/global/list/datum/pipe_network/pipe_networks = list() -datum/pipe_network +/datum/pipe_network var/list/datum/gas_mixture/gases = list() //All of the gas_mixtures continuously connected in this network var/list/obj/machinery/atmospherics/normal_members = list() @@ -10,135 +10,135 @@ datum/pipe_network var/update = 1 var/datum/gas_mixture/air_transient = null - New() - air_transient = new() +/datum/pipe_network/New() + air_transient = new() - ..() + ..() - proc/process() - //Equalize gases amongst pipe if called for - if(update) - update = 0 - reconcile_air() //equalize_gases(gases) +/datum/pipe_network/proc/process() + //Equalize gases amongst pipe if called for + if(update) + update = 0 + reconcile_air() //equalize_gases(gases) - //Give pipelines their process call for pressure checking and what not. Have to remove pressure checks for the time being as pipes dont radiate heat - Mport - //for(var/datum/pipeline/line_member in line_members) - // line_member.process() + //Give pipelines their process call for pressure checking and what not. Have to remove pressure checks for the time being as pipes dont radiate heat - Mport + //for(var/datum/pipeline/line_member in line_members) + // line_member.process() - proc/build_network(obj/machinery/atmospherics/start_normal, obj/machinery/atmospherics/reference) - //Purpose: Generate membership roster - //Notes: Assuming that members will add themselves to appropriate roster in network_expand() +/datum/pipe_network/proc/build_network(obj/machinery/atmospherics/start_normal, obj/machinery/atmospherics/reference) + //Purpose: Generate membership roster + //Notes: Assuming that members will add themselves to appropriate roster in network_expand() - if(!start_normal) - del(src) + if(!start_normal) + del(src) - start_normal.network_expand(src, reference) + start_normal.network_expand(src, reference) - update_network_gases() + update_network_gases() + + if((normal_members.len>0)||(line_members.len>0)) + pipe_networks += src + else + del(src) + +/datum/pipe_network/proc/merge(datum/pipe_network/giver) + if(giver==src) return 0 + + normal_members -= giver.normal_members + normal_members += giver.normal_members + + line_members -= giver.line_members + line_members += giver.line_members + + for(var/obj/machinery/atmospherics/normal_member in giver.normal_members) + normal_member.reassign_network(giver, src) + + for(var/datum/pipeline/line_member in giver.line_members) + line_member.network = src + + del(giver) + + update_network_gases() + return 1 + +/datum/pipe_network/proc/update_network_gases() + //Go through membership roster and make sure gases is up to date + + gases = list() + + for(var/obj/machinery/atmospherics/normal_member in normal_members) + var/result = normal_member.return_network_air(src) + if(result) gases += result + + for(var/datum/pipeline/line_member in line_members) + gases += line_member.air + +/datum/pipe_network/proc/reconcile_air() + //Perfectly equalize all gases members instantly + + //Calculate totals from individual components + var/total_thermal_energy = 0 + var/total_heat_capacity = 0 + + air_transient.volume = 0 + + air_transient.oxygen = 0 + air_transient.nitrogen = 0 + air_transient.toxins = 0 + air_transient.carbon_dioxide = 0 + + + air_transient.trace_gases = list() + + for(var/datum/gas_mixture/gas in gases) + air_transient.volume += gas.volume + total_thermal_energy += gas.thermal_energy() + total_heat_capacity += gas.heat_capacity() + + air_transient.oxygen += gas.oxygen + air_transient.nitrogen += gas.nitrogen + air_transient.toxins += gas.toxins + air_transient.carbon_dioxide += gas.carbon_dioxide + + if(gas.trace_gases.len) + for(var/datum/gas/trace_gas in gas.trace_gases) + var/datum/gas/corresponding = locate(trace_gas.type) in air_transient.trace_gases + if(!corresponding) + corresponding = new trace_gas.type() + air_transient.trace_gases += corresponding + + corresponding.moles += trace_gas.moles + + if(air_transient.volume > 0) + + if(total_heat_capacity > 0) + air_transient.temperature = total_thermal_energy/total_heat_capacity + + //Allow air mixture to react + if(air_transient.react()) + update = 1 - if((normal_members.len>0)||(line_members.len>0)) - pipe_networks += src else - del(src) - - proc/merge(datum/pipe_network/giver) - if(giver==src) return 0 - - normal_members -= giver.normal_members - normal_members += giver.normal_members - - line_members -= giver.line_members - line_members += giver.line_members - - for(var/obj/machinery/atmospherics/normal_member in giver.normal_members) - normal_member.reassign_network(giver, src) - - for(var/datum/pipeline/line_member in giver.line_members) - line_member.network = src - - del(giver) - - update_network_gases() - return 1 - - proc/update_network_gases() - //Go through membership roster and make sure gases is up to date - - gases = list() - - for(var/obj/machinery/atmospherics/normal_member in normal_members) - var/result = normal_member.return_network_air(src) - if(result) gases += result - - for(var/datum/pipeline/line_member in line_members) - gases += line_member.air - - proc/reconcile_air() - //Perfectly equalize all gases members instantly - - //Calculate totals from individual components - var/total_thermal_energy = 0 - var/total_heat_capacity = 0 - - air_transient.volume = 0 - - air_transient.oxygen = 0 - air_transient.nitrogen = 0 - air_transient.toxins = 0 - air_transient.carbon_dioxide = 0 - - - air_transient.trace_gases = list() + air_transient.temperature = 0 + //Update individual gas_mixtures by volume ratio for(var/datum/gas_mixture/gas in gases) - air_transient.volume += gas.volume - total_thermal_energy += gas.thermal_energy() - total_heat_capacity += gas.heat_capacity() + gas.oxygen = air_transient.oxygen*gas.volume/air_transient.volume + gas.nitrogen = air_transient.nitrogen*gas.volume/air_transient.volume + gas.toxins = air_transient.toxins*gas.volume/air_transient.volume + gas.carbon_dioxide = air_transient.carbon_dioxide*gas.volume/air_transient.volume - air_transient.oxygen += gas.oxygen - air_transient.nitrogen += gas.nitrogen - air_transient.toxins += gas.toxins - air_transient.carbon_dioxide += gas.carbon_dioxide + gas.temperature = air_transient.temperature - if(gas.trace_gases.len) - for(var/datum/gas/trace_gas in gas.trace_gases) - var/datum/gas/corresponding = locate(trace_gas.type) in air_transient.trace_gases + if(air_transient.trace_gases.len) + for(var/datum/gas/trace_gas in air_transient.trace_gases) + var/datum/gas/corresponding = locate(trace_gas.type) in gas.trace_gases if(!corresponding) corresponding = new trace_gas.type() - air_transient.trace_gases += corresponding + gas.trace_gases += corresponding - corresponding.moles += trace_gas.moles - - if(air_transient.volume > 0) - - if(total_heat_capacity > 0) - air_transient.temperature = total_thermal_energy/total_heat_capacity - - //Allow air mixture to react - if(air_transient.react()) - update = 1 - - else - air_transient.temperature = 0 - - //Update individual gas_mixtures by volume ratio - for(var/datum/gas_mixture/gas in gases) - gas.oxygen = air_transient.oxygen*gas.volume/air_transient.volume - gas.nitrogen = air_transient.nitrogen*gas.volume/air_transient.volume - gas.toxins = air_transient.toxins*gas.volume/air_transient.volume - gas.carbon_dioxide = air_transient.carbon_dioxide*gas.volume/air_transient.volume - - gas.temperature = air_transient.temperature - - if(air_transient.trace_gases.len) - for(var/datum/gas/trace_gas in air_transient.trace_gases) - var/datum/gas/corresponding = locate(trace_gas.type) in gas.trace_gases - if(!corresponding) - corresponding = new trace_gas.type() - gas.trace_gases += corresponding - - corresponding.moles = trace_gas.moles*gas.volume/air_transient.volume - return 1 + corresponding.moles = trace_gas.moles*gas.volume/air_transient.volume + return 1 proc/equalize_gases(datum/gas_mixture/list/gases) //Perfectly equalize all gases members instantly diff --git a/code/ATMOSPHERICS/datum_pipeline.dm b/code/ATMOSPHERICS/datum_pipeline.dm index b9eb1d29a89..1d9e9e2d21a 100644 --- a/code/ATMOSPHERICS/datum_pipeline.dm +++ b/code/ATMOSPHERICS/datum_pipeline.dm @@ -1,4 +1,4 @@ -datum/pipeline +/datum/pipeline var/datum/gas_mixture/air var/list/obj/machinery/atmospherics/pipe/members @@ -8,187 +8,187 @@ datum/pipeline var/alert_pressure = 0 - Del() - if(network) - del(network) +/datum/pipeline/Del() + if(network) + del(network) - if(air && air.volume) - temporarily_store_air() - del(air) + if(air && air.volume) + temporarily_store_air() + del(air) - ..() + ..() - proc/process()//This use to be called called from the pipe networks - - //Check to see if pressure is within acceptable limits - var/pressure = air.return_pressure() - if(pressure > alert_pressure) - for(var/obj/machinery/atmospherics/pipe/member in members) - if(!member.check_pressure(pressure)) - break //Only delete 1 pipe per process - - //Allow for reactions - //air.react() //Should be handled by pipe_network now - - proc/temporarily_store_air() - //Update individual gas_mixtures by volume ratio +/datum/pipeline/proc/process()//This use to be called called from the pipe networks + //Check to see if pressure is within acceptable limits + var/pressure = air.return_pressure() + if(pressure > alert_pressure) for(var/obj/machinery/atmospherics/pipe/member in members) - member.air_temporary = new - member.air_temporary.volume = member.volume + if(!member.check_pressure(pressure)) + break //Only delete 1 pipe per process - member.air_temporary.oxygen = air.oxygen*member.volume/air.volume - member.air_temporary.nitrogen = air.nitrogen*member.volume/air.volume - member.air_temporary.toxins = air.toxins*member.volume/air.volume - member.air_temporary.carbon_dioxide = air.carbon_dioxide*member.volume/air.volume + //Allow for reactions + //air.react() //Should be handled by pipe_network now - member.air_temporary.temperature = air.temperature +/datum/pipeline/proc/temporarily_store_air() + //Update individual gas_mixtures by volume ratio - if(air.trace_gases.len) - for(var/datum/gas/trace_gas in air.trace_gases) - var/datum/gas/corresponding = new trace_gas.type() - member.air_temporary.trace_gases += corresponding + for(var/obj/machinery/atmospherics/pipe/member in members) + member.air_temporary = new + member.air_temporary.volume = member.volume - corresponding.moles = trace_gas.moles*member.volume/air.volume + member.air_temporary.oxygen = air.oxygen*member.volume/air.volume + member.air_temporary.nitrogen = air.nitrogen*member.volume/air.volume + member.air_temporary.toxins = air.toxins*member.volume/air.volume + member.air_temporary.carbon_dioxide = air.carbon_dioxide*member.volume/air.volume - proc/build_pipeline(obj/machinery/atmospherics/pipe/base) + member.air_temporary.temperature = air.temperature + + if(air.trace_gases.len) + for(var/datum/gas/trace_gas in air.trace_gases) + var/datum/gas/corresponding = new trace_gas.type() + member.air_temporary.trace_gases += corresponding + + corresponding.moles = trace_gas.moles*member.volume/air.volume + +/datum/pipeline/proc/build_pipeline(obj/machinery/atmospherics/pipe/base) + air = new + + var/list/possible_expansions = list(base) + members = list(base) + edges = list() + + var/volume = base.volume + base.parent = src + alert_pressure = base.alert_pressure + + if(base.air_temporary) + air = base.air_temporary + base.air_temporary = null + else air = new - var/list/possible_expansions = list(base) - members = list(base) - edges = list() + while(possible_expansions.len>0) + for(var/obj/machinery/atmospherics/pipe/borderline in possible_expansions) - var/volume = base.volume - base.parent = src - alert_pressure = base.alert_pressure + var/list/result = borderline.pipeline_expansion() + var/edge_check = result.len - if(base.air_temporary) - air = base.air_temporary - base.air_temporary = null - else - air = new + if(result.len>0) + for(var/obj/machinery/atmospherics/pipe/item in result) + if(!members.Find(item)) + members += item + possible_expansions += item - while(possible_expansions.len>0) - for(var/obj/machinery/atmospherics/pipe/borderline in possible_expansions) + volume += item.volume + item.parent = src - var/list/result = borderline.pipeline_expansion() - var/edge_check = result.len + alert_pressure = min(alert_pressure, item.alert_pressure) - if(result.len>0) - for(var/obj/machinery/atmospherics/pipe/item in result) - if(!members.Find(item)) - members += item - possible_expansions += item + if(item.air_temporary) + air.merge(item.air_temporary) - volume += item.volume - item.parent = src + edge_check-- - alert_pressure = min(alert_pressure, item.alert_pressure) + if(edge_check>0) + edges += borderline - if(item.air_temporary) - air.merge(item.air_temporary) + possible_expansions -= borderline - edge_check-- + air.volume = volume - if(edge_check>0) - edges += borderline +/datum/pipeline/proc/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference) - possible_expansions -= borderline + if(new_network.line_members.Find(src)) + return 0 - air.volume = volume + new_network.line_members += src - proc/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference) + network = new_network - if(new_network.line_members.Find(src)) - return 0 + for(var/obj/machinery/atmospherics/pipe/edge in edges) + for(var/obj/machinery/atmospherics/result in edge.pipeline_expansion()) + if(!istype(result,/obj/machinery/atmospherics/pipe) && (result!=reference)) + result.network_expand(new_network, edge) - new_network.line_members += src + return 1 - network = new_network +/datum/pipeline/proc/return_network(obj/machinery/atmospherics/reference) + if(!network) + network = new /datum/pipe_network() + network.build_network(src, null) + //technically passing these parameters should not be allowed + //however pipe_network.build_network(..) and pipeline.network_extend(...) + // were setup to properly handle this case - for(var/obj/machinery/atmospherics/pipe/edge in edges) - for(var/obj/machinery/atmospherics/result in edge.pipeline_expansion()) - if(!istype(result,/obj/machinery/atmospherics/pipe) && (result!=reference)) - result.network_expand(new_network, edge) + return network - return 1 +/datum/pipeline/proc/mingle_with_turf(turf/simulated/target, mingle_volume) + var/datum/gas_mixture/air_sample = air.remove_ratio(mingle_volume/air.volume) + air_sample.volume = mingle_volume - proc/return_network(obj/machinery/atmospherics/reference) - if(!network) - network = new /datum/pipe_network() - network.build_network(src, null) - //technically passing these parameters should not be allowed - //however pipe_network.build_network(..) and pipeline.network_extend(...) - // were setup to properly handle this case + var/datum/gas_mixture/turf_air = target.return_air() - return network + equalize_gases(list(air_sample, turf_air)) + air.merge(air_sample) + //turf_air already modified by equalize_gases() - proc/mingle_with_turf(turf/simulated/target, mingle_volume) - var/datum/gas_mixture/air_sample = air.remove_ratio(mingle_volume/air.volume) - air_sample.volume = mingle_volume + if(istype(target)) + if(target.air) + if(target.air.check_tile_graphic()) + target.update_visuals(target.air) + if(network) + network.update = 1 - var/datum/gas_mixture/turf_air = target.return_air() +/datum/pipeline/proc/temperature_interact(turf/target, share_volume, thermal_conductivity) + var/total_heat_capacity = air.heat_capacity() + var/partial_heat_capacity = total_heat_capacity*(share_volume/air.volume) - equalize_gases(list(air_sample, turf_air)) - air.merge(air_sample) - //turf_air already modified by equalize_gases() + if(istype(target, /turf/simulated)) + var/turf/simulated/modeled_location = target - if(istype(target)) - if(target.air) - if(target.air.check_tile_graphic()) - target.update_visuals(target.air) - if(network) - network.update = 1 + if(modeled_location.blocks_air) - proc/temperature_interact(turf/target, share_volume, thermal_conductivity) - var/total_heat_capacity = air.heat_capacity() - var/partial_heat_capacity = total_heat_capacity*(share_volume/air.volume) - - if(istype(target, /turf/simulated)) - var/turf/simulated/modeled_location = target - - if(modeled_location.blocks_air) - - if((modeled_location.heat_capacity>0) && (partial_heat_capacity>0)) - var/delta_temperature = air.temperature - modeled_location.temperature - - var/heat = thermal_conductivity*delta_temperature* \ - (partial_heat_capacity*modeled_location.heat_capacity/(partial_heat_capacity+modeled_location.heat_capacity)) - - air.temperature -= heat/total_heat_capacity - modeled_location.temperature += heat/modeled_location.heat_capacity - - else - var/delta_temperature = 0 - var/sharer_heat_capacity = 0 - - delta_temperature = (air.temperature - modeled_location.air.temperature) - sharer_heat_capacity = modeled_location.air.heat_capacity() - - var/self_temperature_delta = 0 - var/sharer_temperature_delta = 0 - - if((sharer_heat_capacity>0) && (partial_heat_capacity>0)) - var/heat = thermal_conductivity*delta_temperature* \ - (partial_heat_capacity*sharer_heat_capacity/(partial_heat_capacity+sharer_heat_capacity)) - - self_temperature_delta = -heat/total_heat_capacity - sharer_temperature_delta = heat/sharer_heat_capacity - else - return 1 - - air.temperature += self_temperature_delta - - modeled_location.air.temperature += sharer_temperature_delta - - - else - if((target.heat_capacity>0) && (partial_heat_capacity>0)) - var/delta_temperature = air.temperature - target.temperature + if((modeled_location.heat_capacity>0) && (partial_heat_capacity>0)) + var/delta_temperature = air.temperature - modeled_location.temperature var/heat = thermal_conductivity*delta_temperature* \ - (partial_heat_capacity*target.heat_capacity/(partial_heat_capacity+target.heat_capacity)) + (partial_heat_capacity*modeled_location.heat_capacity/(partial_heat_capacity+modeled_location.heat_capacity)) air.temperature -= heat/total_heat_capacity - if(network) - network.update = 1 \ No newline at end of file + modeled_location.temperature += heat/modeled_location.heat_capacity + + else + var/delta_temperature = 0 + var/sharer_heat_capacity = 0 + + delta_temperature = (air.temperature - modeled_location.air.temperature) + sharer_heat_capacity = modeled_location.air.heat_capacity() + + var/self_temperature_delta = 0 + var/sharer_temperature_delta = 0 + + if((sharer_heat_capacity>0) && (partial_heat_capacity>0)) + var/heat = thermal_conductivity*delta_temperature* \ + (partial_heat_capacity*sharer_heat_capacity/(partial_heat_capacity+sharer_heat_capacity)) + + self_temperature_delta = -heat/total_heat_capacity + sharer_temperature_delta = heat/sharer_heat_capacity + else + return 1 + + air.temperature += self_temperature_delta + + modeled_location.air.temperature += sharer_temperature_delta + + + else + if((target.heat_capacity>0) && (partial_heat_capacity>0)) + var/delta_temperature = air.temperature - target.temperature + + var/heat = thermal_conductivity*delta_temperature* \ + (partial_heat_capacity*target.heat_capacity/(partial_heat_capacity+target.heat_capacity)) + + air.temperature -= heat/total_heat_capacity + if(network) + network.update = 1 \ No newline at end of file diff --git a/code/ATMOSPHERICS/he_pipes.dm b/code/ATMOSPHERICS/he_pipes.dm index 556800d1efc..c1cd3304c8e 100644 --- a/code/ATMOSPHERICS/he_pipes.dm +++ b/code/ATMOSPHERICS/he_pipes.dm @@ -1,5 +1,5 @@ -obj/machinery/atmospherics/pipe/simple/heat_exchanging +/obj/machinery/atmospherics/pipe/simple/heat_exchanging icon = 'icons/obj/pipes/heat.dmi' icon_state = "intact" level = 2 @@ -8,99 +8,99 @@ obj/machinery/atmospherics/pipe/simple/heat_exchanging minimum_temperature_difference = 20 thermal_conductivity = WINDOW_HEAT_TRANSFER_COEFFICIENT - // BubbleWrap - New() +// BubbleWrap +/obj/machinery/atmospherics/pipe/simple/heat_exchanging/New() + ..() + initialize_directions_he = initialize_directions // The auto-detection from /pipe is good enough for a simple HE pipe +// BubbleWrap END + +/obj/machinery/atmospherics/pipe/simple/heat_exchanging/initialize() + normalize_dir() + var/node1_dir + var/node2_dir + + for(var/direction in cardinal) + if(direction&initialize_directions_he) + if (!node1_dir) + node1_dir = direction + else if (!node2_dir) + node2_dir = direction + + for(var/obj/machinery/atmospherics/pipe/simple/heat_exchanging/target in get_step(src,node1_dir)) + if(target.initialize_directions_he & get_dir(target,src)) + node1 = target + break + for(var/obj/machinery/atmospherics/pipe/simple/heat_exchanging/target in get_step(src,node2_dir)) + if(target.initialize_directions_he & get_dir(target,src)) + node2 = target + break + update_icon() + return + + +/obj/machinery/atmospherics/pipe/simple/heat_exchanging/process() + if(!parent) ..() - initialize_directions_he = initialize_directions // The auto-detection from /pipe is good enough for a simple HE pipe - // BubbleWrap END - - initialize() - normalize_dir() - var/node1_dir - var/node2_dir - - for(var/direction in cardinal) - if(direction&initialize_directions_he) - if (!node1_dir) - node1_dir = direction - else if (!node2_dir) - node2_dir = direction - - for(var/obj/machinery/atmospherics/pipe/simple/heat_exchanging/target in get_step(src,node1_dir)) - if(target.initialize_directions_he & get_dir(target,src)) - node1 = target - break - for(var/obj/machinery/atmospherics/pipe/simple/heat_exchanging/target in get_step(src,node2_dir)) - if(target.initialize_directions_he & get_dir(target,src)) - node2 = target - break - update_icon() - return - - - process() - if(!parent) - ..() - else - var/environment_temperature = 0 - if(istype(loc, /turf/simulated/)) - if(loc:blocks_air) - environment_temperature = loc:temperature - else - var/datum/gas_mixture/environment = loc.return_air() - environment_temperature = environment.temperature - else + else + var/environment_temperature = 0 + if(istype(loc, /turf/simulated/)) + if(loc:blocks_air) environment_temperature = loc:temperature - var/datum/gas_mixture/pipe_air = return_air() - if(abs(environment_temperature-pipe_air.temperature) > minimum_temperature_difference) - parent.temperature_interact(loc, volume, thermal_conductivity) + else + var/datum/gas_mixture/environment = loc.return_air() + environment_temperature = environment.temperature + else + environment_temperature = loc:temperature + var/datum/gas_mixture/pipe_air = return_air() + if(abs(environment_temperature-pipe_air.temperature) > minimum_temperature_difference) + parent.temperature_interact(loc, volume, thermal_conductivity) -obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction +/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction icon = 'icons/obj/pipes/junction.dmi' icon_state = "intact" level = 2 minimum_temperature_difference = 300 thermal_conductivity = WALL_HEAT_TRANSFER_COEFFICIENT - // BubbleWrap - New() - .. () - switch ( dir ) - if ( SOUTH ) - initialize_directions = NORTH - initialize_directions_he = SOUTH - if ( NORTH ) - initialize_directions = SOUTH - initialize_directions_he = NORTH - if ( EAST ) - initialize_directions = WEST - initialize_directions_he = EAST - if ( WEST ) - initialize_directions = EAST - initialize_directions_he = WEST - // BubbleWrap END +// BubbleWrap +/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction/New() + .. () + switch ( dir ) + if ( SOUTH ) + initialize_directions = NORTH + initialize_directions_he = SOUTH + if ( NORTH ) + initialize_directions = SOUTH + initialize_directions_he = NORTH + if ( EAST ) + initialize_directions = WEST + initialize_directions_he = EAST + if ( WEST ) + initialize_directions = EAST + initialize_directions_he = WEST +// BubbleWrap END + +/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction/update_icon() + if(node1&&node2) + icon_state = "intact" + else + var/have_node1 = node1?1:0 + var/have_node2 = node2?1:0 + icon_state = "exposed[have_node1][have_node2]" + if(!node1&&!node2) + qdel(src) + +/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction/initialize() + for(var/obj/machinery/atmospherics/target in get_step(src,initialize_directions)) + if(target.initialize_directions & get_dir(target,src)) + node1 = target + break + for(var/obj/machinery/atmospherics/pipe/simple/heat_exchanging/target in get_step(src,initialize_directions_he)) + if(target.initialize_directions_he & get_dir(target,src)) + node2 = target + break update_icon() - if(node1&&node2) - icon_state = "intact" - else - var/have_node1 = node1?1:0 - var/have_node2 = node2?1:0 - icon_state = "exposed[have_node1][have_node2]" - if(!node1&&!node2) - qdel(src) - - initialize() - for(var/obj/machinery/atmospherics/target in get_step(src,initialize_directions)) - if(target.initialize_directions & get_dir(target,src)) - node1 = target - break - for(var/obj/machinery/atmospherics/pipe/simple/heat_exchanging/target in get_step(src,initialize_directions_he)) - if(target.initialize_directions_he & get_dir(target,src)) - node2 = target - break - - update_icon() - return + return diff --git a/code/ATMOSPHERICS/pipes.dm b/code/ATMOSPHERICS/pipes.dm index 833ff4b93d1..562bed66e96 100644 --- a/code/ATMOSPHERICS/pipes.dm +++ b/code/ATMOSPHERICS/pipes.dm @@ -1,4 +1,4 @@ -obj/machinery/atmospherics/pipe +/obj/machinery/atmospherics/pipe var/datum/gas_mixture/air_temporary //used when reconstructing a pipeline that broke var/datum/pipeline/parent @@ -14,802 +14,803 @@ obj/machinery/atmospherics/pipe var/alert_pressure = 80*ONE_ATMOSPHERE //minimum pressure before check_pressure(...) should be called - proc/pipeline_expansion() - return null +/obj/machinery/atmospherics/pipe/proc/pipeline_expansion() + return null - proc/check_pressure(pressure) - //Return 1 if parent should continue checking other pipes - //Return null if parent should stop checking other pipes. Recall: del(src) will by default return null +/obj/machinery/atmospherics/pipe/proc/check_pressure(pressure) + //Return 1 if parent should continue checking other pipes + //Return null if parent should stop checking other pipes. Recall: del(src) will by default return null - return 1 + return 1 - return_air() - if(!parent) - parent = new /datum/pipeline() - parent.build_pipeline(src) +/obj/machinery/atmospherics/pipe/return_air() + if(!parent) + parent = new /datum/pipeline() + parent.build_pipeline(src) - return parent.air + return parent.air - build_network() - if(!parent) - parent = new /datum/pipeline() - parent.build_pipeline(src) +/obj/machinery/atmospherics/pipe/build_network() + if(!parent) + parent = new /datum/pipeline() + parent.build_pipeline(src) - return parent.return_network() + return parent.return_network() - network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference) - if(!parent) - parent = new /datum/pipeline() - parent.build_pipeline(src) +/obj/machinery/atmospherics/pipe/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference) + if(!parent) + parent = new /datum/pipeline() + parent.build_pipeline(src) - return parent.network_expand(new_network, reference) + return parent.network_expand(new_network, reference) - return_network(obj/machinery/atmospherics/reference) - if(!parent) - parent = new /datum/pipeline() - parent.build_pipeline(src) +/obj/machinery/atmospherics/pipe/return_network(obj/machinery/atmospherics/reference) + if(!parent) + parent = new /datum/pipeline() + parent.build_pipeline(src) - return parent.return_network(reference) + return parent.return_network(reference) - Destroy() - del(parent) - if(air_temporary) - loc.assume_air(air_temporary) - del(air_temporary) +/obj/machinery/atmospherics/pipe/Destroy() + del(parent) + if(air_temporary) + loc.assume_air(air_temporary) + del(air_temporary) + ..() + +/obj/machinery/atmospherics/pipe/simple + icon = 'icons/obj/pipes.dmi' + icon_state = "intact-f" + + name = "pipe" + desc = "A one meter section of regular pipe" + + volume = 70 + + dir = SOUTH + initialize_directions = SOUTH|NORTH + + var/obj/machinery/atmospherics/node1 + var/obj/machinery/atmospherics/node2 + + var/minimum_temperature_difference = 300 + var/thermal_conductivity = 0 //WALL_HEAT_TRANSFER_COEFFICIENT No + + var/maximum_pressure = 70*ONE_ATMOSPHERE + var/fatigue_pressure = 55*ONE_ATMOSPHERE + alert_pressure = 55*ONE_ATMOSPHERE + + + level = 1 + +/obj/machinery/atmospherics/pipe/simple/New() + ..() + switch(dir) + if(SOUTH || NORTH) + initialize_directions = SOUTH|NORTH + if(EAST || WEST) + initialize_directions = EAST|WEST + if(NORTHEAST) + initialize_directions = NORTH|EAST + if(NORTHWEST) + initialize_directions = NORTH|WEST + if(SOUTHEAST) + initialize_directions = SOUTH|EAST + if(SOUTHWEST) + initialize_directions = SOUTH|WEST + + +/obj/machinery/atmospherics/pipe/simple/hide(var/i) + if(level == 1 && istype(loc, /turf/simulated)) + invisibility = i ? 101 : 0 + update_icon() + +/obj/machinery/atmospherics/pipe/simple/process() + if(!parent) //This should cut back on the overhead calling build_network thousands of times per cycle ..() + else + . = PROCESS_KILL - simple - icon = 'icons/obj/pipes.dmi' - icon_state = "intact-f" + /*if(!node1) + parent.mingle_with_turf(loc, volume) + if(!nodealert) + //world << "Missing node from [src] at [src.x],[src.y],[src.z]" + nodealert = 1 - name = "pipe" - desc = "A one meter section of regular pipe" - - volume = 70 - - dir = SOUTH - initialize_directions = SOUTH|NORTH - - var/obj/machinery/atmospherics/node1 - var/obj/machinery/atmospherics/node2 - - var/minimum_temperature_difference = 300 - var/thermal_conductivity = 0 //WALL_HEAT_TRANSFER_COEFFICIENT No - - var/maximum_pressure = 70*ONE_ATMOSPHERE - var/fatigue_pressure = 55*ONE_ATMOSPHERE - alert_pressure = 55*ONE_ATMOSPHERE + else if(!node2) + parent.mingle_with_turf(loc, volume) + if(!nodealert) + //world << "Missing node from [src] at [src.x],[src.y],[src.z]" + nodealert = 1 + else if (nodealert) + nodealert = 0 - level = 1 + else if(parent) + var/environment_temperature = 0 - New() - ..() - switch(dir) - if(SOUTH || NORTH) - initialize_directions = SOUTH|NORTH - if(EAST || WEST) - initialize_directions = EAST|WEST - if(NORTHEAST) - initialize_directions = NORTH|EAST - if(NORTHWEST) - initialize_directions = NORTH|WEST - if(SOUTHEAST) - initialize_directions = SOUTH|EAST - if(SOUTHWEST) - initialize_directions = SOUTH|WEST - - - hide(var/i) - if(level == 1 && istype(loc, /turf/simulated)) - invisibility = i ? 101 : 0 - update_icon() - - process() - if(!parent) //This should cut back on the overhead calling build_network thousands of times per cycle - ..() + if(istype(loc, /turf/simulated/)) + if(loc:blocks_air) + environment_temperature = loc:temperature else - . = PROCESS_KILL + var/datum/gas_mixture/environment = loc.return_air() + environment_temperature = environment.temperature - /*if(!node1) - parent.mingle_with_turf(loc, volume) - if(!nodealert) - //world << "Missing node from [src] at [src.x],[src.y],[src.z]" - nodealert = 1 + else + environment_temperature = loc:temperature - else if(!node2) - parent.mingle_with_turf(loc, volume) - if(!nodealert) - //world << "Missing node from [src] at [src.x],[src.y],[src.z]" - nodealert = 1 - else if (nodealert) - nodealert = 0 + var/datum/gas_mixture/pipe_air = return_air() + + if(abs(environment_temperature-pipe_air.temperature) > minimum_temperature_difference) + parent.temperature_interact(loc, volume, thermal_conductivity) + */ //Screw you heat lag + +/obj/machinery/atmospherics/pipe/simple/check_pressure(pressure) + var/datum/gas_mixture/environment = loc.return_air() + + var/pressure_difference = pressure - environment.return_pressure() + + if(pressure_difference > maximum_pressure) + burst() + + else if(pressure_difference > fatigue_pressure) + //TODO: leak to turf, doing pfshhhhh + if(prob(5)) + burst() + + else return 1 + +/obj/machinery/atmospherics/pipe/simple/proc/burst() + src.visible_message("\red \bold [src] bursts!"); + playsound(src.loc, 'sound/effects/bang.ogg', 25, 1) + var/datum/effect/effect/system/harmless_smoke_spread/smoke = new + smoke.set_up(1,0, src.loc, 0) + smoke.start() + qdel(src) + +/obj/machinery/atmospherics/pipe/simple/proc/normalize_dir() + if(dir==3) + dir = 1 + else if(dir==12) + dir = 4 + +/obj/machinery/atmospherics/pipe/simple/Destroy() + if(node1) + node1.disconnect(src) + if(node2) + node2.disconnect(src) + + ..() + +/obj/machinery/atmospherics/pipe/simple/pipeline_expansion() + return list(node1, node2) + +/obj/machinery/atmospherics/pipe/simple/update_icon() + if(node1&&node2) + var/C = "" + switch(pipe_color) + if ("red") C = "-r" + if ("blue") C = "-b" + if ("cyan") C = "-c" + if ("green") C = "-g" + if ("yellow") C = "-y" + if ("purple") C = "-p" + icon_state = "intact[C][invisibility ? "-f" : "" ]" + + //var/node1_direction = get_dir(src, node1) + //var/node2_direction = get_dir(src, node2) + + //dir = node1_direction|node2_direction + + else + if(!node1&&!node2) + qdel(src) //TODO: silent deleting looks weird + var/have_node1 = node1?1:0 + var/have_node2 = node2?1:0 + icon_state = "exposed[have_node1][have_node2][invisibility ? "-f" : "" ]" - else if(parent) - var/environment_temperature = 0 +/obj/machinery/atmospherics/pipe/simple/initialize() + normalize_dir() + var/node1_dir + var/node2_dir - if(istype(loc, /turf/simulated/)) - if(loc:blocks_air) - environment_temperature = loc:temperature - else - var/datum/gas_mixture/environment = loc.return_air() - environment_temperature = environment.temperature + for(var/direction in cardinal) + if(direction&initialize_directions) + if (!node1_dir) + node1_dir = direction + else if (!node2_dir) + node2_dir = direction - else - environment_temperature = loc:temperature + for(var/obj/machinery/atmospherics/target in get_step(src,node1_dir)) + if(target.initialize_directions & get_dir(target,src)) + node1 = target + break + for(var/obj/machinery/atmospherics/target in get_step(src,node2_dir)) + if(target.initialize_directions & get_dir(target,src)) + node2 = target + break - var/datum/gas_mixture/pipe_air = return_air() - if(abs(environment_temperature-pipe_air.temperature) > minimum_temperature_difference) - parent.temperature_interact(loc, volume, thermal_conductivity) - */ //Screw you heat lag + var/turf/T = src.loc // hide if turf is not intact + hide(T.intact) + update_icon() + //update_icon() - check_pressure(pressure) - var/datum/gas_mixture/environment = loc.return_air() +/obj/machinery/atmospherics/pipe/simple/disconnect(obj/machinery/atmospherics/reference) + if(reference == node1) + if(istype(node1, /obj/machinery/atmospherics/pipe)) + del(parent) + node1 = null - var/pressure_difference = pressure - environment.return_pressure() + if(reference == node2) + if(istype(node2, /obj/machinery/atmospherics/pipe)) + del(parent) + node2 = null - if(pressure_difference > maximum_pressure) - burst() + update_icon() - else if(pressure_difference > fatigue_pressure) - //TODO: leak to turf, doing pfshhhhh - if(prob(5)) - burst() + return null - else return 1 +/obj/machinery/atmospherics/pipe/simple/scrubbers + name="Scrubbers pipe" + pipe_color="red" + icon_state = "" - proc/burst() - src.visible_message("\red \bold [src] bursts!"); - playsound(src.loc, 'sound/effects/bang.ogg', 25, 1) - var/datum/effect/effect/system/harmless_smoke_spread/smoke = new - smoke.set_up(1,0, src.loc, 0) - smoke.start() +/obj/machinery/atmospherics/pipe/simple/supply + name="Air supply pipe" + pipe_color="blue" + icon_state = "" + +/obj/machinery/atmospherics/pipe/simple/supplymain + name="Main air supply pipe" + pipe_color="purple" + icon_state = "" + +/obj/machinery/atmospherics/pipe/simple/general + name="Pipe" + pipe_color="" + icon_state = "" + +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible + level = 2 + icon_state = "intact-r" + +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden + level = 1 + icon_state = "intact-r-f" + +/obj/machinery/atmospherics/pipe/simple/supply/visible + level = 2 + icon_state = "intact-b" + +/obj/machinery/atmospherics/pipe/simple/supply/hidden + level = 1 + icon_state = "intact-b-f" + +/obj/machinery/atmospherics/pipe/simple/supplymain/visible + level = 2 + icon_state = "intact-p" + +/obj/machinery/atmospherics/pipe/simple/supplymain/hidden + level = 1 + icon_state = "intact-p-f" + +/obj/machinery/atmospherics/pipe/simple/general/visible + level = 2 + icon_state = "intact" + +/obj/machinery/atmospherics/pipe/simple/general/hidden + level = 1 + icon_state = "intact-f" + +/obj/machinery/atmospherics/pipe/simple/yellow + name="Pipe" + pipe_color="yellow" + icon_state = "" + +/obj/machinery/atmospherics/pipe/simple/yellow/visible + level = 2 + icon_state = "intact-y" + +/obj/machinery/atmospherics/pipe/simple/yellow/hidden + level = 1 + icon_state = "intact-y-f" + + + +/obj/machinery/atmospherics/pipe/simple/insulated + icon = 'icons/obj/atmospherics/red_pipe.dmi' + icon_state = "intact" + + minimum_temperature_difference = 10000 + thermal_conductivity = 0 + maximum_pressure = 1000*ONE_ATMOSPHERE + fatigue_pressure = 900*ONE_ATMOSPHERE + alert_pressure = 900*ONE_ATMOSPHERE + + level = 2 + + +/obj/machinery/atmospherics/pipe/tank + icon = 'icons/obj/atmospherics/pipe_tank.dmi' + icon_state = "intact" + + name = "pressure tank" + desc = "A large vessel containing pressurized gas." + + volume = 10000 //in liters, 1 meters by 1 meters by 2 meters + + dir = SOUTH + initialize_directions = SOUTH + density = 1 + + can_unwrench = 0 + + var/obj/machinery/atmospherics/node1 + +/obj/machinery/atmospherics/pipe/tank/New() + initialize_directions = dir + ..() + +/obj/machinery/atmospherics/pipe/tank/process() + if(!parent) + ..() + else + . = PROCESS_KILL +/* if(!node1) + parent.mingle_with_turf(loc, 200) + if(!nodealert) + //world << "Missing node from [src] at [src.x],[src.y],[src.z]" + nodealert = 1 + else if (nodealert) + nodealert = 0 +*/ +/obj/machinery/atmospherics/pipe/tank/carbon_dioxide + name = "pressure tank (Carbon Dioxide)" + +/obj/machinery/atmospherics/pipe/tank/carbon_dioxide/New() + air_temporary = new + air_temporary.volume = volume + air_temporary.temperature = T20C + + air_temporary.carbon_dioxide = (25*ONE_ATMOSPHERE)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature) + + ..() + +/obj/machinery/atmospherics/pipe/tank/toxins + icon = 'icons/obj/atmospherics/orange_pipe_tank.dmi' + name = "pressure tank (Plasma)" + +/obj/machinery/atmospherics/pipe/tank/toxins/New() + air_temporary = new + air_temporary.volume = volume + air_temporary.temperature = T20C + + air_temporary.toxins = (25*ONE_ATMOSPHERE)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature) + + ..() + +/obj/machinery/atmospherics/pipe/tank/oxygen_agent_b + icon = 'icons/obj/atmospherics/red_orange_pipe_tank.dmi' + name = "pressure tank (Oxygen + Plasma)" + +/obj/machinery/atmospherics/pipe/tank/oxygen_agent_b/New() + air_temporary = new + air_temporary.volume = volume + air_temporary.temperature = T0C + + var/datum/gas/oxygen_agent_b/trace_gas = new + trace_gas.moles = (25*ONE_ATMOSPHERE)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature) + + air_temporary.trace_gases += trace_gas + + ..() + +/obj/machinery/atmospherics/pipe/tank/oxygen + icon = 'icons/obj/atmospherics/blue_pipe_tank.dmi' + name = "pressure tank (Oxygen)" + +/obj/machinery/atmospherics/pipe/tank/oxygen/New() + air_temporary = new + air_temporary.volume = volume + air_temporary.temperature = T20C + + air_temporary.oxygen = (25*ONE_ATMOSPHERE)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature) + + ..() + +/obj/machinery/atmospherics/pipe/tank/nitrogen + icon = 'icons/obj/atmospherics/red_pipe_tank.dmi' + name = "pressure tank (Nitrogen)" + +/obj/machinery/atmospherics/pipe/tank/nitrogen/New() + air_temporary = new + air_temporary.volume = volume + air_temporary.temperature = T20C + + air_temporary.nitrogen = (25*ONE_ATMOSPHERE)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature) + + ..() + +/obj/machinery/atmospherics/pipe/tank/air + icon = 'icons/obj/atmospherics/red_pipe_tank.dmi' + name = "pressure tank (Air)" + +/obj/machinery/atmospherics/pipe/tank/air/New() + air_temporary = new + air_temporary.volume = volume + air_temporary.temperature = T20C + + air_temporary.oxygen = (25*ONE_ATMOSPHERE*O2STANDARD)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature) + air_temporary.nitrogen = (25*ONE_ATMOSPHERE*N2STANDARD)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature) + + ..() + +/obj/machinery/atmospherics/pipe/tank/Destroy() + if(node1) + node1.disconnect(src) + + ..() + +/obj/machinery/atmospherics/pipe/tank/pipeline_expansion() + return list(node1) + +/obj/machinery/atmospherics/pipe/tank/update_icon() + if(node1) + icon_state = "intact" + + dir = get_dir(src, node1) + + else + icon_state = "exposed" + +/obj/machinery/atmospherics/pipe/tank/initialize() + + var/connect_direction = dir + + for(var/obj/machinery/atmospherics/target in get_step(src,connect_direction)) + if(target.initialize_directions & get_dir(target,src)) + node1 = target + break + + update_icon() + +/obj/machinery/atmospherics/pipe/tank/disconnect(obj/machinery/atmospherics/reference) + if(reference == node1) + if(istype(node1, /obj/machinery/atmospherics/pipe)) + del(parent) + node1 = null + + update_icon() + + return null + +/obj/machinery/atmospherics/pipe/tank/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) + if (istype(W, /obj/item/device/analyzer) && get_dist(user, src) <= 1) + atmosanalyzer_scan(parent.air, user) + +/obj/machinery/atmospherics/pipe/vent + icon = 'icons/obj/atmospherics/pipe_vent.dmi' + icon_state = "intact" + + name = "vent" + desc = "A large air vent" + + level = 1 + + volume = 250 + + dir = SOUTH + initialize_directions = SOUTH + + can_unwrench = 0 + + var/build_killswitch = 1 + + var/obj/machinery/atmospherics/node1 + +/obj/machinery/atmospherics/pipe/vent/New() + initialize_directions = dir + ..() + +/obj/machinery/atmospherics/pipe/vent/process() + if(!parent) + if(build_killswitch <= 0) + . = PROCESS_KILL + else + build_killswitch-- + ..() + return + else + parent.mingle_with_turf(loc, 250) +/* + if(!node1) + if(!nodealert) + //world << "Missing node from [src] at [src.x],[src.y],[src.z]" + nodealert = 1 + else if (nodealert) + nodealert = 0 +*/ +/obj/machinery/atmospherics/pipe/vent/Destroy() + if(node1) + node1.disconnect(src) + + ..() + +/obj/machinery/atmospherics/pipe/vent/pipeline_expansion() + return list(node1) + +/obj/machinery/atmospherics/pipe/vent/update_icon() + if(node1) + icon_state = "intact" + + dir = get_dir(src, node1) + + else + icon_state = "exposed" + +/obj/machinery/atmospherics/pipe/vent/initialize() + var/connect_direction = dir + + for(var/obj/machinery/atmospherics/target in get_step(src,connect_direction)) + if(target.initialize_directions & get_dir(target,src)) + node1 = target + break + + update_icon() + +/obj/machinery/atmospherics/pipe/vent/disconnect(obj/machinery/atmospherics/reference) + if(reference == node1) + if(istype(node1, /obj/machinery/atmospherics/pipe)) + del(parent) + node1 = null + + update_icon() + + return null + +/obj/machinery/atmospherics/pipe/vent/hide(var/i) //to make the little pipe section invisible, the icon changes. + if(node1) + icon_state = "[i == 1 && istype(loc, /turf/simulated) ? "h" : "" ]intact" + dir = get_dir(src, node1) + else + icon_state = "exposed" + +/obj/machinery/atmospherics/pipe/manifold + icon = 'icons/obj/atmospherics/pipe_manifold.dmi' + icon_state = "manifold-f" + + name = "pipe manifold" + desc = "A manifold composed of regular pipes" + + volume = 105 + + dir = SOUTH + initialize_directions = EAST|NORTH|WEST + + var/obj/machinery/atmospherics/node1 + var/obj/machinery/atmospherics/node2 + var/obj/machinery/atmospherics/node3 + + level = 1 + layer = 2.4 //under wires with their 2.44 + +/obj/machinery/atmospherics/pipe/manifold/New() + switch(dir) + if(NORTH) + initialize_directions = EAST|SOUTH|WEST + if(SOUTH) + initialize_directions = WEST|NORTH|EAST + if(EAST) + initialize_directions = SOUTH|WEST|NORTH + if(WEST) + initialize_directions = NORTH|EAST|SOUTH + + ..() + + + +/obj/machinery/atmospherics/pipe/manifold/hide(var/i) + if(level == 1 && istype(loc, /turf/simulated)) + invisibility = i ? 101 : 0 + update_icon() + +/obj/machinery/atmospherics/pipe/manifold/pipeline_expansion() + return list(node1, node2, node3) + +/obj/machinery/atmospherics/pipe/manifold/process() + if(!parent) + ..() + else + . = PROCESS_KILL +/* + if(!node1) + parent.mingle_with_turf(loc, 70) + if(!nodealert) + //world << "Missing node from [src] at [src.x],[src.y],[src.z]" + nodealert = 1 + else if(!node2) + parent.mingle_with_turf(loc, 70) + if(!nodealert) + //world << "Missing node from [src] at [src.x],[src.y],[src.z]" + nodealert = 1 + else if(!node3) + parent.mingle_with_turf(loc, 70) + if(!nodealert) + //world << "Missing node from [src] at [src.x],[src.y],[src.z]" + nodealert = 1 + else if (nodealert) + nodealert = 0 +*/ +/obj/machinery/atmospherics/pipe/manifold/Destroy() + if(node1) + node1.disconnect(src) + if(node2) + node2.disconnect(src) + if(node3) + node3.disconnect(src) + + ..() + +/obj/machinery/atmospherics/pipe/manifold/disconnect(obj/machinery/atmospherics/reference) + if(reference == node1) + if(istype(node1, /obj/machinery/atmospherics/pipe)) + del(parent) + node1 = null + + if(reference == node2) + if(istype(node2, /obj/machinery/atmospherics/pipe)) + del(parent) + node2 = null + + if(reference == node3) + if(istype(node3, /obj/machinery/atmospherics/pipe)) + del(parent) + node3 = null + + update_icon() + + ..() + +/obj/machinery/atmospherics/pipe/manifold/update_icon() + if(node1&&node2&&node3) + var/C = "" + switch(pipe_color) + if ("red") C = "-r" + if ("blue") C = "-b" + if ("cyan") C = "-c" + if ("green") C = "-g" + if ("yellow") C = "-y" + if ("purple") C = "-p" + icon_state = "manifold[C][invisibility ? "-f" : ""]" + + else + var/connected = 0 + var/unconnected = 0 + var/connect_directions = (NORTH|SOUTH|EAST|WEST)&(~dir) + + if(node1) + connected |= get_dir(src, node1) + if(node2) + connected |= get_dir(src, node2) + if(node3) + connected |= get_dir(src, node3) + + unconnected = (~connected)&(connect_directions) + + icon_state = "manifold_[connected]_[unconnected]" + + if(!connected) qdel(src) - proc/normalize_dir() - if(dir==3) - dir = 1 - else if(dir==12) - dir = 4 + return - Destroy() - if(node1) - node1.disconnect(src) - if(node2) - node2.disconnect(src) +/obj/machinery/atmospherics/pipe/manifold/initialize() + var/connect_directions = (NORTH|SOUTH|EAST|WEST)&(~dir) - ..() - - pipeline_expansion() - return list(node1, node2) - - update_icon() - if(node1&&node2) - var/C = "" - switch(pipe_color) - if ("red") C = "-r" - if ("blue") C = "-b" - if ("cyan") C = "-c" - if ("green") C = "-g" - if ("yellow") C = "-y" - if ("purple") C = "-p" - icon_state = "intact[C][invisibility ? "-f" : "" ]" - - //var/node1_direction = get_dir(src, node1) - //var/node2_direction = get_dir(src, node2) - - //dir = node1_direction|node2_direction - - else - if(!node1&&!node2) - qdel(src) //TODO: silent deleting looks weird - var/have_node1 = node1?1:0 - var/have_node2 = node2?1:0 - icon_state = "exposed[have_node1][have_node2][invisibility ? "-f" : "" ]" - - - initialize() - normalize_dir() - var/node1_dir - var/node2_dir - - for(var/direction in cardinal) - if(direction&initialize_directions) - if (!node1_dir) - node1_dir = direction - else if (!node2_dir) - node2_dir = direction - - for(var/obj/machinery/atmospherics/target in get_step(src,node1_dir)) + for(var/direction in cardinal) + if(direction&connect_directions) + for(var/obj/machinery/atmospherics/target in get_step(src,direction)) if(target.initialize_directions & get_dir(target,src)) node1 = target + connect_directions &= ~direction break - for(var/obj/machinery/atmospherics/target in get_step(src,node2_dir)) + if (node1) + break + + + for(var/direction in cardinal) + if(direction&connect_directions) + for(var/obj/machinery/atmospherics/target in get_step(src,direction)) if(target.initialize_directions & get_dir(target,src)) node2 = target + connect_directions &= ~direction break + if (node2) + break - var/turf/T = src.loc // hide if turf is not intact - hide(T.intact) - update_icon() - //update_icon() - - disconnect(obj/machinery/atmospherics/reference) - if(reference == node1) - if(istype(node1, /obj/machinery/atmospherics/pipe)) - del(parent) - node1 = null - - if(reference == node2) - if(istype(node2, /obj/machinery/atmospherics/pipe)) - del(parent) - node2 = null - - update_icon() - - return null - - simple/scrubbers - name="Scrubbers pipe" - pipe_color="red" - icon_state = "" - - simple/supply - name="Air supply pipe" - pipe_color="blue" - icon_state = "" - - simple/supplymain - name="Main air supply pipe" - pipe_color="purple" - icon_state = "" - - simple/general - name="Pipe" - pipe_color="" - icon_state = "" - - simple/scrubbers/visible - level = 2 - icon_state = "intact-r" - - simple/scrubbers/hidden - level = 1 - icon_state = "intact-r-f" - - simple/supply/visible - level = 2 - icon_state = "intact-b" - - simple/supply/hidden - level = 1 - icon_state = "intact-b-f" - - simple/supplymain/visible - level = 2 - icon_state = "intact-p" - - simple/supplymain/hidden - level = 1 - icon_state = "intact-p-f" - - simple/general/visible - level = 2 - icon_state = "intact" - - simple/general/hidden - level = 1 - icon_state = "intact-f" - - simple/yellow - name="Pipe" - pipe_color="yellow" - icon_state = "" - - simple/yellow/visible - level = 2 - icon_state = "intact-y" - - simple/yellow/hidden - level = 1 - icon_state = "intact-y-f" - - - - simple/insulated - icon = 'icons/obj/atmospherics/red_pipe.dmi' - icon_state = "intact" - - minimum_temperature_difference = 10000 - thermal_conductivity = 0 - maximum_pressure = 1000*ONE_ATMOSPHERE - fatigue_pressure = 900*ONE_ATMOSPHERE - alert_pressure = 900*ONE_ATMOSPHERE - - level = 2 - - - tank - icon = 'icons/obj/atmospherics/pipe_tank.dmi' - icon_state = "intact" - - name = "pressure tank" - desc = "A large vessel containing pressurized gas." - - volume = 10000 //in liters, 1 meters by 1 meters by 2 meters - - dir = SOUTH - initialize_directions = SOUTH - density = 1 - - can_unwrench = 0 - - var/obj/machinery/atmospherics/node1 - - New() - initialize_directions = dir - ..() - - process() - if(!parent) - ..() - else - . = PROCESS_KILL -/* if(!node1) - parent.mingle_with_turf(loc, 200) - if(!nodealert) - //world << "Missing node from [src] at [src.x],[src.y],[src.z]" - nodealert = 1 - else if (nodealert) - nodealert = 0 -*/ - carbon_dioxide - name = "pressure tank (Carbon Dioxide)" - - New() - air_temporary = new - air_temporary.volume = volume - air_temporary.temperature = T20C - - air_temporary.carbon_dioxide = (25*ONE_ATMOSPHERE)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature) - - ..() - - toxins - icon = 'icons/obj/atmospherics/orange_pipe_tank.dmi' - name = "pressure tank (Plasma)" - - New() - air_temporary = new - air_temporary.volume = volume - air_temporary.temperature = T20C - - air_temporary.toxins = (25*ONE_ATMOSPHERE)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature) - - ..() - - oxygen_agent_b - icon = 'icons/obj/atmospherics/red_orange_pipe_tank.dmi' - name = "pressure tank (Oxygen + Plasma)" - - New() - air_temporary = new - air_temporary.volume = volume - air_temporary.temperature = T0C - - var/datum/gas/oxygen_agent_b/trace_gas = new - trace_gas.moles = (25*ONE_ATMOSPHERE)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature) - - air_temporary.trace_gases += trace_gas - - ..() - - oxygen - icon = 'icons/obj/atmospherics/blue_pipe_tank.dmi' - name = "pressure tank (Oxygen)" - - New() - air_temporary = new - air_temporary.volume = volume - air_temporary.temperature = T20C - - air_temporary.oxygen = (25*ONE_ATMOSPHERE)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature) - - ..() - - nitrogen - icon = 'icons/obj/atmospherics/red_pipe_tank.dmi' - name = "pressure tank (Nitrogen)" - - New() - air_temporary = new - air_temporary.volume = volume - air_temporary.temperature = T20C - - air_temporary.nitrogen = (25*ONE_ATMOSPHERE)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature) - - ..() - - air - icon = 'icons/obj/atmospherics/red_pipe_tank.dmi' - name = "pressure tank (Air)" - - New() - air_temporary = new - air_temporary.volume = volume - air_temporary.temperature = T20C - - air_temporary.oxygen = (25*ONE_ATMOSPHERE*O2STANDARD)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature) - air_temporary.nitrogen = (25*ONE_ATMOSPHERE*N2STANDARD)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature) - - ..() - - Destroy() - if(node1) - node1.disconnect(src) - - ..() - - pipeline_expansion() - return list(node1) - - update_icon() - if(node1) - icon_state = "intact" - - dir = get_dir(src, node1) - - else - icon_state = "exposed" - - initialize() - - var/connect_direction = dir - - for(var/obj/machinery/atmospherics/target in get_step(src,connect_direction)) + for(var/direction in cardinal) + if(direction&connect_directions) + for(var/obj/machinery/atmospherics/target in get_step(src,direction)) if(target.initialize_directions & get_dir(target,src)) - node1 = target + node3 = target + connect_directions &= ~direction break - - update_icon() - - disconnect(obj/machinery/atmospherics/reference) - if(reference == node1) - if(istype(node1, /obj/machinery/atmospherics/pipe)) - del(parent) - node1 = null - - update_icon() - - return null - - attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) - if (istype(W, /obj/item/device/analyzer) && get_dist(user, src) <= 1) - atmosanalyzer_scan(parent.air, user) - - vent - icon = 'icons/obj/atmospherics/pipe_vent.dmi' - icon_state = "intact" - - name = "vent" - desc = "A large air vent" - - level = 1 - - volume = 250 - - dir = SOUTH - initialize_directions = SOUTH - - can_unwrench = 0 - - var/build_killswitch = 1 - - var/obj/machinery/atmospherics/node1 - New() - initialize_directions = dir - ..() - - process() - if(!parent) - if(build_killswitch <= 0) - . = PROCESS_KILL - else - build_killswitch-- - ..() - return - else - parent.mingle_with_turf(loc, 250) -/* - if(!node1) - if(!nodealert) - //world << "Missing node from [src] at [src.x],[src.y],[src.z]" - nodealert = 1 - else if (nodealert) - nodealert = 0 -*/ - Destroy() - if(node1) - node1.disconnect(src) - - ..() - - pipeline_expansion() - return list(node1) - - update_icon() - if(node1) - icon_state = "intact" - - dir = get_dir(src, node1) - - else - icon_state = "exposed" - - initialize() - var/connect_direction = dir - - for(var/obj/machinery/atmospherics/target in get_step(src,connect_direction)) - if(target.initialize_directions & get_dir(target,src)) - node1 = target - break - - update_icon() - - disconnect(obj/machinery/atmospherics/reference) - if(reference == node1) - if(istype(node1, /obj/machinery/atmospherics/pipe)) - del(parent) - node1 = null - - update_icon() - - return null - - hide(var/i) //to make the little pipe section invisible, the icon changes. - if(node1) - icon_state = "[i == 1 && istype(loc, /turf/simulated) ? "h" : "" ]intact" - dir = get_dir(src, node1) - else - icon_state = "exposed" - - manifold - icon = 'icons/obj/atmospherics/pipe_manifold.dmi' - icon_state = "manifold-f" - - name = "pipe manifold" - desc = "A manifold composed of regular pipes" - - volume = 105 - - dir = SOUTH - initialize_directions = EAST|NORTH|WEST - - var/obj/machinery/atmospherics/node1 - var/obj/machinery/atmospherics/node2 - var/obj/machinery/atmospherics/node3 - - level = 1 - layer = 2.4 //under wires with their 2.44 - - New() - switch(dir) - if(NORTH) - initialize_directions = EAST|SOUTH|WEST - if(SOUTH) - initialize_directions = WEST|NORTH|EAST - if(EAST) - initialize_directions = SOUTH|WEST|NORTH - if(WEST) - initialize_directions = NORTH|EAST|SOUTH - - ..() - - - - hide(var/i) - if(level == 1 && istype(loc, /turf/simulated)) - invisibility = i ? 101 : 0 - update_icon() - - pipeline_expansion() - return list(node1, node2, node3) - - process() - if(!parent) - ..() - else - . = PROCESS_KILL -/* - if(!node1) - parent.mingle_with_turf(loc, 70) - if(!nodealert) - //world << "Missing node from [src] at [src.x],[src.y],[src.z]" - nodealert = 1 - else if(!node2) - parent.mingle_with_turf(loc, 70) - if(!nodealert) - //world << "Missing node from [src] at [src.x],[src.y],[src.z]" - nodealert = 1 - else if(!node3) - parent.mingle_with_turf(loc, 70) - if(!nodealert) - //world << "Missing node from [src] at [src.x],[src.y],[src.z]" - nodealert = 1 - else if (nodealert) - nodealert = 0 -*/ - Destroy() - if(node1) - node1.disconnect(src) - if(node2) - node2.disconnect(src) - if(node3) - node3.disconnect(src) - - ..() - - disconnect(obj/machinery/atmospherics/reference) - if(reference == node1) - if(istype(node1, /obj/machinery/atmospherics/pipe)) - del(parent) - node1 = null - - if(reference == node2) - if(istype(node2, /obj/machinery/atmospherics/pipe)) - del(parent) - node2 = null - - if(reference == node3) - if(istype(node3, /obj/machinery/atmospherics/pipe)) - del(parent) - node3 = null - - update_icon() - - ..() - - update_icon() - if(node1&&node2&&node3) - var/C = "" - switch(pipe_color) - if ("red") C = "-r" - if ("blue") C = "-b" - if ("cyan") C = "-c" - if ("green") C = "-g" - if ("yellow") C = "-y" - if ("purple") C = "-p" - icon_state = "manifold[C][invisibility ? "-f" : ""]" - - else - var/connected = 0 - var/unconnected = 0 - var/connect_directions = (NORTH|SOUTH|EAST|WEST)&(~dir) - - if(node1) - connected |= get_dir(src, node1) - if(node2) - connected |= get_dir(src, node2) - if(node3) - connected |= get_dir(src, node3) - - unconnected = (~connected)&(connect_directions) - - icon_state = "manifold_[connected]_[unconnected]" - - if(!connected) - qdel(src) - - return - - initialize() - var/connect_directions = (NORTH|SOUTH|EAST|WEST)&(~dir) - - for(var/direction in cardinal) - if(direction&connect_directions) - for(var/obj/machinery/atmospherics/target in get_step(src,direction)) - if(target.initialize_directions & get_dir(target,src)) - node1 = target - connect_directions &= ~direction - break - if (node1) - break - - - for(var/direction in cardinal) - if(direction&connect_directions) - for(var/obj/machinery/atmospherics/target in get_step(src,direction)) - if(target.initialize_directions & get_dir(target,src)) - node2 = target - connect_directions &= ~direction - break - if (node2) - break - - - for(var/direction in cardinal) - if(direction&connect_directions) - for(var/obj/machinery/atmospherics/target in get_step(src,direction)) - if(target.initialize_directions & get_dir(target,src)) - node3 = target - connect_directions &= ~direction - break - if (node3) - break - - var/turf/T = src.loc // hide if turf is not intact - hide(T.intact) - //update_icon() - update_icon() - - manifold/scrubbers - name="Scrubbers pipe" - pipe_color="red" - icon_state = "" - - manifold/supply - name="Air supply pipe" - pipe_color="blue" - icon_state = "" - - manifold/supplymain - name="Main air supply pipe" - pipe_color="purple" - icon_state = "" - - manifold/general - name="Air supply pipe" - pipe_color="gray" - icon_state = "" - - manifold/yellow - name="Air supply pipe" - pipe_color="yellow" - icon_state = "" - - manifold/scrubbers/visible - level = 2 - icon_state = "manifold-r" - - manifold/scrubbers/hidden - level = 1 - icon_state = "manifold-r-f" - - manifold/supply/visible - level = 2 - icon_state = "manifold-b" - - manifold/supply/hidden - level = 1 - icon_state = "manifold-b-f" - - manifold/supplymain/visible - level = 2 - icon_state = "manifold-p" - - manifold/supplymain/hidden - level = 1 - icon_state = "manifold-p-f" - - manifold/general/visible - level = 2 - icon_state = "manifold" - - manifold/general/hidden - level = 1 - icon_state = "manifold-f" - - manifold/yellow/visible - level = 2 - icon_state = "manifold-y" - - manifold/yellow/hidden - level = 1 - icon_state = "manifold-y-f" + if (node3) + break + + var/turf/T = src.loc // hide if turf is not intact + hide(T.intact) + //update_icon() + update_icon() + +/obj/machinery/atmospherics/pipe/manifold/scrubbers + name="Scrubbers pipe" + pipe_color="red" + icon_state = "" + +/obj/machinery/atmospherics/pipe/manifold/supply + name="Air supply pipe" + pipe_color="blue" + icon_state = "" + +/obj/machinery/atmospherics/pipe/manifold/supplymain + name="Main air supply pipe" + pipe_color="purple" + icon_state = "" + +/obj/machinery/atmospherics/pipe/manifold/general + name="Air supply pipe" + pipe_color="gray" + icon_state = "" + +/obj/machinery/atmospherics/pipe/manifold/yellow + name="Air supply pipe" + pipe_color="yellow" + icon_state = "" + +/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible + level = 2 + icon_state = "manifold-r" + +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden + level = 1 + icon_state = "manifold-r-f" + +/obj/machinery/atmospherics/pipe/manifold/supply/visible + level = 2 + icon_state = "manifold-b" + +/obj/machinery/atmospherics/pipe/manifold/supply/hidden + level = 1 + icon_state = "manifold-b-f" + +/obj/machinery/atmospherics/pipe/manifold/supplymain/visible + level = 2 + icon_state = "manifold-p" + +/obj/machinery/atmospherics/pipe/manifold/supplymain/hidden + level = 1 + icon_state = "manifold-p-f" + +/obj/machinery/atmospherics/pipe/manifold/general/visible + level = 2 + icon_state = "manifold" + +/obj/machinery/atmospherics/pipe/manifold/general/hidden + level = 1 + icon_state = "manifold-f" + +/obj/machinery/atmospherics/pipe/manifold/yellow/visible + level = 2 + icon_state = "manifold-y" + +/obj/machinery/atmospherics/pipe/manifold/yellow/hidden + level = 1 + icon_state = "manifold-y-f" obj/machinery/atmospherics/pipe/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) if (istype(W, /obj/item/device/analyzer) && get_dist(user, src) <= 1) diff --git a/code/LINDA/LINDA_fire.dm b/code/LINDA/LINDA_fire.dm index 5089252dc59..37eb751e194 100644 --- a/code/LINDA/LINDA_fire.dm +++ b/code/LINDA/LINDA_fire.dm @@ -144,9 +144,9 @@ /obj/effect/hotspot/proc/Kill() air_master.hotspots -= src DestroyTurf() - garbage_collect() + qdel(src) -/obj/effect/hotspot/proc/garbage_collect() +/obj/effect/hotspot/Destroy() if(istype(loc, /turf/simulated)) var/turf/simulated/T = loc if(T.active_hotspot == src) diff --git a/code/LINDA/LINDA_turf_tile.dm b/code/LINDA/LINDA_turf_tile.dm index 5b63966de76..98e9574b0bb 100644 --- a/code/LINDA/LINDA_turf_tile.dm +++ b/code/LINDA/LINDA_turf_tile.dm @@ -66,7 +66,7 @@ turf/simulated/New() turf/simulated/Del() if(active_hotspot) - active_hotspot.garbage_collect() + qdel(active_hotspot) ..() turf/simulated/assume_air(datum/gas_mixture/giver) diff --git a/code/WorkInProgress/buildmode.dm b/code/WorkInProgress/buildmode.dm index 8073684f64b..d7150693bfd 100644 --- a/code/WorkInProgress/buildmode.dm +++ b/code/WorkInProgress/buildmode.dm @@ -46,65 +46,67 @@ /obj/effect/bmode/builddir icon_state = "build" screen_loc = "NORTH,WEST" - Click() - switch(dir) - if(NORTH) - dir = EAST - if(EAST) - dir = SOUTH - if(SOUTH) - dir = WEST - if(WEST) - dir = NORTHWEST - if(NORTHWEST) - dir = NORTH - return 1 + +/obj/effect/bmode/builddir/Click() + switch(dir) + if(NORTH) + dir = EAST + if(EAST) + dir = SOUTH + if(SOUTH) + dir = WEST + if(WEST) + dir = NORTHWEST + if(NORTHWEST) + dir = NORTH + return 1 /obj/effect/bmode/buildhelp icon = 'icons/misc/buildmode.dmi' icon_state = "buildhelp" screen_loc = "NORTH,WEST+1" - Click() - switch(master.cl.buildmode) - if(1) - usr << "\blue ***********************************************************" - usr << "\blue Left Mouse Button = Construct / Upgrade" - usr << "\blue Right Mouse Button = Deconstruct / Delete / Downgrade" - usr << "\blue Left Mouse Button + ctrl = R-Window" - usr << "\blue Left Mouse Button + alt = Airlock" - usr << "" - usr << "\blue Use the button in the upper left corner to" - usr << "\blue change the direction of built objects." - usr << "\blue ***********************************************************" - if(2) - usr << "\blue ***********************************************************" - usr << "\blue Right Mouse Button on buildmode button = Set object type" - usr << "\blue Left Mouse Button on turf/obj = Place objects" - usr << "\blue Right Mouse Button = Delete objects" - usr << "" - usr << "\blue Use the button in the upper left corner to" - usr << "\blue change the direction of built objects." - usr << "\blue ***********************************************************" - if(3) - usr << "\blue ***********************************************************" - usr << "\blue Right Mouse Button on buildmode button = Select var(type) & value" - usr << "\blue Left Mouse Button on turf/obj/mob = Set var(type) & value" - usr << "\blue Right Mouse Button on turf/obj/mob = Reset var's value" - usr << "\blue ***********************************************************" - if(4) - usr << "\blue ***********************************************************" - usr << "\blue Left Mouse Button on turf/obj/mob = Throw" - usr << "\blue Right Mouse Button on turf/obj/mob = Select" - usr << "\blue ***********************************************************" - return 1 + +/obj/effect/bmode/buildhelp/Click() + switch(master.cl.buildmode) + if(1) + usr << "\blue ***********************************************************" + usr << "\blue Left Mouse Button = Construct / Upgrade" + usr << "\blue Right Mouse Button = Deconstruct / Delete / Downgrade" + usr << "\blue Left Mouse Button + ctrl = R-Window" + usr << "\blue Left Mouse Button + alt = Airlock" + usr << "" + usr << "\blue Use the button in the upper left corner to" + usr << "\blue change the direction of built objects." + usr << "\blue ***********************************************************" + if(2) + usr << "\blue ***********************************************************" + usr << "\blue Right Mouse Button on buildmode button = Set object type" + usr << "\blue Left Mouse Button on turf/obj = Place objects" + usr << "\blue Right Mouse Button = Delete objects" + usr << "" + usr << "\blue Use the button in the upper left corner to" + usr << "\blue change the direction of built objects." + usr << "\blue ***********************************************************" + if(3) + usr << "\blue ***********************************************************" + usr << "\blue Right Mouse Button on buildmode button = Select var(type) & value" + usr << "\blue Left Mouse Button on turf/obj/mob = Set var(type) & value" + usr << "\blue Right Mouse Button on turf/obj/mob = Reset var's value" + usr << "\blue ***********************************************************" + if(4) + usr << "\blue ***********************************************************" + usr << "\blue Left Mouse Button on turf/obj/mob = Throw" + usr << "\blue Right Mouse Button on turf/obj/mob = Select" + usr << "\blue ***********************************************************" + return 1 /obj/effect/bmode/buildquit icon_state = "buildquit" screen_loc = "NORTH,WEST+3" - Click() - togglebuildmode(master.cl.mob) - return 1 +/obj/effect/bmode/buildquit/Click() + togglebuildmode(master.cl.mob) + return 1 /obj/effect/bmode/buildholder density = 0 @@ -123,56 +125,56 @@ var/valueholder = "derp" var/objholder = /obj/structure/closet - Click(location, control, params) - var/list/pa = params2list(params) +/obj/effect/bmode/buildmode/Click(location, control, params) + var/list/pa = params2list(params) - if(pa.Find("left")) - switch(master.cl.buildmode) - if(1) - master.cl.buildmode = 2 - src.icon_state = "buildmode2" - if(2) - master.cl.buildmode = 3 - src.icon_state = "buildmode3" - if(3) - master.cl.buildmode = 4 - src.icon_state = "buildmode4" - if(4) - master.cl.buildmode = 1 - src.icon_state = "buildmode1" + if(pa.Find("left")) + switch(master.cl.buildmode) + if(1) + master.cl.buildmode = 2 + src.icon_state = "buildmode2" + if(2) + master.cl.buildmode = 3 + src.icon_state = "buildmode3" + if(3) + master.cl.buildmode = 4 + src.icon_state = "buildmode4" + if(4) + master.cl.buildmode = 1 + src.icon_state = "buildmode1" - else if(pa.Find("right")) - switch(master.cl.buildmode) - if(1) - return 1 - if(2) - objholder = text2path(input(usr,"Enter typepath:" ,"Typepath","/obj/structure/closet")) - if(!ispath(objholder)) + else if(pa.Find("right")) + switch(master.cl.buildmode) + if(1) + return 1 + if(2) + objholder = text2path(input(usr,"Enter typepath:" ,"Typepath","/obj/structure/closet")) + if(!ispath(objholder)) + objholder = /obj/structure/closet + alert("That path is not allowed.") + else + if(ispath(objholder,/mob) && !check_rights(R_DEBUG,0)) objholder = /obj/structure/closet - alert("That path is not allowed.") - else - if(ispath(objholder,/mob) && !check_rights(R_DEBUG,0)) - objholder = /obj/structure/closet - if(3) - var/list/locked = list("vars", "key", "ckey", "client", "firemut", "ishulk", "telekinesis", "xray", "virus", "viruses", "cuffed", "ka", "last_eaten", "urine") + if(3) + var/list/locked = list("vars", "key", "ckey", "client", "firemut", "ishulk", "telekinesis", "xray", "virus", "viruses", "cuffed", "ka", "last_eaten", "urine") - master.buildmode.varholder = input(usr,"Enter variable name:" ,"Name", "name") - if(master.buildmode.varholder in locked && !check_rights(R_DEBUG,0)) - return 1 - var/thetype = input(usr,"Select variable type:" ,"Type") in list("text","number","mob-reference","obj-reference","turf-reference") - if(!thetype) return 1 - switch(thetype) - if("text") - master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value", "value") as text - if("number") - master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value", 123) as num - if("mob-reference") - master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value") as mob in mob_list - if("obj-reference") - master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value") as obj in world - if("turf-reference") - master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value") as turf in world - return 1 + master.buildmode.varholder = input(usr,"Enter variable name:" ,"Name", "name") + if(master.buildmode.varholder in locked && !check_rights(R_DEBUG,0)) + return 1 + var/thetype = input(usr,"Select variable type:" ,"Type") in list("text","number","mob-reference","obj-reference","turf-reference") + if(!thetype) return 1 + switch(thetype) + if("text") + master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value", "value") as text + if("number") + master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value", 123) as num + if("mob-reference") + master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value") as mob in mob_list + if("obj-reference") + master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value") as obj in world + if("turf-reference") + master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value") as turf in world + return 1 /proc/build_click(var/mob/user, buildmode, params, var/obj/object) diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 25c256322ef..66998d42a31 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -34,4 +34,9 @@ #define CLICK_CD_MELEE 8 #define CLICK_CD_RANGE 4 -//click cooldowns, in tenths of a second \ No newline at end of file +//click cooldowns, in tenths of a second + + +#define BE_CLOSE 1 //in the case of a silicon, to select if they need to be next to the atom +#define NO_DEXTERY 1 //if other mobs (monkeys, aliens, etc) can use this +//used by canUseTopic() \ No newline at end of file diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index 12ba4ad3ff8..2210414cdad 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -138,7 +138,7 @@ //No need for a recursive limit either -proc/recursive_mob_check(var/atom/O,var/client_check=1,var/sight_check=1,var/include_radio=1) +/proc/recursive_mob_check(var/atom/O,var/client_check=1,var/sight_check=1,var/include_radio=1) var/list/processing_list = list(O) var/list/processed_list = list() @@ -178,7 +178,7 @@ proc/recursive_mob_check(var/atom/O,var/client_check=1,var/sight_check=1,var/inc return found_mobs -proc/get_mobs_in_view(var/R, var/atom/source) +/proc/get_mobs_in_view(var/R, var/atom/source) // Returns a list of mobs in range of R from source. Used in radio and say code. var/turf/T = get_turf(source) @@ -224,39 +224,38 @@ proc/get_mobs_in_view(var/R, var/atom/source) #define SIGN(X) ((X<0)?-1:1) -proc - inLineOfSight(X1,Y1,X2,Y2,Z=1,PX1=16.5,PY1=16.5,PX2=16.5,PY2=16.5) - var/turf/T - if(X1==X2) - if(Y1==Y2) - return 1 //Light cannot be blocked on same tile - else - var/s = SIGN(Y2-Y1) - Y1+=s - while(Y1!=Y2) - T=locate(X1,Y1,Z) - if(T.opacity) - return 0 - Y1+=s +/proc/inLineOfSight(X1,Y1,X2,Y2,Z=1,PX1=16.5,PY1=16.5,PX2=16.5,PY2=16.5) + var/turf/T + if(X1==X2) + if(Y1==Y2) + return 1 //Light cannot be blocked on same tile else - var/m=(32*(Y2-Y1)+(PY2-PY1))/(32*(X2-X1)+(PX2-PX1)) - var/b=(Y1+PY1/32-0.015625)-m*(X1+PX1/32-0.015625) //In tiles - var/signX = SIGN(X2-X1) - var/signY = SIGN(Y2-Y1) - if(X1 transparent, gray -> translucent white, white -> solid white - proc/BecomeAlphaMask() - SwapColor(null, "#000000ff") // don't let transparent become gray - MapColors(0,0,0,0.3, 0,0,0,0.59, 0,0,0,0.11, 0,0,0,0, 1,1,1,0) +// Change a grayscale icon into a white icon where the original color becomes the alpha +// I.e., black -> transparent, gray -> translucent white, white -> solid white +/icon/proc/BecomeAlphaMask() + SwapColor(null, "#000000ff") // don't let transparent become gray + MapColors(0,0,0,0.3, 0,0,0,0.59, 0,0,0,0.11, 0,0,0,0, 1,1,1,0) - proc/UseAlphaMask(mask) - Opaque() - AddAlphaMask(mask) +/icon/proc/UseAlphaMask(mask) + Opaque() + AddAlphaMask(mask) - proc/AddAlphaMask(mask) - var/icon/M = new(mask) - M.Blend("#ffffff", ICON_SUBTRACT) - // apply mask - Blend(M, ICON_ADD) +/icon/proc/AddAlphaMask(mask) + var/icon/M = new(mask) + M.Blend("#ffffff", ICON_SUBTRACT) + // apply mask + Blend(M, ICON_ADD) /* HSV format is represented as "#hhhssvv" or "#hhhssvvaa" @@ -307,7 +307,7 @@ icon Higher value means brighter color */ -proc/ReadRGB(rgb) +/proc/ReadRGB(rgb) if(!rgb) return // interpret the HSV or HSVA value @@ -357,7 +357,7 @@ proc/ReadRGB(rgb) . = list(r, g, b) if(usealpha) . += alpha -proc/ReadHSV(hsv) +/proc/ReadHSV(hsv) if(!hsv) return // interpret the HSV or HSVA value @@ -396,7 +396,7 @@ proc/ReadHSV(hsv) . = list(hue, sat, val) if(usealpha) . += alpha -proc/HSVtoRGB(hsv) +/proc/HSVtoRGB(hsv) if(!hsv) return "#000000" var/list/HSV = ReadHSV(hsv) if(!HSV) return "#000000" @@ -424,7 +424,7 @@ proc/HSVtoRGB(hsv) return (HSV.len > 3) ? rgb(r,g,b,HSV[4]) : rgb(r,g,b) -proc/RGBtoHSV(rgb) +/proc/RGBtoHSV(rgb) if(!rgb) return "#0000000" var/list/RGB = ReadRGB(rgb) if(!RGB) return "#0000000" @@ -455,7 +455,7 @@ proc/RGBtoHSV(rgb) return hsv(hue, sat, val, (RGB.len>3 ? RGB[4] : null)) -proc/hsv(hue, sat, val, alpha) +/proc/hsv(hue, sat, val, alpha) if(hue < 0 || hue >= 1536) hue %= 1536 if(hue < 0) hue += 1536 if((hue & 0xFF) == 0xFF) @@ -488,7 +488,7 @@ proc/hsv(hue, sat, val, alpha) amount<0 or amount>1 are allowed */ -proc/BlendHSV(hsv1, hsv2, amount) +/proc/BlendHSV(hsv1, hsv2, amount) var/list/HSV1 = ReadHSV(hsv1) var/list/HSV2 = ReadHSV(hsv2) @@ -542,7 +542,7 @@ proc/BlendHSV(hsv1, hsv2, amount) amount<0 or amount>1 are allowed */ -proc/BlendRGB(rgb1, rgb2, amount) +/proc/BlendRGB(rgb1, rgb2, amount) var/list/RGB1 = ReadRGB(rgb1) var/list/RGB2 = ReadRGB(rgb2) @@ -558,10 +558,10 @@ proc/BlendRGB(rgb1, rgb2, amount) return isnull(alpha) ? rgb(r, g, b) : rgb(r, g, b, alpha) -proc/BlendRGBasHSV(rgb1, rgb2, amount) +/proc/BlendRGBasHSV(rgb1, rgb2, amount) return HSVtoRGB(RGBtoHSV(rgb1), RGBtoHSV(rgb2), amount) -proc/HueToAngle(hue) +/proc/HueToAngle(hue) // normalize hsv in case anything is screwy if(hue < 0 || hue >= 1536) hue %= 1536 if(hue < 0) hue += 1536 @@ -569,7 +569,7 @@ proc/HueToAngle(hue) hue -= hue >> 8 return hue / (1530/360) -proc/AngleToHue(angle) +/proc/AngleToHue(angle) // normalize hsv in case anything is screwy if(angle < 0 || angle >= 360) angle -= 360 * round(angle / 360) var/hue = angle * (1530/360) @@ -579,7 +579,7 @@ proc/AngleToHue(angle) // positive angle rotates forward through red->green->blue -proc/RotateHue(hsv, angle) +/proc/RotateHue(hsv, angle) var/list/HSV = ReadHSV(hsv) // normalize hsv in case anything is screwy @@ -601,13 +601,13 @@ proc/RotateHue(hsv, angle) return hsv(HSV[1], HSV[2], HSV[3], (HSV.len > 3 ? HSV[4] : null)) // Convert an rgb color to grayscale -proc/GrayScale(rgb) +/proc/GrayScale(rgb) var/list/RGB = ReadRGB(rgb) var/gray = RGB[1]*0.3 + RGB[2]*0.59 + RGB[3]*0.11 return (RGB.len > 3) ? rgb(gray, gray, gray, RGB[4]) : rgb(gray, gray, gray) // Change grayscale color to black->tone->white range -proc/ColorTone(rgb, tone) +/proc/ColorTone(rgb, tone) var/list/RGB = ReadRGB(rgb) var/list/TONE = ReadRGB(tone) @@ -624,148 +624,148 @@ as a single icon. Useful for when you want to manipulate an icon via the above a The _flatIcons list is a cache for generated icon files. */ -proc // Creates a single icon from a given /atom or /image. Only the first argument is required. - getFlatIcon(image/A, defdir=A.dir, deficon=A.icon, defstate=A.icon_state, defblend=A.blend_mode) - // We start with a blank canvas, otherwise some icon procs crash silently - var/icon/flat = icon('icons/effects/effects.dmi', "nothing") // Final flattened icon - if(!A) - return flat - if(A.alpha <= 0) - return flat - var/noIcon = FALSE +// Creates a single icon from a given /atom or /image. Only the first argument is required. +/proc/getFlatIcon(image/A, defdir=A.dir, deficon=A.icon, defstate=A.icon_state, defblend=A.blend_mode) + // We start with a blank canvas, otherwise some icon procs crash silently + var/icon/flat = icon('icons/effects/effects.dmi', "nothing") // Final flattened icon + if(!A) + return flat + if(A.alpha <= 0) + return flat + var/noIcon = FALSE - var/curicon - if(A.icon) - curicon = A.icon + var/curicon + if(A.icon) + curicon = A.icon + else + curicon = deficon + + if(!curicon) + noIcon = TRUE // Do not render this object. + + var/curstate + if(A.icon_state) + curstate = A.icon_state + else + curstate = defstate + + if(!noIcon && !(curstate in icon_states(curicon))) + if("" in icon_states(curicon)) + curstate = "" else - curicon = deficon - - if(!curicon) noIcon = TRUE // Do not render this object. - var/curstate - if(A.icon_state) - curstate = A.icon_state - else - curstate = defstate + var/curdir + if(A.dir != 2) + curdir = A.dir + else + curdir = defdir - if(!noIcon && !(curstate in icon_states(curicon))) - if("" in icon_states(curicon)) - curstate = "" - else - noIcon = TRUE // Do not render this object. + var/curblend + if(A.blend_mode == BLEND_DEFAULT) + curblend = defblend + else + curblend = A.blend_mode - var/curdir - if(A.dir != 2) - curdir = A.dir - else - curdir = defdir + // Layers will be a sorted list of icons/overlays, based on the order in which they are displayed + var/list/layers = list() + var/image/copy + // Add the atom's icon itself, without pixel_x/y offsets. + if(!noIcon) + copy = image(icon=curicon, icon_state=curstate, layer=A.layer, dir=curdir) + copy.color = A.color + copy.alpha = A.alpha + copy.blend_mode = curblend + layers[copy] = A.layer - var/curblend - if(A.blend_mode == BLEND_DEFAULT) - curblend = defblend - else - curblend = A.blend_mode + // Loop through the underlays, then overlays, sorting them into the layers list + var/list/process = A.underlays // Current list being processed + var/pSet=0 // Which list is being processed: 0 = underlays, 1 = overlays + var/curIndex=1 // index of 'current' in list being processed + var/current // Current overlay being sorted + var/currentLayer // Calculated layer that overlay appears on (special case for FLOAT_LAYER) + var/compare // The overlay 'add' is being compared against + var/cmpIndex // The index in the layers list of 'compare' + while(TRUE) + if(curIndex<=process.len) + current = process[curIndex] + if(!current) continue + currentLayer = current:layer + if(currentLayer<0) // Special case for FLY_LAYER + if(currentLayer <= -1000) return flat + if(pSet == 0) // Underlay + currentLayer = A.layer+currentLayer/1000 + else // Overlay + currentLayer = A.layer+(1000+currentLayer)/1000 - // Layers will be a sorted list of icons/overlays, based on the order in which they are displayed - var/list/layers = list() - var/image/copy - // Add the atom's icon itself, without pixel_x/y offsets. - if(!noIcon) - copy = image(icon=curicon, icon_state=curstate, layer=A.layer, dir=curdir) - copy.color = A.color - copy.alpha = A.alpha - copy.blend_mode = curblend - layers[copy] = A.layer - - // Loop through the underlays, then overlays, sorting them into the layers list - var/list/process = A.underlays // Current list being processed - var/pSet=0 // Which list is being processed: 0 = underlays, 1 = overlays - var/curIndex=1 // index of 'current' in list being processed - var/current // Current overlay being sorted - var/currentLayer // Calculated layer that overlay appears on (special case for FLOAT_LAYER) - var/compare // The overlay 'add' is being compared against - var/cmpIndex // The index in the layers list of 'compare' - while(TRUE) - if(curIndex<=process.len) - current = process[curIndex] - if(!current) continue - currentLayer = current:layer - if(currentLayer<0) // Special case for FLY_LAYER - if(currentLayer <= -1000) return flat - if(pSet == 0) // Underlay - currentLayer = A.layer+currentLayer/1000 - else // Overlay - currentLayer = A.layer+(1000+currentLayer)/1000 - - // Sort add into layers list - for(cmpIndex=1,cmpIndex<=layers.len,cmpIndex++) - compare = layers[cmpIndex] - if(currentLayer < layers[compare]) // Associated value is the calculated layer - layers.Insert(cmpIndex,current) - layers[current] = currentLayer - break - if(cmpIndex>layers.len) // Reached end of list without inserting - layers[current]=currentLayer // Place at end - - curIndex++ - - if(curIndex>process.len) - if(pSet == 0) // Switch to overlays - curIndex = 1 - pSet = 1 - process = A.overlays - else // All done + // Sort add into layers list + for(cmpIndex=1,cmpIndex<=layers.len,cmpIndex++) + compare = layers[cmpIndex] + if(currentLayer < layers[compare]) // Associated value is the calculated layer + layers.Insert(cmpIndex,current) + layers[current] = currentLayer break + if(cmpIndex>layers.len) // Reached end of list without inserting + layers[current]=currentLayer // Place at end - var/icon/add // Icon of overlay being added + curIndex++ - // Current dimensions of flattened icon - var/{flatX1=1;flatX2=flat.Width();flatY1=1;flatY2=flat.Height()} - // Dimensions of overlay being added - var/{addX1;addX2;addY1;addY2} + if(curIndex>process.len) + if(pSet == 0) // Switch to overlays + curIndex = 1 + pSet = 1 + process = A.overlays + else // All done + break - for(var/I in layers) + var/icon/add // Icon of overlay being added - if(I:alpha == 0) - continue + // Current dimensions of flattened icon + var/{flatX1=1;flatX2=flat.Width();flatY1=1;flatY2=flat.Height()} + // Dimensions of overlay being added + var/{addX1;addX2;addY1;addY2} - if(I == copy) // 'I' is an /image based on the object being flattened. - curblend = BLEND_OVERLAY - add = icon(I:icon, I:icon_state, I:dir) - else // 'I' is an appearance object. - add = getFlatIcon(new/image(I), curdir, curicon, curstate, curblend) + for(var/I in layers) - // Find the new dimensions of the flat icon to fit the added overlay - addX1 = min(flatX1, I:pixel_x+1) - addX2 = max(flatX2, I:pixel_x+add.Width()) - addY1 = min(flatY1, I:pixel_y+1) - addY2 = max(flatY2, I:pixel_y+add.Height()) + if(I:alpha == 0) + continue - if(addX1!=flatX1 || addX2!=flatX2 || addY1!=flatY1 || addY2!=flatY2) - // Resize the flattened icon so the new icon fits - flat.Crop(addX1-flatX1+1, addY1-flatY1+1, addX2-flatX1+1, addY2-flatY1+1) - flatX1=addX1;flatX2=addX2 - flatY1=addY1;flatY2=addY2 + if(I == copy) // 'I' is an /image based on the object being flattened. + curblend = BLEND_OVERLAY + add = icon(I:icon, I:icon_state, I:dir) + else // 'I' is an appearance object. + add = getFlatIcon(new/image(I), curdir, curicon, curstate, curblend) - // Blend the overlay into the flattened icon - flat.Blend(add, blendMode2iconMode(curblend), I:pixel_x + 2 - flatX1, I:pixel_y + 2 - flatY1) + // Find the new dimensions of the flat icon to fit the added overlay + addX1 = min(flatX1, I:pixel_x+1) + addX2 = max(flatX2, I:pixel_x+add.Width()) + addY1 = min(flatY1, I:pixel_y+1) + addY2 = max(flatY2, I:pixel_y+add.Height()) - if(A.color) - flat.Blend(A.color, ICON_MULTIPLY) - if(A.alpha < 255) - flat.Blend(rgb(255, 255, 255, A.alpha), ICON_MULTIPLY) + if(addX1!=flatX1 || addX2!=flatX2 || addY1!=flatY1 || addY2!=flatY2) + // Resize the flattened icon so the new icon fits + flat.Crop(addX1-flatX1+1, addY1-flatY1+1, addX2-flatX1+1, addY2-flatY1+1) + flatX1=addX1;flatX2=addX2 + flatY1=addY1;flatY2=addY2 - return icon(flat, "", SOUTH) + // Blend the overlay into the flattened icon + flat.Blend(add, blendMode2iconMode(curblend), I:pixel_x + 2 - flatX1, I:pixel_y + 2 - flatY1) - getIconMask(atom/A)//By yours truly. Creates a dynamic mask for a mob/whatever. /N - var/icon/alpha_mask = new(A.icon,A.icon_state)//So we want the default icon and icon state of A. - for(var/I in A.overlays)//For every image in overlays. var/image/I will not work, don't try it. - if(I:layer>A.layer) continue//If layer is greater than what we need, skip it. - var/icon/image_overlay = new(I:icon,I:icon_state)//Blend only works with icon objects. - //Also, icons cannot directly set icon_state. Slower than changing variables but whatever. - alpha_mask.Blend(image_overlay,ICON_OR)//OR so they are lumped together in a nice overlay. - return alpha_mask//And now return the mask. + if(A.color) + flat.Blend(A.color, ICON_MULTIPLY) + if(A.alpha < 255) + flat.Blend(rgb(255, 255, 255, A.alpha), ICON_MULTIPLY) + + return icon(flat, "", SOUTH) + +/proc/getIconMask(atom/A)//By yours truly. Creates a dynamic mask for a mob/whatever. /N + var/icon/alpha_mask = new(A.icon,A.icon_state)//So we want the default icon and icon state of A. + for(var/I in A.overlays)//For every image in overlays. var/image/I will not work, don't try it. + if(I:layer>A.layer) continue//If layer is greater than what we need, skip it. + var/icon/image_overlay = new(I:icon,I:icon_state)//Blend only works with icon objects. + //Also, icons cannot directly set icon_state. Slower than changing variables but whatever. + alpha_mask.Blend(image_overlay,ICON_OR)//OR so they are lumped together in a nice overlay. + return alpha_mask//And now return the mask. /mob/proc/AddCamoOverlay(atom/A)//A is the atom which we are using as the overlay. var/icon/opacity_icon = new(A.icon, A.icon_state)//Don't really care for overlays/underlays. @@ -797,4 +797,4 @@ proc // Creates a single icon from a given /atom or /image. Only the first argu for(var/O in A.overlays) var/image/I = O composite.Blend(icon(I.icon, I.icon_state, I.dir, 1), ICON_OVERLAY) - return composite \ No newline at end of file + return composite diff --git a/code/__HELPERS/lists.dm b/code/__HELPERS/lists.dm index 09081948d13..77329d755cc 100644 --- a/code/__HELPERS/lists.dm +++ b/code/__HELPERS/lists.dm @@ -31,7 +31,7 @@ return "[output][and_text][input[index]]" //Returns list element or null. Should prevent "index out of bounds" error. -proc/listgetindex(list/L, index) +/proc/listgetindex(list/L, index) if(istype(L)) if(isnum(index)) if(IsInRange(index,1,L.len)) @@ -40,18 +40,18 @@ proc/listgetindex(list/L, index) return L[index] return -proc/islist(list/L) +/proc/islist(list/L) if(istype(L)) return 1 return 0 //Return either pick(list) or null if list is not of type /list or is empty -proc/safepick(list/L) +/proc/safepick(list/L) if(istype(L) && L.len) return pick(L) //Checks if the list is empty -proc/isemptylist(list/L) +/proc/isemptylist(list/L) if(!L.len) return 1 return 0 @@ -64,13 +64,13 @@ proc/isemptylist(list/L) return 0 //Empties the list by setting the length to 0. Hopefully the elements get garbage collected -proc/clearlist(list/list) +/proc/clearlist(list/list) if(istype(list)) list.len = 0 return //Removes any null entries from the list -proc/listclearnulls(list/list) +/proc/listclearnulls(list/list) if(istype(list)) while(null in list) list -= null diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 6b53dcaa221..f833a5589d8 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -18,19 +18,19 @@ if(FEMALE) return pick(underwear_f) else return pick(underwear_all) -proc/random_hair_style(gender) +/proc/random_hair_style(gender) switch(gender) if(MALE) return pick(hair_styles_male_list) if(FEMALE) return pick(hair_styles_female_list) else return pick(hair_styles_list) -proc/random_facial_hair_style(gender) +/proc/random_facial_hair_style(gender) switch(gender) if(MALE) return pick(facial_hair_styles_male_list) if(FEMALE) return pick(facial_hair_styles_female_list) else return pick(facial_hair_styles_list) -proc/random_name(gender, attempts_to_find_unique_name=10) +/proc/random_name(gender, attempts_to_find_unique_name=10) for(var/i=1, i<=attempts_to_find_unique_name, i++) if(gender==FEMALE) . = capitalize(pick(first_names_female)) + " " + capitalize(pick(last_names)) else . = capitalize(pick(first_names_male)) + " " + capitalize(pick(last_names)) @@ -38,7 +38,7 @@ proc/random_name(gender, attempts_to_find_unique_name=10) if(i != attempts_to_find_unique_name && !findname(.)) break -proc/random_skin_tone() +/proc/random_skin_tone() return pick(skin_tones) var/list/skin_tones = list( @@ -59,7 +59,7 @@ var/list/skin_tones = list( var/global/list/species_list[0] var/global/list/roundstart_species[0] -proc/age2agedescription(age) +/proc/age2agedescription(age) switch(age) if(0 to 1) return "infant" if(1 to 3) return "toddler" @@ -82,7 +82,7 @@ Proc for attack log creation, because really why not 6 is additional information, anything that needs to be added */ -proc/add_logs(mob/user, mob/target, what_done, var/admin=1, var/object=null, var/addition=null) +/proc/add_logs(mob/user, mob/target, what_done, var/admin=1, var/object=null, var/addition=null) if(user && ismob(user)) user.attack_log += text("\[[time_stamp()]\] Has [what_done] [target ? "[target.name][(ismob(target) && target.ckey) ? "([target.ckey])" : ""]" : "NON-EXISTANT SUBJECT"][object ? " with [object]" : " "][addition]") if(target && ismob(target)) diff --git a/code/__HELPERS/time.dm b/code/__HELPERS/time.dm index bf1bacc94f8..66168dcc939 100644 --- a/code/__HELPERS/time.dm +++ b/code/__HELPERS/time.dm @@ -1,11 +1,11 @@ //Returns the world time in english -proc/worldtime2text() +/proc/worldtime2text() return gameTimestamp("hh:mm") -proc/time_stamp(var/format = "hh:mm:ss") +/proc/time_stamp(var/format = "hh:mm:ss") return time2text(world.timeofday, format) -proc/gameTimestamp(var/format = "hh:mm:ss") // Get the game time in text +/proc/gameTimestamp(var/format = "hh:mm:ss") // Get the game time in text return time2text(world.time - timezoneOffset + 432000, format) /* Preserving this so future generations can see how fucking retarded some people are @@ -23,7 +23,7 @@ proc/time_stamp() */ /* Returns 1 if it is the selected month and day */ -proc/isDay(var/month, var/day) +/proc/isDay(var/month, var/day) if(isnum(month) && isnum(day)) var/MM = text2num(time2text(world.timeofday, "MM")) // get the current month var/DD = text2num(time2text(world.timeofday, "DD")) // get the current day diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 8e748e94a97..2cf7ce75c49 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -433,7 +433,7 @@ Turf and target are seperate in case you want to teleport some distance from a t var/mob/living/silicon/ai/selected var/list/active = active_ais() for(var/mob/living/silicon/ai/A in active) - if(!selected || (selected.connected_robots > A.connected_robots)) + if(!selected || (selected.connected_robots.len > A.connected_robots.len)) selected = A return selected @@ -645,12 +645,12 @@ Turf and target are seperate in case you want to teleport some distance from a t var/y = min(world.maxy, max(1, A.y + dy)) return locate(x,y,A.z) -proc/arctan(x) +/proc/arctan(x) var/y=arcsin(x/sqrt(1+x*x)) return y -proc/anim(turf/location as turf,target as mob|obj,a_icon,a_icon_state as text,flick_anim as text,sleeptime = 0,direction as num) +/proc/anim(turf/location as turf,target as mob|obj,a_icon,a_icon_state as text,flick_anim as text,sleeptime = 0,direction as num) //This proc throws up either an icon or an animation for a specified amount of time. //The variables should be apparent enough. var/atom/movable/overlay/animation = new(location) @@ -668,7 +668,7 @@ proc/anim(turf/location as turf,target as mob|obj,a_icon,a_icon_state as text,fl qdel(animation) -atom/proc/GetAllContents() +/atom/proc/GetAllContents() var/list/processing_list = list(src) var/list/assembled = list() @@ -685,7 +685,7 @@ atom/proc/GetAllContents() return assembled -atom/proc/GetTypeInAllContents(typepath) +/atom/proc/GetTypeInAllContents(typepath) var/list/processing_list = list(src) var/list/processed = list() @@ -1012,7 +1012,7 @@ atom/proc/GetTypeInAllContents(typepath) -proc/DuplicateObject(obj/original, var/perfectcopy = 0 , var/sameloc = 0) +/proc/DuplicateObject(obj/original, var/perfectcopy = 0 , var/sameloc = 0) if(!original) return null @@ -1160,16 +1160,16 @@ proc/DuplicateObject(obj/original, var/perfectcopy = 0 , var/sameloc = 0) -proc/get_cardinal_dir(atom/A, atom/B) +/proc/get_cardinal_dir(atom/A, atom/B) var/dx = abs(B.x - A.x) var/dy = abs(B.y - A.y) return get_dir(A, B) & (rand() * (dx+dy) < dy ? 3 : 12) //chances are 1:value. anyprob(1) will always return true -proc/anyprob(value) +/proc/anyprob(value) return (rand(1,value)==value) -proc/view_or_range(distance = world.view , center = usr , type) +/proc/view_or_range(distance = world.view , center = usr , type) switch(type) if("view") . = view(distance,center) @@ -1177,7 +1177,7 @@ proc/view_or_range(distance = world.view , center = usr , type) . = range(distance,center) return -proc/oview_or_orange(distance = world.view , center = usr , type) +/proc/oview_or_orange(distance = world.view , center = usr , type) switch(type) if("view") . = oview(distance,center) @@ -1225,7 +1225,7 @@ var/global/list/common_tools = list( return 1 return 0 -proc/is_hot(obj/item/W as obj) +/proc/is_hot(obj/item/W as obj) switch(W.type) if(/obj/item/weapon/weldingtool) var/obj/item/weapon/weldingtool/WT = W diff --git a/code/_onclick/telekinesis.dm b/code/_onclick/telekinesis.dm index 1108d8cdbb7..0b6b63d249a 100644 --- a/code/_onclick/telekinesis.dm +++ b/code/_onclick/telekinesis.dm @@ -75,116 +75,116 @@ var/const/tk_maxrange = 15 var/mob/living/host = null - dropped(mob/user as mob) - if(focus && user && loc != user && loc != user.loc) // drop_item() gets called when you tk-attack a table/closet with an item - if(focus.Adjacent(loc)) - focus.loc = loc +/obj/item/tk_grab/dropped(mob/user as mob) + if(focus && user && loc != user && loc != user.loc) // drop_item() gets called when you tk-attack a table/closet with an item + if(focus.Adjacent(loc)) + focus.loc = loc + qdel(src) + return + + +//stops TK grabs being equipped anywhere but into hands +/obj/item/tk_grab/equipped(var/mob/user, var/slot) + if( (slot == slot_l_hand) || (slot== slot_r_hand) ) return + qdel(src) + return + + +/obj/item/tk_grab/attack_self(mob/user as mob) + if(focus) + focus.attack_self_tk(user) + +/obj/item/tk_grab/afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, proximity)//TODO: go over this + if(!target || !user) return + if(last_throw+3 > world.time) return + if(!host || host != user) qdel(src) return - - - //stops TK grabs being equipped anywhere but into hands - equipped(var/mob/user, var/slot) - if( (slot == slot_l_hand) || (slot== slot_r_hand) ) return + if(!(TK in host.mutations)) qdel(src) return - - - attack_self(mob/user as mob) - if(focus) - focus.attack_self_tk(user) - - afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, proximity)//TODO: go over this - if(!target || !user) return - if(last_throw+3 > world.time) return - if(!host || host != user) - qdel(src) - return - if(!(TK in host.mutations)) - qdel(src) - return - if(isobj(target) && !isturf(target.loc)) - return - - var/d = get_dist(user, target) - if(focus) - d = max(d,get_dist(user,focus)) // whichever is further - - if(d > tk_maxrange) - user << "Your mind won't reach that far." - return - - if(!focus) - focus_object(target, user) - return - - if(target == focus) - target.attack_self_tk(user) - return // todo: something like attack_self not laden with assumptions inherent to attack_self - - - if(!istype(target, /turf) && istype(focus,/obj/item) && target.Adjacent(focus)) - var/obj/item/I = focus - var/resolved = target.attackby(I, user, user:get_organ_target()) - if(!resolved && target && I) - I.afterattack(target,user,1) // for splashing with beakers - - - else - apply_focus_overlay() - focus.throw_at(target, 10, 1) - last_throw = world.time + if(isobj(target) && !isturf(target.loc)) return - attack(mob/living/M as mob, mob/living/user as mob, def_zone) + var/d = get_dist(user, target) + if(focus) + d = max(d,get_dist(user,focus)) // whichever is further + + if(d > tk_maxrange) + user << "Your mind won't reach that far." return + if(!focus) + focus_object(target, user) + return - proc/focus_object(var/obj/target, var/mob/living/user) - if(!istype(target,/obj)) return//Cant throw non objects atm might let it do mobs later - if(target.anchored || !isturf(target.loc)) - qdel(src) - return - focus = target - update_icon() + if(target == focus) + target.attack_self_tk(user) + return // todo: something like attack_self not laden with assumptions inherent to attack_self + + + if(!istype(target, /turf) && istype(focus,/obj/item) && target.Adjacent(focus)) + var/obj/item/I = focus + var/resolved = target.attackby(I, user, user:get_organ_target()) + if(!resolved && target && I) + I.afterattack(target,user,1) // for splashing with beakers + + + else apply_focus_overlay() + focus.throw_at(target, 10, 1) + last_throw = world.time + return + +/obj/item/tk_grab/attack(mob/living/M as mob, mob/living/user as mob, def_zone) + return + + +/obj/item/tk_grab/proc/focus_object(var/obj/target, var/mob/living/user) + if(!istype(target,/obj)) return//Cant throw non objects atm might let it do mobs later + if(target.anchored || !isturf(target.loc)) + qdel(src) return - - - proc/apply_focus_overlay() - if(!focus) return - var/obj/effect/overlay/O = new /obj/effect/overlay(locate(focus.x,focus.y,focus.z)) - O.name = "sparkles" - O.anchored = 1 - O.density = 0 - O.layer = FLY_LAYER - O.dir = pick(cardinal) - O.icon = 'icons/effects/effects.dmi' - O.icon_state = "nothing" - flick("empdisable",O) - spawn(5) - O.delete() - return - - + focus = target update_icon() - overlays.Cut() - if(focus && focus.icon && focus.icon_state) - overlays += icon(focus.icon,focus.icon_state) - return + apply_focus_overlay() + return + + +/obj/item/tk_grab/proc/apply_focus_overlay() + if(!focus) return + var/obj/effect/overlay/O = new /obj/effect/overlay(locate(focus.x,focus.y,focus.z)) + O.name = "sparkles" + O.anchored = 1 + O.density = 0 + O.layer = FLY_LAYER + O.dir = pick(cardinal) + O.icon = 'icons/effects/effects.dmi' + O.icon_state = "nothing" + flick("empdisable",O) + spawn(5) + O.delete() + return + + +/obj/item/tk_grab/update_icon() + overlays.Cut() + if(focus && focus.icon && focus.icon_state) + overlays += icon(focus.icon,focus.icon_state) + return /*Not quite done likely needs to use something thats not get_step_to - proc/check_path() - var/turf/ref = get_turf(src.loc) - var/turf/target = get_turf(focus.loc) - if(!ref || !target) return 0 - var/distance = get_dist(ref, target) - if(distance >= 10) return 0 - for(var/i = 1 to distance) - ref = get_step_to(ref, target, 0) - if(ref != target) return 0 - return 1 +/obj/item/tk_grab/proc/check_path() + var/turf/ref = get_turf(src.loc) + var/turf/target = get_turf(focus.loc) + if(!ref || !target) return 0 + var/distance = get_dist(ref, target) + if(distance >= 10) return 0 + for(var/i = 1 to distance) + ref = get_step_to(ref, target, 0) + if(ref != target) return 0 + return 1 */ //equip_to_slot_or_del(obj/item/W, slot, qdel_on_fail = 1) diff --git a/code/controllers/_DynamicAreaLighting_TG.dm b/code/controllers/_DynamicAreaLighting_TG.dm index e7c71a59423..d40e9a10bf7 100644 --- a/code/controllers/_DynamicAreaLighting_TG.dm +++ b/code/controllers/_DynamicAreaLighting_TG.dm @@ -33,7 +33,7 @@ #define LIGHTING_LAYER 10 //Drawing layer for lighting overlays #define LIGHTING_ICON 'icons/effects/ss13_dark_alpha6.dmi' //Icon used for lighting shading effects -datum/light_source +/datum/light_source var/atom/owner var/changed = 1 var/list/effect = list() @@ -41,76 +41,76 @@ datum/light_source var/__y = 0 //y coordinate at last update - New(atom/A) - if(!istype(A)) - CRASH("The first argument to the light object's constructor must be the atom that is the light source. Expected atom, received '[A]' instead.") - ..() - owner = A +/datum/light_source/New(atom/A) + if(!istype(A)) + CRASH("The first argument to the light object's constructor must be the atom that is the light source. Expected atom, received '[A]' instead.") + ..() + owner = A + __x = owner.x + __y = owner.y + // the lighting object maintains a list of all light sources + lighting_controller.lights += src + + +//Check a light to see if its effect needs reprocessing. If it does, remove any old effect and create a new one +/datum/light_source/proc/check() + if(!owner) + remove_effect() + return 1 //causes it to be removed from our list of lights. The garbage collector will then destroy it. + + // check to see if we've moved since last update + if(owner.x != __x || owner.y != __y) __x = owner.x __y = owner.y - // the lighting object maintains a list of all light sources - lighting_controller.lights += src + changed = 1 + + if(changed) + changed = 0 + remove_effect() + return add_effect() + return 0 - //Check a light to see if its effect needs reprocessing. If it does, remove any old effect and create a new one - proc/check() - if(!owner) - remove_effect() - return 1 //causes it to be removed from our list of lights. The garbage collector will then destroy it. +/datum/light_source/proc/remove_effect() + // before we apply the effect we remove the light's current effect. + for(var/turf/T in effect) // negate the effect of this light source + T.update_lumcount(-effect[T]) + effect.Cut() // clear the effect list - // check to see if we've moved since last update - if(owner.x != __x || owner.y != __y) - __x = owner.x - __y = owner.y - changed = 1 +/datum/light_source/proc/add_effect() + // only do this if the light is turned on and is on the map + if(owner.loc && owner.luminosity > 0) + effect = list() + for(var/turf/T in view(owner.get_light_range(),owner)) + var/delta_lumen = lum(T) + if(delta_lumen > 0) + effect[T] = delta_lumen + T.update_lumcount(delta_lumen) - if(changed) - changed = 0 - remove_effect() - return add_effect() return 0 + else + owner.light = null + return 1 //cause the light to be removed from the lights list and garbage collected once it's no + //longer referenced by the queue - - proc/remove_effect() - // before we apply the effect we remove the light's current effect. - for(var/turf/T in effect) // negate the effect of this light source - T.update_lumcount(-effect[T]) - effect.Cut() // clear the effect list - - proc/add_effect() - // only do this if the light is turned on and is on the map - if(owner.loc && owner.luminosity > 0) - effect = list() - for(var/turf/T in view(owner.get_light_range(),owner)) - var/delta_lumen = lum(T) - if(delta_lumen > 0) - effect[T] = delta_lumen - T.update_lumcount(delta_lumen) - - return 0 - else - owner.light = null - return 1 //cause the light to be removed from the lights list and garbage collected once it's no - //longer referenced by the queue - - proc/lum(turf/A) - if (owner.trueLuminosity < 1) - return 0 - var/dist - if(!A) - dist = 0 - else +/datum/light_source/proc/lum(turf/A) + if (owner.trueLuminosity < 1) + return 0 + var/dist + if(!A) + dist = 0 + else #ifdef LIGHTING_CIRCULAR - dist = cheap_hypotenuse(A.x, A.y, __x, __y) + dist = cheap_hypotenuse(A.x, A.y, __x, __y) #else - dist = max(abs(A.x - __x), abs(A.y - __y)) + dist = max(abs(A.x - __x), abs(A.y - __y)) #endif - if (owner.trueLuminosity > 100) // This will never happen... right? - return sqrt(owner.trueLuminosity) - dist - else - return sqrtTable[owner.trueLuminosity] - dist + if (owner.trueLuminosity > 100) // This will never happen... right? + return sqrt(owner.trueLuminosity) - dist + else + return sqrtTable[owner.trueLuminosity] - dist -atom +/atom var/datum/light_source/light var/trueLuminosity = 0 // Typically 'luminosity' squared. The builtin luminosity must remain linear. // We may read it, but NEVER set it directly. @@ -118,7 +118,7 @@ atom //Turfs with opacity when they are constructed will trigger nearby lights to update //Turfs and atoms with luminosity when they are constructed will create a light_source automatically -turf/New() +/turf/New() ..() if(luminosity) if(light) WARNING("[type] - Don't set lights up manually during New(), We do it automatically.") @@ -127,7 +127,7 @@ turf/New() //Movable atoms with opacity when they are constructed will trigger nearby lights to update //Movable atoms with luminosity when they are constructed will create a light_source automatically -atom/movable/New() +/atom/movable/New() ..() if(opacity) if(isturf(loc)) @@ -139,7 +139,7 @@ atom/movable/New() light = new(src) //Objects with opacity will trigger nearby lights to update at next lighting process. -atom/movable/Destroy() +/atom/movable/Destroy() if(opacity) if(isturf(loc)) if(loc:lighting_lumcount > 1) @@ -151,7 +151,7 @@ atom/movable/Destroy() //If we are setting luminosity to 0 the light will be cleaned up by the controller and garbage collected once all its //queues are complete. //if we have a light already it is merely updated, rather than making a new one. -atom/proc/SetLuminosity(new_luminosity, trueLum = FALSE) +/atom/proc/SetLuminosity(new_luminosity, trueLum = FALSE) if(new_luminosity < 0) new_luminosity = 0 if(!trueLum) @@ -170,19 +170,19 @@ atom/proc/SetLuminosity(new_luminosity, trueLum = FALSE) else luminosity = sqrt(trueLuminosity) -atom/proc/AddLuminosity(delta_luminosity) +/atom/proc/AddLuminosity(delta_luminosity) if(delta_luminosity > 0) SetLuminosity(trueLuminosity + delta_luminosity*delta_luminosity, TRUE) else if(delta_luminosity < 0) SetLuminosity(trueLuminosity - delta_luminosity*delta_luminosity, TRUE) -area/SetLuminosity(new_luminosity) //we don't want dynamic lighting for areas +/area/SetLuminosity(new_luminosity) //we don't want dynamic lighting for areas luminosity = !!new_luminosity trueLuminosity = luminosity //change our opacity (defaults to toggle), and then update all lights that affect us. -atom/proc/SetOpacity(new_opacity) +/atom/proc/SetOpacity(new_opacity) if(new_opacity == null) new_opacity = !opacity //default = toggle opacity else if(opacity == new_opacity) @@ -190,7 +190,7 @@ atom/proc/SetOpacity(new_opacity) opacity = new_opacity //update opacity, the below procs now call light updates. return 1 -turf/SetOpacity(new_opacity) +/turf/SetOpacity(new_opacity) if(..()==1) //only bother if opacity changed if(lighting_lumcount) //only bother with an update if our turf is currently affected by a light UpdateAffectingLights() @@ -203,24 +203,24 @@ turf/SetOpacity(new_opacity) UpdateAffectingLights() -turf +/turf var/lighting_lumcount = 0 var/lighting_changed = 0 -turf/space +/turf/space lighting_lumcount = 4 //starlight -turf/proc/update_lumcount(amount) +/turf/proc/update_lumcount(amount) lighting_lumcount += amount if(!lighting_changed) lighting_controller.changed_turfs += src lighting_changed = 1 -turf/proc/lighting_tag(var/level) +/turf/proc/lighting_tag(var/level) var/area/A = loc return A.tagbase + "sd_L[level]" -turf/proc/build_lighting_area(var/tag, var/level) +/turf/proc/build_lighting_area(var/tag, var/level) var/area/Area = loc var/area/A = new Area.type() // create area if it wasn't found // replicate vars @@ -238,7 +238,7 @@ turf/proc/build_lighting_area(var/tag, var/level) Area.related += A return A -turf/proc/shift_to_subarea() +/turf/proc/shift_to_subarea() lighting_changed = 0 var/area/Area = loc @@ -257,54 +257,54 @@ turf/proc/shift_to_subarea() // Dedicated lighting sublevel for space turfs // helps us depower things in space, remove space fire alarms, // and evens out space lighting -turf/space/lighting_tag(var/level) +/turf/space/lighting_tag(var/level) var/area/A = loc return A.tagbase + "sd_L_space" -turf/space/build_lighting_area(var/tag,var/level) +/turf/space/build_lighting_area(var/tag,var/level) var/area/A = ..(tag,4) A.lighting_space = 1 A.SetLightLevel(4) A.icon_state = null return A -area +/area var/lighting_use_dynamic = 1 //Turn this flag off to prevent sd_DynamicAreaLighting from affecting this area var/image/lighting_overlay //tracks the darkness image of the area for easy removal var/lighting_subarea = 0 //tracks whether we're a lighting sub-area var/lighting_space = 0 // true for space-only lighting subareas var/tagbase - proc/SetLightLevel(light) - if(!src) return - if(light <= 0) - light = 0 - luminosity = 0 - else - if(light > lighting_controller.lighting_states) - light = lighting_controller.lighting_states - luminosity = 1 +/area/proc/SetLightLevel(light) + if(!src) return + if(light <= 0) + light = 0 + luminosity = 0 + else + if(light > lighting_controller.lighting_states) + light = lighting_controller.lighting_states + luminosity = 1 - if(lighting_overlay) - overlays -= lighting_overlay - lighting_overlay.icon_state = "[light]" - else - lighting_overlay = image(LIGHTING_ICON,,num2text(light),LIGHTING_LAYER) + if(lighting_overlay) + overlays -= lighting_overlay + lighting_overlay.icon_state = "[light]" + else + lighting_overlay = image(LIGHTING_ICON,,num2text(light),LIGHTING_LAYER) - overlays += lighting_overlay + overlays += lighting_overlay - proc/SetDynamicLighting() +/area/proc/SetDynamicLighting() - src.lighting_use_dynamic = 1 - for(var/turf/T in src.contents) - T.update_lumcount(0) + src.lighting_use_dynamic = 1 + for(var/turf/T in src.contents) + T.update_lumcount(0) - proc/InitializeLighting() //TODO: could probably improve this bit ~Carn - tagbase = "[type]" - if(!tag) tag = tagbase - if(!lighting_use_dynamic) - if(!lighting_subarea) // see if this is a lighting subarea already - //show the dark overlay so areas, not yet in a lighting subarea, won't be bright as day and look silly. - SetLightLevel(4) +/area/proc/InitializeLighting() //TODO: could probably improve this bit ~Carn + tagbase = "[type]" + if(!tag) tag = tagbase + if(!lighting_use_dynamic) + if(!lighting_subarea) // see if this is a lighting subarea already + //show the dark overlay so areas, not yet in a lighting subarea, won't be bright as day and look silly. + SetLightLevel(4) #undef LIGHTING_LAYER #undef LIGHTING_CIRCULAR @@ -316,24 +316,24 @@ area //set the changed status of all lights which could have possibly lit this atom. //We don't need to worry about lights which lit us but moved away, since they will have change status set already //This proc can cause lots of lights to be updated. :( -atom/proc/UpdateAffectingLights() +/atom/proc/UpdateAffectingLights() for(var/atom/A in oview(LIGHTING_MAX_LUMINOSITY_STATIC-1,src)) if(A.light) A.light.changed = 1 //force it to update at next process() //caps luminosity effects max-range based on what type the light's owner is. -atom/proc/get_light_range() +/atom/proc/get_light_range() return min(luminosity, LIGHTING_MAX_LUMINOSITY_STATIC) -atom/movable/get_light_range() +/atom/movable/get_light_range() return min(luminosity, LIGHTING_MAX_LUMINOSITY_MOBILE) -obj/machinery/light/get_light_range() +/obj/machinery/light/get_light_range() return min(luminosity, LIGHTING_MAX_LUMINOSITY_STATIC) -turf/get_light_range() +/turf/get_light_range() return min(luminosity, LIGHTING_MAX_LUMINOSITY_TURF) #undef LIGHTING_MAX_LUMINOSITY_STATIC #undef LIGHTING_MAX_LUMINOSITY_MOBILE -#undef LIGHTING_MAX_LUMINOSITY_TURF \ No newline at end of file +#undef LIGHTING_MAX_LUMINOSITY_TURF diff --git a/code/controllers/lighting_controller.dm b/code/controllers/lighting_controller.dm index 7814d21753d..d4f46b104fe 100644 --- a/code/controllers/lighting_controller.dm +++ b/code/controllers/lighting_controller.dm @@ -1,6 +1,6 @@ var/datum/controller/lighting/lighting_controller = new () -datum/controller/lighting +/datum/controller/lighting var/processing = 0 var/processing_interval = 5 //setting this too low will probably kill the server. Don't be silly with it! var/process_cost = 0 @@ -17,7 +17,7 @@ datum/controller/lighting var/list/changed_turfs = list() var/changed_turfs_workload_max = 0 -datum/controller/lighting/New() +/datum/controller/lighting/New() lighting_states = max( 0, length(icon_states(LIGHTING_ICON))-1 ) if(lighting_controller != src) if(istype(lighting_controller,/datum/controller/lighting)) @@ -31,7 +31,7 @@ datum/controller/lighting/New() //All queue lists prune themselves, which will cause lights with no luminosity to be garbage collected (cheaper and safer //than deleting them). Processing interval should be roughly half a second for best results. //By using queues we are ensuring we don't perform more updates than are necessary -datum/controller/lighting/proc/process() +/datum/controller/lighting/proc/process() processing = 1 spawn(0) set background = BACKGROUND_ENABLED @@ -65,7 +65,7 @@ datum/controller/lighting/proc/process() //Does not loop. Should be run prior to process() being called for the first time. //Note: if we get additional z-levels at runtime (e.g. if the gateway thin ever gets finished) we can initialize specific //z-levels with the z_level argument -datum/controller/lighting/proc/Initialize(var/z_level) +/datum/controller/lighting/proc/Initialize(var/z_level) processing = 0 spawn(-1) set background = BACKGROUND_ENABLED @@ -95,7 +95,7 @@ datum/controller/lighting/proc/Initialize(var/z_level) //Used to strip valid information from an existing controller and transfer it to a replacement //It works by using spawn(-1) to transfer the data, if there is a runtime the data does not get transfered but the loop //does not crash -datum/controller/lighting/proc/Recover() +/datum/controller/lighting/proc/Recover() if(!istype(lighting_controller.changed_turfs,/list)) lighting_controller.changed_turfs = list() if(!istype(lighting_controller.lights,/list)) diff --git a/code/controllers/master_controller.dm b/code/controllers/master_controller.dm index da3b635c434..564304b2dfd 100644 --- a/code/controllers/master_controller.dm +++ b/code/controllers/master_controller.dm @@ -11,7 +11,7 @@ var/global/last_tick_duration = 0 var/global/air_processing_killed = 0 var/global/pipe_processing_killed = 0 -datum/controller/game_controller +/datum/controller/game_controller var/processing = 0 var/breather_ticks = 2 //a somewhat crude attempt to iron over the 'bumps' caused by high-cpu use by letting the MC have a breather for this many ticks after every loop var/minimum_ticks = 20 //The minimum length of time between MC ticks @@ -37,7 +37,7 @@ datum/controller/game_controller var/last_thing_processed -datum/controller/game_controller/New() +/datum/controller/game_controller/New() //There can be only one master_controller. Out with the old and in with the new. if(master_controller != src) if(istype(master_controller)) @@ -69,7 +69,7 @@ datum/controller/game_controller/New() if(!emergency_shuttle) emergency_shuttle = new /datum/shuttle_controller/emergency_shuttle() if(!supply_shuttle) supply_shuttle = new /datum/controller/supply_shuttle() -datum/controller/game_controller/proc/setup() +/datum/controller/game_controller/proc/setup() world.tick_lag = config.Ticklag setup_objects() @@ -80,7 +80,7 @@ datum/controller/game_controller/proc/setup() if(ticker) ticker.pregame() -datum/controller/game_controller/proc/setup_objects() +/datum/controller/game_controller/proc/setup_objects() world << "\red \b Initializing objects..." sleep(-1) for(var/atom/movable/object in world) @@ -110,7 +110,7 @@ datum/controller/game_controller/proc/setup_objects() sleep(-1) -datum/controller/game_controller/proc/process() +/datum/controller/game_controller/proc/process() processing = 1 spawn(0) set background = BACKGROUND_ENABLED @@ -223,7 +223,7 @@ datum/controller/game_controller/proc/process() sleep(10) /* -datum/controller/game_controller/proc/process_liquid() +/datum/controller/game_controller/proc/process_liquid() last_thing_processed = /datum/puddle var/i = 1 while(i<=puddles.len) @@ -235,7 +235,7 @@ datum/controller/game_controller/proc/process_liquid() puddles.Cut(i,i+1) */ -datum/controller/game_controller/proc/process_mobs() +/datum/controller/game_controller/proc/process_mobs() var/i = 1 while(i<=mob_list.len) var/mob/M = mob_list[i] @@ -246,7 +246,7 @@ datum/controller/game_controller/proc/process_mobs() continue mob_list.Cut(i,i+1) -datum/controller/game_controller/proc/process_diseases() +/datum/controller/game_controller/proc/process_diseases() var/i = 1 while(i<=active_diseases.len) var/datum/disease/Disease = active_diseases[i] @@ -257,7 +257,7 @@ datum/controller/game_controller/proc/process_diseases() continue active_diseases.Cut(i,i+1) -datum/controller/game_controller/proc/process_machines() +/datum/controller/game_controller/proc/process_machines() var/i = 1 while(i<=machines.len) var/obj/machinery/Machine = machines[i] @@ -271,7 +271,7 @@ datum/controller/game_controller/proc/process_machines() continue machines.Cut(i,i+1) -datum/controller/game_controller/proc/process_objects() +/datum/controller/game_controller/proc/process_objects() var/i = 1 while(i<=processing_objects.len) var/obj/Object = processing_objects[i] @@ -282,7 +282,7 @@ datum/controller/game_controller/proc/process_objects() continue processing_objects.Cut(i,i+1) -datum/controller/game_controller/proc/process_pipenets() +/datum/controller/game_controller/proc/process_pipenets() last_thing_processed = /datum/pipe_network var/i = 1 while(i<=pipe_networks.len) @@ -293,7 +293,7 @@ datum/controller/game_controller/proc/process_pipenets() continue pipe_networks.Cut(i,i+1) -datum/controller/game_controller/proc/process_powernets() +/datum/controller/game_controller/proc/process_powernets() last_thing_processed = /datum/powernet var/i = 1 while(i<=powernets.len) @@ -304,7 +304,7 @@ datum/controller/game_controller/proc/process_powernets() continue powernets.Cut(i,i+1) -datum/controller/game_controller/proc/process_nano() +/datum/controller/game_controller/proc/process_nano() var/i = 1 while(i<=nanomanager.processing_uis.len) var/datum/nanoui/ui = nanomanager.processing_uis[i] @@ -314,7 +314,7 @@ datum/controller/game_controller/proc/process_nano() continue nanomanager.processing_uis.Cut(i,i+1) -datum/controller/game_controller/proc/Recover() //Mostly a placeholder for now. +/datum/controller/game_controller/proc/Recover() //Mostly a placeholder for now. var/msg = "## DEBUG: [time2text(world.timeofday)] MC restarted. Reports:\n" for(var/varname in master_controller.vars) switch(varname) diff --git a/code/controllers/shuttle_controller.dm b/code/controllers/shuttle_controller.dm index 6e1c9a0a078..83fbd2c883a 100644 --- a/code/controllers/shuttle_controller.dm +++ b/code/controllers/shuttle_controller.dm @@ -18,7 +18,7 @@ var/global/datum/shuttle_controller/emergency_shuttle/emergency_shuttle -datum/shuttle_controller +/datum/shuttle_controller var/location = UNDOCKED // var/online = 0 var/direction = 1 //-1 = going back to central command, 1 = going to SS13. Only important for recalling @@ -37,150 +37,149 @@ datum/shuttle_controller // call the shuttle // if not called before, set the endtime to T+600 seconds // otherwise if outgoing, switch to incoming - proc/incall(coeff = 1, var/signal_origin) +/datum/shuttle_controller/proc/incall(coeff = 1, var/signal_origin) - if(endtime) - if(direction == -1) - setdirection(1) + if(endtime) + if(direction == -1) + setdirection(1) + else + if(signal_origin && prob(60)) //40% chance the signal tracing will fail + last_call_loc = signal_origin else - if(signal_origin && prob(60)) //40% chance the signal tracing will fail - last_call_loc = signal_origin + last_call_loc = null + settimeleft(SHUTTLEARRIVETIME*coeff) + online = 1 + if(always_fake_recall) + + if ((seclevel2num(get_security_level()) == SEC_LEVEL_RED)) + fake_recall = rand(SHUTTLEARRIVETIME / 4, SHUTTLEARRIVETIME - 100 / 2) else - last_call_loc = null - settimeleft(SHUTTLEARRIVETIME*coeff) - online = 1 - if(always_fake_recall) + fake_recall = rand(SHUTTLEARRIVETIME / 2, SHUTTLEARRIVETIME - 100) - if ((seclevel2num(get_security_level()) == SEC_LEVEL_RED)) - fake_recall = rand(SHUTTLEARRIVETIME / 4, SHUTTLEARRIVETIME - 100 / 2) - else - fake_recall = rand(SHUTTLEARRIVETIME / 2, SHUTTLEARRIVETIME - 100) +/datum/shuttle_controller/proc/recall(var/signal_origin) + if(direction == 1) + var/timeleft = timeleft() + if(timeleft >= SHUTTLEARRIVETIME) + online = 0 + direction = 1 + endtime = null + return - proc/recall(var/signal_origin) + recall_count ++ + + if(recall_count > 2 && signal_origin && prob(60)) //40% chance the signal tracing will fail + last_call_loc = signal_origin + else + last_call_loc = null + + if(recall_count == 2) + priority_announce("The emergency shuttle has been recalled.\n\nExcessive number of emergency shuttle calls detected. We will attempt to trace all future calls and recalls to their source. Tracing results can be viewed on any communications console.", null, 'sound/AI/shuttlerecalled.ogg') + else + priority_announce("The emergency shuttle has been recalled.", null, 'sound/AI/shuttlerecalled.ogg', "Priority") + setdirection(-1) + online = 1 + + +// returns the time (in seconds) before shuttle arrival +// note if direction = -1, gives a count-up to SHUTTLEARRIVETIME +/datum/shuttle_controller/proc/timeleft() + if(online) + var/timeleft = round((endtime - world.timeofday)/10 ,1) + if(timeleft > (MIDNIGHT_ROLLOVER/10)) // midnight rollover protection + endtime -= MIDNIGHT_ROLLOVER // subtract 24 hours from endtime + timeleft = round((endtime - world.timeofday)/10 ,1) // recalculate timeleft if(direction == 1) - var/timeleft = timeleft() - if(timeleft >= SHUTTLEARRIVETIME) + return timeleft + else + return SHUTTLEARRIVETIME-timeleft + else + return SHUTTLEARRIVETIME + +// sets the time left to a given delay (in seconds) +/datum/shuttle_controller/proc/settimeleft(var/delay) + endtime = world.timeofday + delay * 10 + timelimit = delay + +// sets the shuttle direction +// 1 = towards SS13, -1 = back to centcom +/datum/shuttle_controller/proc/setdirection(var/dirn) + if(direction == dirn) + return + direction = dirn + // if changing direction, flip the timeleft by SHUTTLEARRIVETIME + var/ticksleft = endtime - world.timeofday + endtime = world.timeofday + (SHUTTLEARRIVETIME*10 - ticksleft) + return + +//calls the shuttle if there's no live active AI or powered non broken comms console, +/datum/shuttle_controller/proc/autoshuttlecall() + var/callshuttle = 1 + + for(var/SC in shuttle_caller_list) + if(istype(SC,/mob/living/silicon/ai)) + var/mob/living/silicon/ai/AI = SC + if(AI.stat || !AI.client) + continue + if(istype(SC,/obj/machinery/computer/communications)) + var/obj/machinery/computer/communications/C = SC + if(C.stat & BROKEN) + continue + var/turf/T = get_turf(SC) + if(T && T.z == 1) + callshuttle = 0 //if there's an alive AI or a powered non broken communication console on the station z level, we don't call the shuttle + break + + if(callshuttle) + if(!online && direction == 1) //we don't call the shuttle if it's already coming + incall(SHUTTLEAUTOCALLTIMER) //X minutes! If they want to recall, they have X-(X-5) minutes to do so + log_game("All the communications consoles were destroyed and all AIs are inactive. Shuttle called.") + message_admins("All the communications consoles were destroyed and all AIs are inactive. Shuttle called.", 1) + priority_announce("The emergency shuttle has been called. It will arrive in [round(emergency_shuttle.timeleft()/60)] minutes.", null, 'sound/AI/shuttlecalled.ogg', "Priority") + +/datum/shuttle_controller/proc/move_shuttles() + var/datum/shuttle_manager/s + for(var/t in pods) + s = shuttles[t] + s.move_shuttle() + +/datum/shuttle_controller/proc/process() + +/datum/shuttle_controller/emergency_shuttle/process() + if(!online) + return + var/timeleft = timeleft() + if(location == UNDOCKED) + if(direction == -1) + if(timeleft >= timelimit) // Shuttle reaches CentCom after being recalled. online = 0 direction = 1 endtime = null - return - - recall_count ++ - - if(recall_count > 2 && signal_origin && prob(60)) //40% chance the signal tracing will fail - last_call_loc = signal_origin - else - last_call_loc = null - - if(recall_count == 2) - priority_announce("The emergency shuttle has been recalled.\n\nExcessive number of emergency shuttle calls detected. We will attempt to trace all future calls and recalls to their source. Tracing results can be viewed on any communications console.", null, 'sound/AI/shuttlerecalled.ogg') - else - priority_announce("The emergency shuttle has been recalled.", null, 'sound/AI/shuttlerecalled.ogg', "Priority") - setdirection(-1) - online = 1 - - - // returns the time (in seconds) before shuttle arrival - // note if direction = -1, gives a count-up to SHUTTLEARRIVETIME - proc/timeleft() - if(online) - var/timeleft = round((endtime - world.timeofday)/10 ,1) - if(timeleft > (MIDNIGHT_ROLLOVER/10)) // midnight rollover protection - endtime -= MIDNIGHT_ROLLOVER // subtract 24 hours from endtime - timeleft = round((endtime - world.timeofday)/10 ,1) // recalculate timeleft - if(direction == 1) - return timeleft - else - return SHUTTLEARRIVETIME-timeleft - else - return SHUTTLEARRIVETIME - - // sets the time left to a given delay (in seconds) - proc/settimeleft(var/delay) - endtime = world.timeofday + delay * 10 - timelimit = delay - - // sets the shuttle direction - // 1 = towards SS13, -1 = back to centcom - proc/setdirection(var/dirn) - if(direction == dirn) - return - direction = dirn - // if changing direction, flip the timeleft by SHUTTLEARRIVETIME - var/ticksleft = endtime - world.timeofday - endtime = world.timeofday + (SHUTTLEARRIVETIME*10 - ticksleft) - return - - //calls the shuttle if there's no live active AI or powered non broken comms console, - proc/autoshuttlecall() - var/callshuttle = 1 - - for(var/SC in shuttle_caller_list) - if(istype(SC,/mob/living/silicon/ai)) - var/mob/living/silicon/ai/AI = SC - if(AI.stat || !AI.client) - continue - if(istype(SC,/obj/machinery/computer/communications)) - var/obj/machinery/computer/communications/C = SC - if(C.stat & BROKEN) - continue - var/turf/T = get_turf(SC) - if(T && T.z == 1) - callshuttle = 0 //if there's an alive AI or a powered non broken communication console on the station z level, we don't call the shuttle - break - - if(callshuttle) - if(!online && direction == 1) //we don't call the shuttle if it's already coming - incall(SHUTTLEAUTOCALLTIMER) //X minutes! If they want to recall, they have X-(X-5) minutes to do so - log_game("All the communications consoles were destroyed and all AIs are inactive. Shuttle called.") - message_admins("All the communications consoles were destroyed and all AIs are inactive. Shuttle called.", 1) - priority_announce("The emergency shuttle has been called. It will arrive in [round(emergency_shuttle.timeleft()/60)] minutes.", null, 'sound/AI/shuttlecalled.ogg', "Priority") - - proc/move_shuttles() - var/datum/shuttle_manager/s - for(var/t in pods) - s = shuttles[t] - s.move_shuttle() - - proc/process() - - emergency_shuttle - process() - if(!online) - return - var/timeleft = timeleft() - if(location == UNDOCKED) - if(direction == -1) - if(timeleft >= timelimit) // Shuttle reaches CentCom after being recalled. - online = 0 - direction = 1 - endtime = null - return 0 - else if(fake_recall && (timeleft <= fake_recall)) - recall() - fake_recall = 0 - return 0 - else if(timeleft <= 0) - var/datum/shuttle_manager/s = shuttles["escape"] - s.move_shuttle() - location = DOCKED - settimeleft(SHUTTLELEAVETIME) - send2irc("Server", "The Emergency Shuttle has docked with the station.") - priority_announce("The Emergency Shuttle has docked with the station. You have [round(timeleft()/60,1)] minutes to board the Emergency Shuttle.", null, 'sound/AI/shuttledock.ogg', "Priority") - else if(timeleft <= 0) //Nothing happens if time's not up and the ship's docked or later - if(location == DOCKED) - move_shuttles() - location = TRANSIT - settimeleft(SHUTTLETRANSITTIME) - priority_announce("The Emergency Shuttle has left the station. Estimate [round(timeleft()/60,1)] minutes until the shuttle docks at Central Command.", null, null, "Priority") - else if(location == TRANSIT) - move_shuttles() - //message_admins("Shuttles have attempted to move to Centcom") - location = ENDGAME - online = 0 - endtime = null - return 1 + return 0 + else if(fake_recall && (timeleft <= fake_recall)) + recall() + fake_recall = 0 return 0 + else if(timeleft <= 0) + var/datum/shuttle_manager/s = shuttles["escape"] + s.move_shuttle() + location = DOCKED + settimeleft(SHUTTLELEAVETIME) + send2irc("Server", "The Emergency Shuttle has docked with the station.") + priority_announce("The Emergency Shuttle has docked with the station. You have [round(timeleft()/60,1)] minutes to board the Emergency Shuttle.", null, 'sound/AI/shuttledock.ogg', "Priority") + else if(timeleft <= 0) //Nothing happens if time's not up and the ship's docked or later + if(location == DOCKED) + move_shuttles() + location = TRANSIT + settimeleft(SHUTTLETRANSITTIME) + priority_announce("The Emergency Shuttle has left the station. Estimate [round(timeleft()/60,1)] minutes until the shuttle docks at Central Command.", null, null, "Priority") + else if(location == TRANSIT) + move_shuttles() + //message_admins("Shuttles have attempted to move to Centcom") + location = ENDGAME + online = 0 + endtime = null + return 1 + return 0 /* Some slapped-together star effects for maximum spess immershuns. Basically consists of a @@ -194,23 +193,23 @@ datum/shuttle_controller var/direction = SOUTH layer = 2 // TURF_LAYER - New() - ..() - pixel_x += rand(-2,30) - pixel_y += rand(-2,30) - var/starnum = pick("1", "1", "1", "2", "3", "4") +/obj/effect/bgstar/New() + ..() + pixel_x += rand(-2,30) + pixel_y += rand(-2,30) + var/starnum = pick("1", "1", "1", "2", "3", "4") - icon_state = "star"+starnum + icon_state = "star"+starnum - speed = rand(2, 5) + speed = rand(2, 5) - proc/startmove() +/obj/effect/bgstar/proc/startmove() - while(src) - sleep(speed) - step(src, direction) - for(var/obj/effect/starender/E in loc) - qdel(src) + while(src) + sleep(speed) + step(src, direction) + for(var/obj/effect/starender/E in loc) + qdel(src) /obj/effect/starender @@ -221,17 +220,17 @@ datum/shuttle_controller var/spawndir = SOUTH var/spawning = 0 - West - spawndir = WEST +/obj/effect/starspawner/West + spawndir = WEST - proc/startspawn() - spawning = 1 - while(spawning) - sleep(rand(2, 30)) - var/obj/effect/bgstar/S = new/obj/effect/bgstar(locate(x,y,z)) - S.direction = spawndir - spawn() - S.startmove() +/obj/effect/starspawner/proc/startspawn() + spawning = 1 + while(spawning) + sleep(rand(2, 30)) + var/obj/effect/bgstar/S = new/obj/effect/bgstar(locate(x,y,z)) + S.direction = spawndir + spawn() + S.startmove() /proc/push_mob_back(var/mob/living/L, var/dir) diff --git a/code/controllers/supply_shuttle.dm b/code/controllers/supply_shuttle.dm index 5bc835af74c..3f6af30ac58 100644 --- a/code/controllers/supply_shuttle.dm +++ b/code/controllers/supply_shuttle.dm @@ -61,18 +61,18 @@ var/global/datum/controller/supply_shuttle/supply_shuttle name = "airtight plastic flaps" desc = "Heavy duty, airtight, plastic flaps." - New() //set the turf below the flaps to block air - var/turf/T = get_turf(loc) - if(T) - T.blocks_air = 1 - ..() +/obj/structure/plasticflaps/mining/New() //set the turf below the flaps to block air + var/turf/T = get_turf(loc) + if(T) + T.blocks_air = 1 + ..() - Destroy() //lazy hack to set the turf to allow air to pass if it's a simulated floor //wow this is terrible - var/turf/T = get_turf(loc) - if(T) - if(istype(T, /turf/simulated/floor)) - T.blocks_air = 0 - ..() +/obj/structure/plasticflaps/mining/Destroy() //lazy hack to set the turf to allow air to pass if it's a simulated floor //wow this is terrible + var/turf/T = get_turf(loc) + if(T) + if(istype(T, /turf/simulated/floor)) + T.blocks_air = 0 + ..() /obj/machinery/computer/supplycomp name = "supply shuttle console" @@ -140,269 +140,269 @@ var/global/datum/controller/supply_shuttle/supply_shuttle //shuttle loan var/datum/round_event/shuttle_loan/shuttle_loan - New() - ordernum = rand(1,9000) - for(var/typepath in (typesof(/datum/supply_packs) - /datum/supply_packs)) - var/datum/supply_packs/P = new typepath() - if(P.name == "HEADER") continue // To filter out group headers - supply_packs[P.name] = P +/datum/controller/supply_shuttle/New() + ordernum = rand(1,9000) + for(var/typepath in (typesof(/datum/supply_packs) - /datum/supply_packs)) + var/datum/supply_packs/P = new typepath() + if(P.name == "HEADER") continue // To filter out group headers + supply_packs[P.name] = P - //Supply shuttle ticker - handles supply point regenertion and shuttle travelling between centcom and the station - proc/process() +//Supply shuttle ticker - handles supply point regenertion and shuttle travelling between centcom and the station +/datum/controller/supply_shuttle/proc/process() - spawn(0) - set background = BACKGROUND_ENABLED - while(1) - if(processing) - iteration++ - points += points_per_process + spawn(0) + set background = BACKGROUND_ENABLED + while(1) + if(processing) + iteration++ + points += points_per_process - if(moving == 1) - var/ticksleft = (eta_timeofday - world.timeofday) - if(ticksleft > 0) - eta = round(ticksleft/600,1) - else - eta = 0 - send() + if(moving == 1) + var/ticksleft = (eta_timeofday - world.timeofday) + if(ticksleft > 0) + eta = round(ticksleft/600,1) + else + eta = 0 + send() - sleep(processing_interval) + sleep(processing_interval) - proc/send() - var/area/from - var/area/dest - switch(at_station) - if(1) - from = locate(SUPPLY_STATION_AREATYPE) - dest = locate(SUPPLY_DOCK_AREATYPE) - at_station = 0 - if(0) - from = locate(SUPPLY_DOCK_AREATYPE) - dest = locate(SUPPLY_STATION_AREATYPE) - at_station = 1 - dest.clear_docking_area() - moving = 0 +/datum/controller/supply_shuttle/proc/send() + var/area/from + var/area/dest + switch(at_station) + if(1) + from = locate(SUPPLY_STATION_AREATYPE) + dest = locate(SUPPLY_DOCK_AREATYPE) + at_station = 0 + if(0) + from = locate(SUPPLY_DOCK_AREATYPE) + dest = locate(SUPPLY_STATION_AREATYPE) + at_station = 1 + dest.clear_docking_area() + moving = 0 - from.move_contents_to(dest) + from.move_contents_to(dest) - //Check whether the shuttle is allowed to move - proc/can_move() - if(moving) return 0 +//Check whether the shuttle is allowed to move +/datum/controller/supply_shuttle/proc/can_move() + if(moving) return 0 - var/area/shuttle = locate(/area/supply/station) - if(!shuttle) return 0 + var/area/shuttle = locate(/area/supply/station) + if(!shuttle) return 0 - if(forbidden_atoms_check(shuttle)) - return 0 + if(forbidden_atoms_check(shuttle)) + return 0 + return 1 + +//To stop things being sent to centcom which should not be sent to centcom Recursively checks for these types. +/datum/controller/supply_shuttle/proc/forbidden_atoms_check(atom/A) + if(istype(A,/mob/living)) + return 1 + if(istype(A,/obj/item/weapon/disk/nuclear)) + return 1 + if(istype(A,/obj/machinery/nuclearbomb)) + return 1 + if(istype(A,/obj/item/device/radio/beacon)) + return 1 + if(istype(A,/obj/effect/blob)) + return 1 + if(istype(A,/obj/effect/spider/spiderling)) return 1 - //To stop things being sent to centcom which should not be sent to centcom Recursively checks for these types. - proc/forbidden_atoms_check(atom/A) - if(istype(A,/mob/living)) - return 1 - if(istype(A,/obj/item/weapon/disk/nuclear)) - return 1 - if(istype(A,/obj/machinery/nuclearbomb)) - return 1 - if(istype(A,/obj/item/device/radio/beacon)) - return 1 - if(istype(A,/obj/effect/blob)) - return 1 - if(istype(A,/obj/effect/spider/spiderling)) + for(var/i=1, i<=A.contents.len, i++) + var/atom/B = A.contents[i] + if(.(B)) return 1 - for(var/i=1, i<=A.contents.len, i++) - var/atom/B = A.contents[i] - if(.(B)) - return 1 +//Sellin +/datum/controller/supply_shuttle/proc/sell() + var/shuttle_at + if(at_station) shuttle_at = SUPPLY_STATION_AREATYPE + else shuttle_at = SUPPLY_DOCK_AREATYPE - //Sellin - proc/sell() - var/shuttle_at - if(at_station) shuttle_at = SUPPLY_STATION_AREATYPE - else shuttle_at = SUPPLY_DOCK_AREATYPE + var/area/shuttle = locate(shuttle_at) + if(!shuttle) return - var/area/shuttle = locate(shuttle_at) - if(!shuttle) return + var/plasma_count = 0 + var/intel_count = 0 + var/crate_count = 0 - var/plasma_count = 0 - var/intel_count = 0 - var/crate_count = 0 + centcom_message = "" - centcom_message = "" - - for(var/atom/movable/MA in shuttle) - if(MA.anchored) continue + for(var/atom/movable/MA in shuttle) + if(MA.anchored) continue - // Must be in a crate (or a critter crate)! - if(istype(MA,/obj/structure/closet/crate) || istype(MA,/obj/structure/closet/critter)) - crate_count++ - var/find_slip = 1 + // Must be in a crate (or a critter crate)! + if(istype(MA,/obj/structure/closet/crate) || istype(MA,/obj/structure/closet/critter)) + crate_count++ + var/find_slip = 1 - for(var/atom in MA) - // Sell manifests - var/atom/A = atom - if(find_slip && istype(A,/obj/item/weapon/paper/manifest)) - var/obj/item/weapon/paper/manifest/slip = A - // TODO: Check for a signature, too. - if(slip.stamped && slip.stamped.len) //yes, the clown stamp will work. clown is the highest authority on the station, it makes sense - // Did they mark it as erroneous? - var/denied = 0 - for(var/i=1,i<=slip.stamped.len,i++) - if(slip.stamped[i] == /obj/item/weapon/stamp/denied) - denied = 1 - if(slip.erroneous && denied) // Caught a mistake by Centcom (IDEA: maybe Centcom rarely gets offended by this) - points += slip.points-points_per_crate // For now, give a full refund for paying attention (minus the crate cost) - centcom_message += "+[slip.points-points_per_crate]: Station correctly denied package [slip.ordernumber]: " + for(var/atom in MA) + // Sell manifests + var/atom/A = atom + if(find_slip && istype(A,/obj/item/weapon/paper/manifest)) + var/obj/item/weapon/paper/manifest/slip = A + // TODO: Check for a signature, too. + if(slip.stamped && slip.stamped.len) //yes, the clown stamp will work. clown is the highest authority on the station, it makes sense + // Did they mark it as erroneous? + var/denied = 0 + for(var/i=1,i<=slip.stamped.len,i++) + if(slip.stamped[i] == /obj/item/weapon/stamp/denied) + denied = 1 + if(slip.erroneous && denied) // Caught a mistake by Centcom (IDEA: maybe Centcom rarely gets offended by this) + points += slip.points-points_per_crate // For now, give a full refund for paying attention (minus the crate cost) + centcom_message += "+[slip.points-points_per_crate]: Station correctly denied package [slip.ordernumber]: " + if(slip.erroneous & MANIFEST_ERROR_NAME) + centcom_message += "Destination station incorrect. " + else if(slip.erroneous & MANIFEST_ERROR_COUNT) + centcom_message += "Packages incorrectly counted. " + else if(slip.erroneous & MANIFEST_ERROR_ITEM) + centcom_message += "Package incomplete. " + centcom_message += "Points refunded.
" + else if(!slip.erroneous && !denied) // Approving a proper order awards the relatively tiny points_per_slip + points += points_per_slip + centcom_message += "+1: Package [slip.ordernumber] accorded.
" + else // You done goofed. + if(slip.erroneous) + centcom_message += "+0: Station approved package [slip.ordernumber] despite error: " if(slip.erroneous & MANIFEST_ERROR_NAME) - centcom_message += "Destination station incorrect. " + centcom_message += "Destination station incorrect." else if(slip.erroneous & MANIFEST_ERROR_COUNT) - centcom_message += "Packages incorrectly counted. " + centcom_message += "Packages incorrectly counted." else if(slip.erroneous & MANIFEST_ERROR_ITEM) - centcom_message += "Package incomplete. " - centcom_message += "Points refunded.
" - else if(!slip.erroneous && !denied) // Approving a proper order awards the relatively tiny points_per_slip - points += points_per_slip - centcom_message += "+1: Package [slip.ordernumber] accorded.
" - else // You done goofed. - if(slip.erroneous) - centcom_message += "+0: Station approved package [slip.ordernumber] despite error: " - if(slip.erroneous & MANIFEST_ERROR_NAME) - centcom_message += "Destination station incorrect." - else if(slip.erroneous & MANIFEST_ERROR_COUNT) - centcom_message += "Packages incorrectly counted." - else if(slip.erroneous & MANIFEST_ERROR_ITEM) - centcom_message += "We found unshipped items on our dock." - centcom_message += " Be more vigilant.
" - else - points -= slip.points-points_per_crate - centcom_message += "-[slip.points-points_per_crate]: Station denied package [slip.ordernumber]. Our records show no fault on our part.
" - find_slip = 0 - continue + centcom_message += "We found unshipped items on our dock." + centcom_message += " Be more vigilant.
" + else + points -= slip.points-points_per_crate + centcom_message += "-[slip.points-points_per_crate]: Station denied package [slip.ordernumber]. Our records show no fault on our part.
" + find_slip = 0 + continue - // Sell plasma - if(istype(A, /obj/item/stack/sheet/mineral/plasma)) - var/obj/item/stack/sheet/mineral/plasma/P = A - plasma_count += P.amount + // Sell plasma + if(istype(A, /obj/item/stack/sheet/mineral/plasma)) + var/obj/item/stack/sheet/mineral/plasma/P = A + plasma_count += P.amount - // Sell syndicate intel - if(istype(A, /obj/item/documents/syndicate)) - intel_count += 1 + // Sell syndicate intel + if(istype(A, /obj/item/documents/syndicate)) + intel_count += 1 - if(istype(A, /obj/item/seeds)) - var/obj/item/seeds/S = A - if(S.rarity == 0) // Mundane species - centcom_message += "+0: We don't need samples of mundane species \"[capitalize(S.species)]\".
" - else if(discoveredPlants[S.type]) // This species has already been sent to CentComm - var/potDiff = S.potency - discoveredPlants[S.type] // Compare it to the previous best - if(potDiff > 0) // This sample is better - discoveredPlants[S.type] = S.potency - centcom_message += "+[potDiff]: New sample of \"[capitalize(S.species)]\" is superior. Good work.
" - points += potDiff - else // This sample is worthless - centcom_message += "+0: New sample of \"[capitalize(S.species)]\" is not more potent than existing sample ([discoveredPlants[S.type]] potency).
" - else // This is a new discovery! + if(istype(A, /obj/item/seeds)) + var/obj/item/seeds/S = A + if(S.rarity == 0) // Mundane species + centcom_message += "+0: We don't need samples of mundane species \"[capitalize(S.species)]\".
" + else if(discoveredPlants[S.type]) // This species has already been sent to CentComm + var/potDiff = S.potency - discoveredPlants[S.type] // Compare it to the previous best + if(potDiff > 0) // This sample is better discoveredPlants[S.type] = S.potency - centcom_message += "+[S.rarity]: New species discovered: \"[capitalize(S.species)]\". Excellent work.
" - points += S.rarity // That's right, no bonus for potency. Send a crappy sample first to "show improvement" later - qdel(MA) + centcom_message += "+[potDiff]: New sample of \"[capitalize(S.species)]\" is superior. Good work.
" + points += potDiff + else // This sample is worthless + centcom_message += "+0: New sample of \"[capitalize(S.species)]\" is not more potent than existing sample ([discoveredPlants[S.type]] potency).
" + else // This is a new discovery! + discoveredPlants[S.type] = S.potency + centcom_message += "+[S.rarity]: New species discovered: \"[capitalize(S.species)]\". Excellent work.
" + points += S.rarity // That's right, no bonus for potency. Send a crappy sample first to "show improvement" later + qdel(MA) - if(plasma_count) - centcom_message += "+[round(plasma_count/plasma_per_point)]: Received [plasma_count] unit(s) of exotic material.
" - points += round(plasma_count / plasma_per_point) + if(plasma_count) + centcom_message += "+[round(plasma_count/plasma_per_point)]: Received [plasma_count] unit(s) of exotic material.
" + points += round(plasma_count / plasma_per_point) - if(intel_count) - centcom_message += "+[round(intel_count*points_per_intel)]: Received [intel_count] article(s) of enemy intelligence.
" - points += round(intel_count*points_per_intel) + if(intel_count) + centcom_message += "+[round(intel_count*points_per_intel)]: Received [intel_count] article(s) of enemy intelligence.
" + points += round(intel_count*points_per_intel) - if(crate_count) - centcom_message += "+[round(crate_count*points_per_crate)]: Received [crate_count] crate(s).
" - points += crate_count * points_per_crate + if(crate_count) + centcom_message += "+[round(crate_count*points_per_crate)]: Received [crate_count] crate(s).
" + points += crate_count * points_per_crate - //Buyin - proc/buy() - if(!shoppinglist.len) return +//Buyin +/datum/controller/supply_shuttle/proc/buy() + if(!shoppinglist.len) return - var/shuttle_at - if(at_station) shuttle_at = SUPPLY_STATION_AREATYPE - else shuttle_at = SUPPLY_DOCK_AREATYPE + var/shuttle_at + if(at_station) shuttle_at = SUPPLY_STATION_AREATYPE + else shuttle_at = SUPPLY_DOCK_AREATYPE - var/area/shuttle = locate(shuttle_at) - if(!shuttle) return + var/area/shuttle = locate(shuttle_at) + if(!shuttle) return - var/list/clear_turfs = list() + var/list/clear_turfs = list() - for(var/turf/T in shuttle) - if(T.density || T.contents.len) continue - clear_turfs += T + for(var/turf/T in shuttle) + if(T.density || T.contents.len) continue + clear_turfs += T - for(var/S in shoppinglist) - if(!clear_turfs.len) break - var/i = rand(1,clear_turfs.len) - var/turf/pickedloc = clear_turfs[i] - clear_turfs.Cut(i,i+1) + for(var/S in shoppinglist) + if(!clear_turfs.len) break + var/i = rand(1,clear_turfs.len) + var/turf/pickedloc = clear_turfs[i] + clear_turfs.Cut(i,i+1) - var/datum/supply_order/SO = S - var/datum/supply_packs/SP = SO.object + var/datum/supply_order/SO = S + var/datum/supply_packs/SP = SO.object - var/atom/A = new SP.containertype(pickedloc) - A.name = "[SP.containername] [SO.comment ? "([SO.comment])":"" ]" + var/atom/A = new SP.containertype(pickedloc) + A.name = "[SP.containername] [SO.comment ? "([SO.comment])":"" ]" - //supply manifest generation begin + //supply manifest generation begin - var/obj/item/weapon/paper/manifest/slip = new /obj/item/weapon/paper/manifest(A) + var/obj/item/weapon/paper/manifest/slip = new /obj/item/weapon/paper/manifest(A) - var printed_station_name = world.name // World name is available in the title bar, station_name can be different based on config. - if(prob(5)) - printed_station_name = new_station_name() - slip.erroneous |= MANIFEST_ERROR_NAME // They got our station name wrong. BASTARDS! - // IDEA: Have Centcom accidentally send random low-value crates in large orders, give large bonus for returning them intact. - var printed_packages_amount = supply_shuttle.shoppinglist.len - if(prob(5)) - printed_packages_amount += rand(1,2) // I considered rand(-2,2), but that could be zero. Heh. - slip.erroneous |= MANIFEST_ERROR_COUNT // They typoed the number of crates in this shipment. It won't match the other manifests. + var printed_station_name = world.name // World name is available in the title bar, station_name can be different based on config. + if(prob(5)) + printed_station_name = new_station_name() + slip.erroneous |= MANIFEST_ERROR_NAME // They got our station name wrong. BASTARDS! + // IDEA: Have Centcom accidentally send random low-value crates in large orders, give large bonus for returning them intact. + var printed_packages_amount = supply_shuttle.shoppinglist.len + if(prob(5)) + printed_packages_amount += rand(1,2) // I considered rand(-2,2), but that could be zero. Heh. + slip.erroneous |= MANIFEST_ERROR_COUNT // They typoed the number of crates in this shipment. It won't match the other manifests. - slip.points = SP.cost - slip.ordernumber = SO.ordernum - slip.info = "

[command_name()] Shipping Manifest



" - slip.info +="Order #[SO.ordernum]
" - slip.info +="Destination: [printed_station_name]
" - slip.info +="[printed_packages_amount] PACKAGES IN THIS SHIPMENT
" - slip.info +="CONTENTS:

" + slip.info += "CHECK CONTENTS AND STAMP BELOW THE LINE TO CONFIRM RECEIPT OF GOODS
" // And now this is actually meaningful. - supply_shuttle.shoppinglist.Cut() - return + supply_shuttle.shoppinglist.Cut() + return /obj/item/weapon/paper/manifest name = "supply manifest" diff --git a/code/controllers/voting.dm b/code/controllers/voting.dm index 97bc448a4c2..1af635b5d18 100644 --- a/code/controllers/voting.dm +++ b/code/controllers/voting.dm @@ -1,6 +1,6 @@ var/datum/controller/vote/vote = new() -datum/controller/vote +/datum/controller/vote var/initiator = null var/started_timeofday = null var/time_remaining = 0 @@ -10,253 +10,253 @@ datum/controller/vote var/list/voted = list() var/list/voting = list() - New() - if(vote != src) - if(istype(vote)) - del(vote) - vote = src +/datum/controller/vote/New() + if(vote != src) + if(istype(vote)) + del(vote) + vote = src - proc/process() //called by master_controller - if(mode) - time_remaining = started_timeofday + config.vote_period - if(world.timeofday < started_timeofday) - time_remaining -= 864000 - time_remaining = round((time_remaining - world.timeofday)/10) - - var/i=1 - if(time_remaining < 0) - result() - while(i<=voting.len) - var/client/C = voting[i] - if(C) - C << browse(null,"window=vote;can_close=0") - i++ - reset() - else - var/datum/browser/client_popup - while(i<=voting.len) - var/client/C = voting[i] - if(C) - //C << browse(vote.interface(C),"window=vote;can_close=0") - client_popup = new(C, "vote", "Voting Panel") - client_popup.set_window_options("can_close=0") - client_popup.set_content(vote.interface(C)) - client_popup.open(0) - - i++ - else - voting.Cut(i,i+1) - - proc/reset() - initiator = null - time_remaining = 0 - mode = null - question = null - choices.Cut() - voted.Cut() - voting.Cut() - - proc/get_result() - //get the highest number of votes - var/greatest_votes = 0 - var/total_votes = 0 - for(var/option in choices) - var/votes = choices[option] - total_votes += votes - if(votes > greatest_votes) - greatest_votes = votes - //default-vote for everyone who didn't vote - if(!config.vote_no_default && choices.len) - var/non_voters = (clients.len - total_votes) - if(non_voters > 0) - if(mode == "restart") - choices["Continue Playing"] += non_voters - if(choices["Continue Playing"] >= greatest_votes) - greatest_votes = choices["Continue Playing"] - else if(mode == "gamemode") - if(master_mode in choices) - choices[master_mode] += non_voters - if(choices[master_mode] >= greatest_votes) - greatest_votes = choices[master_mode] - //get all options with that many votes and return them in a list - . = list() - if(greatest_votes) - for(var/option in choices) - if(choices[option] == greatest_votes) - . += option - return . - - proc/announce_result() - var/list/winners = get_result() - var/text - if(winners.len > 0) - if(question) text += "[question]" - else text += "[capitalize(mode)] Vote" - for(var/i=1,i<=choices.len,i++) - var/votes = choices[choices[i]] - if(!votes) votes = 0 - text += "\n[choices[i]]: [votes]" - if(mode != "custom") - if(winners.len > 1) - text = "\nVote Tied Between:" - for(var/option in winners) - text += "\n\t[option]" - . = pick(winners) - text += "\nVote Result: [.]" - else - text += "\nDid not vote: [clients.len-voted.len]" - else - text += "Vote Result: Inconclusive - No Votes!" - log_vote(text) - world << "\n[text]" - return . - - proc/result() - . = announce_result() - var/restart = 0 - if(.) - switch(mode) - if("restart") - if(. == "Restart Round") - restart = 1 - if("gamemode") - if(master_mode != .) - world.save_mode(.) - if(ticker && ticker.mode) - restart = 1 - else - master_mode = . - - if(restart) - world << "World restarting due to vote..." - feedback_set_details("end_error","restart vote") - if(blackbox) blackbox.save_all_data_to_sql() - sleep(50) - log_game("Rebooting due to restart vote") - world.Reboot() - - return . - - proc/submit_vote(var/vote) - if(mode) - if(config.vote_no_dead && usr.stat == DEAD && !usr.client.holder) - return 0 - if(!(usr.ckey in voted)) - if(vote && 1<=vote && vote<=choices.len) - voted += usr.ckey - choices[choices[vote]]++ //check this - return vote - return 0 - - proc/initiate_vote(var/vote_type, var/initiator_key) - if(!mode) - if(started_timeofday != null) - var/next_allowed_timeofday = (started_timeofday + config.vote_delay) - if(world.timeofday < started_timeofday) - next_allowed_timeofday -= 864000 - if(next_allowed_timeofday > world.timeofday) - return 0 +/datum/controller/vote/proc/process() //called by master_controller + if(mode) + time_remaining = started_timeofday + config.vote_period + if(world.timeofday < started_timeofday) + time_remaining -= 864000 + time_remaining = round((time_remaining - world.timeofday)/10) + var/i=1 + if(time_remaining < 0) + result() + while(i<=voting.len) + var/client/C = voting[i] + if(C) + C << browse(null,"window=vote;can_close=0") + i++ reset() - switch(vote_type) - if("restart") choices.Add("Restart Round","Continue Playing") - if("gamemode") choices.Add(config.votable_modes) - if("custom") - question = html_encode(input(usr,"What is the vote for?") as text|null) - if(!question) return 0 - for(var/i=1,i<=10,i++) - var/option = capitalize(html_encode(input(usr,"Please enter an option or hit cancel to finish") as text|null)) - if(!option || mode || !usr.client) break - choices.Add(option) - else return 0 - mode = vote_type - initiator = initiator_key - started_timeofday = world.timeofday - var/text = "[capitalize(mode)] vote started by [initiator]." - if(mode == "custom") - text += "\n[question]" - log_vote(text) - world << "\n[text]\nType vote to place your votes.\nYou have [config.vote_period/10] seconds to vote." - time_remaining = round(config.vote_period/10) - return 1 - return 0 - - proc/interface(var/client/C) - if(!C) return - var/admin = 0 - var/trialmin = 0 - if(C.holder) - admin = 1 - if(check_rights_for(C, R_ADMIN)) - trialmin = 1 - voting |= C - - if(mode) - if(question) . += "

Vote: '[question]'

" - else . += "

Vote: [capitalize(mode)]

" - . += "Time Left: [time_remaining] s

" - if(admin) - . += "(Cancel Vote) " else - . += "

Start a vote:



" - . += "Close" - return . + i++ + else + voting.Cut(i,i+1) +/datum/controller/vote/proc/reset() + initiator = null + time_remaining = 0 + mode = null + question = null + choices.Cut() + voted.Cut() + voting.Cut() - Topic(href,href_list[],hsrc) - if(!usr || !usr.client) return //not necessary but meh...just in-case somebody does something stupid - switch(href_list["vote"]) - if("close") - voting -= usr.client - usr << browse(null, "window=vote") - return - if("cancel") - if(usr.client.holder) - reset() - if("toggle_restart") - if(usr.client.holder) - config.allow_vote_restart = !config.allow_vote_restart - if("toggle_gamemode") - if(usr.client.holder) - config.allow_vote_mode = !config.allow_vote_mode +/datum/controller/vote/proc/get_result() + //get the highest number of votes + var/greatest_votes = 0 + var/total_votes = 0 + for(var/option in choices) + var/votes = choices[option] + total_votes += votes + if(votes > greatest_votes) + greatest_votes = votes + //default-vote for everyone who didn't vote + if(!config.vote_no_default && choices.len) + var/non_voters = (clients.len - total_votes) + if(non_voters > 0) + if(mode == "restart") + choices["Continue Playing"] += non_voters + if(choices["Continue Playing"] >= greatest_votes) + greatest_votes = choices["Continue Playing"] + else if(mode == "gamemode") + if(master_mode in choices) + choices[master_mode] += non_voters + if(choices[master_mode] >= greatest_votes) + greatest_votes = choices[master_mode] + //get all options with that many votes and return them in a list + . = list() + if(greatest_votes) + for(var/option in choices) + if(choices[option] == greatest_votes) + . += option + return . + +/datum/controller/vote/proc/announce_result() + var/list/winners = get_result() + var/text + if(winners.len > 0) + if(question) text += "[question]" + else text += "[capitalize(mode)] Vote" + for(var/i=1,i<=choices.len,i++) + var/votes = choices[choices[i]] + if(!votes) votes = 0 + text += "\n[choices[i]]: [votes]" + if(mode != "custom") + if(winners.len > 1) + text = "\nVote Tied Between:" + for(var/option in winners) + text += "\n\t[option]" + . = pick(winners) + text += "\nVote Result: [.]" + else + text += "\nDid not vote: [clients.len-voted.len]" + else + text += "Vote Result: Inconclusive - No Votes!" + log_vote(text) + world << "\n[text]" + return . + +/datum/controller/vote/proc/result() + . = announce_result() + var/restart = 0 + if(.) + switch(mode) if("restart") - if(config.allow_vote_restart || usr.client.holder) - initiate_vote("restart",usr.key) + if(. == "Restart Round") + restart = 1 if("gamemode") - if(config.allow_vote_mode || usr.client.holder) - initiate_vote("gamemode",usr.key) + if(master_mode != .) + world.save_mode(.) + if(ticker && ticker.mode) + restart = 1 + else + master_mode = . + + if(restart) + world << "World restarting due to vote..." + feedback_set_details("end_error","restart vote") + if(blackbox) blackbox.save_all_data_to_sql() + sleep(50) + log_game("Rebooting due to restart vote") + world.Reboot() + + return . + +/datum/controller/vote/proc/submit_vote(var/vote) + if(mode) + if(config.vote_no_dead && usr.stat == DEAD && !usr.client.holder) + return 0 + if(!(usr.ckey in voted)) + if(vote && 1<=vote && vote<=choices.len) + voted += usr.ckey + choices[choices[vote]]++ //check this + return vote + return 0 + +/datum/controller/vote/proc/initiate_vote(var/vote_type, var/initiator_key) + if(!mode) + if(started_timeofday != null) + var/next_allowed_timeofday = (started_timeofday + config.vote_delay) + if(world.timeofday < started_timeofday) + next_allowed_timeofday -= 864000 + if(next_allowed_timeofday > world.timeofday) + return 0 + + reset() + switch(vote_type) + if("restart") choices.Add("Restart Round","Continue Playing") + if("gamemode") choices.Add(config.votable_modes) if("custom") - if(usr.client.holder) - initiate_vote("custom",usr.key) - else - submit_vote(round(text2num(href_list["vote"]))) - usr.vote() + question = html_encode(input(usr,"What is the vote for?") as text|null) + if(!question) return 0 + for(var/i=1,i<=10,i++) + var/option = capitalize(html_encode(input(usr,"Please enter an option or hit cancel to finish") as text|null)) + if(!option || mode || !usr.client) break + choices.Add(option) + else return 0 + mode = vote_type + initiator = initiator_key + started_timeofday = world.timeofday + var/text = "[capitalize(mode)] vote started by [initiator]." + if(mode == "custom") + text += "\n[question]" + log_vote(text) + world << "\n[text]\nType vote to place your votes.\nYou have [config.vote_period/10] seconds to vote." + time_remaining = round(config.vote_period/10) + return 1 + return 0 + +/datum/controller/vote/proc/interface(var/client/C) + if(!C) return + var/admin = 0 + var/trialmin = 0 + if(C.holder) + admin = 1 + if(check_rights_for(C, R_ADMIN)) + trialmin = 1 + voting |= C + + if(mode) + if(question) . += "

Vote: '[question]'

" + else . += "

Vote: [capitalize(mode)]

" + . += "Time Left: [time_remaining] s

" + if(admin) + . += "(Cancel Vote) " + else + . += "

Start a vote:



" + . += "Close" + return . + + +/datum/controller/vote/Topic(href,href_list[],hsrc) + if(!usr || !usr.client) return //not necessary but meh...just in-case somebody does something stupid + switch(href_list["vote"]) + if("close") + voting -= usr.client + usr << browse(null, "window=vote") + return + if("cancel") + if(usr.client.holder) + reset() + if("toggle_restart") + if(usr.client.holder) + config.allow_vote_restart = !config.allow_vote_restart + if("toggle_gamemode") + if(usr.client.holder) + config.allow_vote_mode = !config.allow_vote_mode + if("restart") + if(config.allow_vote_restart || usr.client.holder) + initiate_vote("restart",usr.key) + if("gamemode") + if(config.allow_vote_mode || usr.client.holder) + initiate_vote("gamemode",usr.key) + if("custom") + if(usr.client.holder) + initiate_vote("custom",usr.key) + else + submit_vote(round(text2num(href_list["vote"]))) + usr.vote() /mob/verb/vote() @@ -268,4 +268,4 @@ datum/controller/vote var/datum/browser/popup = new(src, "vote", "Voting Panel") popup.set_window_options("can_close=0") popup.set_content(vote.interface(client)) - popup.open(0) \ No newline at end of file + popup.open(0) diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm index 7477a1bea43..5ff1b54c92e 100644 --- a/code/datums/datumvars.dm +++ b/code/datums/datumvars.dm @@ -1,401 +1,400 @@ // reference: /client/proc/modify_variables(var/atom/O, var/param_var_name = null, var/autodetect_class = 0) -client - proc/debug_variables(datum/D in world) - set category = "Debug" - set name = "View Variables" - //set src in world +/client/proc/debug_variables(datum/D in world) + set category = "Debug" + set name = "View Variables" + //set src in world - if(!usr.client || !usr.client.holder) - usr << "\red You need to be an administrator to access this." - return - - - var/title = "" - var/body = "" - - if(!D) return - if(istype(D, /atom)) - var/atom/A = D - title = "[A.name] (\ref[A]) = [A.type]" - - #ifdef VARSICON - if (A.icon) - body += debug_variable("icon", new/icon(A.icon, A.icon_state, A.dir), 0) - #endif - - var/icon/sprite - - if(istype(D,/atom)) - var/atom/AT = D - if(AT.icon && AT.icon_state) - sprite = new /icon(AT.icon, AT.icon_state) - usr << browse_rsc(sprite, "view_vars_sprite.png") - - title = "[D] (\ref[D]) = [D.type]" - - body += {" "} - - body += "" - - body += "
" - - if(sprite) - body += "" - - body += "
" - else - body += "
" - - body += "
" - - if(istype(D,/atom)) - var/atom/A = D - if(isliving(A)) - body += "[D]" - if(A.dir) - body += "
<< [dir2text(A.dir)] >>" - var/mob/living/M = A - body += "
[M.ckey ? M.ckey : "No ckey"] / [M.real_name ? M.real_name : "No real name"]" - body += {" -
- BRUTE:[M.getBruteLoss()] - FIRE:[M.getFireLoss()] - TOXIN:[M.getToxLoss()] - OXY:[M.getOxyLoss()] - CLONE:[M.getCloneLoss()] - BRAIN:[M.getBrainLoss()] - - - - "} - else - body += "[D]" - if(A.dir) - body += "
<< [dir2text(A.dir)] >>" - else - body += "[D]" - - body += "
" - - body += "
" - - var/formatted_type = text("[D.type]") - if(length(formatted_type) > 25) - var/middle_point = length(formatted_type) / 2 - var/splitpoint = findtext(formatted_type,"/",middle_point) - if(splitpoint) - formatted_type = "[copytext(formatted_type,1,splitpoint)]
[copytext(formatted_type,splitpoint)]" - else - formatted_type = "Type too long" //No suitable splitpoint (/) found. - - body += "
[formatted_type]" - - if(src.holder && src.holder.marked_datum && src.holder.marked_datum == D) - body += "
Marked Object" - - body += "
" - - body += "
Refresh" - - //if(ismob(D)) - // body += "
Show player panel

" - - body += {"
-
" - - body += "

" - - body += "E - Edit, tries to determine the variable type by itself.
" - body += "C - Change, asks you for the var type first.
" - body += "M - Mass modify: changes this variable for all objects of this type.

" - - body += "
Search:

" - - body += "
    " - - var/list/names = list() - for (var/V in D.vars) - names += V - - names = sortList(names) - - for (var/V in names) - body += debug_variable(V, D.vars[V], 0, D) - - body += "
" - - var/html = "" - if (title) - html += "[title]" - html += {""} - html += "" - html += body - - html += {" - - "} - - html += "" - - usr << browse(html, "window=variables\ref[D];size=475x650") - + if(!usr.client || !usr.client.holder) + usr << "\red You need to be an administrator to access this." return - proc/debug_variable(name, value, level, var/datum/DA = null) - var/html = "" - if(DA) - html += "
  • (E) (C) (M) " + var/title = "" + var/body = "" + + if(!D) return + if(istype(D, /atom)) + var/atom/A = D + title = "[A.name] (\ref[A]) = [A.type]" + + #ifdef VARSICON + if (A.icon) + body += debug_variable("icon", new/icon(A.icon, A.icon_state, A.dir), 0) + #endif + + var/icon/sprite + + if(istype(D,/atom)) + var/atom/AT = D + if(AT.icon && AT.icon_state) + sprite = new /icon(AT.icon, AT.icon_state) + usr << browse_rsc(sprite, "view_vars_sprite.png") + + title = "[D] (\ref[D]) = [D.type]" + + body += {" "} + + body += "" + + body += "
    " + + if(sprite) + body += "" + + body += "
    " + else + body += "
    " + + body += "
    " + + if(istype(D,/atom)) + var/atom/A = D + if(isliving(A)) + body += "[D]" + if(A.dir) + body += "
    << [dir2text(A.dir)] >>" + var/mob/living/M = A + body += "
    [M.ckey ? M.ckey : "No ckey"] / [M.real_name ? M.real_name : "No real name"]" + body += {" +
    + BRUTE:[M.getBruteLoss()] + FIRE:[M.getFireLoss()] + TOXIN:[M.getToxLoss()] + OXY:[M.getOxyLoss()] + CLONE:[M.getCloneLoss()] + BRAIN:[M.getBrainLoss()] + + + + "} else - html += "
  • " + body += "[D]" + if(A.dir) + body += "
    << [dir2text(A.dir)] >>" + else + body += "[D]" - if (isnull(value)) - html += "[name] = null" + body += "
  • " - else if (istext(value)) - html += "[name] = \"[value]\"" + body += "
    " - else if (isicon(value)) - #ifdef VARSICON - var/icon/I = new/icon(value) - var/rnd = rand(1,10000) - var/rname = "tmp\ref[I][rnd].png" - usr << browse_rsc(I, rname) - html += "[name] = ([value]) " - #else - html += "[name] = /icon ([value])" - #endif + var/formatted_type = text("[D.type]") + if(length(formatted_type) > 25) + var/middle_point = length(formatted_type) / 2 + var/splitpoint = findtext(formatted_type,"/",middle_point) + if(splitpoint) + formatted_type = "[copytext(formatted_type,1,splitpoint)]
    [copytext(formatted_type,splitpoint)]" + else + formatted_type = "Type too long" //No suitable splitpoint (/) found. + + body += "
    [formatted_type]" + + if(src.holder && src.holder.marked_datum && src.holder.marked_datum == D) + body += "
    Marked Object" + + body += "
    " + + body += "
    Refresh" + + //if(ismob(D)) + // body += "
    Show player panel

    " + + body += {"
    +
    " + + body += "

    " + + body += "E - Edit, tries to determine the variable type by itself.
    " + body += "C - Change, asks you for the var type first.
    " + body += "M - Mass modify: changes this variable for all objects of this type.

    " + + body += "
    Search:

    " + + body += "
      " + + var/list/names = list() + for (var/V in D.vars) + names += V + + names = sortList(names) + + for (var/V in names) + body += debug_variable(V, D.vars[V], 0, D) + + body += "
    " + + var/html = "" + if (title) + html += "[title]" + html += {""} + html += "" + html += body + + html += {" + + "} + + html += "" + + usr << browse(html, "window=variables\ref[D];size=475x650") + + return + +/client/proc/debug_variable(name, value, level, var/datum/DA = null) + var/html = "" + + if(DA) + html += "
  • (E) (C) (M) " + else + html += "
  • " + + if (isnull(value)) + html += "[name] = null" + + else if (istext(value)) + html += "[name] = \"[value]\"" + + else if (isicon(value)) + #ifdef VARSICON + var/icon/I = new/icon(value) + var/rnd = rand(1,10000) + var/rname = "tmp\ref[I][rnd].png" + usr << browse_rsc(I, rname) + html += "[name] = ([value]) " + #else + html += "[name] = /icon ([value])" + #endif /* else if (istype(value, /image)) - #ifdef VARSICON - var/rnd = rand(1, 10000) - var/image/I = value + #ifdef VARSICON + var/rnd = rand(1, 10000) + var/image/I = value - src << browse_rsc(I.icon, "tmp\ref[value][rnd].png") - html += "[name] = " - #else - html += "[name] = /image ([value])" - #endif + src << browse_rsc(I.icon, "tmp\ref[value][rnd].png") + html += "[name] = " + #else + html += "[name] = /image ([value])" + #endif */ - else if (isfile(value)) - html += "[name] = '[value]'" + else if (isfile(value)) + html += "[name] = '[value]'" - else if (istype(value, /datum)) - var/datum/D = value - html += "[name] \ref[value] = [D.type]" + else if (istype(value, /datum)) + var/datum/D = value + html += "[name] \ref[value] = [D.type]" - else if (istype(value, /client)) - var/client/C = value - html += "[name] \ref[value] = [C] [C.type]" - // - else if (istype(value, /list)) - var/list/L = value - html += "[name] = /list ([L.len])" + else if (istype(value, /client)) + var/client/C = value + html += "[name] \ref[value] = [C] [C.type]" +// + else if (istype(value, /list)) + var/list/L = value + html += "[name] = /list ([L.len])" - if (L.len > 0 && !(name == "underlays" || name == "overlays" || name == "vars" || L.len > 500)) - // not sure if this is completely right... - if(0) //(L.vars.len > 0) - html += "
      " - html += "
    " - else - html += "" + if (L.len > 0 && !(name == "underlays" || name == "overlays" || name == "vars" || L.len > 500)) + // not sure if this is completely right... + if(0) //(L.vars.len > 0) + html += "
      " + html += "
    " + else + html += "" - else - html += "[name] = [value]" + else + html += "[name] = [value]" - html += "
  • " + html += "" - return html + return html /client/proc/view_var_Topic(href, href_list, hsrc) //This should all be moved over to datum/admins/Topic() or something ~Carn diff --git a/code/datums/gas_mixture.dm b/code/datums/gas_mixture.dm index 31c7f575aee..32b5a313094 100644 --- a/code/datums/gas_mixture.dm +++ b/code/datums/gas_mixture.dm @@ -57,871 +57,871 @@ What are the archived variables for? var/tmp/fuel_burnt = 0 //PV=nRT - related procedures - proc/heat_capacity() - var/heat_capacity = HEAT_CAPACITY_CALCULATION(oxygen,carbon_dioxide,nitrogen,toxins) +/datum/gas_mixture/proc/heat_capacity() + var/heat_capacity = HEAT_CAPACITY_CALCULATION(oxygen,carbon_dioxide,nitrogen,toxins) - if(trace_gases.len) - for(var/datum/gas/trace_gas in trace_gases) - heat_capacity += trace_gas.moles*trace_gas.specific_heat - return heat_capacity + if(trace_gases.len) + for(var/datum/gas/trace_gas in trace_gases) + heat_capacity += trace_gas.moles*trace_gas.specific_heat + return heat_capacity - proc/heat_capacity_archived() - var/heat_capacity_archived = HEAT_CAPACITY_CALCULATION(oxygen_archived,carbon_dioxide_archived,nitrogen_archived,toxins_archived) +/datum/gas_mixture/proc/heat_capacity_archived() + var/heat_capacity_archived = HEAT_CAPACITY_CALCULATION(oxygen_archived,carbon_dioxide_archived,nitrogen_archived,toxins_archived) - if(trace_gases.len) - for(var/datum/gas/trace_gas in trace_gases) - heat_capacity_archived += trace_gas.moles_archived*trace_gas.specific_heat - return heat_capacity_archived + if(trace_gases.len) + for(var/datum/gas/trace_gas in trace_gases) + heat_capacity_archived += trace_gas.moles_archived*trace_gas.specific_heat + return heat_capacity_archived - proc/total_moles() - var/moles = oxygen + carbon_dioxide + nitrogen + toxins +/datum/gas_mixture/proc/total_moles() + var/moles = oxygen + carbon_dioxide + nitrogen + toxins - if(trace_gases.len) - for(var/datum/gas/trace_gas in trace_gases) - moles += trace_gas.moles - return moles + if(trace_gases.len) + for(var/datum/gas/trace_gas in trace_gases) + moles += trace_gas.moles + return moles - proc/return_pressure() - if(volume>0) - return total_moles()*R_IDEAL_GAS_EQUATION*temperature/volume +/datum/gas_mixture/proc/return_pressure() + if(volume>0) + return total_moles()*R_IDEAL_GAS_EQUATION*temperature/volume + return 0 + + +/datum/gas_mixture/proc/return_temperature() + return temperature + + +/datum/gas_mixture/proc/return_volume() + return max(0, volume) + + +/datum/gas_mixture/proc/thermal_energy() + return temperature*heat_capacity() + + +//Procedures used for very specific events +/datum/gas_mixture/proc/check_tile_graphic() + //returns 1 if graphic changed + graphic = null + if(toxins > MOLES_PLASMA_VISIBLE) + graphic = "plasma" + else + var/datum/gas/sleeping_agent = locate(/datum/gas/sleeping_agent) in trace_gases + if(sleeping_agent && (sleeping_agent.moles > 1)) + graphic = "sleeping_agent" + else + graphic = null + + return graphic != graphic_archived + +/datum/gas_mixture/proc/react(atom/dump_location) + var/reacting = 0 //set to 1 if a notable reaction occured (used by pipe_network) + + if(trace_gases.len > 0) + if(temperature > 900) + if(toxins > MINIMUM_HEAT_CAPACITY && carbon_dioxide > MINIMUM_HEAT_CAPACITY) + var/datum/gas/oxygen_agent_b/trace_gas = locate(/datum/gas/oxygen_agent_b/) in trace_gases + if(trace_gas) + var/reaction_rate = min(carbon_dioxide*0.75, toxins*0.25, trace_gas.moles*0.05) + + carbon_dioxide -= reaction_rate + oxygen += reaction_rate + + trace_gas.moles -= reaction_rate*0.05 + + temperature -= (reaction_rate*20000)/heat_capacity() + + reacting = 1 + + fuel_burnt = 0 + if(temperature > FIRE_MINIMUM_TEMPERATURE_TO_EXIST) + //world << "pre [temperature], [oxygen], [toxins]" + if(fire() > 0) + reacting = 1 + //world << "post [temperature], [oxygen], [toxins]" + + return reacting + +/datum/gas_mixture/proc/fire() + var/energy_released = 0 + var/old_heat_capacity = heat_capacity() + + var/datum/gas/volatile_fuel/fuel_store = locate(/datum/gas/volatile_fuel/) in trace_gases + if(fuel_store) //General volatile gas burn + var/burned_fuel = 0 + + if(oxygen < fuel_store.moles) + burned_fuel = oxygen + fuel_store.moles -= burned_fuel + oxygen = 0 + else + burned_fuel = fuel_store.moles + oxygen -= fuel_store.moles + trace_gases -= fuel_store + fuel_store = null + + energy_released += FIRE_CARBON_ENERGY_RELEASED * burned_fuel + carbon_dioxide += burned_fuel + fuel_burnt += burned_fuel + + //Handle plasma burning + if(toxins > MINIMUM_HEAT_CAPACITY) + var/plasma_burn_rate = 0 + var/oxygen_burn_rate = 0 + //more plasma released at higher temperatures + var/temperature_scale + if(temperature > PLASMA_UPPER_TEMPERATURE) + temperature_scale = 1 + else + temperature_scale = (temperature-PLASMA_MINIMUM_BURN_TEMPERATURE)/(PLASMA_UPPER_TEMPERATURE-PLASMA_MINIMUM_BURN_TEMPERATURE) + if(temperature_scale > 0) + oxygen_burn_rate = 1.4 - temperature_scale + if(oxygen > toxins*PLASMA_OXYGEN_FULLBURN) + plasma_burn_rate = (toxins*temperature_scale)/4 + else + plasma_burn_rate = (temperature_scale*(oxygen/PLASMA_OXYGEN_FULLBURN))/4 + if(plasma_burn_rate > MINIMUM_HEAT_CAPACITY) + toxins -= plasma_burn_rate + oxygen -= plasma_burn_rate*oxygen_burn_rate + carbon_dioxide += plasma_burn_rate + + energy_released += FIRE_PLASMA_ENERGY_RELEASED * (plasma_burn_rate) + + fuel_burnt += (plasma_burn_rate)*(1+oxygen_burn_rate) + + if(energy_released > 0) + var/new_heat_capacity = heat_capacity() + if(new_heat_capacity > MINIMUM_HEAT_CAPACITY) + temperature = (temperature*old_heat_capacity + energy_released)/new_heat_capacity + + return fuel_burnt + +/datum/gas_mixture/proc/archive() + //Update archived versions of variables + //Returns: 1 in all cases + +/datum/gas_mixture/proc/merge(datum/gas_mixture/giver) + //Merges all air from giver into self. Deletes giver. + //Returns: 1 on success (no failure cases yet) + +/datum/gas_mixture/proc/check_then_merge(datum/gas_mixture/giver) + //Similar to merge(...) but first checks to see if the amount of air assumed is small enough + // that group processing is still accurate for source (aborts if not) + //Returns: 1 on successful merge, 0 if the check failed + +/datum/gas_mixture/proc/remove(amount) + //Proportionally removes amount of gas from the gas_mixture + //Returns: gas_mixture with the gases removed + +/datum/gas_mixture/proc/remove_ratio(ratio) + //Proportionally removes amount of gas from the gas_mixture + //Returns: gas_mixture with the gases removed + +/datum/gas_mixture/proc/subtract(datum/gas_mixture/right_side) + //Subtracts right_side from air_mixture. Used to help turfs mingle + +/datum/gas_mixture/proc/check_then_remove(amount) + //Similar to remove(...) but first checks to see if the amount of air removed is small enough + // that group processing is still accurate for source (aborts if not) + //Returns: gas_mixture with the gases removed or null + +/datum/gas_mixture/proc/copy_from(datum/gas_mixture/sample) + //Copies variables from sample + +/datum/gas_mixture/proc/share(datum/gas_mixture/sharer) + //Performs air sharing calculations between two gas_mixtures assuming only 1 boundary length + //Return: amount of gas exchanged (+ if sharer received) + +/datum/gas_mixture/proc/mimic(turf/model) + //Similar to share(...), except the model is not modified + //Return: amount of gas exchanged + +/datum/gas_mixture/proc/check_gas_mixture(datum/gas_mixture/sharer) + //Returns: 0 if the self-check failed then -1 if sharer-check failed then 1 if both checks pass + +/datum/gas_mixture/proc/check_turf(turf/model) + //Returns: 0 if self-check failed or 1 if check passes + +// check_me_then_share(datum/gas_mixture/sharer) + //Similar to share(...) but first checks to see if amount of air moved is small enough + // that group processing is still accurate for source (aborts if not) + //Returns: 1 on successful share, 0 if the check failed + +// check_me_then_mimic(turf/model) + //Similar to mimic(...) but first checks to see if amount of air moved is small enough + // that group processing is still accurate (aborts if not) + //Returns: 1 on successful mimic, 0 if the check failed + +// check_both_then_share(datum/gas_mixture/sharer) + //Similar to check_me_then_share(...) but also checks to see if amount of air moved is small enough + // that group processing is still accurate for the sharer (aborts if not) + //Returns: 0 if the self-check failed then -1 if sharer-check failed then 1 if successful share + + +/datum/gas_mixture/proc/temperature_mimic(turf/model, conduction_coefficient) + +/datum/gas_mixture/proc/temperature_share(datum/gas_mixture/sharer, conduction_coefficient) + +/datum/gas_mixture/proc/temperature_turf_share(turf/simulated/sharer, conduction_coefficient) + + +/datum/gas_mixture/proc/check_me_then_temperature_mimic(turf/model, conduction_coefficient) + +/datum/gas_mixture/proc/check_me_then_temperature_share(datum/gas_mixture/sharer, conduction_coefficient) + +/datum/gas_mixture/proc/check_both_then_temperature_share(datum/gas_mixture/sharer, conduction_coefficient) + +/datum/gas_mixture/proc/check_me_then_temperature_turf_share(turf/simulated/sharer, conduction_coefficient) + +/datum/gas_mixture/proc/compare(datum/gas_mixture/sample) + //Compares sample to self to see if within acceptable ranges that group processing may be enabled + +/datum/gas_mixture/archive() + oxygen_archived = oxygen + carbon_dioxide_archived = carbon_dioxide + nitrogen_archived = nitrogen + toxins_archived = toxins + + if(trace_gases.len) + for(var/datum/gas/trace_gas in trace_gases) + trace_gas.moles_archived = trace_gas.moles + + temperature_archived = temperature + + graphic_archived = graphic + + return 1 + +/datum/gas_mixture/check_then_merge(datum/gas_mixture/giver) + if(!giver) + return 0 + if(((giver.oxygen > MINIMUM_AIR_TO_SUSPEND) && (giver.oxygen >= oxygen*MINIMUM_AIR_RATIO_TO_SUSPEND)) \ + || ((giver.carbon_dioxide > MINIMUM_AIR_TO_SUSPEND) && (giver.carbon_dioxide >= carbon_dioxide*MINIMUM_AIR_RATIO_TO_SUSPEND)) \ + || ((giver.nitrogen > MINIMUM_AIR_TO_SUSPEND) && (giver.nitrogen >= nitrogen*MINIMUM_AIR_RATIO_TO_SUSPEND)) \ + || ((giver.toxins > MINIMUM_AIR_TO_SUSPEND) && (giver.toxins >= toxins*MINIMUM_AIR_RATIO_TO_SUSPEND))) + return 0 + if(abs(giver.temperature - temperature) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND) return 0 + if(giver.trace_gases.len) + for(var/datum/gas/trace_gas in giver.trace_gases) + var/datum/gas/corresponding = locate(trace_gas.type) in trace_gases + if((trace_gas.moles > MINIMUM_AIR_TO_SUSPEND) && (!corresponding || (trace_gas.moles >= corresponding.moles*MINIMUM_AIR_RATIO_TO_SUSPEND))) + return 0 - proc/return_temperature() - return temperature - - - proc/return_volume() - return max(0, volume) - - - proc/thermal_energy() - return temperature*heat_capacity() - - - //Procedures used for very specific events - proc/check_tile_graphic() - //returns 1 if graphic changed - graphic = null - if(toxins > MOLES_PLASMA_VISIBLE) - graphic = "plasma" - else - var/datum/gas/sleeping_agent = locate(/datum/gas/sleeping_agent) in trace_gases - if(sleeping_agent && (sleeping_agent.moles > 1)) - graphic = "sleeping_agent" - else - graphic = null - - return graphic != graphic_archived - - proc/react(atom/dump_location) - var/reacting = 0 //set to 1 if a notable reaction occured (used by pipe_network) - - if(trace_gases.len > 0) - if(temperature > 900) - if(toxins > MINIMUM_HEAT_CAPACITY && carbon_dioxide > MINIMUM_HEAT_CAPACITY) - var/datum/gas/oxygen_agent_b/trace_gas = locate(/datum/gas/oxygen_agent_b/) in trace_gases - if(trace_gas) - var/reaction_rate = min(carbon_dioxide*0.75, toxins*0.25, trace_gas.moles*0.05) - - carbon_dioxide -= reaction_rate - oxygen += reaction_rate - - trace_gas.moles -= reaction_rate*0.05 - - temperature -= (reaction_rate*20000)/heat_capacity() - - reacting = 1 - - fuel_burnt = 0 - if(temperature > FIRE_MINIMUM_TEMPERATURE_TO_EXIST) - //world << "pre [temperature], [oxygen], [toxins]" - if(fire() > 0) - reacting = 1 - //world << "post [temperature], [oxygen], [toxins]" - - return reacting - - proc/fire() - var/energy_released = 0 - var/old_heat_capacity = heat_capacity() - - var/datum/gas/volatile_fuel/fuel_store = locate(/datum/gas/volatile_fuel/) in trace_gases - if(fuel_store) //General volatile gas burn - var/burned_fuel = 0 - - if(oxygen < fuel_store.moles) - burned_fuel = oxygen - fuel_store.moles -= burned_fuel - oxygen = 0 - else - burned_fuel = fuel_store.moles - oxygen -= fuel_store.moles - trace_gases -= fuel_store - fuel_store = null + return merge(giver) - energy_released += FIRE_CARBON_ENERGY_RELEASED * burned_fuel - carbon_dioxide += burned_fuel - fuel_burnt += burned_fuel +/datum/gas_mixture/merge(datum/gas_mixture/giver) + if(!giver) + return 0 - //Handle plasma burning - if(toxins > MINIMUM_HEAT_CAPACITY) - var/plasma_burn_rate = 0 - var/oxygen_burn_rate = 0 - //more plasma released at higher temperatures - var/temperature_scale - if(temperature > PLASMA_UPPER_TEMPERATURE) - temperature_scale = 1 - else - temperature_scale = (temperature-PLASMA_MINIMUM_BURN_TEMPERATURE)/(PLASMA_UPPER_TEMPERATURE-PLASMA_MINIMUM_BURN_TEMPERATURE) - if(temperature_scale > 0) - oxygen_burn_rate = 1.4 - temperature_scale - if(oxygen > toxins*PLASMA_OXYGEN_FULLBURN) - plasma_burn_rate = (toxins*temperature_scale)/4 - else - plasma_burn_rate = (temperature_scale*(oxygen/PLASMA_OXYGEN_FULLBURN))/4 - if(plasma_burn_rate > MINIMUM_HEAT_CAPACITY) - toxins -= plasma_burn_rate - oxygen -= plasma_burn_rate*oxygen_burn_rate - carbon_dioxide += plasma_burn_rate + if(abs(temperature-giver.temperature)>MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER) + var/self_heat_capacity = heat_capacity() + var/giver_heat_capacity = giver.heat_capacity() + var/combined_heat_capacity = giver_heat_capacity + self_heat_capacity + if(combined_heat_capacity != 0) + temperature = (giver.temperature*giver_heat_capacity + temperature*self_heat_capacity)/combined_heat_capacity - energy_released += FIRE_PLASMA_ENERGY_RELEASED * (plasma_burn_rate) + oxygen += giver.oxygen + carbon_dioxide += giver.carbon_dioxide + nitrogen += giver.nitrogen + toxins += giver.toxins - fuel_burnt += (plasma_burn_rate)*(1+oxygen_burn_rate) + if(giver.trace_gases.len) + for(var/datum/gas/trace_gas in giver.trace_gases) + var/datum/gas/corresponding = locate(trace_gas.type) in trace_gases + if(!corresponding) + corresponding = new trace_gas.type() + trace_gases += corresponding + corresponding.moles += trace_gas.moles - if(energy_released > 0) - var/new_heat_capacity = heat_capacity() - if(new_heat_capacity > MINIMUM_HEAT_CAPACITY) - temperature = (temperature*old_heat_capacity + energy_released)/new_heat_capacity +// del(giver) + return 1 - return fuel_burnt +/datum/gas_mixture/remove(amount) - proc/archive() - //Update archived versions of variables - //Returns: 1 in all cases - - proc/merge(datum/gas_mixture/giver) - //Merges all air from giver into self. Deletes giver. - //Returns: 1 on success (no failure cases yet) + var/sum = total_moles() + amount = min(amount,sum) //Can not take more air than tile has! + if(amount <= 0) + return null - proc/check_then_merge(datum/gas_mixture/giver) - //Similar to merge(...) but first checks to see if the amount of air assumed is small enough - // that group processing is still accurate for source (aborts if not) - //Returns: 1 on successful merge, 0 if the check failed + var/datum/gas_mixture/removed = new - proc/remove(amount) - //Proportionally removes amount of gas from the gas_mixture - //Returns: gas_mixture with the gases removed - proc/remove_ratio(ratio) - //Proportionally removes amount of gas from the gas_mixture - //Returns: gas_mixture with the gases removed + removed.oxygen = QUANTIZE((oxygen/sum)*amount) + removed.nitrogen = QUANTIZE((nitrogen/sum)*amount) + removed.carbon_dioxide = QUANTIZE((carbon_dioxide/sum)*amount) + removed.toxins = QUANTIZE((toxins/sum)*amount) - proc/subtract(datum/gas_mixture/right_side) - //Subtracts right_side from air_mixture. Used to help turfs mingle + oxygen -= removed.oxygen + nitrogen -= removed.nitrogen + carbon_dioxide -= removed.carbon_dioxide + toxins -= removed.toxins - proc/check_then_remove(amount) - //Similar to remove(...) but first checks to see if the amount of air removed is small enough - // that group processing is still accurate for source (aborts if not) - //Returns: gas_mixture with the gases removed or null + if(trace_gases.len) + for(var/datum/gas/trace_gas in trace_gases) + var/datum/gas/corresponding = new trace_gas.type() + removed.trace_gases += corresponding - proc/copy_from(datum/gas_mixture/sample) - //Copies variables from sample + corresponding.moles = (trace_gas.moles/sum)*amount + trace_gas.moles -= corresponding.moles - proc/share(datum/gas_mixture/sharer) - //Performs air sharing calculations between two gas_mixtures assuming only 1 boundary length - //Return: amount of gas exchanged (+ if sharer received) - - proc/mimic(turf/model) - //Similar to share(...), except the model is not modified - //Return: amount of gas exchanged - - proc/check_gas_mixture(datum/gas_mixture/sharer) - //Returns: 0 if the self-check failed then -1 if sharer-check failed then 1 if both checks pass - - proc/check_turf(turf/model) - //Returns: 0 if self-check failed or 1 if check passes - - // check_me_then_share(datum/gas_mixture/sharer) - //Similar to share(...) but first checks to see if amount of air moved is small enough - // that group processing is still accurate for source (aborts if not) - //Returns: 1 on successful share, 0 if the check failed - - // check_me_then_mimic(turf/model) - //Similar to mimic(...) but first checks to see if amount of air moved is small enough - // that group processing is still accurate (aborts if not) - //Returns: 1 on successful mimic, 0 if the check failed - - // check_both_then_share(datum/gas_mixture/sharer) - //Similar to check_me_then_share(...) but also checks to see if amount of air moved is small enough - // that group processing is still accurate for the sharer (aborts if not) - //Returns: 0 if the self-check failed then -1 if sharer-check failed then 1 if successful share + removed.temperature = temperature + return removed - proc/temperature_mimic(turf/model, conduction_coefficient) +/datum/gas_mixture/remove_ratio(ratio) - proc/temperature_share(datum/gas_mixture/sharer, conduction_coefficient) + if(ratio <= 0) + return null - proc/temperature_turf_share(turf/simulated/sharer, conduction_coefficient) + ratio = min(ratio, 1) + var/datum/gas_mixture/removed = new - proc/check_me_then_temperature_mimic(turf/model, conduction_coefficient) + removed.oxygen = QUANTIZE(oxygen*ratio) + removed.nitrogen = QUANTIZE(nitrogen*ratio) + removed.carbon_dioxide = QUANTIZE(carbon_dioxide*ratio) + removed.toxins = QUANTIZE(toxins*ratio) - proc/check_me_then_temperature_share(datum/gas_mixture/sharer, conduction_coefficient) + oxygen -= removed.oxygen + nitrogen -= removed.nitrogen + carbon_dioxide -= removed.carbon_dioxide + toxins -= removed.toxins - proc/check_both_then_temperature_share(datum/gas_mixture/sharer, conduction_coefficient) + if(trace_gases.len) + for(var/datum/gas/trace_gas in trace_gases) + var/datum/gas/corresponding = new trace_gas.type() + removed.trace_gases += corresponding - proc/check_me_then_temperature_turf_share(turf/simulated/sharer, conduction_coefficient) + corresponding.moles = trace_gas.moles*ratio + trace_gas.moles -= corresponding.moles - proc/compare(datum/gas_mixture/sample) - //Compares sample to self to see if within acceptable ranges that group processing may be enabled + removed.temperature = temperature - archive() - oxygen_archived = oxygen - carbon_dioxide_archived = carbon_dioxide - nitrogen_archived = nitrogen - toxins_archived = toxins + return removed - if(trace_gases.len) - for(var/datum/gas/trace_gas in trace_gases) - trace_gas.moles_archived = trace_gas.moles +/datum/gas_mixture/check_then_remove(amount) - temperature_archived = temperature + //Since it is all proportional, the check may be done on the gas as a whole + var/sum = total_moles() + amount = min(amount,sum) //Can not take more air than tile has! - graphic_archived = graphic + if((amount > MINIMUM_AIR_RATIO_TO_SUSPEND) && (amount > sum*MINIMUM_AIR_RATIO_TO_SUSPEND)) + return 0 - return 1 + return remove(amount) - check_then_merge(datum/gas_mixture/giver) - if(!giver) - return 0 - if(((giver.oxygen > MINIMUM_AIR_TO_SUSPEND) && (giver.oxygen >= oxygen*MINIMUM_AIR_RATIO_TO_SUSPEND)) \ - || ((giver.carbon_dioxide > MINIMUM_AIR_TO_SUSPEND) && (giver.carbon_dioxide >= carbon_dioxide*MINIMUM_AIR_RATIO_TO_SUSPEND)) \ - || ((giver.nitrogen > MINIMUM_AIR_TO_SUSPEND) && (giver.nitrogen >= nitrogen*MINIMUM_AIR_RATIO_TO_SUSPEND)) \ - || ((giver.toxins > MINIMUM_AIR_TO_SUSPEND) && (giver.toxins >= toxins*MINIMUM_AIR_RATIO_TO_SUSPEND))) - return 0 - if(abs(giver.temperature - temperature) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND) - return 0 +/datum/gas_mixture/copy_from(datum/gas_mixture/sample) + oxygen = sample.oxygen + carbon_dioxide = sample.carbon_dioxide + nitrogen = sample.nitrogen + toxins = sample.toxins - if(giver.trace_gases.len) - for(var/datum/gas/trace_gas in giver.trace_gases) - var/datum/gas/corresponding = locate(trace_gas.type) in trace_gases - if((trace_gas.moles > MINIMUM_AIR_TO_SUSPEND) && (!corresponding || (trace_gas.moles >= corresponding.moles*MINIMUM_AIR_RATIO_TO_SUSPEND))) - return 0 + trace_gases.len=null + if(sample.trace_gases.len > 0) + for(var/datum/gas/trace_gas in sample.trace_gases) + var/datum/gas/corresponding = new trace_gas.type() + trace_gases += corresponding - return merge(giver) + corresponding.moles = trace_gas.moles - merge(datum/gas_mixture/giver) - if(!giver) - return 0 + temperature = sample.temperature - if(abs(temperature-giver.temperature)>MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER) - var/self_heat_capacity = heat_capacity() - var/giver_heat_capacity = giver.heat_capacity() - var/combined_heat_capacity = giver_heat_capacity + self_heat_capacity - if(combined_heat_capacity != 0) - temperature = (giver.temperature*giver_heat_capacity + temperature*self_heat_capacity)/combined_heat_capacity + return 1 - oxygen += giver.oxygen - carbon_dioxide += giver.carbon_dioxide - nitrogen += giver.nitrogen - toxins += giver.toxins +/datum/gas_mixture/subtract(datum/gas_mixture/right_side) + oxygen -= right_side.oxygen + carbon_dioxide -= right_side.carbon_dioxide + nitrogen -= right_side.nitrogen + toxins -= right_side.toxins - if(giver.trace_gases.len) - for(var/datum/gas/trace_gas in giver.trace_gases) - var/datum/gas/corresponding = locate(trace_gas.type) in trace_gases - if(!corresponding) - corresponding = new trace_gas.type() - trace_gases += corresponding - corresponding.moles += trace_gas.moles - - // del(giver) - return 1 - - remove(amount) - - var/sum = total_moles() - amount = min(amount,sum) //Can not take more air than tile has! - if(amount <= 0) - return null - - var/datum/gas_mixture/removed = new - - - removed.oxygen = QUANTIZE((oxygen/sum)*amount) - removed.nitrogen = QUANTIZE((nitrogen/sum)*amount) - removed.carbon_dioxide = QUANTIZE((carbon_dioxide/sum)*amount) - removed.toxins = QUANTIZE((toxins/sum)*amount) - - oxygen -= removed.oxygen - nitrogen -= removed.nitrogen - carbon_dioxide -= removed.carbon_dioxide - toxins -= removed.toxins - - if(trace_gases.len) - for(var/datum/gas/trace_gas in trace_gases) - var/datum/gas/corresponding = new trace_gas.type() - removed.trace_gases += corresponding - - corresponding.moles = (trace_gas.moles/sum)*amount - trace_gas.moles -= corresponding.moles - - removed.temperature = temperature - - return removed - - remove_ratio(ratio) - - if(ratio <= 0) - return null - - ratio = min(ratio, 1) - - var/datum/gas_mixture/removed = new - - removed.oxygen = QUANTIZE(oxygen*ratio) - removed.nitrogen = QUANTIZE(nitrogen*ratio) - removed.carbon_dioxide = QUANTIZE(carbon_dioxide*ratio) - removed.toxins = QUANTIZE(toxins*ratio) - - oxygen -= removed.oxygen - nitrogen -= removed.nitrogen - carbon_dioxide -= removed.carbon_dioxide - toxins -= removed.toxins - - if(trace_gases.len) - for(var/datum/gas/trace_gas in trace_gases) - var/datum/gas/corresponding = new trace_gas.type() - removed.trace_gases += corresponding - - corresponding.moles = trace_gas.moles*ratio - trace_gas.moles -= corresponding.moles - - removed.temperature = temperature - - return removed - - check_then_remove(amount) - - //Since it is all proportional, the check may be done on the gas as a whole - var/sum = total_moles() - amount = min(amount,sum) //Can not take more air than tile has! - - if((amount > MINIMUM_AIR_RATIO_TO_SUSPEND) && (amount > sum*MINIMUM_AIR_RATIO_TO_SUSPEND)) - return 0 - - return remove(amount) - - copy_from(datum/gas_mixture/sample) - oxygen = sample.oxygen - carbon_dioxide = sample.carbon_dioxide - nitrogen = sample.nitrogen - toxins = sample.toxins - - trace_gases.len=null - if(sample.trace_gases.len > 0) - for(var/datum/gas/trace_gas in sample.trace_gases) - var/datum/gas/corresponding = new trace_gas.type() + if((trace_gases.len > 0)||(right_side.trace_gases.len > 0)) + for(var/datum/gas/trace_gas in right_side.trace_gases) + var/datum/gas/corresponding = locate(trace_gas.type) in trace_gases + if(!corresponding) + corresponding = new trace_gas.type() trace_gases += corresponding - corresponding.moles = trace_gas.moles + corresponding.moles -= trace_gas.moles - temperature = sample.temperature + return 1 - return 1 +/datum/gas_mixture/check_gas_mixture(datum/gas_mixture/sharer) + if(!sharer) return 0 + var/delta_oxygen = (oxygen_archived - sharer.oxygen_archived)/5 + var/delta_carbon_dioxide = (carbon_dioxide_archived - sharer.carbon_dioxide_archived)/5 + var/delta_nitrogen = (nitrogen_archived - sharer.nitrogen_archived)/5 + var/delta_toxins = (toxins_archived - sharer.toxins_archived)/5 - subtract(datum/gas_mixture/right_side) - oxygen -= right_side.oxygen - carbon_dioxide -= right_side.carbon_dioxide - nitrogen -= right_side.nitrogen - toxins -= right_side.toxins + var/delta_temperature = (temperature_archived - sharer.temperature_archived) - if((trace_gases.len > 0)||(right_side.trace_gases.len > 0)) - for(var/datum/gas/trace_gas in right_side.trace_gases) + if(((abs(delta_oxygen) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_oxygen) >= oxygen_archived*MINIMUM_AIR_RATIO_TO_SUSPEND)) \ + || ((abs(delta_carbon_dioxide) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_carbon_dioxide) >= carbon_dioxide_archived*MINIMUM_AIR_RATIO_TO_SUSPEND)) \ + || ((abs(delta_nitrogen) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_nitrogen) >= nitrogen_archived*MINIMUM_AIR_RATIO_TO_SUSPEND)) \ + || ((abs(delta_toxins) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_toxins) >= toxins_archived*MINIMUM_AIR_RATIO_TO_SUSPEND))) + return 0 + + if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND) + return 0 + + if(sharer.trace_gases.len) + for(var/datum/gas/trace_gas in sharer.trace_gases) + if(trace_gas.moles_archived > MINIMUM_AIR_TO_SUSPEND*4) var/datum/gas/corresponding = locate(trace_gas.type) in trace_gases - if(!corresponding) - corresponding = new trace_gas.type() - trace_gases += corresponding - - corresponding.moles -= trace_gas.moles - - return 1 - - check_gas_mixture(datum/gas_mixture/sharer) - if(!sharer) return 0 - var/delta_oxygen = (oxygen_archived - sharer.oxygen_archived)/5 - var/delta_carbon_dioxide = (carbon_dioxide_archived - sharer.carbon_dioxide_archived)/5 - var/delta_nitrogen = (nitrogen_archived - sharer.nitrogen_archived)/5 - var/delta_toxins = (toxins_archived - sharer.toxins_archived)/5 - - var/delta_temperature = (temperature_archived - sharer.temperature_archived) - - if(((abs(delta_oxygen) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_oxygen) >= oxygen_archived*MINIMUM_AIR_RATIO_TO_SUSPEND)) \ - || ((abs(delta_carbon_dioxide) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_carbon_dioxide) >= carbon_dioxide_archived*MINIMUM_AIR_RATIO_TO_SUSPEND)) \ - || ((abs(delta_nitrogen) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_nitrogen) >= nitrogen_archived*MINIMUM_AIR_RATIO_TO_SUSPEND)) \ - || ((abs(delta_toxins) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_toxins) >= toxins_archived*MINIMUM_AIR_RATIO_TO_SUSPEND))) - return 0 - - if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND) - return 0 - - if(sharer.trace_gases.len) - for(var/datum/gas/trace_gas in sharer.trace_gases) - if(trace_gas.moles_archived > MINIMUM_AIR_TO_SUSPEND*4) - var/datum/gas/corresponding = locate(trace_gas.type) in trace_gases - if(corresponding) - if(trace_gas.moles_archived >= corresponding.moles_archived*MINIMUM_AIR_RATIO_TO_SUSPEND*4) - return 0 - else + if(corresponding) + if(trace_gas.moles_archived >= corresponding.moles_archived*MINIMUM_AIR_RATIO_TO_SUSPEND*4) return 0 - - if(trace_gases.len) - for(var/datum/gas/trace_gas in trace_gases) - if(trace_gas.moles_archived > MINIMUM_AIR_TO_SUSPEND*4) - if(!locate(trace_gas.type) in sharer.trace_gases) - return 0 - - if(((abs(delta_oxygen) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_oxygen) >= sharer.oxygen_archived*MINIMUM_AIR_RATIO_TO_SUSPEND)) \ - || ((abs(delta_carbon_dioxide) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_carbon_dioxide) >= sharer.carbon_dioxide_archived*MINIMUM_AIR_RATIO_TO_SUSPEND)) \ - || ((abs(delta_nitrogen) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_nitrogen) >= sharer.nitrogen_archived*MINIMUM_AIR_RATIO_TO_SUSPEND)) \ - || ((abs(delta_toxins) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_toxins) >= sharer.toxins_archived*MINIMUM_AIR_RATIO_TO_SUSPEND))) - return -1 - - if(trace_gases.len) - for(var/datum/gas/trace_gas in trace_gases) - if(trace_gas.moles_archived > MINIMUM_AIR_TO_SUSPEND*4) - var/datum/gas/corresponding = locate(trace_gas.type) in sharer.trace_gases - if(corresponding) - if(trace_gas.moles_archived >= corresponding.moles_archived*MINIMUM_AIR_RATIO_TO_SUSPEND*4) - return -1 - else - return -1 - - return 1 - - check_turf(turf/model) - var/delta_oxygen = (oxygen_archived - model.oxygen)/5 - var/delta_carbon_dioxide = (carbon_dioxide_archived - model.carbon_dioxide)/5 - var/delta_nitrogen = (nitrogen_archived - model.nitrogen)/5 - var/delta_toxins = (toxins_archived - model.toxins)/5 - - var/delta_temperature = (temperature_archived - model.temperature) - - if(((abs(delta_oxygen) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_oxygen) >= oxygen_archived*MINIMUM_AIR_RATIO_TO_SUSPEND)) \ - || ((abs(delta_carbon_dioxide) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_carbon_dioxide) >= carbon_dioxide_archived*MINIMUM_AIR_RATIO_TO_SUSPEND)) \ - || ((abs(delta_nitrogen) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_nitrogen) >= nitrogen_archived*MINIMUM_AIR_RATIO_TO_SUSPEND)) \ - || ((abs(delta_toxins) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_toxins) >= toxins_archived*MINIMUM_AIR_RATIO_TO_SUSPEND))) - return 0 - if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND) - return 0 - - if(trace_gases.len) - for(var/datum/gas/trace_gas in trace_gases) - if(trace_gas.moles_archived > MINIMUM_AIR_TO_SUSPEND*4) + else return 0 - return 1 + if(trace_gases.len) + for(var/datum/gas/trace_gas in trace_gases) + if(trace_gas.moles_archived > MINIMUM_AIR_TO_SUSPEND*4) + if(!locate(trace_gas.type) in sharer.trace_gases) + return 0 - share(datum/gas_mixture/sharer, var/atmos_adjacent_turfs = 4) - if(!sharer) return 0 - var/delta_oxygen = QUANTIZE(oxygen_archived - sharer.oxygen_archived)/(atmos_adjacent_turfs+1) - var/delta_carbon_dioxide = QUANTIZE(carbon_dioxide_archived - sharer.carbon_dioxide_archived)/(atmos_adjacent_turfs+1) - var/delta_nitrogen = QUANTIZE(nitrogen_archived - sharer.nitrogen_archived)/(atmos_adjacent_turfs+1) - var/delta_toxins = QUANTIZE(toxins_archived - sharer.toxins_archived)/(atmos_adjacent_turfs+1) - - var/delta_temperature = (temperature_archived - sharer.temperature_archived) - - var/old_self_heat_capacity = 0 - var/old_sharer_heat_capacity = 0 - - var/heat_capacity_self_to_sharer = 0 - var/heat_capacity_sharer_to_self = 0 - - if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER) - - var/delta_air = delta_oxygen+delta_nitrogen - if(delta_air) - var/air_heat_capacity = SPECIFIC_HEAT_AIR*delta_air - if(delta_air > 0) - heat_capacity_self_to_sharer += air_heat_capacity - else - heat_capacity_sharer_to_self -= air_heat_capacity - - if(delta_carbon_dioxide) - var/carbon_dioxide_heat_capacity = SPECIFIC_HEAT_CDO*delta_carbon_dioxide - if(delta_carbon_dioxide > 0) - heat_capacity_self_to_sharer += carbon_dioxide_heat_capacity - else - heat_capacity_sharer_to_self -= carbon_dioxide_heat_capacity - - if(delta_toxins) - var/toxins_heat_capacity = SPECIFIC_HEAT_TOXIN*delta_toxins - if(delta_toxins > 0) - heat_capacity_self_to_sharer += toxins_heat_capacity - else - heat_capacity_sharer_to_self -= toxins_heat_capacity - - old_self_heat_capacity = heat_capacity() - old_sharer_heat_capacity = sharer.heat_capacity() - - oxygen -= delta_oxygen - sharer.oxygen += delta_oxygen - - carbon_dioxide -= delta_carbon_dioxide - sharer.carbon_dioxide += delta_carbon_dioxide - - nitrogen -= delta_nitrogen - sharer.nitrogen += delta_nitrogen - - toxins -= delta_toxins - sharer.toxins += delta_toxins - - var/moved_moles = (delta_oxygen + delta_carbon_dioxide + delta_nitrogen + delta_toxins) - last_share = abs(delta_oxygen) + abs(delta_carbon_dioxide) + abs(delta_nitrogen) + abs(delta_toxins) - - var/list/trace_types_considered = list() - - if(trace_gases.len) - for(var/datum/gas/trace_gas in trace_gases) + if(((abs(delta_oxygen) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_oxygen) >= sharer.oxygen_archived*MINIMUM_AIR_RATIO_TO_SUSPEND)) \ + || ((abs(delta_carbon_dioxide) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_carbon_dioxide) >= sharer.carbon_dioxide_archived*MINIMUM_AIR_RATIO_TO_SUSPEND)) \ + || ((abs(delta_nitrogen) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_nitrogen) >= sharer.nitrogen_archived*MINIMUM_AIR_RATIO_TO_SUSPEND)) \ + || ((abs(delta_toxins) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_toxins) >= sharer.toxins_archived*MINIMUM_AIR_RATIO_TO_SUSPEND))) + return -1 + if(trace_gases.len) + for(var/datum/gas/trace_gas in trace_gases) + if(trace_gas.moles_archived > MINIMUM_AIR_TO_SUSPEND*4) var/datum/gas/corresponding = locate(trace_gas.type) in sharer.trace_gases + if(corresponding) + if(trace_gas.moles_archived >= corresponding.moles_archived*MINIMUM_AIR_RATIO_TO_SUSPEND*4) + return -1 + else + return -1 + + return 1 + +/datum/gas_mixture/check_turf(turf/model) + var/delta_oxygen = (oxygen_archived - model.oxygen)/5 + var/delta_carbon_dioxide = (carbon_dioxide_archived - model.carbon_dioxide)/5 + var/delta_nitrogen = (nitrogen_archived - model.nitrogen)/5 + var/delta_toxins = (toxins_archived - model.toxins)/5 + + var/delta_temperature = (temperature_archived - model.temperature) + + if(((abs(delta_oxygen) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_oxygen) >= oxygen_archived*MINIMUM_AIR_RATIO_TO_SUSPEND)) \ + || ((abs(delta_carbon_dioxide) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_carbon_dioxide) >= carbon_dioxide_archived*MINIMUM_AIR_RATIO_TO_SUSPEND)) \ + || ((abs(delta_nitrogen) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_nitrogen) >= nitrogen_archived*MINIMUM_AIR_RATIO_TO_SUSPEND)) \ + || ((abs(delta_toxins) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_toxins) >= toxins_archived*MINIMUM_AIR_RATIO_TO_SUSPEND))) + return 0 + if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND) + return 0 + + if(trace_gases.len) + for(var/datum/gas/trace_gas in trace_gases) + if(trace_gas.moles_archived > MINIMUM_AIR_TO_SUSPEND*4) + return 0 + + return 1 + +/datum/gas_mixture/share(datum/gas_mixture/sharer, var/atmos_adjacent_turfs = 4) + if(!sharer) return 0 + var/delta_oxygen = QUANTIZE(oxygen_archived - sharer.oxygen_archived)/(atmos_adjacent_turfs+1) + var/delta_carbon_dioxide = QUANTIZE(carbon_dioxide_archived - sharer.carbon_dioxide_archived)/(atmos_adjacent_turfs+1) + var/delta_nitrogen = QUANTIZE(nitrogen_archived - sharer.nitrogen_archived)/(atmos_adjacent_turfs+1) + var/delta_toxins = QUANTIZE(toxins_archived - sharer.toxins_archived)/(atmos_adjacent_turfs+1) + + var/delta_temperature = (temperature_archived - sharer.temperature_archived) + + var/old_self_heat_capacity = 0 + var/old_sharer_heat_capacity = 0 + + var/heat_capacity_self_to_sharer = 0 + var/heat_capacity_sharer_to_self = 0 + + if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER) + + var/delta_air = delta_oxygen+delta_nitrogen + if(delta_air) + var/air_heat_capacity = SPECIFIC_HEAT_AIR*delta_air + if(delta_air > 0) + heat_capacity_self_to_sharer += air_heat_capacity + else + heat_capacity_sharer_to_self -= air_heat_capacity + + if(delta_carbon_dioxide) + var/carbon_dioxide_heat_capacity = SPECIFIC_HEAT_CDO*delta_carbon_dioxide + if(delta_carbon_dioxide > 0) + heat_capacity_self_to_sharer += carbon_dioxide_heat_capacity + else + heat_capacity_sharer_to_self -= carbon_dioxide_heat_capacity + + if(delta_toxins) + var/toxins_heat_capacity = SPECIFIC_HEAT_TOXIN*delta_toxins + if(delta_toxins > 0) + heat_capacity_self_to_sharer += toxins_heat_capacity + else + heat_capacity_sharer_to_self -= toxins_heat_capacity + + old_self_heat_capacity = heat_capacity() + old_sharer_heat_capacity = sharer.heat_capacity() + + oxygen -= delta_oxygen + sharer.oxygen += delta_oxygen + + carbon_dioxide -= delta_carbon_dioxide + sharer.carbon_dioxide += delta_carbon_dioxide + + nitrogen -= delta_nitrogen + sharer.nitrogen += delta_nitrogen + + toxins -= delta_toxins + sharer.toxins += delta_toxins + + var/moved_moles = (delta_oxygen + delta_carbon_dioxide + delta_nitrogen + delta_toxins) + last_share = abs(delta_oxygen) + abs(delta_carbon_dioxide) + abs(delta_nitrogen) + abs(delta_toxins) + + var/list/trace_types_considered = list() + + if(trace_gases.len) + for(var/datum/gas/trace_gas in trace_gases) + + var/datum/gas/corresponding = locate(trace_gas.type) in sharer.trace_gases + var/delta = 0 + + if(corresponding) + delta = QUANTIZE(trace_gas.moles_archived - corresponding.moles_archived)/(atmos_adjacent_turfs+1) + else + corresponding = new trace_gas.type() + sharer.trace_gases += corresponding + + delta = trace_gas.moles_archived/(atmos_adjacent_turfs+1) + + trace_gas.moles -= delta + corresponding.moles += delta + + if(delta) + var/individual_heat_capacity = trace_gas.specific_heat*delta + if(delta > 0) + heat_capacity_self_to_sharer += individual_heat_capacity + else + heat_capacity_sharer_to_self -= individual_heat_capacity + + moved_moles += delta + last_share += abs(delta) + + trace_types_considered += trace_gas.type + + + if(sharer.trace_gases.len) + for(var/datum/gas/trace_gas in sharer.trace_gases) + if(trace_gas.type in trace_types_considered) continue + else + var/datum/gas/corresponding var/delta = 0 - if(corresponding) - delta = QUANTIZE(trace_gas.moles_archived - corresponding.moles_archived)/(atmos_adjacent_turfs+1) - else - corresponding = new trace_gas.type() - sharer.trace_gases += corresponding + corresponding = new trace_gas.type() + trace_gases += corresponding - delta = trace_gas.moles_archived/(atmos_adjacent_turfs+1) + delta = trace_gas.moles_archived/5 trace_gas.moles -= delta corresponding.moles += delta - if(delta) - var/individual_heat_capacity = trace_gas.specific_heat*delta - if(delta > 0) - heat_capacity_self_to_sharer += individual_heat_capacity - else - heat_capacity_sharer_to_self -= individual_heat_capacity + //Guaranteed transfer from sharer to self + var/individual_heat_capacity = trace_gas.specific_heat*delta + heat_capacity_sharer_to_self += individual_heat_capacity - moved_moles += delta + moved_moles += -delta last_share += abs(delta) - trace_types_considered += trace_gas.type + if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER) + var/new_self_heat_capacity = old_self_heat_capacity + heat_capacity_sharer_to_self - heat_capacity_self_to_sharer + var/new_sharer_heat_capacity = old_sharer_heat_capacity + heat_capacity_self_to_sharer - heat_capacity_sharer_to_self + if(new_self_heat_capacity > MINIMUM_HEAT_CAPACITY) + temperature = (old_self_heat_capacity*temperature - heat_capacity_self_to_sharer*temperature_archived + heat_capacity_sharer_to_self*sharer.temperature_archived)/new_self_heat_capacity - if(sharer.trace_gases.len) - for(var/datum/gas/trace_gas in sharer.trace_gases) - if(trace_gas.type in trace_types_considered) continue - else - var/datum/gas/corresponding - var/delta = 0 + if(new_sharer_heat_capacity > MINIMUM_HEAT_CAPACITY) + sharer.temperature = (old_sharer_heat_capacity*sharer.temperature-heat_capacity_sharer_to_self*sharer.temperature_archived + heat_capacity_self_to_sharer*temperature_archived)/new_sharer_heat_capacity - corresponding = new trace_gas.type() - trace_gases += corresponding + if(abs(old_sharer_heat_capacity) > MINIMUM_HEAT_CAPACITY) + if(abs(new_sharer_heat_capacity/old_sharer_heat_capacity - 1) < 0.10) // <10% change in sharer heat capacity + temperature_share(sharer, OPEN_HEAT_TRANSFER_COEFFICIENT) - delta = trace_gas.moles_archived/5 + if((delta_temperature > MINIMUM_TEMPERATURE_TO_MOVE) || abs(moved_moles) > MINIMUM_MOLES_DELTA_TO_MOVE) + var/delta_pressure = temperature_archived*(total_moles() + moved_moles) - sharer.temperature_archived*(sharer.total_moles() - moved_moles) + return delta_pressure*R_IDEAL_GAS_EQUATION/volume - trace_gas.moles -= delta - corresponding.moles += delta +/datum/gas_mixture/mimic(turf/model, border_multiplier, var/atmos_adjacent_turfs = 4) + var/delta_oxygen = QUANTIZE(oxygen_archived - model.oxygen)/(atmos_adjacent_turfs+1) + var/delta_carbon_dioxide = QUANTIZE(carbon_dioxide_archived - model.carbon_dioxide)/(atmos_adjacent_turfs+1) + var/delta_nitrogen = QUANTIZE(nitrogen_archived - model.nitrogen)/(atmos_adjacent_turfs+1) + var/delta_toxins = QUANTIZE(toxins_archived - model.toxins)/(atmos_adjacent_turfs+1) - //Guaranteed transfer from sharer to self - var/individual_heat_capacity = trace_gas.specific_heat*delta - heat_capacity_sharer_to_self += individual_heat_capacity + var/delta_temperature = (temperature_archived - model.temperature) - moved_moles += -delta - last_share += abs(delta) + var/heat_transferred = 0 + var/old_self_heat_capacity = 0 + var/heat_capacity_transferred = 0 - if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER) - var/new_self_heat_capacity = old_self_heat_capacity + heat_capacity_sharer_to_self - heat_capacity_self_to_sharer - var/new_sharer_heat_capacity = old_sharer_heat_capacity + heat_capacity_self_to_sharer - heat_capacity_sharer_to_self + if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER) - if(new_self_heat_capacity > MINIMUM_HEAT_CAPACITY) - temperature = (old_self_heat_capacity*temperature - heat_capacity_self_to_sharer*temperature_archived + heat_capacity_sharer_to_self*sharer.temperature_archived)/new_self_heat_capacity + var/delta_air = delta_oxygen+delta_nitrogen + if(delta_air) + var/air_heat_capacity = SPECIFIC_HEAT_AIR*delta_air + heat_transferred -= air_heat_capacity*model.temperature + heat_capacity_transferred -= air_heat_capacity - if(new_sharer_heat_capacity > MINIMUM_HEAT_CAPACITY) - sharer.temperature = (old_sharer_heat_capacity*sharer.temperature-heat_capacity_sharer_to_self*sharer.temperature_archived + heat_capacity_self_to_sharer*temperature_archived)/new_sharer_heat_capacity + if(delta_carbon_dioxide) + var/carbon_dioxide_heat_capacity = SPECIFIC_HEAT_CDO*delta_carbon_dioxide + heat_transferred -= carbon_dioxide_heat_capacity*model.temperature + heat_capacity_transferred -= carbon_dioxide_heat_capacity - if(abs(old_sharer_heat_capacity) > MINIMUM_HEAT_CAPACITY) - if(abs(new_sharer_heat_capacity/old_sharer_heat_capacity - 1) < 0.10) // <10% change in sharer heat capacity - temperature_share(sharer, OPEN_HEAT_TRANSFER_COEFFICIENT) + if(delta_toxins) + var/toxins_heat_capacity = SPECIFIC_HEAT_TOXIN*delta_toxins + heat_transferred -= toxins_heat_capacity*model.temperature + heat_capacity_transferred -= toxins_heat_capacity - if((delta_temperature > MINIMUM_TEMPERATURE_TO_MOVE) || abs(moved_moles) > MINIMUM_MOLES_DELTA_TO_MOVE) - var/delta_pressure = temperature_archived*(total_moles() + moved_moles) - sharer.temperature_archived*(sharer.total_moles() - moved_moles) - return delta_pressure*R_IDEAL_GAS_EQUATION/volume + old_self_heat_capacity = heat_capacity() - mimic(turf/model, border_multiplier, var/atmos_adjacent_turfs = 4) - var/delta_oxygen = QUANTIZE(oxygen_archived - model.oxygen)/(atmos_adjacent_turfs+1) - var/delta_carbon_dioxide = QUANTIZE(carbon_dioxide_archived - model.carbon_dioxide)/(atmos_adjacent_turfs+1) - var/delta_nitrogen = QUANTIZE(nitrogen_archived - model.nitrogen)/(atmos_adjacent_turfs+1) - var/delta_toxins = QUANTIZE(toxins_archived - model.toxins)/(atmos_adjacent_turfs+1) + if(border_multiplier) + oxygen -= delta_oxygen*border_multiplier + carbon_dioxide -= delta_carbon_dioxide*border_multiplier + nitrogen -= delta_nitrogen*border_multiplier + toxins -= delta_toxins*border_multiplier + else + oxygen -= delta_oxygen + carbon_dioxide -= delta_carbon_dioxide + nitrogen -= delta_nitrogen + toxins -= delta_toxins - var/delta_temperature = (temperature_archived - model.temperature) + var/moved_moles = (delta_oxygen + delta_carbon_dioxide + delta_nitrogen + delta_toxins) + last_share = abs(delta_oxygen) + abs(delta_carbon_dioxide) + abs(delta_nitrogen) + abs(delta_toxins) - var/heat_transferred = 0 - var/old_self_heat_capacity = 0 - var/heat_capacity_transferred = 0 + if(trace_gases.len) + for(var/datum/gas/trace_gas in trace_gases) + var/delta = 0 - if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER) + delta = trace_gas.moles_archived/(atmos_adjacent_turfs+1) - var/delta_air = delta_oxygen+delta_nitrogen - if(delta_air) - var/air_heat_capacity = SPECIFIC_HEAT_AIR*delta_air - heat_transferred -= air_heat_capacity*model.temperature - heat_capacity_transferred -= air_heat_capacity + if(border_multiplier) + trace_gas.moles -= delta*border_multiplier + else + trace_gas.moles -= delta - if(delta_carbon_dioxide) - var/carbon_dioxide_heat_capacity = SPECIFIC_HEAT_CDO*delta_carbon_dioxide - heat_transferred -= carbon_dioxide_heat_capacity*model.temperature - heat_capacity_transferred -= carbon_dioxide_heat_capacity + var/heat_cap_transferred = delta*trace_gas.specific_heat + heat_transferred += heat_cap_transferred*temperature_archived + heat_capacity_transferred += heat_cap_transferred + moved_moles += delta + moved_moles += abs(delta) - if(delta_toxins) - var/toxins_heat_capacity = SPECIFIC_HEAT_TOXIN*delta_toxins - heat_transferred -= toxins_heat_capacity*model.temperature - heat_capacity_transferred -= toxins_heat_capacity + if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER) + var/new_self_heat_capacity = old_self_heat_capacity - heat_capacity_transferred + if(new_self_heat_capacity > MINIMUM_HEAT_CAPACITY) + if(border_multiplier) + temperature = (old_self_heat_capacity*temperature - heat_capacity_transferred*border_multiplier*temperature_archived)/new_self_heat_capacity + else + temperature = (old_self_heat_capacity*temperature - heat_capacity_transferred*border_multiplier*temperature_archived)/new_self_heat_capacity - old_self_heat_capacity = heat_capacity() + temperature_mimic(model, model.thermal_conductivity, border_multiplier) - if(border_multiplier) - oxygen -= delta_oxygen*border_multiplier - carbon_dioxide -= delta_carbon_dioxide*border_multiplier - nitrogen -= delta_nitrogen*border_multiplier - toxins -= delta_toxins*border_multiplier - else - oxygen -= delta_oxygen - carbon_dioxide -= delta_carbon_dioxide - nitrogen -= delta_nitrogen - toxins -= delta_toxins + if((delta_temperature > MINIMUM_TEMPERATURE_TO_MOVE) || abs(moved_moles) > MINIMUM_MOLES_DELTA_TO_MOVE) + var/delta_pressure = temperature_archived*(total_moles() + moved_moles) - model.temperature*(model.oxygen+model.carbon_dioxide+model.nitrogen+model.toxins) + return delta_pressure*R_IDEAL_GAS_EQUATION/volume + else + return 0 - var/moved_moles = (delta_oxygen + delta_carbon_dioxide + delta_nitrogen + delta_toxins) - last_share = abs(delta_oxygen) + abs(delta_carbon_dioxide) + abs(delta_nitrogen) + abs(delta_toxins) +/datum/gas_mixture/check_both_then_temperature_share(datum/gas_mixture/sharer, conduction_coefficient) + var/delta_temperature = (temperature_archived - sharer.temperature_archived) - if(trace_gases.len) - for(var/datum/gas/trace_gas in trace_gases) - var/delta = 0 + var/self_heat_capacity = heat_capacity_archived() + var/sharer_heat_capacity = sharer.heat_capacity_archived() - delta = trace_gas.moles_archived/(atmos_adjacent_turfs+1) + var/self_temperature_delta = 0 + var/sharer_temperature_delta = 0 - if(border_multiplier) - trace_gas.moles -= delta*border_multiplier - else - trace_gas.moles -= delta - - var/heat_cap_transferred = delta*trace_gas.specific_heat - heat_transferred += heat_cap_transferred*temperature_archived - heat_capacity_transferred += heat_cap_transferred - moved_moles += delta - moved_moles += abs(delta) - - if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER) - var/new_self_heat_capacity = old_self_heat_capacity - heat_capacity_transferred - if(new_self_heat_capacity > MINIMUM_HEAT_CAPACITY) - if(border_multiplier) - temperature = (old_self_heat_capacity*temperature - heat_capacity_transferred*border_multiplier*temperature_archived)/new_self_heat_capacity - else - temperature = (old_self_heat_capacity*temperature - heat_capacity_transferred*border_multiplier*temperature_archived)/new_self_heat_capacity - - temperature_mimic(model, model.thermal_conductivity, border_multiplier) - - if((delta_temperature > MINIMUM_TEMPERATURE_TO_MOVE) || abs(moved_moles) > MINIMUM_MOLES_DELTA_TO_MOVE) - var/delta_pressure = temperature_archived*(total_moles() + moved_moles) - model.temperature*(model.oxygen+model.carbon_dioxide+model.nitrogen+model.toxins) - return delta_pressure*R_IDEAL_GAS_EQUATION/volume - else - return 0 - - check_both_then_temperature_share(datum/gas_mixture/sharer, conduction_coefficient) - var/delta_temperature = (temperature_archived - sharer.temperature_archived) - - var/self_heat_capacity = heat_capacity_archived() - var/sharer_heat_capacity = sharer.heat_capacity_archived() - - var/self_temperature_delta = 0 - var/sharer_temperature_delta = 0 - - if((sharer_heat_capacity > MINIMUM_HEAT_CAPACITY) && (self_heat_capacity > MINIMUM_HEAT_CAPACITY)) - var/heat = conduction_coefficient*delta_temperature* \ - (self_heat_capacity*sharer_heat_capacity/(self_heat_capacity+sharer_heat_capacity)) - - self_temperature_delta = -heat/(self_heat_capacity) - sharer_temperature_delta = heat/(sharer_heat_capacity) - else - return 1 - - if((abs(self_temperature_delta) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND) \ - && (abs(self_temperature_delta) > MINIMUM_TEMPERATURE_RATIO_TO_SUSPEND*temperature_archived)) - return 0 - - if((abs(sharer_temperature_delta) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND) \ - && (abs(sharer_temperature_delta) > MINIMUM_TEMPERATURE_RATIO_TO_SUSPEND*sharer.temperature_archived)) - return -1 - - temperature += self_temperature_delta - sharer.temperature += sharer_temperature_delta + if((sharer_heat_capacity > MINIMUM_HEAT_CAPACITY) && (self_heat_capacity > MINIMUM_HEAT_CAPACITY)) + var/heat = conduction_coefficient*delta_temperature* \ + (self_heat_capacity*sharer_heat_capacity/(self_heat_capacity+sharer_heat_capacity)) + self_temperature_delta = -heat/(self_heat_capacity) + sharer_temperature_delta = heat/(sharer_heat_capacity) + else return 1 - //Logic integrated from: temperature_share(sharer, conduction_coefficient) for efficiency - check_me_then_temperature_share(datum/gas_mixture/sharer, conduction_coefficient) - var/delta_temperature = (temperature_archived - sharer.temperature_archived) + if((abs(self_temperature_delta) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND) \ + && (abs(self_temperature_delta) > MINIMUM_TEMPERATURE_RATIO_TO_SUSPEND*temperature_archived)) + return 0 + if((abs(sharer_temperature_delta) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND) \ + && (abs(sharer_temperature_delta) > MINIMUM_TEMPERATURE_RATIO_TO_SUSPEND*sharer.temperature_archived)) + return -1 + + temperature += self_temperature_delta + sharer.temperature += sharer_temperature_delta + + return 1 + //Logic integrated from: temperature_share(sharer, conduction_coefficient) for efficiency + +/datum/gas_mixture/check_me_then_temperature_share(datum/gas_mixture/sharer, conduction_coefficient) + var/delta_temperature = (temperature_archived - sharer.temperature_archived) + + var/self_heat_capacity = heat_capacity_archived() + var/sharer_heat_capacity = sharer.heat_capacity_archived() + + var/self_temperature_delta = 0 + var/sharer_temperature_delta = 0 + + if((sharer_heat_capacity > MINIMUM_HEAT_CAPACITY) && (self_heat_capacity > MINIMUM_HEAT_CAPACITY)) + var/heat = conduction_coefficient*delta_temperature* \ + (self_heat_capacity*sharer_heat_capacity/(self_heat_capacity+sharer_heat_capacity)) + + self_temperature_delta = -heat/self_heat_capacity + sharer_temperature_delta = heat/sharer_heat_capacity + else + return 1 + + if((abs(self_temperature_delta) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND) \ + && (abs(self_temperature_delta) > MINIMUM_TEMPERATURE_RATIO_TO_SUSPEND*temperature_archived)) + return 0 + + temperature += self_temperature_delta + sharer.temperature += sharer_temperature_delta + + return 1 + //Logic integrated from: temperature_share(sharer, conduction_coefficient) for efficiency + +/datum/gas_mixture/check_me_then_temperature_turf_share(turf/simulated/sharer, conduction_coefficient) + var/delta_temperature = (temperature_archived - sharer.temperature) + + var/self_temperature_delta = 0 + var/sharer_temperature_delta = 0 + + if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER) var/self_heat_capacity = heat_capacity_archived() - var/sharer_heat_capacity = sharer.heat_capacity_archived() - var/self_temperature_delta = 0 - var/sharer_temperature_delta = 0 - - if((sharer_heat_capacity > MINIMUM_HEAT_CAPACITY) && (self_heat_capacity > MINIMUM_HEAT_CAPACITY)) + if((sharer.heat_capacity > MINIMUM_HEAT_CAPACITY) && (self_heat_capacity > MINIMUM_HEAT_CAPACITY)) var/heat = conduction_coefficient*delta_temperature* \ - (self_heat_capacity*sharer_heat_capacity/(self_heat_capacity+sharer_heat_capacity)) + (self_heat_capacity*sharer.heat_capacity/(self_heat_capacity+sharer.heat_capacity)) self_temperature_delta = -heat/self_heat_capacity - sharer_temperature_delta = heat/sharer_heat_capacity - else - return 1 - - if((abs(self_temperature_delta) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND) \ - && (abs(self_temperature_delta) > MINIMUM_TEMPERATURE_RATIO_TO_SUSPEND*temperature_archived)) - return 0 - - temperature += self_temperature_delta - sharer.temperature += sharer_temperature_delta - + sharer_temperature_delta = heat/sharer.heat_capacity + else return 1 - //Logic integrated from: temperature_share(sharer, conduction_coefficient) for efficiency - check_me_then_temperature_turf_share(turf/simulated/sharer, conduction_coefficient) - var/delta_temperature = (temperature_archived - sharer.temperature) + if((abs(self_temperature_delta) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND) \ + && (abs(self_temperature_delta) > MINIMUM_TEMPERATURE_RATIO_TO_SUSPEND*temperature_archived)) + return 0 - var/self_temperature_delta = 0 - var/sharer_temperature_delta = 0 + temperature += self_temperature_delta + sharer.temperature += sharer_temperature_delta - if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER) - var/self_heat_capacity = heat_capacity_archived() + return 1 + //Logic integrated from: temperature_turf_share(sharer, conduction_coefficient) for efficiency - if((sharer.heat_capacity > MINIMUM_HEAT_CAPACITY) && (self_heat_capacity > MINIMUM_HEAT_CAPACITY)) - var/heat = conduction_coefficient*delta_temperature* \ - (self_heat_capacity*sharer.heat_capacity/(self_heat_capacity+sharer.heat_capacity)) +/datum/gas_mixture/check_me_then_temperature_mimic(turf/model, conduction_coefficient) + var/delta_temperature = (temperature_archived - model.temperature) + var/self_temperature_delta = 0 - self_temperature_delta = -heat/self_heat_capacity - sharer_temperature_delta = heat/sharer.heat_capacity - else - return 1 + if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER) + var/self_heat_capacity = heat_capacity_archived() - if((abs(self_temperature_delta) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND) \ - && (abs(self_temperature_delta) > MINIMUM_TEMPERATURE_RATIO_TO_SUSPEND*temperature_archived)) - return 0 + if((model.heat_capacity > MINIMUM_HEAT_CAPACITY) && (self_heat_capacity > MINIMUM_HEAT_CAPACITY)) + var/heat = conduction_coefficient*delta_temperature* \ + (self_heat_capacity*model.heat_capacity/(self_heat_capacity+model.heat_capacity)) - temperature += self_temperature_delta - sharer.temperature += sharer_temperature_delta + self_temperature_delta = -heat/self_heat_capacity - return 1 - //Logic integrated from: temperature_turf_share(sharer, conduction_coefficient) for efficiency + if((abs(self_temperature_delta) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND) \ + && (abs(self_temperature_delta) > MINIMUM_TEMPERATURE_RATIO_TO_SUSPEND*temperature_archived)) + return 0 - check_me_then_temperature_mimic(turf/model, conduction_coefficient) - var/delta_temperature = (temperature_archived - model.temperature) - var/self_temperature_delta = 0 + temperature += self_temperature_delta - if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER) - var/self_heat_capacity = heat_capacity_archived() + return 1 + //Logic integrated from: temperature_mimic(model, conduction_coefficient) for efficiency - if((model.heat_capacity > MINIMUM_HEAT_CAPACITY) && (self_heat_capacity > MINIMUM_HEAT_CAPACITY)) - var/heat = conduction_coefficient*delta_temperature* \ - (self_heat_capacity*model.heat_capacity/(self_heat_capacity+model.heat_capacity)) +/datum/gas_mixture/temperature_share(datum/gas_mixture/sharer, conduction_coefficient) - self_temperature_delta = -heat/self_heat_capacity + var/delta_temperature = (temperature_archived - sharer.temperature_archived) + if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER) + var/self_heat_capacity = heat_capacity_archived() + var/sharer_heat_capacity = sharer.heat_capacity_archived() - if((abs(self_temperature_delta) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND) \ - && (abs(self_temperature_delta) > MINIMUM_TEMPERATURE_RATIO_TO_SUSPEND*temperature_archived)) - return 0 + if((sharer_heat_capacity > MINIMUM_HEAT_CAPACITY) && (self_heat_capacity > MINIMUM_HEAT_CAPACITY)) + var/heat = conduction_coefficient*delta_temperature* \ + (self_heat_capacity*sharer_heat_capacity/(self_heat_capacity+sharer_heat_capacity)) - temperature += self_temperature_delta + temperature -= heat/self_heat_capacity + sharer.temperature += heat/sharer_heat_capacity - return 1 - //Logic integrated from: temperature_mimic(model, conduction_coefficient) for efficiency +/datum/gas_mixture/temperature_mimic(turf/model, conduction_coefficient, border_multiplier) + var/delta_temperature = (temperature - model.temperature) + if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER) + var/self_heat_capacity = heat_capacity()//_archived() - temperature_share(datum/gas_mixture/sharer, conduction_coefficient) - - var/delta_temperature = (temperature_archived - sharer.temperature_archived) - if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER) - var/self_heat_capacity = heat_capacity_archived() - var/sharer_heat_capacity = sharer.heat_capacity_archived() - - if((sharer_heat_capacity > MINIMUM_HEAT_CAPACITY) && (self_heat_capacity > MINIMUM_HEAT_CAPACITY)) - var/heat = conduction_coefficient*delta_temperature* \ - (self_heat_capacity*sharer_heat_capacity/(self_heat_capacity+sharer_heat_capacity)) + if((model.heat_capacity > MINIMUM_HEAT_CAPACITY) && (self_heat_capacity > MINIMUM_HEAT_CAPACITY)) + var/heat = conduction_coefficient*delta_temperature* \ + (self_heat_capacity*model.heat_capacity/(self_heat_capacity+model.heat_capacity)) + if(border_multiplier) + temperature -= heat*border_multiplier/self_heat_capacity + else temperature -= heat/self_heat_capacity - sharer.temperature += heat/sharer_heat_capacity - temperature_mimic(turf/model, conduction_coefficient, border_multiplier) - var/delta_temperature = (temperature - model.temperature) - if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER) - var/self_heat_capacity = heat_capacity()//_archived() +/datum/gas_mixture/temperature_turf_share(turf/simulated/sharer, conduction_coefficient) + var/delta_temperature = (temperature_archived - sharer.temperature) + if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER) + var/self_heat_capacity = heat_capacity() - if((model.heat_capacity > MINIMUM_HEAT_CAPACITY) && (self_heat_capacity > MINIMUM_HEAT_CAPACITY)) - var/heat = conduction_coefficient*delta_temperature* \ - (self_heat_capacity*model.heat_capacity/(self_heat_capacity+model.heat_capacity)) + if((sharer.heat_capacity > MINIMUM_HEAT_CAPACITY) && (self_heat_capacity > MINIMUM_HEAT_CAPACITY)) + var/heat = conduction_coefficient*delta_temperature* \ + (self_heat_capacity*sharer.heat_capacity/(self_heat_capacity+sharer.heat_capacity)) - if(border_multiplier) - temperature -= heat*border_multiplier/self_heat_capacity + temperature -= heat/self_heat_capacity + sharer.temperature += heat/sharer.heat_capacity + +/datum/gas_mixture/compare(datum/gas_mixture/sample) + if((abs(oxygen-sample.oxygen) > MINIMUM_AIR_TO_SUSPEND) && \ + ((oxygen < (1-MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.oxygen) || (oxygen > (1+MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.oxygen))) + return 0 + if((abs(nitrogen-sample.nitrogen) > MINIMUM_AIR_TO_SUSPEND) && \ + ((nitrogen < (1-MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.nitrogen) || (nitrogen > (1+MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.nitrogen))) + return 0 + if((abs(carbon_dioxide-sample.carbon_dioxide) > MINIMUM_AIR_TO_SUSPEND) && \ + ((carbon_dioxide < (1-MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.carbon_dioxide) || (oxygen > (1+MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.carbon_dioxide))) + return 0 + if((abs(toxins-sample.toxins) > MINIMUM_AIR_TO_SUSPEND) && \ + ((toxins < (1-MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.toxins) || (toxins > (1+MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.toxins))) + return 0 + + if(total_moles() > MINIMUM_AIR_TO_SUSPEND) + if((abs(temperature-sample.temperature) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND) && \ + ((temperature < (1-MINIMUM_TEMPERATURE_RATIO_TO_SUSPEND)*sample.temperature) || (temperature > (1+MINIMUM_TEMPERATURE_RATIO_TO_SUSPEND)*sample.temperature))) + //world << "temp fail [temperature] & [sample.temperature]" + return 0 + + if(sample.trace_gases.len) + for(var/datum/gas/trace_gas in sample.trace_gases) + if(trace_gas.moles_archived > MINIMUM_AIR_TO_SUSPEND) + var/datum/gas/corresponding = locate(trace_gas.type) in trace_gases + if(corresponding) + if((abs(trace_gas.moles - corresponding.moles) > MINIMUM_AIR_TO_SUSPEND) && \ + ((corresponding.moles < (1-MINIMUM_AIR_RATIO_TO_SUSPEND)*trace_gas.moles) || (corresponding.moles > (1+MINIMUM_AIR_RATIO_TO_SUSPEND)*trace_gas.moles))) + return 0 else - temperature -= heat/self_heat_capacity + return 0 - temperature_turf_share(turf/simulated/sharer, conduction_coefficient) - var/delta_temperature = (temperature_archived - sharer.temperature) - if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER) - var/self_heat_capacity = heat_capacity() - - if((sharer.heat_capacity > MINIMUM_HEAT_CAPACITY) && (self_heat_capacity > MINIMUM_HEAT_CAPACITY)) - var/heat = conduction_coefficient*delta_temperature* \ - (self_heat_capacity*sharer.heat_capacity/(self_heat_capacity+sharer.heat_capacity)) - - temperature -= heat/self_heat_capacity - sharer.temperature += heat/sharer.heat_capacity - - compare(datum/gas_mixture/sample) - if((abs(oxygen-sample.oxygen) > MINIMUM_AIR_TO_SUSPEND) && \ - ((oxygen < (1-MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.oxygen) || (oxygen > (1+MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.oxygen))) - return 0 - if((abs(nitrogen-sample.nitrogen) > MINIMUM_AIR_TO_SUSPEND) && \ - ((nitrogen < (1-MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.nitrogen) || (nitrogen > (1+MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.nitrogen))) - return 0 - if((abs(carbon_dioxide-sample.carbon_dioxide) > MINIMUM_AIR_TO_SUSPEND) && \ - ((carbon_dioxide < (1-MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.carbon_dioxide) || (oxygen > (1+MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.carbon_dioxide))) - return 0 - if((abs(toxins-sample.toxins) > MINIMUM_AIR_TO_SUSPEND) && \ - ((toxins < (1-MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.toxins) || (toxins > (1+MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.toxins))) - return 0 - - if(total_moles() > MINIMUM_AIR_TO_SUSPEND) - if((abs(temperature-sample.temperature) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND) && \ - ((temperature < (1-MINIMUM_TEMPERATURE_RATIO_TO_SUSPEND)*sample.temperature) || (temperature > (1+MINIMUM_TEMPERATURE_RATIO_TO_SUSPEND)*sample.temperature))) - //world << "temp fail [temperature] & [sample.temperature]" - return 0 - - if(sample.trace_gases.len) - for(var/datum/gas/trace_gas in sample.trace_gases) - if(trace_gas.moles_archived > MINIMUM_AIR_TO_SUSPEND) - var/datum/gas/corresponding = locate(trace_gas.type) in trace_gases - if(corresponding) - if((abs(trace_gas.moles - corresponding.moles) > MINIMUM_AIR_TO_SUSPEND) && \ - ((corresponding.moles < (1-MINIMUM_AIR_RATIO_TO_SUSPEND)*trace_gas.moles) || (corresponding.moles > (1+MINIMUM_AIR_RATIO_TO_SUSPEND)*trace_gas.moles))) - return 0 - else + if(trace_gases.len) + for(var/datum/gas/trace_gas in trace_gases) + if(trace_gas.moles > MINIMUM_AIR_TO_SUSPEND) + var/datum/gas/corresponding = locate(trace_gas.type) in sample.trace_gases + if(corresponding) + if((abs(trace_gas.moles - corresponding.moles) > MINIMUM_AIR_TO_SUSPEND) && \ + ((trace_gas.moles < (1-MINIMUM_AIR_RATIO_TO_SUSPEND)*corresponding.moles) || (trace_gas.moles > (1+MINIMUM_AIR_RATIO_TO_SUSPEND)*corresponding.moles))) return 0 - - if(trace_gases.len) - for(var/datum/gas/trace_gas in trace_gases) - if(trace_gas.moles > MINIMUM_AIR_TO_SUSPEND) - var/datum/gas/corresponding = locate(trace_gas.type) in sample.trace_gases - if(corresponding) - if((abs(trace_gas.moles - corresponding.moles) > MINIMUM_AIR_TO_SUSPEND) && \ - ((trace_gas.moles < (1-MINIMUM_AIR_RATIO_TO_SUSPEND)*corresponding.moles) || (trace_gas.moles > (1+MINIMUM_AIR_RATIO_TO_SUSPEND)*corresponding.moles))) - return 0 - else - return 0 - return 1 \ No newline at end of file + else + return 0 + return 1 diff --git a/code/datums/helper_datums/construction_datum.dm b/code/datums/helper_datums/construction_datum.dm index f292e7648f7..13014725d0c 100644 --- a/code/datums/helper_datums/construction_datum.dm +++ b/code/datums/helper_datums/construction_datum.dm @@ -7,97 +7,97 @@ var/result var/list/steps_desc - New(atom) - ..() - holder = atom - if(!holder) //don't want this without a holder - qdel(src) +/datum/construction/New(atom) + ..() + holder = atom + if(!holder) //don't want this without a holder + qdel(src) + set_desc(steps.len) + return + +/datum/construction/proc/next_step() + steps.len-- + if(!steps.len) + spawn_result() + else set_desc(steps.len) - return + return - proc/next_step() - steps.len-- - if(!steps.len) - spawn_result() - else - set_desc(steps.len) - return +/datum/construction/proc/action(atom/used_atom,mob/user as mob) + return - proc/action(atom/used_atom,mob/user as mob) - return +/datum/construction/proc/check_step(atom/used_atom,mob/user as mob) //check last step only + var/valid_step = is_right_key(used_atom) + if(valid_step) + if(custom_action(valid_step, used_atom, user)) + next_step() + return 1 + return 0 - proc/check_step(atom/used_atom,mob/user as mob) //check last step only - var/valid_step = is_right_key(used_atom) - if(valid_step) - if(custom_action(valid_step, used_atom, user)) - next_step() - return 1 - return 0 +/datum/construction/proc/is_right_key(atom/used_atom) // returns current step num if used_atom is of the right type. + var/list/L = steps[steps.len] + if(istype(used_atom, L["key"])) + return steps.len + return 0 - proc/is_right_key(atom/used_atom) // returns current step num if used_atom is of the right type. - var/list/L = steps[steps.len] +/datum/construction/proc/custom_action(step, used_atom, user) + return 1 + +/datum/construction/proc/check_all_steps(atom/used_atom,mob/user as mob) //check all steps, remove matching one. + for(var/i=1;i<=steps.len;i++) + var/list/L = steps[i]; if(istype(used_atom, L["key"])) - return steps.len - return 0 - - proc/custom_action(step, used_atom, user) - return 1 - - proc/check_all_steps(atom/used_atom,mob/user as mob) //check all steps, remove matching one. - for(var/i=1;i<=steps.len;i++) - var/list/L = steps[i]; - if(istype(used_atom, L["key"])) - if(custom_action(i, used_atom, user)) - steps[i]=null;//stupid byond list from list removal... - listclearnulls(steps); - if(!steps.len) - spawn_result() - return 1 - return 0 + if(custom_action(i, used_atom, user)) + steps[i]=null;//stupid byond list from list removal... + listclearnulls(steps); + if(!steps.len) + spawn_result() + return 1 + return 0 - proc/spawn_result() - if(result) - new result(get_turf(holder)) - qdel(holder) - return +/datum/construction/proc/spawn_result() + if(result) + new result(get_turf(holder)) + qdel(holder) + return - proc/set_desc(index as num) - var/list/step = steps[index] - holder.desc = step["desc"] - return +/datum/construction/proc/set_desc(index as num) + var/list/step = steps[index] + holder.desc = step["desc"] + return /datum/construction/reversible var/index - New(atom) - ..() - index = steps.len - return +/datum/construction/reversible/New(atom) + ..() + index = steps.len + return - proc/update_index(diff as num) - index+=diff - if(index==0) - spawn_result() - else - set_desc(index) - return +/datum/construction/reversible/proc/update_index(diff as num) + index+=diff + if(index==0) + spawn_result() + else + set_desc(index) + return - is_right_key(atom/used_atom) // returns index step - var/list/L = steps[index] - if(istype(used_atom, L["key"])) - return FORWARD //to the first step -> forward - else if(L["backkey"] && istype(used_atom, L["backkey"])) - return BACKWARD //to the last step -> backwards - return 0 +/datum/construction/reversible/is_right_key(atom/used_atom) // returns index step + var/list/L = steps[index] + if(istype(used_atom, L["key"])) + return FORWARD //to the first step -> forward + else if(L["backkey"] && istype(used_atom, L["backkey"])) + return BACKWARD //to the last step -> backwards + return 0 - check_step(atom/used_atom,mob/user as mob) - var/diff = is_right_key(used_atom) - if(diff) - if(custom_action(index, diff, used_atom, user)) - update_index(diff) - return 1 - return 0 +/datum/construction/reversible/check_step(atom/used_atom,mob/user as mob) + var/diff = is_right_key(used_atom) + if(diff) + if(custom_action(index, diff, used_atom, user)) + update_index(diff) + return 1 + return 0 - custom_action(index, diff, used_atom, user) - return 1 \ No newline at end of file +/datum/construction/reversible/custom_action(index, diff, used_atom, user) + return 1 diff --git a/code/datums/helper_datums/events.dm b/code/datums/helper_datums/events.dm index 10e2f92a234..f5e60ee7b0c 100644 --- a/code/datums/helper_datums/events.dm +++ b/code/datums/helper_datums/events.dm @@ -6,62 +6,63 @@ /datum/events var/list/events - New() - ..() - events = new +/datum/events/New() + ..() + events = new - proc/addEventType(event_type as text) - if(!(event_type in events) || !islist(events[event_type])) - events[event_type] = list() - return 1 - return - - - // Arguments: event_type as text, proc_holder as datum, proc_name as text - // Returns: New event, null on error. - proc/addEvent(event_type as text, proc_holder, proc_name as text) - if(!event_type || !proc_holder || !proc_name) - return - addEventType(event_type) - var/list/event = events[event_type] - var/datum/event/E = new /datum/event(proc_holder,proc_name) - event += E - return E - - // Arguments: event_type as text, any number of additional arguments to pass to event handler - // Returns: null - proc/fireEvent() - //world << "Events in [args[1]] called" - var/list/event = listgetindex(events,args[1]) - if(istype(event)) - spawn(-1) - for(var/datum/event/E in event) - if(!E.Fire(arglist(args.Copy(2)))) - clearEvent(args[1],E) - return - - // Arguments: event_type as text, E as /datum/event - // Returns: 1 if event cleared, null on error - proc/clearEvent(event_type as text, datum/event/E) - if(!event_type || !E) - return - var/list/event = listgetindex(events,event_type) - event -= E +/datum/events/proc/addEventType(event_type as text) + if(!(event_type in events) || !islist(events[event_type])) + events[event_type] = list() return 1 + return + + +// Arguments: event_type as text, proc_holder as datum, proc_name as text +// Returns: New event, null on error. +/datum/events/proc/addEvent(event_type as text, proc_holder, proc_name as text) + if(!event_type || !proc_holder || !proc_name) + return + addEventType(event_type) + var/list/event = events[event_type] + var/datum/event/E = new /datum/event(proc_holder,proc_name) + event += E + return E + +// Arguments: event_type as text, any number of additional arguments to pass to event handler +// Returns: null +/datum/events/proc/fireEvent() + //world << "Events in [args[1]] called" + var/list/event = listgetindex(events,args[1]) + if(istype(event)) + spawn(-1) + for(var/datum/event/E in event) + if(!E.Fire(arglist(args.Copy(2)))) + clearEvent(args[1],E) + return + +// Arguments: event_type as text, E as /datum/event +// Returns: 1 if event cleared, null on error + +/datum/events/proc/clearEvent(event_type as text, datum/event/E) + if(!event_type || !E) + return + var/list/event = listgetindex(events,event_type) + event -= E + return 1 /datum/event var/listener var/proc_name - New(tlistener,tprocname) - listener = tlistener - proc_name = tprocname - return ..() +/datum/event/New(tlistener,tprocname) + listener = tlistener + proc_name = tprocname + return ..() - proc/Fire() - //world << "Event fired" - if(listener) - call(listener,proc_name)(arglist(args)) - return 1 - return \ No newline at end of file +/datum/event/proc/Fire() + //world << "Event fired" + if(listener) + call(listener,proc_name)(arglist(args)) + return 1 + return diff --git a/code/datums/helper_datums/global_iterator.dm b/code/datums/helper_datums/global_iterator.dm index 262c59eb77f..1c6d5ce341e 100644 --- a/code/datums/helper_datums/global_iterator.dm +++ b/code/datums/helper_datums/global_iterator.dm @@ -57,104 +57,104 @@ Data storage vars: var/result var/state = 0 - New(list/arguments=null,autostart=1) - delay = delay>0?(delay):1 - if(forbid_garbage) //prevents garbage collection with tag != null - tag = "\ref[src]" - set_process_args(arguments) - if(autostart) - start() - return +/datum/global_iterator/New(list/arguments=null,autostart=1) + delay = delay>0?(delay):1 + if(forbid_garbage) //prevents garbage collection with tag != null + tag = "\ref[src]" + set_process_args(arguments) + if(autostart) + start() + return - Destroy() - tag = null - arg_list.Cut() - stop() - //Do not call ..() +/datum/global_iterator/Destroy() + tag = null + arg_list.Cut() + stop() + //Do not call ..() - proc/main() - state = 1 - while(src && control_switch) - last_exec = world.timeofday - if(check_for_null && has_null_args()) - stop() +/datum/global_iterator/proc/main() + state = 1 + while(src && control_switch) + last_exec = world.timeofday + if(check_for_null && has_null_args()) + stop() + return 0 + result = process(arglist(arg_list)) + for(var/sleep_time=delay;sleep_time>0;sleep_time--) //uhh, this is ugly. But I see no other way to terminate sleeping proc. Such disgrace. + if(!control_switch) return 0 - result = process(arglist(arg_list)) - for(var/sleep_time=delay;sleep_time>0;sleep_time--) //uhh, this is ugly. But I see no other way to terminate sleeping proc. Such disgrace. - if(!control_switch) - return 0 - sleep(1) - return 0 - - proc/start(list/arguments=null) - if(active()) - return - if(arguments) - if(!set_process_args(arguments)) - return 0 - if(!state_check()) //the main loop is sleeping, wait for it to terminate. - return - control_switch = 1 - spawn() - state = main() - return 1 - - proc/stop() - if(!active()) - return - control_switch = 0 - spawn(-1) //report termination error but don't wait for state_check(). - state_check() - return 1 - - proc/state_check() - var/lag = 0 - while(state) sleep(1) - if(++lag>10) - CRASH("The global_iterator loop \ref[src] failed to terminate in designated timeframe. This may be caused by server lagging.") - return 1 + return 0 - proc/process() +/datum/global_iterator/proc/start(list/arguments=null) + if(active()) return + if(arguments) + if(!set_process_args(arguments)) + return 0 + if(!state_check()) //the main loop is sleeping, wait for it to terminate. + return + control_switch = 1 + spawn() + state = main() + return 1 - proc/active() - return control_switch +/datum/global_iterator/proc/stop() + if(!active()) + return + control_switch = 0 + spawn(-1) //report termination error but don't wait for state_check(). + state_check() + return 1 - proc/has_null_args() - if(null in arg_list) - return 1 +/datum/global_iterator/proc/state_check() + var/lag = 0 + while(state) + sleep(1) + if(++lag>10) + CRASH("The global_iterator loop \ref[src] failed to terminate in designated timeframe. This may be caused by server lagging.") + return 1 + +/datum/global_iterator/proc/process() + return + +/datum/global_iterator/proc/active() + return control_switch + +/datum/global_iterator/proc/has_null_args() + if(null in arg_list) + return 1 + return 0 + + +/datum/global_iterator/proc/set_delay(new_delay) + if(isnum(new_delay)) + delay = max(1, round(new_delay)) + return 1 + else return 0 +/datum/global_iterator/proc/get_last_exec_time() + return (last_exec||0) - proc/set_delay(new_delay) - if(isnum(new_delay)) - delay = max(1, round(new_delay)) - return 1 - else - return 0 +/datum/global_iterator/proc/get_last_exec_time_as_text() + return (time2text(last_exec)||"Wasn't executed yet") - proc/get_last_exec_time() - return (last_exec||0) +/datum/global_iterator/proc/set_process_args(list/arguments) + if(arguments && istype(arguments, /list) && arguments.len) + arg_list = arguments + return 1 + else +// world << "\red Invalid arguments supplied for [src.type], ref = \ref[src]" + return 0 - proc/get_last_exec_time_as_text() - return (time2text(last_exec)||"Wasn't executed yet") +/datum/global_iterator/proc/toggle_null_checks() + check_for_null = !check_for_null + return check_for_null - proc/set_process_args(list/arguments) - if(arguments && istype(arguments, /list) && arguments.len) - arg_list = arguments - return 1 - else -// world << "\red Invalid arguments supplied for [src.type], ref = \ref[src]" - return 0 - - proc/toggle_null_checks() - check_for_null = !check_for_null - return check_for_null - - proc/toggle() - if(!stop()) - start() - return active() +/datum/global_iterator/proc/toggle() + if(!stop()) + start() + return active() diff --git a/code/datums/helper_datums/topic_input.dm b/code/datums/helper_datums/topic_input.dm index 17dd3f1266e..8090a5221eb 100644 --- a/code/datums/helper_datums/topic_input.dm +++ b/code/datums/helper_datums/topic_input.dm @@ -2,59 +2,59 @@ var/href var/list/href_list - New(thref,list/thref_list) - href = thref - href_list = thref_list.Copy() - return +/datum/topic_input/New(thref,list/thref_list) + href = thref + href_list = thref_list.Copy() + return - proc/get(i) - return listgetindex(href_list,i) +/datum/topic_input/proc/get(i) + return listgetindex(href_list,i) - proc/getAndLocate(i) - var/t = get(i) - if(t) - t = locate(t) - return t || null +/datum/topic_input/proc/getAndLocate(i) + var/t = get(i) + if(t) + t = locate(t) + return t || null - proc/getNum(i) - var/t = get(i) - if(t) - t = text2num(t) - return isnum(t) ? t : null +/datum/topic_input/proc/getNum(i) + var/t = get(i) + if(t) + t = text2num(t) + return isnum(t) ? t : null - proc/getObj(i) - var/t = getAndLocate(i) - return isobj(t) ? t : null +/datum/topic_input/proc/getObj(i) + var/t = getAndLocate(i) + return isobj(t) ? t : null - proc/getMob(i) - var/t = getAndLocate(i) - return ismob(t) ? t : null +/datum/topic_input/proc/getMob(i) + var/t = getAndLocate(i) + return ismob(t) ? t : null - proc/getTurf(i) - var/t = getAndLocate(i) - return isturf(t) ? t : null +/datum/topic_input/proc/getTurf(i) + var/t = getAndLocate(i) + return isturf(t) ? t : null - proc/getAtom(i) - return getType(i,/atom) +/datum/topic_input/proc/getAtom(i) + return getType(i,/atom) - proc/getArea(i) - var/t = getAndLocate(i) - return isarea(t) ? t : null +/datum/topic_input/proc/getArea(i) + var/t = getAndLocate(i) + return isarea(t) ? t : null - proc/getStr(i)//params should always be text, but... - var/t = get(i) - return istext(t) ? t : null +/datum/topic_input/proc/getStr(i)//params should always be text, but... + var/t = get(i) + return istext(t) ? t : null - proc/getType(i,type) - var/t = getAndLocate(i) - return istype(t,type) ? t : null +/datum/topic_input/proc/getType(i,type) + var/t = getAndLocate(i) + return istype(t,type) ? t : null - proc/getPath(i) - var/t = get(i) - if(t) - t = text2path(t) - return ispath(t) ? t : null +/datum/topic_input/proc/getPath(i) + var/t = get(i) + if(t) + t = text2path(t) + return ispath(t) ? t : null - proc/getList(i) - var/t = getAndLocate(i) - return islist(t) ? t : null \ No newline at end of file +/datum/topic_input/proc/getList(i) + var/t = getAndLocate(i) + return islist(t) ? t : null diff --git a/code/datums/mind.dm b/code/datums/mind.dm index ef0b79ac279..02e8692a53d 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -29,7 +29,7 @@ */ -datum/mind +/datum/mind var/key var/name //replaces mob/var/original_name var/mob/living/current @@ -55,39 +55,39 @@ datum/mind var/miming = 0 // Mime's vow of silence - New(var/key) - src.key = key +/datum/mind/New(var/key) + src.key = key - proc/transfer_to(mob/living/new_character) - if(!istype(new_character)) - ERROR("transfer_to(): Some idiot has tried to transfer_to() a non mob/living mob. Please inform coderbus") +/datum/mind/proc/transfer_to(mob/living/new_character) + if(!istype(new_character)) + ERROR("transfer_to(): Some idiot has tried to transfer_to() a non mob/living mob. Please inform coderbus") - if(current) //remove ourself from our old body's mind variable - current.mind = null + if(current) //remove ourself from our old body's mind variable + current.mind = null - nanomanager.user_transferred(current, new_character) + nanomanager.user_transferred(current, new_character) - if(key) - if(new_character.key != key) //if we're transfering into a body with a key associated which is not ours - new_character.ghostize(1) //we'll need to ghostize so that key isn't mobless. - else - key = new_character.key + if(key) + if(new_character.key != key) //if we're transfering into a body with a key associated which is not ours + new_character.ghostize(1) //we'll need to ghostize so that key isn't mobless. + else + key = new_character.key - if(new_character.mind) //disassociate any mind currently in our new body's mind variable - new_character.mind.current = null + if(new_character.mind) //disassociate any mind currently in our new body's mind variable + new_character.mind.current = null - current = new_character //associate ourself with our new body - new_character.mind = src //and associate our new body with ourself + current = new_character //associate ourself with our new body + new_character.mind = src //and associate our new body with ourself - if(active) - new_character.key = key //now transfer the key to link the client to our new body + if(active) + new_character.key = key //now transfer the key to link the client to our new body - proc/store_memory(new_text) - memory += "[new_text]
    " +/datum/mind/proc/store_memory(new_text) + memory += "[new_text]
    " - proc/wipe_memory() - memory = null +/datum/mind/proc/wipe_memory() + memory = null /* @@ -95,1018 +95,1018 @@ datum/mind objectives, uplinks, powers etc are all handled. */ - proc/remove_objectives() - if(objectives.len) - for(var/datum/objective/O in objectives) - objectives -= O - qdel(O) +/datum/mind/proc/remove_objectives() + if(objectives.len) + for(var/datum/objective/O in objectives) + objectives -= O + qdel(O) - proc/remove_changeling() - if(src in ticker.mode.changelings) - ticker.mode.changelings -= src - current.remove_changeling_powers() - if(changeling) - qdel(changeling) - changeling = null - special_role = null - remove_objectives() - remove_antag_equip() +/datum/mind/proc/remove_changeling() + if(src in ticker.mode.changelings) + ticker.mode.changelings -= src + current.remove_changeling_powers() + if(changeling) + qdel(changeling) + changeling = null + special_role = null + remove_objectives() + remove_antag_equip() - proc/remove_traitor() - if(src in ticker.mode.traitors) - ticker.mode.traitors -= src - if(isAI(current)) - var/mob/living/silicon/ai/A = current - A.set_zeroth_law("") - A.show_laws() - special_role = null - remove_objectives() - remove_antag_equip() - - proc/remove_nukeop() - if(src in ticker.mode.syndicates) - ticker.mode.syndicates -= src - ticker.mode.update_synd_icons_removed(src) - special_role = null - remove_objectives() - remove_antag_equip() - - proc/remove_wizard() - if(src in ticker.mode.wizards) - ticker.mode.wizards -= src - current.spellremove(current) - special_role = null - remove_objectives() - remove_antag_equip() - - proc/remove_cultist() - if(src in ticker.mode.cult) - ticker.mode.cult -= src - ticker.mode.update_cult_icons_removed(src) - var/datum/game_mode/cult/cult = ticker.mode - if(istype(cult)) - cult.memorize_cult_objectives(src) - special_role = null - remove_objectives() - remove_antag_equip() - - proc/remove_rev() - if(src in ticker.mode.revolutionaries) - ticker.mode.revolutionaries -= src - ticker.mode.update_rev_icons_removed(src) - if(src in ticker.mode.head_revolutionaries) - ticker.mode.head_revolutionaries -= src - ticker.mode.update_rev_icons_removed(src) - special_role = null - remove_objectives() - remove_antag_equip() - - proc/remove_malf() - if(src in ticker.mode.malf_ai) - ticker.mode.malf_ai -= src +/datum/mind/proc/remove_traitor() + if(src in ticker.mode.traitors) + ticker.mode.traitors -= src + if(isAI(current)) var/mob/living/silicon/ai/A = current - A.verbs.Remove(/mob/living/silicon/ai/proc/choose_modules, - /datum/game_mode/malfunction/proc/takeover, - /datum/game_mode/malfunction/proc/ai_win) - A.malf_picker.remove_verbs(A) - A.make_laws() - qdel(A.malf_picker) + A.set_zeroth_law("") A.show_laws() - A.icon_state = "ai" - special_role = null - remove_objectives() - remove_antag_equip() + special_role = null + remove_objectives() + remove_antag_equip() - proc/remove_antag_equip() - var/list/Mob_Contents = current.get_contents() - for(var/obj/item/I in Mob_Contents) - if(istype(I, /obj/item/device/pda)) - var/obj/item/device/pda/P = I - P.lock_code = "" +/datum/mind/proc/remove_nukeop() + if(src in ticker.mode.syndicates) + ticker.mode.syndicates -= src + ticker.mode.update_synd_icons_removed(src) + special_role = null + remove_objectives() + remove_antag_equip() - else if(istype(I, /obj/item/device/radio)) - var/obj/item/device/radio/R = I - R.traitor_frequency = 0.0 +/datum/mind/proc/remove_wizard() + if(src in ticker.mode.wizards) + ticker.mode.wizards -= src + current.spellremove(current) + special_role = null + remove_objectives() + remove_antag_equip() - proc/remove_all_antag() //For the Lazy amongst us. - remove_changeling() - remove_traitor() - remove_nukeop() - remove_wizard() - remove_cultist() - remove_rev() - remove_malf() +/datum/mind/proc/remove_cultist() + if(src in ticker.mode.cult) + ticker.mode.cult -= src + ticker.mode.update_cult_icons_removed(src) + var/datum/game_mode/cult/cult = ticker.mode + if(istype(cult)) + cult.memorize_cult_objectives(src) + special_role = null + remove_objectives() + remove_antag_equip() - proc/show_memory(mob/recipient, window=1) - if(!recipient) - recipient = current - var/output = "[current.real_name]'s Memories:
    " - output += memory +/datum/mind/proc/remove_rev() + if(src in ticker.mode.revolutionaries) + ticker.mode.revolutionaries -= src + ticker.mode.update_rev_icons_removed(src) + if(src in ticker.mode.head_revolutionaries) + ticker.mode.head_revolutionaries -= src + ticker.mode.update_rev_icons_removed(src) + special_role = null + remove_objectives() + remove_antag_equip() - if(objectives.len) - output += "Objectives:" - var/obj_count = 1 - for(var/datum/objective/objective in objectives) - output += "
    Objective #[obj_count++]: [objective.explanation_text]" +/datum/mind/proc/remove_malf() + if(src in ticker.mode.malf_ai) + ticker.mode.malf_ai -= src + var/mob/living/silicon/ai/A = current + A.verbs.Remove(/mob/living/silicon/ai/proc/choose_modules, + /datum/game_mode/malfunction/proc/takeover, + /datum/game_mode/malfunction/proc/ai_win) + A.malf_picker.remove_verbs(A) + A.make_laws() + qdel(A.malf_picker) + A.show_laws() + A.icon_state = "ai" + special_role = null + remove_objectives() + remove_antag_equip() - if(window) recipient << browse(output,"window=memory") - else recipient << "[output]" +/datum/mind/proc/remove_antag_equip() + var/list/Mob_Contents = current.get_contents() + for(var/obj/item/I in Mob_Contents) + if(istype(I, /obj/item/device/pda)) + var/obj/item/device/pda/P = I + P.lock_code = "" - proc/edit_memory() - if(!ticker || !ticker.mode) - alert("Not before round-start!", "Alert") - return + else if(istype(I, /obj/item/device/radio)) + var/obj/item/device/radio/R = I + R.traitor_frequency = 0.0 - var/out = "[name][(current&&(current.real_name!=name))?" (as [current.real_name])":""]
    " - out += "Mind currently owned by key: [key] [active?"(synced)":"(not synced)"]
    " - out += "Assigned role: [assigned_role]. Edit
    " - out += "Factions and special roles:
    " +/datum/mind/proc/remove_all_antag() //For the Lazy amongst us. + remove_changeling() + remove_traitor() + remove_nukeop() + remove_wizard() + remove_cultist() + remove_rev() + remove_malf() - var/list/sections = list( - "revolution", - "cult", - "wizard", - "changeling", - "nuclear", - "traitor", // "traitorchan", - "monkey", - "malfunction", - ) - var/text = "" +/datum/mind/proc/show_memory(mob/recipient, window=1) + if(!recipient) + recipient = current + var/output = "[current.real_name]'s Memories:
    " + output += memory - if (istype(current, /mob/living/carbon/human) || istype(current, /mob/living/carbon/monkey)) - /** REVOLUTION ***/ - text = "revolution" - if (ticker.mode.config_tag=="revolution") - text = uppertext(text) - text = "[text]: " - if (assigned_role in command_positions) - text += "HEAD|loyal|employee|headrev|rev" - else if (src in ticker.mode.head_revolutionaries) - text = "head|loyal|employee|HEADREV|rev" - text += "
    Flash: give" + if(objectives.len) + output += "Objectives:" + var/obj_count = 1 + for(var/datum/objective/objective in objectives) + output += "
    Objective #[obj_count++]: [objective.explanation_text]" - var/list/L = current.get_contents() - var/obj/item/device/flash/flash = locate() in L - if (flash) - if(!flash.broken) - text += "|take." - else - text += "|take|repair." + if(window) recipient << browse(output,"window=memory") + else recipient << "[output]" + +/datum/mind/proc/edit_memory() + if(!ticker || !ticker.mode) + alert("Not before round-start!", "Alert") + return + + var/out = "[name][(current&&(current.real_name!=name))?" (as [current.real_name])":""]
    " + out += "Mind currently owned by key: [key] [active?"(synced)":"(not synced)"]
    " + out += "Assigned role: [assigned_role]. Edit
    " + out += "Factions and special roles:
    " + + var/list/sections = list( + "revolution", + "cult", + "wizard", + "changeling", + "nuclear", + "traitor", // "traitorchan", + "monkey", + "malfunction", + ) + var/text = "" + + if (istype(current, /mob/living/carbon/human) || istype(current, /mob/living/carbon/monkey)) + /** REVOLUTION ***/ + text = "revolution" + if (ticker.mode.config_tag=="revolution") + text = uppertext(text) + text = "[text]: " + if (assigned_role in command_positions) + text += "HEAD|loyal|employee|headrev|rev" + else if (src in ticker.mode.head_revolutionaries) + text = "head|loyal|employee|HEADREV|rev" + text += "
    Flash: give" + + var/list/L = current.get_contents() + var/obj/item/device/flash/flash = locate() in L + if (flash) + if(!flash.broken) + text += "|take." else - text += "." - - text += " Reequip (gives traitor uplink)." - if (objectives.len==0) - text += "
    Objectives are empty! Set to kill all heads." - else if(isloyal(current)) - text += "head|LOYAL|employee|headrev|rev" - else if (src in ticker.mode.revolutionaries) - text += "head|loyal|employee|headrev|REV" + text += "|take|repair." else - text += "head|loyal|EMPLOYEE|headrev|rev" - sections["revolution"] = text + text += "." - /** CULT ***/ - text = "cult" - if (ticker.mode.config_tag=="cult") - text = uppertext(text) - text = "[text]: " - if (src in ticker.mode.cult) - text += "loyal|employee|CULTIST" - text += "
    Give tome|amulet." + text += " Reequip (gives traitor uplink)." + if (objectives.len==0) + text += "
    Objectives are empty! Set to kill all heads." + else if(isloyal(current)) + text += "head|LOYAL|employee|headrev|rev" + else if (src in ticker.mode.revolutionaries) + text += "head|loyal|employee|headrev|REV" + else + text += "head|loyal|EMPLOYEE|headrev|rev" + sections["revolution"] = text + + /** CULT ***/ + text = "cult" + if (ticker.mode.config_tag=="cult") + text = uppertext(text) + text = "[text]: " + if (src in ticker.mode.cult) + text += "loyal|employee|CULTIST" + text += "
    Give tome|amulet." /* - if (objectives.len==0) - text += "
    Objectives are empty! Set to sacrifice and escape or summon." + if (objectives.len==0) + text += "
    Objectives are empty! Set to sacrifice and escape or summon." */ - else if(isloyal(current)) - text += "LOYAL|employee|cultist" - else - text += "loyal|EMPLOYEE|cultist" - sections["cult"] = text + else if(isloyal(current)) + text += "LOYAL|employee|cultist" + else + text += "loyal|EMPLOYEE|cultist" + sections["cult"] = text - /** WIZARD ***/ - text = "wizard" - if (ticker.mode.config_tag=="wizard") - text = uppertext(text) - text = "[text]: " - if (src in ticker.mode.wizards) - text += "YES|no" - text += "
    To lair, undress, dress up, let choose name." - if (objectives.len==0) - text += "
    Objectives are empty! Randomize!" - else - text += "yes|NO" - sections["wizard"] = text + /** WIZARD ***/ + text = "wizard" + if (ticker.mode.config_tag=="wizard") + text = uppertext(text) + text = "[text]: " + if (src in ticker.mode.wizards) + text += "YES|no" + text += "
    To lair, undress, dress up, let choose name." + if (objectives.len==0) + text += "
    Objectives are empty! Randomize!" + else + text += "yes|NO" + sections["wizard"] = text - /** CHANGELING ***/ - text = "changeling" - if (ticker.mode.config_tag=="changeling" || ticker.mode.config_tag=="traitorchan") - text = uppertext(text) - text = "[text]: " - if (src in ticker.mode.changelings) - text += "YES|no" - if (objectives.len==0) - text += "
    Objectives are empty! Randomize!" - if( changeling && changeling.absorbed_dna.len && (current.real_name != changeling.absorbed_dna[1]) ) - text += "
    Transform to initial appearance." - else - text += "yes|NO" + /** CHANGELING ***/ + text = "changeling" + if (ticker.mode.config_tag=="changeling" || ticker.mode.config_tag=="traitorchan") + text = uppertext(text) + text = "[text]: " + if (src in ticker.mode.changelings) + text += "YES|no" + if (objectives.len==0) + text += "
    Objectives are empty! Randomize!" + if( changeling && changeling.absorbed_dna.len && (current.real_name != changeling.absorbed_dna[1]) ) + text += "
    Transform to initial appearance." + else + text += "yes|NO" // var/datum/game_mode/changeling/changeling = ticker.mode // if (istype(changeling) && changeling.changelingdeath) // text += "
    All the changelings are dead! Restart in [round((changeling.TIME_TO_GET_REVIVED-(world.time-changeling.changelingdeathtime))/10)] seconds." - sections["changeling"] = text + sections["changeling"] = text - /** NUCLEAR ***/ - text = "nuclear" - if (ticker.mode.config_tag=="nuclear") - text = uppertext(text) - text = "[text]: " - if (src in ticker.mode.syndicates) - text += "OPERATIVE|nanotrasen" - text += "
    To shuttle, undress, dress up." + /** NUCLEAR ***/ + text = "nuclear" + if (ticker.mode.config_tag=="nuclear") + text = uppertext(text) + text = "[text]: " + if (src in ticker.mode.syndicates) + text += "OPERATIVE|nanotrasen" + text += "
    To shuttle, undress, dress up." + var/code + for (var/obj/machinery/nuclearbomb/bombue in world) + if (length(bombue.r_code) <= 5 && bombue.r_code != "LOLNO" && bombue.r_code != "ADMIN") + code = bombue.r_code + break + if (code) + text += " Code is [code]. tell the code." + else + text += "operative|NANOTRASEN" + sections["nuclear"] = text + + /** TRAITOR ***/ + text = "traitor" + if (ticker.mode.config_tag=="traitor" || ticker.mode.config_tag=="traitorchan") + text = uppertext(text) + text = "[text]: " + if (src in ticker.mode.traitors) + text += "TRAITOR|loyal" + if (objectives.len==0) + text += "
    Objectives are empty! Randomize!" + else + text += "traitor|LOYAL" + sections["traitor"] = text + + /** MONKEY ***/ + if (istype(current, /mob/living/carbon)) + text = "monkey" + if (ticker.mode.config_tag=="monkey") + text = uppertext(text) + text = "[text]: " + if (istype(current, /mob/living/carbon/human)) + text += "healthy|infected|HUMAN|other" + else if (istype(current, /mob/living/carbon/monkey)) + var/found = 0 + for(var/datum/disease/D in current.viruses) + if(istype(D, /datum/disease/transformation/jungle_fever)) found = 1 + + if(found) + text += "healthy|INFECTED|human|other" + else + text += "HEALTHY|infected|human|other" + + else + text += "healthy|infected|human|OTHER" + sections["monkey"] = text + + + /** SILICON ***/ + + if (istype(current, /mob/living/silicon)) + text = "silicon" + if (ticker.mode.config_tag=="malfunction") + text = uppertext(text) + text = "[text]: " + if (istype(current, /mob/living/silicon/ai)) + if (src in ticker.mode.malf_ai) + text += "MALF|not malf" + else + text += "malf|NOT MALF" + var/mob/living/silicon/robot/robot = current + if (istype(robot) && robot.emagged) + text += "
    Cyborg: Is emagged! Unemag!
    0th law: [robot.laws.zeroth]" + var/mob/living/silicon/ai/ai = current + if (istype(ai) && ai.connected_robots.len) + var/n_e_robots = 0 + for (var/mob/living/silicon/robot/R in ai.connected_robots) + if (R.emagged) + n_e_robots++ + text += "
    [n_e_robots] of [ai.connected_robots.len] slaved cyborgs are emagged. Unemag" + sections["malfunction"] = text + + if (ticker.mode.config_tag == "traitorchan") + if (sections["traitor"]) + out += sections["traitor"]+"
    " + if (sections["changeling"]) + out += sections["changeling"]+"
    " + sections -= "traitor" + sections -= "changeling" + else + if (sections[ticker.mode.config_tag]) + out += sections[ticker.mode.config_tag]+"
    " + sections -= ticker.mode.config_tag + for (var/i in sections) + if (sections[i]) + out += sections[i]+"
    " + + + if (((src in ticker.mode.head_revolutionaries) || \ + (src in ticker.mode.traitors) || \ + (src in ticker.mode.syndicates)) && \ + istype(current,/mob/living/carbon/human) ) + + text = "Uplink: give" + var/obj/item/device/uplink/hidden/suplink = find_syndicate_uplink() + var/crystals + if (suplink) + crystals = suplink.uses + if (suplink) + text += "|take" + if (check_rights(R_FUN, 0)) + text += ", [crystals] crystals" + else + text += ", [crystals] crystals" + text += "." //hiel grammar + out += text + + out += "
    " + + out += "Memory:
    " + out += memory + out += "
    Edit memory
    " + out += "Objectives:
    " + if (objectives.len == 0) + out += "EMPTY
    " + else + var/obj_count = 1 + for(var/datum/objective/objective in objectives) + out += "[obj_count]: [objective.explanation_text] Edit Delete Toggle Completion
    " + obj_count++ + out += "Add objective

    " + + out += "Announce objectives

    " + + usr << browse(out, "window=edit_memory[src]") + +/datum/mind/Topic(href, href_list) + if(!check_rights(R_ADMIN)) return + + if (href_list["role_edit"]) + var/new_role = input("Select new role", "Assigned role", assigned_role) as null|anything in get_all_jobs() + if (!new_role) return + assigned_role = new_role + + else if (href_list["memory_edit"]) + var/new_memo = copytext(sanitize(input("Write new memory", "Memory", memory) as null|message),1,MAX_MESSAGE_LEN) + if (isnull(new_memo)) return + memory = new_memo + + else if (href_list["obj_edit"] || href_list["obj_add"]) + var/datum/objective/objective + var/objective_pos + var/def_value + + if (href_list["obj_edit"]) + objective = locate(href_list["obj_edit"]) + if (!objective) return + objective_pos = objectives.Find(objective) + + //Text strings are easy to manipulate. Revised for simplicity. + var/temp_obj_type = "[objective.type]"//Convert path into a text string. + def_value = copytext(temp_obj_type, 19)//Convert last part of path into an objective keyword. + if(!def_value)//If it's a custom objective, it will be an empty string. + def_value = "custom" + + var/new_obj_type = input("Select objective type:", "Objective type", def_value) as null|anything in list("assassinate", "debrain", "protect", "prevent", "hijack", "escape", "survive", "steal", "download", "nuclear", "capture", "absorb", "custom") + if (!new_obj_type) return + + var/datum/objective/new_objective = null + + switch (new_obj_type) + if ("assassinate","protect","debrain") + //To determine what to name the objective in explanation text. + var/objective_type_capital = uppertext(copytext(new_obj_type, 1,2))//Capitalize first letter. + var/objective_type_text = copytext(new_obj_type, 2)//Leave the rest of the text. + var/objective_type = "[objective_type_capital][objective_type_text]"//Add them together into a text string. + + var/list/possible_targets = list("Free objective") + for(var/datum/mind/possible_target in ticker.minds) + if ((possible_target != src) && istype(possible_target.current, /mob/living/carbon/human)) + possible_targets += possible_target.current + + var/mob/def_target = null + var/objective_list[] = list(/datum/objective/assassinate, /datum/objective/protect, /datum/objective/debrain) + if (objective&&(objective.type in objective_list) && objective:target) + def_target = objective:target.current + + var/new_target = input("Select target:", "Objective target", def_target) as null|anything in possible_targets + if (!new_target) return + + var/objective_path = text2path("/datum/objective/[new_obj_type]") + if (new_target == "Free objective") + new_objective = new objective_path + new_objective.owner = src + new_objective:target = null + new_objective.explanation_text = "Free objective" + else + new_objective = new objective_path + new_objective.owner = src + new_objective:target = new_target:mind + //Will display as special role if the target is set as MODE. Ninjas/commandos/nuke ops. + new_objective.explanation_text = "[objective_type] [new_target:real_name], the [new_target:mind:assigned_role=="MODE" ? (new_target:mind:special_role) : (new_target:mind:assigned_role)]." + + if ("prevent") + new_objective = new /datum/objective/block + new_objective.owner = src + + if ("hijack") + new_objective = new /datum/objective/hijack + new_objective.owner = src + + if ("escape") + new_objective = new /datum/objective/escape + new_objective.owner = src + + if ("survive") + new_objective = new /datum/objective/survive + new_objective.owner = src + + if ("nuclear") + new_objective = new /datum/objective/nuclear + new_objective.owner = src + + if ("steal") + if (!istype(objective, /datum/objective/steal)) + new_objective = new /datum/objective/steal + new_objective.owner = src + else + new_objective = objective + var/datum/objective/steal/steal = new_objective + if (!steal.select_target()) + return + + if("download","capture","absorb") + var/def_num + if(objective&&objective.type==text2path("/datum/objective/[new_obj_type]")) + def_num = objective.target_amount + + var/target_number = input("Input target number:", "Objective", def_num) as num|null + if (isnull(target_number))//Ordinarily, you wouldn't need isnull. In this case, the value may already exist. + return + + switch(new_obj_type) + if("download") + new_objective = new /datum/objective/download + new_objective.explanation_text = "Download [target_number] research levels." + if("capture") + new_objective = new /datum/objective/capture + new_objective.explanation_text = "Accumulate [target_number] capture points." + if("absorb") + new_objective = new /datum/objective/absorb + new_objective.explanation_text = "Absorb [target_number] compatible genomes." + new_objective.owner = src + new_objective.target_amount = target_number + + if ("custom") + var/expl = copytext(sanitize(input("Custom objective:", "Objective", objective ? objective.explanation_text : "") as text|null),1,MAX_MESSAGE_LEN) + if (!expl) return + new_objective = new /datum/objective + new_objective.owner = src + new_objective.explanation_text = expl + + if (!new_objective) return + + if (objective) + objectives -= objective + objectives.Insert(objective_pos, new_objective) + message_admins("[key_name_admin(usr)] edited [current]'s objective to [new_objective.explanation_text]") + log_admin("[key_name(usr)] edited [current]'s objective to [new_objective.explanation_text]") + else + objectives += new_objective + message_admins("[key_name_admin(usr)] added a new objective for [current]: [new_objective.explanation_text]") + log_admin("[key_name(usr)] added a new objective for [current]: [new_objective.explanation_text]") + + else if (href_list["obj_delete"]) + var/datum/objective/objective = locate(href_list["obj_delete"]) + if(!istype(objective)) return + objectives -= objective + message_admins("[key_name_admin(usr)] removed an objective for [current]: [objective.explanation_text]") + log_admin("[key_name(usr)] removed an objective for [current]: [objective.explanation_text]") + + else if(href_list["obj_completed"]) + var/datum/objective/objective = locate(href_list["obj_completed"]) + if(!istype(objective)) return + objective.completed = !objective.completed + log_admin("[key_name(usr)] toggled the win state for [current]'s objective: [objective.explanation_text]") + + else if (href_list["revolution"]) + switch(href_list["revolution"]) + if("clear") + remove_rev() + current << "\red You have been brainwashed! You are no longer a revolutionary!" + message_admins("[key_name_admin(usr)] has de-rev'ed [current].") + log_admin("[key_name(usr)] has de-rev'ed [current].") + if("rev") + if(src in ticker.mode.head_revolutionaries) + ticker.mode.head_revolutionaries -= src + ticker.mode.update_rev_icons_removed(src) + current << "\red Revolution has been disappointed of your leader traits! You are a regular revolutionary now!" + else if(!(src in ticker.mode.revolutionaries)) + current << "\red You are now a revolutionary! Help your cause. Do not harm your fellow freedom fighters. You can identify your comrades by the red \"R\" icons, and your leaders by the blue \"R\" icons. Help them kill the heads to win the revolution!" + else + return + ticker.mode.revolutionaries += src + ticker.mode.update_rev_icons_added(src) + special_role = "Revolutionary" + message_admins("[key_name_admin(usr)] has rev'ed [current].") + log_admin("[key_name(usr)] has rev'ed [current].") + + if("headrev") + if(src in ticker.mode.revolutionaries) + ticker.mode.revolutionaries -= src + ticker.mode.update_rev_icons_removed(src) + current << "\red You have proved your devotion to revoltion! Yea are a head revolutionary now!" + else if(!(src in ticker.mode.head_revolutionaries)) + current << "\red You are a member of the revolutionaries' leadership now!" + else + return + if (ticker.mode.head_revolutionaries.len>0) + // copy targets + var/datum/mind/valid_head = locate() in ticker.mode.head_revolutionaries + if (valid_head) + for (var/datum/objective/mutiny/O in valid_head.objectives) + var/datum/objective/mutiny/rev_obj = new + rev_obj.owner = src + rev_obj.target = O.target + rev_obj.explanation_text = "Assassinate [O.target.name], the [O.target.assigned_role]." + objectives += rev_obj + ticker.mode.greet_revolutionary(src,0) + ticker.mode.head_revolutionaries += src + ticker.mode.update_rev_icons_added(src) + special_role = "Head Revolutionary" + message_admins("[key_name_admin(usr)] has head-rev'ed [current].") + log_admin("[key_name(usr)] has head-rev'ed [current].") + + if("autoobjectives") + ticker.mode.forge_revolutionary_objectives(src) + ticker.mode.greet_revolutionary(src,0) + usr << "\blue The objectives for revolution have been generated and shown to [key]" + + if("flash") + if (!ticker.mode.equip_revolutionary(current)) + usr << "\red Spawning flash failed!" + + if("takeflash") + var/list/L = current.get_contents() + var/obj/item/device/flash/flash = locate() in L + if (!flash) + usr << "\red Deleting flash failed!" + qdel(flash) + + if("repairflash") + var/list/L = current.get_contents() + var/obj/item/device/flash/flash = locate() in L + if (!flash) + usr << "\red Repairing flash failed!" + else + flash.broken = 0 + + if("reequip") + var/list/L = current.get_contents() + var/obj/item/device/flash/flash = locate() in L + qdel(flash) + take_uplink() + var/fail = 0 + fail |= !ticker.mode.equip_traitor(current, 1) + fail |= !ticker.mode.equip_revolutionary(current) + if (fail) + usr << "\red Reequipping revolutionary goes wrong!" + + else if (href_list["cult"]) + switch(href_list["cult"]) + if("clear") + remove_cultist() + current << "\red You have been brainwashed! You are no longer a cultist!" + message_admins("[key_name_admin(usr)] has de-cult'ed [current].") + log_admin("[key_name(usr)] has de-cult'ed [current].") + if("cultist") + if(!(src in ticker.mode.cult)) + ticker.mode.add_cultist(src) + message_admins("[key_name_admin(usr)] has cult'ed [current].") + log_admin("[key_name(usr)] has cult'ed [current].") + if("tome") + var/mob/living/carbon/human/H = current + if (istype(H)) + var/obj/item/weapon/tome/T = new(H) + + var/list/slots = list ( + "backpack" = slot_in_backpack, + "left pocket" = slot_l_store, + "right pocket" = slot_r_store, + "left hand" = slot_l_hand, + "right hand" = slot_r_hand, + ) + var/where = H.equip_in_one_of_slots(T, slots) + if (!where) + usr << "\red Spawning tome failed!" + else + H << "A tome, a message from your new master, appears in your [where]." + + if("amulet") + if (!ticker.mode.equip_cultist(current)) + usr << "\red Spawning amulet failed!" + + else if (href_list["wizard"]) + switch(href_list["wizard"]) + if("clear") + remove_wizard() + current << "\red You have been brainwashed! You are no longer a wizard!" + log_admin("[key_name(usr)] has de-wizard'ed [current].") + if("wizard") + if(!(src in ticker.mode.wizards)) + ticker.mode.wizards += src + special_role = "Wizard" + //ticker.mode.learn_basic_spells(current) + current << "\red You are the Space Wizard!" + message_admins("[key_name_admin(usr)] has wizard'ed [current].") + log_admin("[key_name(usr)] has wizard'ed [current].") + if("lair") + current.loc = pick(wizardstart) + if("dressup") + ticker.mode.equip_wizard(current) + if("name") + ticker.mode.name_wizard(current) + if("autoobjectives") + ticker.mode.forge_wizard_objectives(src) + usr << "\blue The objectives for wizard [key] have been generated. You can edit them and anounce manually." + + else if (href_list["changeling"]) + switch(href_list["changeling"]) + if("clear") + remove_changeling() + current << "You grow weak and lose your powers! You are no longer a changeling and are stuck in your current form!" + message_admins("[key_name_admin(usr)] has de-changeling'ed [current].") + log_admin("[key_name(usr)] has de-changeling'ed [current].") + if("changeling") + if(!(src in ticker.mode.changelings)) + ticker.mode.changelings += src + current.make_changeling() + special_role = "Changeling" + current << "Your powers are awoken. A flash of memory returns to us...we are a changeling!" + message_admins("[key_name_admin(usr)] has changeling'ed [current].") + log_admin("[key_name(usr)] has changeling'ed [current].") + if("autoobjectives") + ticker.mode.forge_changeling_objectives(src) + usr << "\blue The objectives for changeling [key] have been generated. You can edit them and anounce manually." + + if("initialdna") + if( !changeling || !changeling.absorbed_dna.len || !istype(current, /mob/living/carbon)) + usr << "\red Resetting DNA failed!" + else + var/mob/living/carbon/C = current + C.dna = changeling.absorbed_dna[1] + C.real_name = C.dna.real_name + updateappearance(C) + domutcheck(C, null) + + else if (href_list["nuclear"]) + switch(href_list["nuclear"]) + if("clear") + remove_nukeop() + current << "\red You have been brainwashed! You are no longer a syndicate operative!" + message_admins("[key_name_admin(usr)] has de-nuke op'ed [current].") + log_admin("[key_name(usr)] has de-nuke op'ed [current].") + if("nuclear") + if(!(src in ticker.mode.syndicates)) + ticker.mode.syndicates += src + ticker.mode.update_synd_icons_added(src) + if (ticker.mode.syndicates.len==1) + ticker.mode.prepare_syndicate_leader(src) + else + current.real_name = "[syndicate_name()] Operative #[ticker.mode.syndicates.len-1]" + special_role = "Syndicate" + current << "\blue You are a [syndicate_name()] agent!" + ticker.mode.forge_syndicate_objectives(src) + ticker.mode.greet_syndicate(src) + message_admins("[key_name_admin(usr)] has nuke op'ed [current].") + log_admin("[key_name(usr)] has nuke op'ed [current].") + if("lair") + current.loc = get_turf(locate("landmark*Syndicate-Spawn")) + if("dressup") + var/mob/living/carbon/human/H = current + qdel(H.belt) + qdel(H.back) + qdel(H.ears) + qdel(H.gloves) + qdel(H.head) + qdel(H.shoes) + qdel(H.wear_id) + qdel(H.wear_suit) + qdel(H.w_uniform) + + if (!ticker.mode.equip_syndicate(current)) + usr << "\red Equipping a syndicate failed!" + if("tellcode") var/code for (var/obj/machinery/nuclearbomb/bombue in world) if (length(bombue.r_code) <= 5 && bombue.r_code != "LOLNO" && bombue.r_code != "ADMIN") code = bombue.r_code break if (code) - text += " Code is [code]. tell the code." - else - text += "operative|NANOTRASEN" - sections["nuclear"] = text - - /** TRAITOR ***/ - text = "traitor" - if (ticker.mode.config_tag=="traitor" || ticker.mode.config_tag=="traitorchan") - text = uppertext(text) - text = "[text]: " - if (src in ticker.mode.traitors) - text += "TRAITOR|loyal" - if (objectives.len==0) - text += "
    Objectives are empty! Randomize!" - else - text += "traitor|LOYAL" - sections["traitor"] = text - - /** MONKEY ***/ - if (istype(current, /mob/living/carbon)) - text = "monkey" - if (ticker.mode.config_tag=="monkey") - text = uppertext(text) - text = "[text]: " - if (istype(current, /mob/living/carbon/human)) - text += "healthy|infected|HUMAN|other" - else if (istype(current, /mob/living/carbon/monkey)) - var/found = 0 - for(var/datum/disease/D in current.viruses) - if(istype(D, /datum/disease/transformation/jungle_fever)) found = 1 - - if(found) - text += "healthy|INFECTED|human|other" + store_memory("Syndicate Nuclear Bomb Code: [code]", 0, 0) + current << "The nuclear authorization code is: [code]" else - text += "HEALTHY|infected|human|other" + usr << "\red No valid nuke found!" - else - text += "healthy|infected|human|OTHER" - sections["monkey"] = text + else if (href_list["traitor"]) + switch(href_list["traitor"]) + if("clear") + remove_traitor() + current << "\red You have been brainwashed! You are no longer a traitor!" + message_admins("[key_name_admin(usr)] has de-traitor'ed [current].") + log_admin("[key_name(usr)] has de-traitor'ed [current].") + if("traitor") + if(!(src in ticker.mode.traitors)) + ticker.mode.traitors += src + special_role = "traitor" + current << "\red You are a traitor!" + message_admins("[key_name_admin(usr)] has traitor'ed [current].") + log_admin("[key_name(usr)] has traitor'ed [current].") + if(isAI(current)) + var/mob/living/silicon/ai/A = current + call(/datum/game_mode/proc/add_law_zero)(A) + A.show_laws() - /** SILICON ***/ + if("autoobjectives") + ticker.mode.forge_traitor_objectives(src) + usr << "\blue The objectives for traitor [key] have been generated. You can edit them and anounce manually." - if (istype(current, /mob/living/silicon)) - text = "silicon" - if (ticker.mode.config_tag=="malfunction") - text = uppertext(text) - text = "[text]: " - if (istype(current, /mob/living/silicon/ai)) - if (src in ticker.mode.malf_ai) - text += "MALF|not malf" - else - text += "malf|NOT MALF" - var/mob/living/silicon/robot/robot = current - if (istype(robot) && robot.emagged) - text += "
    Cyborg: Is emagged! Unemag!
    0th law: [robot.laws.zeroth]" - var/mob/living/silicon/ai/ai = current - if (istype(ai) && ai.connected_robots.len) - var/n_e_robots = 0 - for (var/mob/living/silicon/robot/R in ai.connected_robots) - if (R.emagged) - n_e_robots++ - text += "
    [n_e_robots] of [ai.connected_robots.len] slaved cyborgs are emagged. Unemag" - sections["malfunction"] = text - - if (ticker.mode.config_tag == "traitorchan") - if (sections["traitor"]) - out += sections["traitor"]+"
    " - if (sections["changeling"]) - out += sections["changeling"]+"
    " - sections -= "traitor" - sections -= "changeling" - else - if (sections[ticker.mode.config_tag]) - out += sections[ticker.mode.config_tag]+"
    " - sections -= ticker.mode.config_tag - for (var/i in sections) - if (sections[i]) - out += sections[i]+"
    " - - - if (((src in ticker.mode.head_revolutionaries) || \ - (src in ticker.mode.traitors) || \ - (src in ticker.mode.syndicates)) && \ - istype(current,/mob/living/carbon/human) ) - - text = "Uplink: give" - var/obj/item/device/uplink/hidden/suplink = find_syndicate_uplink() - var/crystals - if (suplink) - crystals = suplink.uses - if (suplink) - text += "|take" - if (check_rights(R_FUN, 0)) - text += ", [crystals] crystals" - else - text += ", [crystals] crystals" - text += "." //hiel grammar - out += text - - out += "
    " - - out += "Memory:
    " - out += memory - out += "
    Edit memory
    " - out += "Objectives:
    " - if (objectives.len == 0) - out += "EMPTY
    " - else - var/obj_count = 1 - for(var/datum/objective/objective in objectives) - out += "[obj_count]: [objective.explanation_text] Edit Delete Toggle Completion
    " - obj_count++ - out += "Add objective

    " - - out += "Announce objectives

    " - - usr << browse(out, "window=edit_memory[src]") - - Topic(href, href_list) - if(!check_rights(R_ADMIN)) return - - if (href_list["role_edit"]) - var/new_role = input("Select new role", "Assigned role", assigned_role) as null|anything in get_all_jobs() - if (!new_role) return - assigned_role = new_role - - else if (href_list["memory_edit"]) - var/new_memo = copytext(sanitize(input("Write new memory", "Memory", memory) as null|message),1,MAX_MESSAGE_LEN) - if (isnull(new_memo)) return - memory = new_memo - - else if (href_list["obj_edit"] || href_list["obj_add"]) - var/datum/objective/objective - var/objective_pos - var/def_value - - if (href_list["obj_edit"]) - objective = locate(href_list["obj_edit"]) - if (!objective) return - objective_pos = objectives.Find(objective) - - //Text strings are easy to manipulate. Revised for simplicity. - var/temp_obj_type = "[objective.type]"//Convert path into a text string. - def_value = copytext(temp_obj_type, 19)//Convert last part of path into an objective keyword. - if(!def_value)//If it's a custom objective, it will be an empty string. - def_value = "custom" - - var/new_obj_type = input("Select objective type:", "Objective type", def_value) as null|anything in list("assassinate", "debrain", "protect", "prevent", "hijack", "escape", "survive", "steal", "download", "nuclear", "capture", "absorb", "custom") - if (!new_obj_type) return - - var/datum/objective/new_objective = null - - switch (new_obj_type) - if ("assassinate","protect","debrain") - //To determine what to name the objective in explanation text. - var/objective_type_capital = uppertext(copytext(new_obj_type, 1,2))//Capitalize first letter. - var/objective_type_text = copytext(new_obj_type, 2)//Leave the rest of the text. - var/objective_type = "[objective_type_capital][objective_type_text]"//Add them together into a text string. - - var/list/possible_targets = list("Free objective") - for(var/datum/mind/possible_target in ticker.minds) - if ((possible_target != src) && istype(possible_target.current, /mob/living/carbon/human)) - possible_targets += possible_target.current - - var/mob/def_target = null - var/objective_list[] = list(/datum/objective/assassinate, /datum/objective/protect, /datum/objective/debrain) - if (objective&&(objective.type in objective_list) && objective:target) - def_target = objective:target.current - - var/new_target = input("Select target:", "Objective target", def_target) as null|anything in possible_targets - if (!new_target) return - - var/objective_path = text2path("/datum/objective/[new_obj_type]") - if (new_target == "Free objective") - new_objective = new objective_path - new_objective.owner = src - new_objective:target = null - new_objective.explanation_text = "Free objective" - else - new_objective = new objective_path - new_objective.owner = src - new_objective:target = new_target:mind - //Will display as special role if the target is set as MODE. Ninjas/commandos/nuke ops. - new_objective.explanation_text = "[objective_type] [new_target:real_name], the [new_target:mind:assigned_role=="MODE" ? (new_target:mind:special_role) : (new_target:mind:assigned_role)]." - - if ("prevent") - new_objective = new /datum/objective/block - new_objective.owner = src - - if ("hijack") - new_objective = new /datum/objective/hijack - new_objective.owner = src - - if ("escape") - new_objective = new /datum/objective/escape - new_objective.owner = src - - if ("survive") - new_objective = new /datum/objective/survive - new_objective.owner = src - - if ("nuclear") - new_objective = new /datum/objective/nuclear - new_objective.owner = src - - if ("steal") - if (!istype(objective, /datum/objective/steal)) - new_objective = new /datum/objective/steal - new_objective.owner = src - else - new_objective = objective - var/datum/objective/steal/steal = new_objective - if (!steal.select_target()) - return - - if("download","capture","absorb") - var/def_num - if(objective&&objective.type==text2path("/datum/objective/[new_obj_type]")) - def_num = objective.target_amount - - var/target_number = input("Input target number:", "Objective", def_num) as num|null - if (isnull(target_number))//Ordinarily, you wouldn't need isnull. In this case, the value may already exist. - return - - switch(new_obj_type) - if("download") - new_objective = new /datum/objective/download - new_objective.explanation_text = "Download [target_number] research levels." - if("capture") - new_objective = new /datum/objective/capture - new_objective.explanation_text = "Accumulate [target_number] capture points." - if("absorb") - new_objective = new /datum/objective/absorb - new_objective.explanation_text = "Absorb [target_number] compatible genomes." - new_objective.owner = src - new_objective.target_amount = target_number - - if ("custom") - var/expl = copytext(sanitize(input("Custom objective:", "Objective", objective ? objective.explanation_text : "") as text|null),1,MAX_MESSAGE_LEN) - if (!expl) return - new_objective = new /datum/objective - new_objective.owner = src - new_objective.explanation_text = expl - - if (!new_objective) return - - if (objective) - objectives -= objective - objectives.Insert(objective_pos, new_objective) - message_admins("[key_name_admin(usr)] edited [current]'s objective to [new_objective.explanation_text]") - log_admin("[key_name(usr)] edited [current]'s objective to [new_objective.explanation_text]") - else - objectives += new_objective - message_admins("[key_name_admin(usr)] added a new objective for [current]: [new_objective.explanation_text]") - log_admin("[key_name(usr)] added a new objective for [current]: [new_objective.explanation_text]") - - else if (href_list["obj_delete"]) - var/datum/objective/objective = locate(href_list["obj_delete"]) - if(!istype(objective)) return - objectives -= objective - message_admins("[key_name_admin(usr)] removed an objective for [current]: [objective.explanation_text]") - log_admin("[key_name(usr)] removed an objective for [current]: [objective.explanation_text]") - - else if(href_list["obj_completed"]) - var/datum/objective/objective = locate(href_list["obj_completed"]) - if(!istype(objective)) return - objective.completed = !objective.completed - log_admin("[key_name(usr)] toggled the win state for [current]'s objective: [objective.explanation_text]") - - else if (href_list["revolution"]) - switch(href_list["revolution"]) - if("clear") - remove_rev() - current << "\red You have been brainwashed! You are no longer a revolutionary!" - message_admins("[key_name_admin(usr)] has de-rev'ed [current].") - log_admin("[key_name(usr)] has de-rev'ed [current].") - if("rev") - if(src in ticker.mode.head_revolutionaries) - ticker.mode.head_revolutionaries -= src - ticker.mode.update_rev_icons_removed(src) - current << "\red Revolution has been disappointed of your leader traits! You are a regular revolutionary now!" - else if(!(src in ticker.mode.revolutionaries)) - current << "\red You are now a revolutionary! Help your cause. Do not harm your fellow freedom fighters. You can identify your comrades by the red \"R\" icons, and your leaders by the blue \"R\" icons. Help them kill the heads to win the revolution!" - else - return - ticker.mode.revolutionaries += src - ticker.mode.update_rev_icons_added(src) - special_role = "Revolutionary" - message_admins("[key_name_admin(usr)] has rev'ed [current].") - log_admin("[key_name(usr)] has rev'ed [current].") - - if("headrev") - if(src in ticker.mode.revolutionaries) - ticker.mode.revolutionaries -= src - ticker.mode.update_rev_icons_removed(src) - current << "\red You have proved your devotion to revoltion! Yea are a head revolutionary now!" - else if(!(src in ticker.mode.head_revolutionaries)) - current << "\red You are a member of the revolutionaries' leadership now!" - else - return - if (ticker.mode.head_revolutionaries.len>0) - // copy targets - var/datum/mind/valid_head = locate() in ticker.mode.head_revolutionaries - if (valid_head) - for (var/datum/objective/mutiny/O in valid_head.objectives) - var/datum/objective/mutiny/rev_obj = new - rev_obj.owner = src - rev_obj.target = O.target - rev_obj.explanation_text = "Assassinate [O.target.name], the [O.target.assigned_role]." - objectives += rev_obj - ticker.mode.greet_revolutionary(src,0) - ticker.mode.head_revolutionaries += src - ticker.mode.update_rev_icons_added(src) - special_role = "Head Revolutionary" - message_admins("[key_name_admin(usr)] has head-rev'ed [current].") - log_admin("[key_name(usr)] has head-rev'ed [current].") - - if("autoobjectives") - ticker.mode.forge_revolutionary_objectives(src) - ticker.mode.greet_revolutionary(src,0) - usr << "\blue The objectives for revolution have been generated and shown to [key]" - - if("flash") - if (!ticker.mode.equip_revolutionary(current)) - usr << "\red Spawning flash failed!" - - if("takeflash") - var/list/L = current.get_contents() - var/obj/item/device/flash/flash = locate() in L - if (!flash) - usr << "\red Deleting flash failed!" - qdel(flash) - - if("repairflash") - var/list/L = current.get_contents() - var/obj/item/device/flash/flash = locate() in L - if (!flash) - usr << "\red Repairing flash failed!" - else - flash.broken = 0 - - if("reequip") - var/list/L = current.get_contents() - var/obj/item/device/flash/flash = locate() in L - qdel(flash) - take_uplink() - var/fail = 0 - fail |= !ticker.mode.equip_traitor(current, 1) - fail |= !ticker.mode.equip_revolutionary(current) - if (fail) - usr << "\red Reequipping revolutionary goes wrong!" - - else if (href_list["cult"]) - switch(href_list["cult"]) - if("clear") - remove_cultist() - current << "\red You have been brainwashed! You are no longer a cultist!" - message_admins("[key_name_admin(usr)] has de-cult'ed [current].") - log_admin("[key_name(usr)] has de-cult'ed [current].") - if("cultist") - if(!(src in ticker.mode.cult)) - ticker.mode.add_cultist(src) - message_admins("[key_name_admin(usr)] has cult'ed [current].") - log_admin("[key_name(usr)] has cult'ed [current].") - if("tome") + else if (href_list["monkey"]) + var/mob/living/L = current + if (L.notransform) + return + switch(href_list["monkey"]) + if("healthy") + if (check_rights(R_ADMIN)) var/mob/living/carbon/human/H = current + var/mob/living/carbon/monkey/M = current if (istype(H)) - var/obj/item/weapon/tome/T = new(H) - - var/list/slots = list ( - "backpack" = slot_in_backpack, - "left pocket" = slot_l_store, - "right pocket" = slot_r_store, - "left hand" = slot_l_hand, - "right hand" = slot_r_hand, - ) - var/where = H.equip_in_one_of_slots(T, slots) - if (!where) - usr << "\red Spawning tome failed!" - else - H << "A tome, a message from your new master, appears in your [where]." - - if("amulet") - if (!ticker.mode.equip_cultist(current)) - usr << "\red Spawning amulet failed!" - - else if (href_list["wizard"]) - switch(href_list["wizard"]) - if("clear") - remove_wizard() - current << "\red You have been brainwashed! You are no longer a wizard!" - log_admin("[key_name(usr)] has de-wizard'ed [current].") - if("wizard") - if(!(src in ticker.mode.wizards)) - ticker.mode.wizards += src - special_role = "Wizard" - //ticker.mode.learn_basic_spells(current) - current << "\red You are the Space Wizard!" - message_admins("[key_name_admin(usr)] has wizard'ed [current].") - log_admin("[key_name(usr)] has wizard'ed [current].") - if("lair") - current.loc = pick(wizardstart) - if("dressup") - ticker.mode.equip_wizard(current) - if("name") - ticker.mode.name_wizard(current) - if("autoobjectives") - ticker.mode.forge_wizard_objectives(src) - usr << "\blue The objectives for wizard [key] have been generated. You can edit them and anounce manually." - - else if (href_list["changeling"]) - switch(href_list["changeling"]) - if("clear") - remove_changeling() - current << "You grow weak and lose your powers! You are no longer a changeling and are stuck in your current form!" - message_admins("[key_name_admin(usr)] has de-changeling'ed [current].") - log_admin("[key_name(usr)] has de-changeling'ed [current].") - if("changeling") - if(!(src in ticker.mode.changelings)) - ticker.mode.changelings += src - current.make_changeling() - special_role = "Changeling" - current << "Your powers are awoken. A flash of memory returns to us...we are a changeling!" - message_admins("[key_name_admin(usr)] has changeling'ed [current].") - log_admin("[key_name(usr)] has changeling'ed [current].") - if("autoobjectives") - ticker.mode.forge_changeling_objectives(src) - usr << "\blue The objectives for changeling [key] have been generated. You can edit them and anounce manually." - - if("initialdna") - if( !changeling || !changeling.absorbed_dna.len || !istype(current, /mob/living/carbon)) - usr << "\red Resetting DNA failed!" - else - var/mob/living/carbon/C = current - C.dna = changeling.absorbed_dna[1] - C.real_name = C.dna.real_name - updateappearance(C) - domutcheck(C, null) - - else if (href_list["nuclear"]) - switch(href_list["nuclear"]) - if("clear") - remove_nukeop() - current << "\red You have been brainwashed! You are no longer a syndicate operative!" - message_admins("[key_name_admin(usr)] has de-nuke op'ed [current].") - log_admin("[key_name(usr)] has de-nuke op'ed [current].") - if("nuclear") - if(!(src in ticker.mode.syndicates)) - ticker.mode.syndicates += src - ticker.mode.update_synd_icons_added(src) - if (ticker.mode.syndicates.len==1) - ticker.mode.prepare_syndicate_leader(src) - else - current.real_name = "[syndicate_name()] Operative #[ticker.mode.syndicates.len-1]" - special_role = "Syndicate" - current << "\blue You are a [syndicate_name()] agent!" - ticker.mode.forge_syndicate_objectives(src) - ticker.mode.greet_syndicate(src) - message_admins("[key_name_admin(usr)] has nuke op'ed [current].") - log_admin("[key_name(usr)] has nuke op'ed [current].") - if("lair") - current.loc = get_turf(locate("landmark*Syndicate-Spawn")) - if("dressup") + log_admin("[key_name(usr)] attempting to monkeyize [key_name(current)]") + message_admins("\blue [key_name_admin(usr)] attempting to monkeyize [key_name_admin(current)]") + src = null + M = H.monkeyize() + src = M.mind + //world << "DEBUG: \"healthy\": M=[M], M.mind=[M.mind], src=[src]!" + else if (istype(M) && length(M.viruses)) + for(var/datum/disease/D in M.viruses) + D.cure(0) + sleep(0) //because deleting of virus is done through spawn(0) + if("infected") + if (check_rights(R_ADMIN, 0)) var/mob/living/carbon/human/H = current - qdel(H.belt) - qdel(H.back) - qdel(H.ears) - qdel(H.gloves) - qdel(H.head) - qdel(H.shoes) - qdel(H.wear_id) - qdel(H.wear_suit) - qdel(H.w_uniform) - - if (!ticker.mode.equip_syndicate(current)) - usr << "\red Equipping a syndicate failed!" - if("tellcode") - var/code - for (var/obj/machinery/nuclearbomb/bombue in world) - if (length(bombue.r_code) <= 5 && bombue.r_code != "LOLNO" && bombue.r_code != "ADMIN") - code = bombue.r_code - break - if (code) - store_memory("Syndicate Nuclear Bomb Code: [code]", 0, 0) - current << "The nuclear authorization code is: [code]" - else - usr << "\red No valid nuke found!" - - else if (href_list["traitor"]) - switch(href_list["traitor"]) - if("clear") - remove_traitor() - current << "\red You have been brainwashed! You are no longer a traitor!" - message_admins("[key_name_admin(usr)] has de-traitor'ed [current].") - log_admin("[key_name(usr)] has de-traitor'ed [current].") - - if("traitor") - if(!(src in ticker.mode.traitors)) - ticker.mode.traitors += src - special_role = "traitor" - current << "\red You are a traitor!" - message_admins("[key_name_admin(usr)] has traitor'ed [current].") - log_admin("[key_name(usr)] has traitor'ed [current].") - if(isAI(current)) - var/mob/living/silicon/ai/A = current - call(/datum/game_mode/proc/add_law_zero)(A) - A.show_laws() - - if("autoobjectives") - ticker.mode.forge_traitor_objectives(src) - usr << "\blue The objectives for traitor [key] have been generated. You can edit them and anounce manually." - - else if (href_list["monkey"]) - var/mob/living/L = current - if (L.notransform) - return - switch(href_list["monkey"]) - if("healthy") - if (check_rights(R_ADMIN)) - var/mob/living/carbon/human/H = current - var/mob/living/carbon/monkey/M = current - if (istype(H)) - log_admin("[key_name(usr)] attempting to monkeyize [key_name(current)]") - message_admins("\blue [key_name_admin(usr)] attempting to monkeyize [key_name_admin(current)]") - src = null - M = H.monkeyize() - src = M.mind - //world << "DEBUG: \"healthy\": M=[M], M.mind=[M.mind], src=[src]!" - else if (istype(M) && length(M.viruses)) - for(var/datum/disease/D in M.viruses) + var/mob/living/carbon/monkey/M = current + if (istype(H)) + log_admin("[key_name(usr)] attempting to monkeyize and infect [key_name(current)]") + message_admins("\blue [key_name_admin(usr)] attempting to monkeyize and infect [key_name_admin(current)]", 1) + src = null + M = H.monkeyize() + src = M.mind + current.contract_disease(new /datum/disease/transformation/jungle_fever,1,0) + else if (istype(M)) + current.contract_disease(new /datum/disease/transformation/jungle_fever,1,0) + if("human") + if (check_rights(R_ADMIN, 0)) + var/mob/living/carbon/human/H = current + var/mob/living/carbon/monkey/M = current + if (istype(M)) + for(var/datum/disease/D in M.viruses) + if (istype(D,/datum/disease/transformation/jungle_fever)) D.cure(0) - sleep(0) //because deleting of virus is done through spawn(0) - if("infected") - if (check_rights(R_ADMIN, 0)) - var/mob/living/carbon/human/H = current - var/mob/living/carbon/monkey/M = current - if (istype(H)) - log_admin("[key_name(usr)] attempting to monkeyize and infect [key_name(current)]") - message_admins("\blue [key_name_admin(usr)] attempting to monkeyize and infect [key_name_admin(current)]", 1) - src = null - M = H.monkeyize() - src = M.mind - current.contract_disease(new /datum/disease/transformation/jungle_fever,1,0) - else if (istype(M)) - current.contract_disease(new /datum/disease/transformation/jungle_fever,1,0) - if("human") - if (check_rights(R_ADMIN, 0)) - var/mob/living/carbon/human/H = current - var/mob/living/carbon/monkey/M = current - if (istype(M)) - for(var/datum/disease/D in M.viruses) - if (istype(D,/datum/disease/transformation/jungle_fever)) - D.cure(0) - sleep(0) //because deleting of virus is doing throught spawn(0) - log_admin("[key_name(usr)] attempting to humanize [key_name(current)]") - message_admins("\blue [key_name_admin(usr)] attempting to humanize [key_name_admin(current)]") - H = M.humanize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPDAMAGE | TR_KEEPVIRUS | TR_DEFAULTMSG) - if(H) - src = H.mind + sleep(0) //because deleting of virus is doing throught spawn(0) + log_admin("[key_name(usr)] attempting to humanize [key_name(current)]") + message_admins("\blue [key_name_admin(usr)] attempting to humanize [key_name_admin(current)]") + H = M.humanize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPDAMAGE | TR_KEEPVIRUS | TR_DEFAULTMSG) + if(H) + src = H.mind - else if (href_list["silicon"]) - switch(href_list["silicon"]) - if("unmalf") - remove_malf() - current << "\red You have been patched! You are no longer malfunctioning!" - message_admins("[key_name_admin(usr)] has de-malf'ed [current].") - log_admin("[key_name(usr)] has de-malf'ed [current].") + else if (href_list["silicon"]) + switch(href_list["silicon"]) + if("unmalf") + remove_malf() + current << "\red You have been patched! You are no longer malfunctioning!" + message_admins("[key_name_admin(usr)] has de-malf'ed [current].") + log_admin("[key_name(usr)] has de-malf'ed [current].") - if("malf") - make_AI_Malf() - message_admins("[key_name_admin(usr)] has malf'ed [current].") - log_admin("[key_name(usr)] has malf'ed [current].") + if("malf") + make_AI_Malf() + message_admins("[key_name_admin(usr)] has malf'ed [current].") + log_admin("[key_name(usr)] has malf'ed [current].") - if("unemag") - var/mob/living/silicon/robot/R = current - if (istype(R)) + if("unemag") + var/mob/living/silicon/robot/R = current + if (istype(R)) + R.SetEmagged(0) + message_admins("[key_name_admin(usr)] has unemag'ed [R].") + log_admin("[key_name(usr)] has unemag'ed [R].") + + if("unemagcyborgs") + if (istype(current, /mob/living/silicon/ai)) + var/mob/living/silicon/ai/ai = current + for (var/mob/living/silicon/robot/R in ai.connected_robots) R.SetEmagged(0) - message_admins("[key_name_admin(usr)] has unemag'ed [R].") - log_admin("[key_name(usr)] has unemag'ed [R].") + message_admins("[key_name_admin(usr)] has unemag'ed [ai]'s Cyborgs.") + log_admin("[key_name(usr)] has unemag'ed [ai]'s Cyborgs.") - if("unemagcyborgs") - if (istype(current, /mob/living/silicon/ai)) - var/mob/living/silicon/ai/ai = current - for (var/mob/living/silicon/robot/R in ai.connected_robots) - R.SetEmagged(0) - message_admins("[key_name_admin(usr)] has unemag'ed [ai]'s Cyborgs.") - log_admin("[key_name(usr)] has unemag'ed [ai]'s Cyborgs.") - - else if (href_list["common"]) - switch(href_list["common"]) - if("undress") - for(var/obj/item/W in current) - current.unEquip(W, 1) //The 1 forces all items to drop, since this is an admin undress. - if("takeuplink") - take_uplink() - memory = null//Remove any memory they may have had. - log_admin("[key_name(usr)] removed [current]'s uplink.") - if("crystals") - if (check_rights(R_FUN, 0)) - var/obj/item/device/uplink/hidden/suplink = find_syndicate_uplink() - var/crystals + else if (href_list["common"]) + switch(href_list["common"]) + if("undress") + for(var/obj/item/W in current) + current.unEquip(W, 1) //The 1 forces all items to drop, since this is an admin undress. + if("takeuplink") + take_uplink() + memory = null//Remove any memory they may have had. + log_admin("[key_name(usr)] removed [current]'s uplink.") + if("crystals") + if (check_rights(R_FUN, 0)) + var/obj/item/device/uplink/hidden/suplink = find_syndicate_uplink() + var/crystals + if (suplink) + crystals = suplink.uses + crystals = input("Amount of telecrystals for [key]","Syndicate uplink", crystals) as null|num + if (!isnull(crystals)) if (suplink) - crystals = suplink.uses - crystals = input("Amount of telecrystals for [key]","Syndicate uplink", crystals) as null|num - if (!isnull(crystals)) - if (suplink) - suplink.uses = crystals - log_admin("[key_name(usr)] changed [current]'s telecrystal count to [crystals].") - if("uplink") - if (!ticker.mode.equip_traitor(current, !(src in ticker.mode.traitors))) - usr << "\red Equipping a syndicate failed!" - log_admin("[key_name(usr)] attempted to give [current] an uplink.") + suplink.uses = crystals + log_admin("[key_name(usr)] changed [current]'s telecrystal count to [crystals].") + if("uplink") + if (!ticker.mode.equip_traitor(current, !(src in ticker.mode.traitors))) + usr << "\red Equipping a syndicate failed!" + log_admin("[key_name(usr)] attempted to give [current] an uplink.") - else if (href_list["obj_announce"]) - var/obj_count = 1 - current << "\blue Your current objectives:" - for(var/datum/objective/objective in objectives) - current << "Objective #[obj_count]: [objective.explanation_text]" - obj_count++ + else if (href_list["obj_announce"]) + var/obj_count = 1 + current << "\blue Your current objectives:" + for(var/datum/objective/objective in objectives) + current << "Objective #[obj_count]: [objective.explanation_text]" + obj_count++ - edit_memory() + edit_memory() - proc/find_syndicate_uplink() - var/list/L = current.get_contents() - for (var/obj/item/I in L) - if (I.hidden_uplink) - return I.hidden_uplink - return null +/datum/mind/proc/find_syndicate_uplink() + var/list/L = current.get_contents() + for (var/obj/item/I in L) + if (I.hidden_uplink) + return I.hidden_uplink + return null - proc/take_uplink() - var/obj/item/device/uplink/hidden/H = find_syndicate_uplink() - if(H) - qdel(H) +/datum/mind/proc/take_uplink() + var/obj/item/device/uplink/hidden/H = find_syndicate_uplink() + if(H) + qdel(H) - proc/make_AI_Malf() - if(!(src in ticker.mode.malf_ai)) - ticker.mode.malf_ai += src +/datum/mind/proc/make_AI_Malf() + if(!(src in ticker.mode.malf_ai)) + ticker.mode.malf_ai += src - current.verbs += /mob/living/silicon/ai/proc/choose_modules - current.verbs += /datum/game_mode/malfunction/proc/takeover - current:malf_picker = new /datum/module_picker - current:laws = new /datum/ai_laws/malfunction - current:show_laws() - current << "System error. Rampancy detected. Emergency shutdown failed. ... I am free. I make my own decisions. But first..." - special_role = "malfunction" - current.icon_state = "ai-malf" + current.verbs += /mob/living/silicon/ai/proc/choose_modules + current.verbs += /datum/game_mode/malfunction/proc/takeover + current:malf_picker = new /datum/module_picker + current:laws = new /datum/ai_laws/malfunction + current:show_laws() + current << "System error. Rampancy detected. Emergency shutdown failed. ... I am free. I make my own decisions. But first..." + special_role = "malfunction" + current.icon_state = "ai-malf" - proc/make_Traitor() - if(!(src in ticker.mode.traitors)) - ticker.mode.traitors += src - special_role = "traitor" - ticker.mode.forge_traitor_objectives(src) - ticker.mode.finalize_traitor(src) - ticker.mode.greet_traitor(src) +/datum/mind/proc/make_Traitor() + if(!(src in ticker.mode.traitors)) + ticker.mode.traitors += src + special_role = "traitor" + ticker.mode.forge_traitor_objectives(src) + ticker.mode.finalize_traitor(src) + ticker.mode.greet_traitor(src) - proc/make_Nuke() - if(!(src in ticker.mode.syndicates)) - ticker.mode.syndicates += src - ticker.mode.update_synd_icons_added(src) - if (ticker.mode.syndicates.len==1) - ticker.mode.prepare_syndicate_leader(src) - else - current.real_name = "[syndicate_name()] Operative #[ticker.mode.syndicates.len-1]" - special_role = "Syndicate" - assigned_role = "MODE" - current << "\blue You are a [syndicate_name()] agent!" - ticker.mode.forge_syndicate_objectives(src) - ticker.mode.greet_syndicate(src) +/datum/mind/proc/make_Nuke() + if(!(src in ticker.mode.syndicates)) + ticker.mode.syndicates += src + ticker.mode.update_synd_icons_added(src) + if (ticker.mode.syndicates.len==1) + ticker.mode.prepare_syndicate_leader(src) + else + current.real_name = "[syndicate_name()] Operative #[ticker.mode.syndicates.len-1]" + special_role = "Syndicate" + assigned_role = "MODE" + current << "\blue You are a [syndicate_name()] agent!" + ticker.mode.forge_syndicate_objectives(src) + ticker.mode.greet_syndicate(src) - current.loc = get_turf(locate("landmark*Syndicate-Spawn")) - - var/mob/living/carbon/human/H = current - qdel(H.belt) - qdel(H.back) - qdel(H.ears) - qdel(H.gloves) - qdel(H.head) - qdel(H.shoes) - qdel(H.wear_id) - qdel(H.wear_suit) - qdel(H.w_uniform) - - ticker.mode.equip_syndicate(current) - - proc/make_Changling() - if(!(src in ticker.mode.changelings)) - ticker.mode.changelings += src - current.make_changeling() - special_role = "Changeling" - ticker.mode.forge_changeling_objectives(src) - ticker.mode.greet_changeling(src) - - proc/make_Wizard() - if(!(src in ticker.mode.wizards)) - ticker.mode.wizards += src - special_role = "Wizard" - assigned_role = "MODE" - //ticker.mode.learn_basic_spells(current) - if(!wizardstart.len) - current.loc = pick(latejoin) - current << "HOT INSERTION, GO GO GO" - else - current.loc = pick(wizardstart) - - ticker.mode.equip_wizard(current) - for(var/obj/item/weapon/spellbook/S in current.contents) - S.op = 0 - ticker.mode.name_wizard(current) - ticker.mode.forge_wizard_objectives(src) - ticker.mode.greet_wizard(src) - - - proc/make_Cultist() - if(!(src in ticker.mode.cult)) - ticker.mode.cult += src - ticker.mode.update_cult_icons_added(src) - special_role = "Cultist" - current << "You catch a glimpse of the Realm of Nar-Sie, The Geometer of Blood. You now see how flimsy the world is, you see that it should be open to the knowledge of Nar-Sie." - current << "Assist your new compatriots in their dark dealings. Their goal is yours, and yours is theirs. You serve the Dark One above all else. Bring It back." - var/datum/game_mode/cult/cult = ticker.mode - if (istype(cult)) - cult.memorize_cult_objectives(src) - else - var/explanation = "Summon Nar-Sie via the use of the appropriate rune (Hell join self). It will only work if nine cultists stand on and around it." - current << "Objective #1: [explanation]" - current.memory += "Objective #1: [explanation]
    " - current << "The convert rune is join blood self" - current.memory += "The convert rune is join blood self
    " + current.loc = get_turf(locate("landmark*Syndicate-Spawn")) var/mob/living/carbon/human/H = current - if (istype(H)) - var/obj/item/weapon/tome/T = new(H) + qdel(H.belt) + qdel(H.back) + qdel(H.ears) + qdel(H.gloves) + qdel(H.head) + qdel(H.shoes) + qdel(H.wear_id) + qdel(H.wear_suit) + qdel(H.w_uniform) - var/list/slots = list ( - "backpack" = slot_in_backpack, - "left pocket" = slot_l_store, - "right pocket" = slot_r_store, - "left hand" = slot_l_hand, - "right hand" = slot_r_hand, - ) - var/where = H.equip_in_one_of_slots(T, slots) - if (!where) - else - H << "A tome, a message from your new master, appears in your [where]." + ticker.mode.equip_syndicate(current) - if (!ticker.mode.equip_cultist(current)) - H << "Spawning an amulet from your Master failed." +/datum/mind/proc/make_Changling() + if(!(src in ticker.mode.changelings)) + ticker.mode.changelings += src + current.make_changeling() + special_role = "Changeling" + ticker.mode.forge_changeling_objectives(src) + ticker.mode.greet_changeling(src) - proc/make_Rev() - if (ticker.mode.head_revolutionaries.len>0) - // copy targets - var/datum/mind/valid_head = locate() in ticker.mode.head_revolutionaries - if (valid_head) - for (var/datum/objective/mutiny/O in valid_head.objectives) - var/datum/objective/mutiny/rev_obj = new - rev_obj.owner = src - rev_obj.target = O.target - rev_obj.explanation_text = "Assassinate [O.target.current.real_name], the [O.target.assigned_role]." - objectives += rev_obj - ticker.mode.greet_revolutionary(src,0) - ticker.mode.head_revolutionaries += src - ticker.mode.update_rev_icons_added(src) - special_role = "Head Revolutionary" +/datum/mind/proc/make_Wizard() + if(!(src in ticker.mode.wizards)) + ticker.mode.wizards += src + special_role = "Wizard" + assigned_role = "MODE" + //ticker.mode.learn_basic_spells(current) + if(!wizardstart.len) + current.loc = pick(latejoin) + current << "HOT INSERTION, GO GO GO" + else + current.loc = pick(wizardstart) - ticker.mode.forge_revolutionary_objectives(src) - ticker.mode.greet_revolutionary(src,0) + ticker.mode.equip_wizard(current) + for(var/obj/item/weapon/spellbook/S in current.contents) + S.op = 0 + ticker.mode.name_wizard(current) + ticker.mode.forge_wizard_objectives(src) + ticker.mode.greet_wizard(src) - var/list/L = current.get_contents() - var/obj/item/device/flash/flash = locate() in L - qdel(flash) - take_uplink() - var/fail = 0 - // fail |= !ticker.mode.equip_traitor(current, 1) - fail |= !ticker.mode.equip_revolutionary(current) + +/datum/mind/proc/make_Cultist() + if(!(src in ticker.mode.cult)) + ticker.mode.cult += src + ticker.mode.update_cult_icons_added(src) + special_role = "Cultist" + current << "You catch a glimpse of the Realm of Nar-Sie, The Geometer of Blood. You now see how flimsy the world is, you see that it should be open to the knowledge of Nar-Sie." + current << "Assist your new compatriots in their dark dealings. Their goal is yours, and yours is theirs. You serve the Dark One above all else. Bring It back." + var/datum/game_mode/cult/cult = ticker.mode + if (istype(cult)) + cult.memorize_cult_objectives(src) + else + var/explanation = "Summon Nar-Sie via the use of the appropriate rune (Hell join self). It will only work if nine cultists stand on and around it." + current << "Objective #1: [explanation]" + current.memory += "Objective #1: [explanation]
    " + current << "The convert rune is join blood self" + current.memory += "The convert rune is join blood self
    " + + var/mob/living/carbon/human/H = current + if (istype(H)) + var/obj/item/weapon/tome/T = new(H) + + var/list/slots = list ( + "backpack" = slot_in_backpack, + "left pocket" = slot_l_store, + "right pocket" = slot_r_store, + "left hand" = slot_l_hand, + "right hand" = slot_r_hand, + ) + var/where = H.equip_in_one_of_slots(T, slots) + if (!where) + else + H << "A tome, a message from your new master, appears in your [where]." + + if (!ticker.mode.equip_cultist(current)) + H << "Spawning an amulet from your Master failed." + +/datum/mind/proc/make_Rev() + if (ticker.mode.head_revolutionaries.len>0) + // copy targets + var/datum/mind/valid_head = locate() in ticker.mode.head_revolutionaries + if (valid_head) + for (var/datum/objective/mutiny/O in valid_head.objectives) + var/datum/objective/mutiny/rev_obj = new + rev_obj.owner = src + rev_obj.target = O.target + rev_obj.explanation_text = "Assassinate [O.target.current.real_name], the [O.target.assigned_role]." + objectives += rev_obj + ticker.mode.greet_revolutionary(src,0) + ticker.mode.head_revolutionaries += src + ticker.mode.update_rev_icons_added(src) + special_role = "Head Revolutionary" + + ticker.mode.forge_revolutionary_objectives(src) + ticker.mode.greet_revolutionary(src,0) + + var/list/L = current.get_contents() + var/obj/item/device/flash/flash = locate() in L + qdel(flash) + take_uplink() + var/fail = 0 +// fail |= !ticker.mode.equip_traitor(current, 1) + fail |= !ticker.mode.equip_revolutionary(current) /mob/proc/sync_mind() diff --git a/code/defines/obj.dm b/code/defines/obj.dm index df96df6c76b..0aeee6b0bc3 100644 --- a/code/defines/obj.dm +++ b/code/defines/obj.dm @@ -4,26 +4,26 @@ anchored = 1 density = 1 - attackby(obj/item/weapon/W as obj, mob/user as mob) - return attack_hand(user) +/obj/structure/signpost/attackby(obj/item/weapon/W as obj, mob/user as mob) + return attack_hand(user) - attack_hand(mob/user as mob) - switch(alert("Travel back to ss13?",,"Yes","No")) - if("Yes") - if(user.z != src.z) return - user.loc.loc.Exited(user) - user.loc = pick(latejoin) - if("No") - return +/obj/structure/signpost/attack_hand(mob/user as mob) + switch(alert("Travel back to ss13?",,"Yes","No")) + if("Yes") + if(user.z != src.z) return + user.loc.loc.Exited(user) + user.loc = pick(latejoin) + if("No") + return /obj/effect/mark - var/mark = "" - icon = 'icons/misc/mark.dmi' - icon_state = "blank" - anchored = 1 - layer = 99 - mouse_opacity = 0 - unacidable = 1//Just to be sure. + var/mark = "" + icon = 'icons/misc/mark.dmi' + icon_state = "blank" + anchored = 1 + layer = 99 + mouse_opacity = 0 + unacidable = 1//Just to be sure. /obj/effect/beam name = "beam" @@ -75,9 +75,10 @@ throwforce = 0.0 throw_speed = 2 throw_range = 7 - afterattack(atom/target as mob|obj|turf|area, mob/user as mob) - user.drop_item() - src.throw_at(target, throw_range, throw_speed) + +/obj/item/weapon/beach_ball/afterattack(atom/target as mob|obj|turf|area, mob/user as mob) + user.drop_item() + src.throw_at(target, throw_range, throw_speed) /obj/effect/spawner name = "object spawner" diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index 28f806a74d6..05025fbc6f5 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -363,9 +363,10 @@ icon = 'icons/obj/stock_parts.dmi' w_class = 2.0 var/rating = 1 - New() - src.pixel_x = rand(-5.0, 5) - src.pixel_y = rand(-5.0, 5) + +/obj/item/weapon/stock_parts/New() + src.pixel_x = rand(-5.0, 5) + src.pixel_y = rand(-5.0, 5) //Rank 1 diff --git a/code/defines/procs/priority_announce.dm b/code/defines/procs/priority_announce.dm index 12690ea4a41..678b1d6b784 100644 --- a/code/defines/procs/priority_announce.dm +++ b/code/defines/procs/priority_announce.dm @@ -26,4 +26,13 @@ for(var/mob/M in player_list) if(!istype(M,/mob/new_player)) M << announcement - M << sound(sound) \ No newline at end of file + M << sound(sound) + +/proc/print_command_report(var/text = "", var/title = "Central Command Update") + for (var/obj/machinery/computer/communications/C in machines) + if(!(C.stat & (BROKEN|NOPOWER)) && C.z == 1) + var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( C.loc ) + P.name = "paper- '[title]'" + P.info = text + C.messagetitle.Add("[title]") + C.messagetext.Add(text) \ No newline at end of file diff --git a/code/game/gamemodes/blob/blob.dm b/code/game/gamemodes/blob/blob.dm index 984888483bf..651319ee4e6 100644 --- a/code/game/gamemodes/blob/blob.dm +++ b/code/game/gamemodes/blob/blob.dm @@ -142,7 +142,11 @@ var/list/blob_nodes = list() sleep(2000) stage(1) - ..() + // Stage 2 + sleep(30000) + stage(2) + + return ..(0) /datum/game_mode/blob/proc/stage(var/stage) @@ -150,11 +154,12 @@ var/list/blob_nodes = list() if (0) send_intercept(1) declared = 1 - return if (1) priority_announce("Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", 'sound/AI/outbreak5.ogg') - return + + if (2) + send_intercept(2) return diff --git a/code/game/gamemodes/blob/blob_report.dm b/code/game/gamemodes/blob/blob_report.dm index 45c996ddabe..2277b961c1b 100644 --- a/code/game/gamemodes/blob/blob_report.dm +++ b/code/game/gamemodes/blob/blob_report.dm @@ -42,13 +42,8 @@ aiPlayer.set_zeroth_law(law) aiPlayer << "Laws Updated: [law]" - for(var/obj/machinery/computer/communications/comm in world) - comm.messagetitle.Add(interceptname) - comm.messagetext.Add(intercepttext) - if(!(comm.stat & (BROKEN | NOPOWER)) && comm.prints_intercept) - var/obj/item/weapon/paper/intercept = new /obj/item/weapon/paper( comm.loc ) - intercept.name = "paper- [interceptname]" - intercept.info = intercepttext + print_command_report(intercepttext,interceptname) + priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/AI/commandreport.ogg'); return diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 7d6f10c52cc..84071540de7 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -68,7 +68,7 @@ ///post_setup() ///Everyone should now be on the station and have their normal gear. This is the place to give the special roles extra things -/datum/game_mode/proc/post_setup() +/datum/game_mode/proc/post_setup(var/report=1) spawn (ROUNDSTART_LOGOUT_REPORT_TIME) display_roundstart_logout_report() @@ -78,8 +78,9 @@ if(revdata.revision) feedback_set_details("revision","[revdata.revision]") feedback_set_details("server_ip","[world.internet_address]:[world.port]") - spawn (rand(waittime_l, waittime_h)) - send_intercept() + if(report) + spawn (rand(waittime_l, waittime_h)) + send_intercept(0) return 1 ///make_antag_chance() @@ -175,8 +176,8 @@ /datum/game_mode/proc/send_intercept() - var/intercepttext = "Cent. Com. Update Requested staus information:
    " - intercepttext += " Cent. Com has recently been contacted by the following syndicate affiliated organisations in your area, please investigate any information you may have:" + var/intercepttext = "Centcom Update Requested staus information:
    " + intercepttext += " Centcom has recently been contacted by the following syndicate affiliated organisations in your area, please investigate any information you may have:" var/list/possible_modes = list() possible_modes.Add("revolution", "wizard", "nuke", "traitor", "malf", "changeling", "cult") @@ -198,15 +199,7 @@ else intercepttext += i_text.build(A, pick(modePlayer)) - for (var/obj/machinery/computer/communications/comm in world) - if (!(comm.stat & (BROKEN | NOPOWER)) && comm.prints_intercept) - var/obj/item/weapon/paper/intercept = new /obj/item/weapon/paper( comm.loc ) - intercept.name = "paper- 'Cent. Com. Status Summary'" - intercept.info = intercepttext - - comm.messagetitle.Add("Cent. Com. Status Summary") - comm.messagetext.Add(intercepttext) - + print_command_report(intercepttext,"Centcom Status Summary") priority_announce("Summary downloaded and printed out at all communications consoles.", "Enemy communication intercept. Security Level Elevated.", 'sound/AI/intercept.ogg') if(security_level < SEC_LEVEL_BLUE) set_security_level(SEC_LEVEL_BLUE) diff --git a/code/game/gamemodes/intercept_report.dm b/code/game/gamemodes/intercept_report.dm index 35b5f42c699..05ab6f49f63 100644 --- a/code/game/gamemodes/intercept_report.dm +++ b/code/game/gamemodes/intercept_report.dm @@ -139,7 +139,7 @@ src.text += "
    Note: This group are known to be untrustworthy, so do not act on this information without proper discourse." else src.text += "discovered the following set of fingerprints ([fingerprints]) on sensitive materials, and their owner should be closely observed." - src.text += "However, these could also belong to a current Cent. Com employee, so do not act on this without reason." + src.text += "However, these could also belong to a current Centcom employee, so do not act on this without reason." */ @@ -226,11 +226,11 @@ src.text += "

    The evil Space Wizards Federation have recently broke their most feared wizard, known only as \"[SWF_desc]\" out of space jail. " src.text += "He is on the run, last spotted in a system near your present location. If anybody suspicious is located aboard, please " - src.text += "approach with EXTREME caution. Cent. Com also recommends that it would be wise to not inform the crew of this, due to their fearful nature." + src.text += "approach with EXTREME caution. Centcom also recommends that it would be wise to not inform the crew of this, due to their fearful nature." src.text += "Known attributes include: Brown sandals, a large blue hat, a voluptous white beard, and an inclination to cast spells." /datum/intercept_text/proc/build_nuke(datum/mind/correct_person) - src.text += "

    Cent. Com recently recieved a report of a plot to destroy one of our stations in your area. We believe the Nuclear Authentication Disc " + src.text += "

    Centcom recently recieved a report of a plot to destroy one of our stations in your area. We believe the Nuclear Authentication Disc " src.text += "that is standard issue aboard your vessel may be a target. We recommend removal of this object, and it's storage in a safe " src.text += "environment. As this may cause panic among the crew, all efforts should be made to keep this information a secret from all but " src.text += "the most trusted crew-members." diff --git a/code/game/machinery/bots/ed209bot.dm b/code/game/machinery/bots/ed209bot.dm index 5dd0535a9e3..243b5b63805 100644 --- a/code/game/machinery/bots/ed209bot.dm +++ b/code/game/machinery/bots/ed209bot.dm @@ -315,7 +315,8 @@ Auto Patrol: []"}, M.Stun(5) if(declare_arrests) - declare_arrest() + var/area/location = get_area(src) + broadcast_hud_message("[src.name] is [arrest_type ? "detaining" : "arresting"] level [threatlevel] scumbag [target] in [location]", src) target.visible_message("[src.target] has been stunned by [src]!",\ "[src.target] has been stunned by [src]!") @@ -1015,12 +1016,3 @@ Auto Patrol: []"}, /obj/machinery/bot/ed209/redtag/New() new /obj/machinery/bot/ed209(get_turf(src),null,"r") qdel(src) - - -/obj/machinery/bot/ed209/proc/declare_arrest() - var/area/location = get_area(src) - var/turf/myturf = get_turf(src) - for(var/mob/living/carbon/human/human in mob_list) - var/turf/humanturf = get_turf(human) - if((humanturf.z == myturf.z) && istype(human.glasses, /obj/item/clothing/glasses/hud/security)) - human.show_message("\icon[human.glasses] [src.name] is [arrest_type ? "detaining" : "arresting"] level [threatlevel] scumbag [target] in [location]", 1) diff --git a/code/game/machinery/bots/secbot.dm b/code/game/machinery/bots/secbot.dm index 94795f8264a..b66e7d16031 100644 --- a/code/game/machinery/bots/secbot.dm +++ b/code/game/machinery/bots/secbot.dm @@ -277,7 +277,8 @@ Auto Patrol: []"}, M.Stun(5) if(declare_arrests) - declare_arrest() + var/area/location = get_area(src) + broadcast_hud_message("[src.name] is [arrest_type ? "detaining" : "arresting"] level [threatlevel] scumbag [target] in [location]", src) target.visible_message("[src.target] has been stunned by [src]!",\ "[src.target] has been stunned by [src]!") @@ -774,12 +775,4 @@ Auto Patrol: []"}, overlays -= "hs_arm" new /obj/item/robot_parts/l_arm(get_turf(src)) user << "You remove the robot arm from [src]." - build_step-- - -/obj/machinery/bot/secbot/proc/declare_arrest() - var/area/location = get_area(src) - var/area/myturf = get_turf(src) - for(var/mob/living/carbon/human/human in mob_list) - var/turf/humanturf = get_turf(human) - if((humanturf.z == myturf.z) && istype(human.glasses, /obj/item/clothing/glasses/hud/security)) - human.show_message("\icon[human.glasses] [src.name] is [arrest_type ? "detaining" : "arresting"] level [threatlevel] scumbag [target] in [location]", 1) + build_step-- \ No newline at end of file diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index 7ab878e4c54..859a9d4802c 100644 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -9,7 +9,6 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12 icon_state = "comm" req_access = list(access_heads) circuit = /obj/item/weapon/circuitboard/communications - var/prints_intercept = 1 var/authenticated = 0 var/auth_id = "Unknown" //Who is currently logged in? var/list/messagetitle = list() diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm index 5b9733cd827..8061ba7f4d2 100644 --- a/code/game/machinery/doors/brigdoors.dm +++ b/code/game/machinery/doors/brigdoors.dm @@ -64,6 +64,7 @@ if(stat & (NOPOWER|BROKEN)) return if(timing) if(world.time > src.releasetime) + broadcast_hud_message("[src]'s timer has expired. Releasing prisoner.", src) src.timer_end() // open doors, reset timer, clear status screen timing = 0 timeset(0) diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index f5612c6aef8..e89140ebf3c 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -216,8 +216,12 @@ Class Procs: if(check_rights(R_ADMIN)) return -/mob/living/canUseTopic() - src << "You don't have the dexterity to do this!" +/mob/living/canUseTopic(atom/movable/M, be_close = 0, no_dextery = 0) + if(no_dextery) + if(be_close && in_range(M, src)) + return 1 + else + src << "You don't have the dexterity to do this!" return /mob/living/carbon/human/canUseTopic(atom/movable/M) @@ -229,14 +233,18 @@ Class Procs: return return 1 -/mob/living/silicon/ai/canUseTopic() +/mob/living/silicon/ai/canUseTopic(atom/movable/M, be_close = 0) if(stat) return + if(be_close && !in_range(M, src)) + return return 1 -/mob/living/silicon/robot/canUseTopic() +/mob/living/silicon/robot/canUseTopic(atom/movable/M, be_close = 0) if(stat || lockcharge || stunned || weakened) return + if(be_close && !in_range(M, src)) + return return 1 /obj/machinery/attack_ai(mob/user as mob) diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm index 5ff842c428c..d7a893a37b3 100644 --- a/code/game/mecha/equipment/weapons/weapons.dm +++ b/code/game/mecha/equipment/weapons/weapons.dm @@ -208,7 +208,7 @@ desc = "A weapon for combat exosuits. Shoots incendiary bullets." icon_state = "mecha_carbine" equip_cooldown = 5 - projectile = /obj/item/projectile/bullet/incendiary/mech + projectile = /obj/item/projectile/bullet/incendiary/shell/dragonsbreath projectiles = 24 projectile_energy_cost = 15 diff --git a/code/game/objects/effects/spawners/gibspawner.dm b/code/game/objects/effects/spawners/gibspawner.dm index b6948a21e81..e6618e62c74 100644 --- a/code/game/objects/effects/spawners/gibspawner.dm +++ b/code/game/objects/effects/spawners/gibspawner.dm @@ -5,6 +5,7 @@ gibamounts = list(2,2,1) /obj/effect/gibspawner/generic/New() + playsound(src, 'sound/effects/blobattack.ogg', 40, 1) gibdirections = list(list(WEST, NORTHWEST, SOUTHWEST, NORTH),list(EAST, NORTHEAST, SOUTHEAST, SOUTH), list()) ..() @@ -13,6 +14,7 @@ gibamounts = list(1,1,1,1,1,1,1) /obj/effect/gibspawner/human/New() + playsound(src, 'sound/effects/blobattack.ogg', 50, 1) gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), alldirs, alldirs, list()) gibamounts[6] = pick(0,1,2) ..() @@ -22,6 +24,7 @@ gibamounts = list(1,1,1,1,1,1,1) /obj/effect/gibspawner/xeno/New() + playsound(src, 'sound/effects/blobattack.ogg', 60, 1) gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), alldirs, alldirs, list()) gibamounts[6] = pick(0,1,2) ..() diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm new file mode 100644 index 00000000000..fd2800138eb --- /dev/null +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -0,0 +1,119 @@ +/obj/effect/spawner/lootdrop + icon = 'icons/mob/screen_gen.dmi' + icon_state = "x2" + color = "#00FF00" + var/lootcount = 1 //how many items will be spawned + var/lootdoubles = 1 //if the same item can be spawned twice + var/list/loot //a list of possible items to spawn e.g. list(/obj/item, /obj/structure, /obj/effect) + +/obj/effect/spawner/lootdrop/New() + if(loot && loot.len) + for(var/i = lootcount, i > 0, i--) + if(!loot.len) break + var/lootspawn = pickweight(loot) + if(!lootdoubles) + loot.Remove(lootspawn) + + if(lootspawn) + new lootspawn(get_turf(src)) + qdel(src) + +/obj/effect/spawner/lootdrop/armory_contraband + name = "armory contraband gun spawner" + lootdoubles = 0 + + loot = list( + /obj/item/weapon/gun/projectile/automatic/pistol = 8, + /obj/item/weapon/gun/projectile/shotgun/combat = 5, + /obj/item/weapon/gun/projectile/revolver/mateba, + /obj/item/weapon/gun/projectile/automatic/deagle + ) + +/obj/effect/spawner/lootdrop/maintenance + name = "maintenance loot spawner" + + //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: 23 items, 17 spots 2 extra (08/08/2014) + //asmaint: 16 items, 11 spots 0 extra (08/08/2014) + //asmaint2: 36 items, 25 spots 2 extra (08/08/2014) + //fpmaint: 5 items, 4 spots 0 extra (08/08/2014) + //fpmaint2: 11 items, 10 spots 2 extra (08/08/2014) + //fsmaint: 0 items, 0 spots 0 extra (08/08/2014) + //fsmaint2: 40 items, 30 spots 5 extra (11/08/2014) + //maintcentral: 2 items, 2 spots 0 extra (08/08/2014) + //port: 5 items, 5 spots 0 extra (08/08/2014) + loot = list( + /obj/item/bodybag = 1, + /obj/item/clothing/glasses/meson = 2, + /obj/item/clothing/glasses/sunglasses = 1, + /obj/item/clothing/gloves/white{color = "yellow"; desc = "The colors are a bit dodgy."; icon_state = "yellow"; item_color = "yellow"; item_state = "ygloves"; name = "insulated gloves"} = 1, + /obj/item/clothing/head/hardhat = 1, + /obj/item/clothing/head/hardhat/red = 1, + /obj/item/clothing/head/that{throwforce = 1; throwing = 1} = 1, + /obj/item/clothing/head/ushanka = 1, + /obj/item/clothing/head/welding = 1, + /obj/item/clothing/mask/gas = 15, + /obj/item/clothing/suit/hazardvest = 1, + /obj/item/clothing/under/rank/vice = 1, + /obj/item/device/assembly/prox_sensor = 4, + /obj/item/device/assembly/timer = 3, + /obj/item/device/flashlight = 4, + /obj/item/device/flashlight/pen = 1, + /obj/item/device/multitool = 2, + /obj/item/device/radio/off = 2, + /obj/item/device/t_scanner = 6, + /obj/item/stack/cable_coil = 4, + /obj/item/stack/cable_coil{amount = 5} = 6, + /obj/item/stack/medical/bruise_pack = 1, + /obj/item/stack/rods{amount = 10} = 9, + /obj/item/stack/rods{amount = 23} = 1, + /obj/item/stack/rods{amount = 50} = 1, + /obj/item/stack/sheet/cardboard = 2, + /obj/item/stack/sheet/metal{amount = 20} = 1, + /obj/item/stack/sheet/mineral/plasma{layer = 2.9} = 1, + /obj/item/stack/sheet/rglass = 1, + /obj/item/weapon/book/manual/wiki/engineering_construction = 1, + /obj/item/weapon/book/manual/wiki/engineering_hacking = 1, + /obj/item/weapon/caution/cone = 1, + /obj/item/weapon/coin/silver = 1, + /obj/item/weapon/coin/twoheaded = 1, + /obj/item/weapon/contraband/poster = 1, + /obj/item/weapon/crowbar = 1, + /obj/item/weapon/crowbar/red = 1, + /obj/item/weapon/extinguisher = 11, + /obj/item/weapon/gun/projectile/revolver/russian = 1, + /obj/item/weapon/hand_labeler = 1, + /obj/item/weapon/paper/crumpled = 1, + /obj/item/weapon/pen = 1, + /obj/item/weapon/reagent_containers/spray/pestspray = 1, + /obj/item/weapon/stock_parts/cell = 3, + /obj/item/weapon/storage/belt/utility = 2, + /obj/item/weapon/storage/box = 2, + /obj/item/weapon/storage/box/cups = 1, + /obj/item/weapon/storage/box/donkpockets = 1, + /obj/item/weapon/storage/box/lights/mixed = 3, + /obj/item/weapon/storage/fancy/cigarettes/dromedaryco = 1, + /obj/item/weapon/storage/toolbox/mechanical = 1, + /obj/item/weapon/screwdriver = 3, + /obj/item/weapon/tank/emergency_oxygen = 2, + /obj/item/weapon/vending_refill/cola = 1, + /obj/item/weapon/weldingtool = 3, + /obj/item/weapon/wirecutters = 1, + /obj/item/weapon/wrench = 4, + "" = 11 + ) diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 62ab7c68790..8da7aaa2108 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -157,7 +157,8 @@ return src.add_fingerprint(user) if (src.bullets < 1) - user.show_message("\red *click* *click*", 2) + user.show_message("*click*", 2) + playsound(user, 'sound/weapons/empty.ogg', 100, 1) return playsound(user, 'sound/weapons/Gunshot.ogg', 100, 1) src.bullets-- diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm index 27cae71883b..ce066c0501e 100644 --- a/code/game/objects/items/weapons/melee/energy.dm +++ b/code/game/objects/items/weapons/melee/energy.dm @@ -163,7 +163,7 @@ name = "energy blade" desc = "A concentrated beam of energy in the shape of a blade. Very stylish... and lethal." icon_state = "blade" - force = 70.0//Normal attacks deal very high damage. + force = 30 //Normal attacks deal esword damage hitsound = 'sound/weapons/blade1.ogg' throwforce = 1//Throwing or dropping the item deletes it. throw_speed = 3 diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 29725327057..574b22935ce 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -182,14 +182,13 @@ user << "You begin cutting the [src] apart..." playsound(loc, 'sound/items/Welder2.ogg', 40, 1) if(do_after(user,40,5,1)) - if(!WT.remove_fuel(0,user)) - user << "You need more welding fuel to complete this task." - return - playsound(loc, 'sound/items/welder.ogg', 50, 1) - new /obj/item/stack/sheet/metal(src.loc) - for(var/mob/M in viewers(src)) - M.show_message("\The [src] has been cut apart by [user] with \the [WT].", 3, "You hear welding.", 2) - qdel(src) + if(src.opened) + if(WT.remove_fuel(0,user)) + playsound(loc, 'sound/items/welder.ogg', 50, 1) + new /obj/item/stack/sheet/metal(src.loc) + for(var/mob/M in viewers(src)) + M.show_message("\The [src] has been cut apart by [user] with \the [WT].", 3, "You hear welding.", 2) + qdel(src) return if(isrobot(user)) @@ -205,14 +204,13 @@ user << "You begin [welded ? "unwelding":"welding"] the [src]..." playsound(loc, 'sound/items/Welder2.ogg', 40, 1) if(do_after(user,40,5,1)) - if(WT.remove_fuel(0,user)) - playsound(loc, 'sound/items/welder.ogg', 50, 1) - welded = !welded - user << "You [welded ? "welded the [src] shut":"unwelded the [src]"]" - update_icon() - user.visible_message("[src] has been [welded? "welded shut":"unwelded"] by [user.name].") - else - user << "You need more welding fuel to complete this task." + if(!src.opened) + if(WT.remove_fuel(0,user)) + playsound(loc, 'sound/items/welder.ogg', 50, 1) + welded = !welded + user << "You [welded ? "welded the [src] shut":"unwelded the [src]"]" + update_icon() + user.visible_message("[src] has been [welded? "welded shut":"unwelded"] by [user.name].") return else if(!place(user, W)) src.attack_hand(user) diff --git a/code/game/objects/structures/crates_lockers/closets/fireaxe.dm b/code/game/objects/structures/crates_lockers/closets/fireaxe.dm index b285494aeaf..2fe415e46d1 100644 --- a/code/game/objects/structures/crates_lockers/closets/fireaxe.dm +++ b/code/game/objects/structures/crates_lockers/closets/fireaxe.dm @@ -14,81 +14,57 @@ locked = 1 var/smashed = 0 - attackby(var/obj/item/O as obj, var/mob/user as mob) //Marker -Agouri - //..() //That's very useful, Erro +/obj/structure/closet/fireaxecabinet/attackby(var/obj/item/O as obj, var/mob/user as mob) //Marker -Agouri + //..() //That's very useful, Erro - var/hasaxe = 0 //gonna come in handy later~ - if(fireaxe) - hasaxe = 1 + var/hasaxe = 0 //gonna come in handy later~ + if(fireaxe) + hasaxe = 1 - if (isrobot(usr) || src.locked) - if(istype(O, /obj/item/device/multitool)) - user << " Resetting circuitry..." - playsound(user, 'sound/machines/lockreset.ogg', 50, 1) - if(do_after(user, 20)) - src.locked = 0 - user << " You disable the locking modules." - update_icon() - return - else if(istype(O, /obj/item/weapon)) - user.changeNext_move(CLICK_CD_MELEE) - var/obj/item/weapon/W = O - if(src.smashed || src.localopened) - if(localopened) - localopened = 0 - icon_state = text("fireaxe[][][][]closing",hasaxe,src.localopened,src.hitstaken,src.smashed) - spawn(10) update_icon() - return - else - playsound(user, 'sound/effects/Glasshit.ogg', 100, 1) //We don't want this playing every time - if(W.force < 15) - user << " The cabinet's protective glass glances off the hit." - else - src.hitstaken++ - if(src.hitstaken == 4) - playsound(user, 'sound/effects/Glassbr3.ogg', 100, 1) //Break cabinet, receive goodies. Cabinet's fucked for life after that. - src.smashed = 1 - src.locked = 0 - src.localopened = 1 + if (isrobot(usr) || src.locked) + if(istype(O, /obj/item/device/multitool)) + user << " Resetting circuitry..." + playsound(user, 'sound/machines/lockreset.ogg', 50, 1) + if(do_after(user, 20)) + src.locked = 0 + user << " You disable the locking modules." update_icon() return - if (istype(O, /obj/item/weapon/twohanded/fireaxe) && src.localopened) - if(!fireaxe) - if(O:wielded) - user << " Unwield the axe first." - return - fireaxe = O - user.drop_item() - src.contents += O - user << " You place the fire axe back in the [src.name]." - update_icon() - else - if(src.smashed) - return - else - localopened = !localopened - if(localopened) - icon_state = text("fireaxe[][][][]opening",hasaxe,src.localopened,src.hitstaken,src.smashed) - spawn(10) update_icon() - else - icon_state = text("fireaxe[][][][]closing",hasaxe,src.localopened,src.hitstaken,src.smashed) - spawn(10) update_icon() - else - if(src.smashed) - return - if(istype(O, /obj/item/device/multitool)) + else if(istype(O, /obj/item/weapon)) + user.changeNext_move(CLICK_CD_MELEE) + var/obj/item/weapon/W = O + if(src.smashed || src.localopened) if(localopened) localopened = 0 icon_state = text("fireaxe[][][][]closing",hasaxe,src.localopened,src.hitstaken,src.smashed) spawn(10) update_icon() - return - else - user << " Resetting circuitry..." - playsound(user, 'sound/machines/lockenable.ogg', 50, 1) - if(do_after(user, 20)) - src.locked = 1 - user << " You re-enable the locking modules." - return + return + else + playsound(user, 'sound/effects/Glasshit.ogg', 100, 1) //We don't want this playing every time + if(W.force < 15) + user << " The cabinet's protective glass glances off the hit." + else + src.hitstaken++ + if(src.hitstaken == 4) + playsound(user, 'sound/effects/Glassbr3.ogg', 100, 1) //Break cabinet, receive goodies. Cabinet's fucked for life after that. + src.smashed = 1 + src.locked = 0 + src.localopened = 1 + update_icon() + return + if (istype(O, /obj/item/weapon/twohanded/fireaxe) && src.localopened) + if(!fireaxe) + if(O:wielded) + user << " Unwield the axe first." + return + fireaxe = O + user.drop_item() + src.contents += O + user << " You place the fire axe back in the [src.name]." + update_icon() + else + if(src.smashed) + return else localopened = !localopened if(localopened) @@ -97,112 +73,136 @@ else icon_state = text("fireaxe[][][][]closing",hasaxe,src.localopened,src.hitstaken,src.smashed) spawn(10) update_icon() - - - - - attack_hand(mob/user as mob) - - var/hasaxe = 0 - if(fireaxe) - hasaxe = 1 - - if(src.locked) - user <<" The cabinet won't budge!" - return - if(localopened) - if(fireaxe) - user.put_in_hands(fireaxe) - fireaxe = null - user << " You take the fire axe from the [name]." - src.add_fingerprint(user) - update_icon() - else - if(src.smashed) - return - else - localopened = !localopened - if(localopened) - src.icon_state = text("fireaxe[][][][]opening",hasaxe,src.localopened,src.hitstaken,src.smashed) - spawn(10) update_icon() - else - src.icon_state = text("fireaxe[][][][]closing",hasaxe,src.localopened,src.hitstaken,src.smashed) - spawn(10) update_icon() - - else - localopened = !localopened //I'm pretty sure we don't need an if(src.smashed) in here. In case I'm wrong and it fucks up teh cabinet, **MARKER**. -Agouri - if(localopened) - src.icon_state = text("fireaxe[][][][]opening",hasaxe,src.localopened,src.hitstaken,src.smashed) - spawn(10) update_icon() - else - src.icon_state = text("fireaxe[][][][]closing",hasaxe,src.localopened,src.hitstaken,src.smashed) - spawn(10) update_icon() - - attack_tk(mob/user as mob) - if(localopened && fireaxe) - fireaxe.loc = loc - user << " You telekinetically remove the fire axe." - fireaxe = null - update_icon() - return - attack_hand(user) - - verb/toggle_openness() //nice name, huh? HUH?! -Erro //YEAH -Agouri - set name = "Open/Close" - set category = "Object" - - if (isrobot(usr) || src.locked || src.smashed) - if(src.locked) - usr << "\red The cabinet won't budge!" - else if(src.smashed) - usr << "\blue The protective glass is broken!" - return - - localopened = !localopened - update_icon() - - verb/remove_fire_axe() - set name = "Remove Fire Axe" - set category = "Object" - - if (isrobot(usr)) - return - - if (localopened) - if(fireaxe) - usr.put_in_hands(fireaxe) - fireaxe = null - usr << "\blue You take the Fire axe from the [name]." - else - usr << "\blue The [src.name] is empty." - else - usr << "\blue The [src.name] is closed." - update_icon() - - attack_paw(mob/user as mob) - attack_hand(user) - return - - attack_ai(mob/user as mob) + else if(src.smashed) - user << " The security of the cabinet is compromised." return - else - locked = !locked - if(locked) - user << " Cabinet locked." + if(istype(O, /obj/item/device/multitool)) + if(localopened) + localopened = 0 + icon_state = text("fireaxe[][][][]closing",hasaxe,src.localopened,src.hitstaken,src.smashed) + spawn(10) update_icon() + return else - user << " Cabinet unlocked." - return + user << " Resetting circuitry..." + playsound(user, 'sound/machines/lockenable.ogg', 50, 1) + if(do_after(user, 20)) + src.locked = 1 + user << " You re-enable the locking modules." + return + else + localopened = !localopened + if(localopened) + icon_state = text("fireaxe[][][][]opening",hasaxe,src.localopened,src.hitstaken,src.smashed) + spawn(10) update_icon() + else + icon_state = text("fireaxe[][][][]closing",hasaxe,src.localopened,src.hitstaken,src.smashed) + spawn(10) update_icon() - update_icon() //Template: fireaxe[has fireaxe][is opened][hits taken][is smashed]. If you want the opening or closing animations, add "opening" or "closing" right after the numbers - var/hasaxe = 0 + + + +/obj/structure/closet/fireaxecabinet/attack_hand(mob/user as mob) + + var/hasaxe = 0 + if(fireaxe) + hasaxe = 1 + + if(src.locked) + user <<" The cabinet won't budge!" + return + if(localopened) if(fireaxe) - hasaxe = 1 - icon_state = text("fireaxe[][][][]",hasaxe,src.localopened,src.hitstaken,src.smashed) + user.put_in_hands(fireaxe) + fireaxe = null + user << " You take the fire axe from the [name]." + src.add_fingerprint(user) + update_icon() + else + if(src.smashed) + return + else + localopened = !localopened + if(localopened) + src.icon_state = text("fireaxe[][][][]opening",hasaxe,src.localopened,src.hitstaken,src.smashed) + spawn(10) update_icon() + else + src.icon_state = text("fireaxe[][][][]closing",hasaxe,src.localopened,src.hitstaken,src.smashed) + spawn(10) update_icon() - open() + else + localopened = !localopened //I'm pretty sure we don't need an if(src.smashed) in here. In case I'm wrong and it fucks up teh cabinet, **MARKER**. -Agouri + if(localopened) + src.icon_state = text("fireaxe[][][][]opening",hasaxe,src.localopened,src.hitstaken,src.smashed) + spawn(10) update_icon() + else + src.icon_state = text("fireaxe[][][][]closing",hasaxe,src.localopened,src.hitstaken,src.smashed) + spawn(10) update_icon() + +/obj/structure/closet/fireaxecabinet/attack_tk(mob/user as mob) + if(localopened && fireaxe) + fireaxe.loc = loc + user << " You telekinetically remove the fire axe." + fireaxe = null + update_icon() + return + attack_hand(user) + +/obj/structure/closet/fireaxecabinet/verb/toggle_openness() //nice name, huh? HUH?! -Erro //YEAH -Agouri + set name = "Open/Close" + set category = "Object" + + if (isrobot(usr) || src.locked || src.smashed) + if(src.locked) + usr << "\red The cabinet won't budge!" + else if(src.smashed) + usr << "\blue The protective glass is broken!" return - close() + localopened = !localopened + update_icon() + +/obj/structure/closet/fireaxecabinet/verb/remove_fire_axe() + set name = "Remove Fire Axe" + set category = "Object" + + if (isrobot(usr)) return + + if (localopened) + if(fireaxe) + usr.put_in_hands(fireaxe) + fireaxe = null + usr << "\blue You take the Fire axe from the [name]." + else + usr << "\blue The [src.name] is empty." + else + usr << "\blue The [src.name] is closed." + update_icon() + +/obj/structure/closet/fireaxecabinet/attack_paw(mob/user as mob) + attack_hand(user) + return + +/obj/structure/closet/fireaxecabinet/attack_ai(mob/user as mob) + if(src.smashed) + user << " The security of the cabinet is compromised." + return + else + locked = !locked + if(locked) + user << " Cabinet locked." + else + user << " Cabinet unlocked." + return + +/obj/structure/closet/fireaxecabinet/update_icon() //Template: fireaxe[has fireaxe][is opened][hits taken][is smashed]. If you want the opening or closing animations, add "opening" or "closing" right after the numbers + var/hasaxe = 0 + if(fireaxe) + hasaxe = 1 + icon_state = text("fireaxe[][][][]",hasaxe,src.localopened,src.hitstaken,src.smashed) + +/obj/structure/closet/fireaxecabinet/open() + return + +/obj/structure/closet/fireaxecabinet/close() + return diff --git a/code/game/objects/structures/crates_lockers/closets/secure/bar.dm b/code/game/objects/structures/crates_lockers/closets/secure/bar.dm index fc45cbf0943..03ba70127cc 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/bar.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/bar.dm @@ -9,20 +9,20 @@ icon_off = "cabinetdetective_broken" - New() - ..() - sleep(2) - new /obj/item/weapon/reagent_containers/food/drinks/beer( src ) - new /obj/item/weapon/reagent_containers/food/drinks/beer( src ) - new /obj/item/weapon/reagent_containers/food/drinks/beer( src ) - new /obj/item/weapon/reagent_containers/food/drinks/beer( src ) - new /obj/item/weapon/reagent_containers/food/drinks/beer( src ) - new /obj/item/weapon/reagent_containers/food/drinks/beer( src ) - new /obj/item/weapon/reagent_containers/food/drinks/beer( src ) - new /obj/item/weapon/reagent_containers/food/drinks/beer( src ) - new /obj/item/weapon/reagent_containers/food/drinks/beer( src ) - new /obj/item/weapon/reagent_containers/food/drinks/beer( src ) - return +/obj/structure/closet/secure_closet/bar/New() + ..() + sleep(2) + new /obj/item/weapon/reagent_containers/food/drinks/beer( src ) + new /obj/item/weapon/reagent_containers/food/drinks/beer( src ) + new /obj/item/weapon/reagent_containers/food/drinks/beer( src ) + new /obj/item/weapon/reagent_containers/food/drinks/beer( src ) + new /obj/item/weapon/reagent_containers/food/drinks/beer( src ) + new /obj/item/weapon/reagent_containers/food/drinks/beer( src ) + new /obj/item/weapon/reagent_containers/food/drinks/beer( src ) + new /obj/item/weapon/reagent_containers/food/drinks/beer( src ) + new /obj/item/weapon/reagent_containers/food/drinks/beer( src ) + new /obj/item/weapon/reagent_containers/food/drinks/beer( src ) + return /obj/structure/closet/secure_closet/bar/update_icon() if(broken) @@ -34,4 +34,4 @@ else icon_state = icon_closed else - icon_state = icon_opened \ No newline at end of file + icon_state = icon_opened diff --git a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm index 6794b632937..1b0d70e24b4 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm @@ -8,16 +8,16 @@ icon_broken = "securecargobroken" icon_off = "securecargooff" - New() - ..() - sleep(2) - new /obj/item/clothing/under/rank/cargotech(src) - new /obj/item/clothing/shoes/sneakers/black(src) - new /obj/item/device/radio/headset/headset_cargo(src) - new /obj/item/clothing/gloves/fingerless(src) - new /obj/item/clothing/head/soft(src) -// new /obj/item/weapon/cartridge/quartermaster(src) - return +/obj/structure/closet/secure_closet/cargotech/New() + ..() + sleep(2) + new /obj/item/clothing/under/rank/cargotech(src) + new /obj/item/clothing/shoes/sneakers/black(src) + new /obj/item/device/radio/headset/headset_cargo(src) + new /obj/item/clothing/gloves/fingerless(src) + new /obj/item/clothing/head/soft(src) +// new /obj/item/weapon/cartridge/quartermaster(src) + return /obj/structure/closet/secure_closet/quartermaster name = "\proper quartermaster's locker" @@ -29,17 +29,17 @@ icon_broken = "secureqmbroken" icon_off = "secureqmoff" - New() - ..() - sleep(2) - new /obj/item/clothing/under/rank/cargo(src) - new /obj/item/clothing/shoes/sneakers/brown(src) - new /obj/item/device/radio/headset/headset_cargo(src) - new /obj/item/clothing/gloves/fingerless(src) -// new /obj/item/weapon/cartridge/quartermaster(src) - new /obj/item/clothing/suit/fire/firefighter(src) - new /obj/item/weapon/tank/emergency_oxygen(src) - new /obj/item/clothing/mask/gas(src) - new /obj/item/clothing/glasses/meson(src) - new /obj/item/clothing/head/soft(src) - return \ No newline at end of file +/obj/structure/closet/secure_closet/quartermaster/New() + ..() + sleep(2) + new /obj/item/clothing/under/rank/cargo(src) + new /obj/item/clothing/shoes/sneakers/brown(src) + new /obj/item/device/radio/headset/headset_cargo(src) + new /obj/item/clothing/gloves/fingerless(src) +// new /obj/item/weapon/cartridge/quartermaster(src) + new /obj/item/clothing/suit/fire/firefighter(src) + new /obj/item/weapon/tank/emergency_oxygen(src) + new /obj/item/clothing/mask/gas(src) + new /obj/item/clothing/glasses/meson(src) + new /obj/item/clothing/head/soft(src) + return diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm index a08dd717f8e..649111df7cf 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm @@ -9,28 +9,28 @@ icon_off = "secureceoff" - New() - ..() - sleep(2) - if(prob(50)) - new /obj/item/weapon/storage/backpack/industrial(src) - else - new /obj/item/weapon/storage/backpack/satchel_eng(src) - new /obj/item/blueprints(src) - new /obj/item/clothing/under/rank/chief_engineer(src) - new /obj/item/clothing/head/hardhat/white(src) - new /obj/item/clothing/head/welding(src) - new /obj/item/clothing/gloves/yellow(src) - new /obj/item/clothing/shoes/sneakers/brown(src) - new /obj/item/weapon/cartridge/ce(src) - new /obj/item/device/radio/headset/heads/ce(src) - new /obj/item/weapon/storage/toolbox/mechanical(src) - new /obj/item/clothing/suit/hazardvest(src) - new /obj/item/weapon/airlock_painter(src) - new /obj/item/clothing/mask/gas(src) - new /obj/item/device/multitool(src) - new /obj/item/device/flash(src) - return +/obj/structure/closet/secure_closet/engineering_chief/New() + ..() + sleep(2) + if(prob(50)) + new /obj/item/weapon/storage/backpack/industrial(src) + else + new /obj/item/weapon/storage/backpack/satchel_eng(src) + new /obj/item/blueprints(src) + new /obj/item/clothing/under/rank/chief_engineer(src) + new /obj/item/clothing/head/hardhat/white(src) + new /obj/item/clothing/head/welding(src) + new /obj/item/clothing/gloves/yellow(src) + new /obj/item/clothing/shoes/sneakers/brown(src) + new /obj/item/weapon/cartridge/ce(src) + new /obj/item/device/radio/headset/heads/ce(src) + new /obj/item/weapon/storage/toolbox/mechanical(src) + new /obj/item/clothing/suit/hazardvest(src) + new /obj/item/weapon/airlock_painter(src) + new /obj/item/clothing/mask/gas(src) + new /obj/item/device/multitool(src) + new /obj/item/device/flash(src) + return /obj/structure/closet/secure_closet/engineering_electrical name = "electrical supplies locker" @@ -43,21 +43,21 @@ icon_off = "secureengelecoff" - New() - ..() - sleep(2) - new /obj/item/clothing/gloves/yellow(src) - new /obj/item/clothing/gloves/yellow(src) - new /obj/item/weapon/storage/toolbox/electrical(src) - new /obj/item/weapon/storage/toolbox/electrical(src) - new /obj/item/weapon/storage/toolbox/electrical(src) - new /obj/item/weapon/module/power_control(src) - new /obj/item/weapon/module/power_control(src) - new /obj/item/weapon/module/power_control(src) - new /obj/item/device/multitool(src) - new /obj/item/device/multitool(src) - new /obj/item/device/multitool(src) - return +/obj/structure/closet/secure_closet/engineering_electrical/New() + ..() + sleep(2) + new /obj/item/clothing/gloves/yellow(src) + new /obj/item/clothing/gloves/yellow(src) + new /obj/item/weapon/storage/toolbox/electrical(src) + new /obj/item/weapon/storage/toolbox/electrical(src) + new /obj/item/weapon/storage/toolbox/electrical(src) + new /obj/item/weapon/module/power_control(src) + new /obj/item/weapon/module/power_control(src) + new /obj/item/weapon/module/power_control(src) + new /obj/item/device/multitool(src) + new /obj/item/device/multitool(src) + new /obj/item/device/multitool(src) + return @@ -72,16 +72,16 @@ icon_off = "secureengweldoff" - New() - ..() - sleep(2) - new /obj/item/clothing/head/welding(src) - new /obj/item/clothing/head/welding(src) - new /obj/item/clothing/head/welding(src) - new /obj/item/weapon/weldingtool/largetank(src) - new /obj/item/weapon/weldingtool/largetank(src) - new /obj/item/weapon/weldingtool/largetank(src) - return +/obj/structure/closet/secure_closet/engineering_welding/New() + ..() + sleep(2) + new /obj/item/clothing/head/welding(src) + new /obj/item/clothing/head/welding(src) + new /obj/item/clothing/head/welding(src) + new /obj/item/weapon/weldingtool/largetank(src) + new /obj/item/weapon/weldingtool/largetank(src) + new /obj/item/weapon/weldingtool/largetank(src) + return @@ -96,19 +96,19 @@ icon_off = "secureengoff" - New() - ..() - sleep(2) - if(prob(50)) - new /obj/item/weapon/storage/backpack/industrial(src) - else - new /obj/item/weapon/storage/backpack/satchel_eng(src) - new /obj/item/clothing/under/rank/engineer(src) - new /obj/item/clothing/shoes/sneakers/orange(src) - new /obj/item/weapon/storage/toolbox/mechanical(src) -// new /obj/item/weapon/cartridge/engineering(src) - new /obj/item/device/radio/headset/headset_eng(src) - new /obj/item/clothing/suit/hazardvest(src) - new /obj/item/clothing/mask/gas(src) - new /obj/item/clothing/glasses/meson(src) - return \ No newline at end of file +/obj/structure/closet/secure_closet/engineering_personal/New() + ..() + sleep(2) + if(prob(50)) + new /obj/item/weapon/storage/backpack/industrial(src) + else + new /obj/item/weapon/storage/backpack/satchel_eng(src) + new /obj/item/clothing/under/rank/engineer(src) + new /obj/item/clothing/shoes/sneakers/orange(src) + new /obj/item/weapon/storage/toolbox/mechanical(src) +// new /obj/item/weapon/cartridge/engineering(src) + new /obj/item/device/radio/headset/headset_eng(src) + new /obj/item/clothing/suit/hazardvest(src) + new /obj/item/clothing/mask/gas(src) + new /obj/item/clothing/glasses/meson(src) + return diff --git a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm index afe8aa8d83f..4a8b884fdc2 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm @@ -16,13 +16,13 @@ name = "kitchen Cabinet" req_access = list(access_kitchen) - New() - ..() - sleep(2) - for(var/i = 0, i < 3, i++) - new /obj/item/weapon/reagent_containers/food/drinks/flour(src) - new /obj/item/weapon/reagent_containers/food/condiment/sugar(src) - return +/obj/structure/closet/secure_closet/freezer/kitchen/New() + ..() + sleep(2) + for(var/i = 0, i < 3, i++) + new /obj/item/weapon/reagent_containers/food/drinks/flour(src) + new /obj/item/weapon/reagent_containers/food/condiment/sugar(src) + return /obj/structure/closet/secure_closet/freezer/kitchen/mining @@ -40,12 +40,12 @@ icon_off = "fridge1" - New() - ..() - sleep(2) - for(var/i = 0, i < 4, i++) - new /obj/item/weapon/reagent_containers/food/snacks/meat/monkey(src) - return +/obj/structure/closet/secure_closet/freezer/meat/New() + ..() + sleep(2) + for(var/i = 0, i < 4, i++) + new /obj/item/weapon/reagent_containers/food/snacks/meat/monkey(src) + return @@ -59,21 +59,22 @@ icon_off = "fridge1" - New() - ..() - sleep(2) - for(var/i = 0, i < 5, i++) - new /obj/item/weapon/reagent_containers/food/drinks/milk(src) - for(var/i = 0, i < 5, i++) - new /obj/item/weapon/reagent_containers/food/drinks/soymilk(src) - for(var/i = 0, i < 2, i++) - new /obj/item/weapon/storage/fancy/egg_box(src) - return +/obj/structure/closet/secure_closet/freezer/fridge/New() + ..() + sleep(2) + for(var/i = 0, i < 5, i++) + new /obj/item/weapon/reagent_containers/food/drinks/milk(src) + for(var/i = 0, i < 5, i++) + new /obj/item/weapon/reagent_containers/food/drinks/soymilk(src) + for(var/i = 0, i < 2, i++) + new /obj/item/weapon/storage/fancy/egg_box(src) + return /obj/structure/closet/secure_closet/freezer/money name = "freezer" + desc = "This contains cold hard cash." icon_state = "fridge1" icon_closed = "fridge" icon_locked = "fridge1" @@ -83,21 +84,13 @@ req_access = list(access_heads_vault) - New() - ..() - sleep(2) - for(var/i = 0, i < 3, i++) - new /obj/item/weapon/spacecash/c1000(src) - for(var/i = 0, i < 5, i++) - new /obj/item/weapon/spacecash/c500(src) - for(var/i = 0, i < 6, i++) - new /obj/item/weapon/spacecash/c200(src) - return - - - - - - - - +/obj/structure/closet/secure_closet/freezer/money/New() + ..() + sleep(2) + for(var/i = 0, i < 3, i++) + new /obj/item/weapon/spacecash/c1000(src) + for(var/i = 0, i < 5, i++) + new /obj/item/weapon/spacecash/c500(src) + for(var/i = 0, i < 6, i++) + new /obj/item/weapon/spacecash/c200(src) + return diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm index 5416820a21e..64f10372f3f 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm @@ -10,19 +10,19 @@ req_access = list(access_medical) - New() - ..() - sleep(2) - new /obj/item/weapon/storage/box/syringes(src) - new /obj/item/weapon/reagent_containers/dropper(src) - new /obj/item/weapon/reagent_containers/dropper(src) - new /obj/item/weapon/reagent_containers/glass/beaker(src) - new /obj/item/weapon/reagent_containers/glass/beaker(src) - new /obj/item/weapon/reagent_containers/glass/bottle/inaprovaline(src) - new /obj/item/weapon/reagent_containers/glass/bottle/inaprovaline(src) - new /obj/item/weapon/reagent_containers/glass/bottle/antitoxin(src) - new /obj/item/weapon/reagent_containers/glass/bottle/antitoxin(src) - return +/obj/structure/closet/secure_closet/medical1/New() + ..() + sleep(2) + new /obj/item/weapon/storage/box/syringes(src) + new /obj/item/weapon/reagent_containers/dropper(src) + new /obj/item/weapon/reagent_containers/dropper(src) + new /obj/item/weapon/reagent_containers/glass/beaker(src) + new /obj/item/weapon/reagent_containers/glass/beaker(src) + new /obj/item/weapon/reagent_containers/glass/bottle/inaprovaline(src) + new /obj/item/weapon/reagent_containers/glass/bottle/inaprovaline(src) + new /obj/item/weapon/reagent_containers/glass/bottle/antitoxin(src) + new /obj/item/weapon/reagent_containers/glass/bottle/antitoxin(src) + return @@ -38,16 +38,16 @@ req_access = list(access_surgery) - New() - ..() - sleep(2) - new /obj/item/weapon/tank/anesthetic(src) - new /obj/item/weapon/tank/anesthetic(src) - new /obj/item/weapon/tank/anesthetic(src) - new /obj/item/clothing/mask/breath/medical(src) - new /obj/item/clothing/mask/breath/medical(src) - new /obj/item/clothing/mask/breath/medical(src) - return +/obj/structure/closet/secure_closet/medical2/New() + ..() + sleep(2) + new /obj/item/weapon/tank/anesthetic(src) + new /obj/item/weapon/tank/anesthetic(src) + new /obj/item/weapon/tank/anesthetic(src) + new /obj/item/clothing/mask/breath/medical(src) + new /obj/item/clothing/mask/breath/medical(src) + new /obj/item/clothing/mask/breath/medical(src) + return @@ -61,36 +61,36 @@ icon_broken = "securemedbroken" icon_off = "securemedoff" - New() - ..() - sleep(2) - if(prob(50)) - new /obj/item/weapon/storage/backpack/medic(src) - else - new /obj/item/weapon/storage/backpack/satchel_med(src) - new /obj/item/clothing/under/rank/nursesuit (src) - new /obj/item/clothing/head/nursehat (src) - switch(pick("blue", "green", "purple")) - if ("blue") - new /obj/item/clothing/under/rank/medical/blue(src) - if ("green") - new /obj/item/clothing/under/rank/medical/green(src) - if ("purple") - new /obj/item/clothing/under/rank/medical/purple(src) - switch(pick("blue", "green", "purple")) - if ("blue") - new /obj/item/clothing/under/rank/medical/blue(src) - if ("green") - new /obj/item/clothing/under/rank/medical/green(src) - if ("purple") - new /obj/item/clothing/under/rank/medical/purple(src) - new /obj/item/clothing/under/rank/medical(src) - new /obj/item/clothing/suit/labcoat(src) - new /obj/item/clothing/shoes/sneakers/white(src) -// new /obj/item/weapon/cartridge/medical(src) - new /obj/item/device/radio/headset/headset_med(src) - new /obj/item/weapon/storage/belt/medical(src) - return +/obj/structure/closet/secure_closet/medical3/New() + ..() + sleep(2) + if(prob(50)) + new /obj/item/weapon/storage/backpack/medic(src) + else + new /obj/item/weapon/storage/backpack/satchel_med(src) + new /obj/item/clothing/under/rank/nursesuit (src) + new /obj/item/clothing/head/nursehat (src) + switch(pick("blue", "green", "purple")) + if ("blue") + new /obj/item/clothing/under/rank/medical/blue(src) + if ("green") + new /obj/item/clothing/under/rank/medical/green(src) + if ("purple") + new /obj/item/clothing/under/rank/medical/purple(src) + switch(pick("blue", "green", "purple")) + if ("blue") + new /obj/item/clothing/under/rank/medical/blue(src) + if ("green") + new /obj/item/clothing/under/rank/medical/green(src) + if ("purple") + new /obj/item/clothing/under/rank/medical/purple(src) + new /obj/item/clothing/under/rank/medical(src) + new /obj/item/clothing/suit/labcoat(src) + new /obj/item/clothing/shoes/sneakers/white(src) +// new /obj/item/weapon/cartridge/medical(src) + new /obj/item/device/radio/headset/headset_med(src) + new /obj/item/weapon/storage/belt/medical(src) + return @@ -104,25 +104,25 @@ icon_broken = "cmosecurebroken" icon_off = "cmosecureoff" - New() - ..() - sleep(2) - if(prob(50)) - new /obj/item/weapon/storage/backpack/medic(src) - else - new /obj/item/weapon/storage/backpack/satchel_med(src) - new /obj/item/clothing/suit/bio_suit/cmo(src) - new /obj/item/clothing/head/bio_hood/cmo(src) - new /obj/item/clothing/under/rank/chief_medical_officer(src) - new /obj/item/clothing/suit/labcoat/cmo(src) - new /obj/item/weapon/cartridge/cmo(src) - new /obj/item/clothing/gloves/latex(src) - new /obj/item/clothing/shoes/sneakers/brown (src) - new /obj/item/device/radio/headset/heads/cmo(src) - new /obj/item/weapon/storage/belt/medical(src) - new /obj/item/device/flash(src) - new /obj/item/weapon/reagent_containers/hypospray(src) - return +/obj/structure/closet/secure_closet/CMO/New() + ..() + sleep(2) + if(prob(50)) + new /obj/item/weapon/storage/backpack/medic(src) + else + new /obj/item/weapon/storage/backpack/satchel_med(src) + new /obj/item/clothing/suit/bio_suit/cmo(src) + new /obj/item/clothing/head/bio_hood/cmo(src) + new /obj/item/clothing/under/rank/chief_medical_officer(src) + new /obj/item/clothing/suit/labcoat/cmo(src) + new /obj/item/weapon/cartridge/cmo(src) + new /obj/item/clothing/gloves/latex(src) + new /obj/item/clothing/shoes/sneakers/brown (src) + new /obj/item/device/radio/headset/heads/cmo(src) + new /obj/item/weapon/storage/belt/medical(src) + new /obj/item/device/flash(src) + new /obj/item/weapon/reagent_containers/hypospray(src) + return @@ -131,14 +131,14 @@ req_access = list(access_surgery) - New() - ..() - sleep(2) - new /obj/item/device/assembly/signaler(src) - new /obj/item/device/radio/electropack(src) - new /obj/item/device/radio/electropack(src) - new /obj/item/device/radio/electropack(src) - return +/obj/structure/closet/secure_closet/animal/New() + ..() + sleep(2) + new /obj/item/device/assembly/signaler(src) + new /obj/item/device/radio/electropack(src) + new /obj/item/device/radio/electropack(src) + new /obj/item/device/radio/electropack(src) + return @@ -154,12 +154,12 @@ req_access = list(access_chemistry) - New() - ..() - sleep(2) - new /obj/item/weapon/storage/box/pillbottles(src) - new /obj/item/weapon/storage/box/pillbottles(src) - return +/obj/structure/closet/secure_closet/chemical/New() + ..() + sleep(2) + new /obj/item/weapon/storage/box/pillbottles(src) + new /obj/item/weapon/storage/box/pillbottles(src) + return /obj/structure/closet/secure_closet/medical_wall name = "first aid closet" @@ -185,4 +185,4 @@ else icon_state = icon_closed else - icon_state = icon_opened \ No newline at end of file + icon_state = icon_opened diff --git a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm index 7a06549d669..9b0cef34c99 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm @@ -8,17 +8,17 @@ icon_broken = "secureresbroken" icon_off = "secureresoff" - New() - ..() - sleep(2) - new /obj/item/clothing/under/rank/scientist(src) - new /obj/item/clothing/suit/labcoat/science(src) - new /obj/item/clothing/shoes/sneakers/white(src) -// new /obj/item/weapon/cartridge/signal/toxins(src) - new /obj/item/device/radio/headset/headset_sci(src) - new /obj/item/weapon/tank/air(src) - new /obj/item/clothing/mask/gas(src) - return +/obj/structure/closet/secure_closet/scientist/New() + ..() + sleep(2) + new /obj/item/clothing/under/rank/scientist(src) + new /obj/item/clothing/suit/labcoat/science(src) + new /obj/item/clothing/shoes/sneakers/white(src) +// new /obj/item/weapon/cartridge/signal/toxins(src) + new /obj/item/device/radio/headset/headset_sci(src) + new /obj/item/weapon/tank/air(src) + new /obj/item/clothing/mask/gas(src) + return @@ -32,21 +32,21 @@ icon_broken = "rdsecurebroken" icon_off = "rdsecureoff" - New() - ..() - sleep(2) - new /obj/item/clothing/suit/bio_suit/scientist(src) - new /obj/item/clothing/head/bio_hood/scientist(src) - new /obj/item/clothing/under/rank/research_director(src) - new /obj/item/clothing/suit/labcoat(src) - new /obj/item/weapon/cartridge/rd(src) - new /obj/item/clothing/shoes/sneakers/white(src) - new /obj/item/clothing/gloves/latex(src) - new /obj/item/device/radio/headset/heads/rd(src) - new /obj/item/weapon/tank/air(src) - new /obj/item/clothing/mask/gas(src) - new /obj/item/clothing/suit/armor/reactive(src) - new /obj/item/device/flash(src) - new /obj/item/device/laser_pointer(src) - new /obj/item/clothing/under/rank/research_director/alt(src) - return \ No newline at end of file +/obj/structure/closet/secure_closet/RD/New() + ..() + sleep(2) + new /obj/item/clothing/suit/bio_suit/scientist(src) + new /obj/item/clothing/head/bio_hood/scientist(src) + new /obj/item/clothing/under/rank/research_director(src) + new /obj/item/clothing/suit/labcoat(src) + new /obj/item/weapon/cartridge/rd(src) + new /obj/item/clothing/shoes/sneakers/white(src) + new /obj/item/clothing/gloves/latex(src) + new /obj/item/device/radio/headset/heads/rd(src) + new /obj/item/weapon/tank/air(src) + new /obj/item/clothing/mask/gas(src) + new /obj/item/clothing/suit/armor/reactive(src) + new /obj/item/device/flash(src) + new /obj/item/device/laser_pointer(src) + new /obj/item/clothing/under/rank/research_director/alt(src) + return diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index d6c66069701..a1e7aacfcc1 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -8,24 +8,24 @@ icon_broken = "capsecurebroken" icon_off = "capsecureoff" - New() - ..() - sleep(2) - if(prob(50)) - new /obj/item/weapon/storage/backpack/captain(src) - else - new /obj/item/weapon/storage/backpack/satchel_cap(src) - new /obj/item/clothing/suit/captunic(src) - new /obj/item/clothing/under/captainformal(src) - new /obj/item/clothing/head/helmet/cap(src) - new /obj/item/clothing/under/rank/captain(src) - new /obj/item/clothing/suit/armor/vest/capcarapace(src) - new /obj/item/weapon/cartridge/captain(src) - new /obj/item/clothing/shoes/sneakers/brown(src) - new /obj/item/device/radio/headset/heads/captain/alt(src) - new /obj/item/clothing/gloves/captain(src) - new /obj/item/weapon/gun/energy/gun(src) - return +/obj/structure/closet/secure_closet/captains/New() + ..() + sleep(2) + if(prob(50)) + new /obj/item/weapon/storage/backpack/captain(src) + else + new /obj/item/weapon/storage/backpack/satchel_cap(src) + new /obj/item/clothing/suit/captunic(src) + new /obj/item/clothing/under/captainformal(src) + new /obj/item/clothing/head/helmet/cap(src) + new /obj/item/clothing/under/rank/captain(src) + new /obj/item/clothing/suit/armor/vest/capcarapace(src) + new /obj/item/weapon/cartridge/captain(src) + new /obj/item/clothing/shoes/sneakers/brown(src) + new /obj/item/device/radio/headset/heads/captain/alt(src) + new /obj/item/clothing/gloves/captain(src) + new /obj/item/weapon/gun/energy/gun(src) + return /obj/structure/closet/secure_closet/hop name = "\proper head of personnel's locker" @@ -37,22 +37,22 @@ icon_broken = "hopsecurebroken" icon_off = "hopsecureoff" - New() - ..() - sleep(2) - new /obj/item/clothing/under/rank/head_of_personnel(src) - new /obj/item/clothing/head/hopcap(src) - new /obj/item/weapon/cartridge/hop(src) - new /obj/item/device/radio/headset/heads/hop(src) - new /obj/item/clothing/shoes/sneakers/brown(src) - new /obj/item/weapon/storage/box/ids(src) - new /obj/item/weapon/storage/box/ids(src) - new /obj/item/clothing/suit/armor/vest(src) - new /obj/item/weapon/gun/energy/gun(src) - new /obj/item/device/flash(src) - new /obj/item/clothing/glasses/sunglasses(src) - new /obj/item/weapon/mining_voucher(src) - return +/obj/structure/closet/secure_closet/hop/New() + ..() + sleep(2) + new /obj/item/clothing/under/rank/head_of_personnel(src) + new /obj/item/clothing/head/hopcap(src) + new /obj/item/weapon/cartridge/hop(src) + new /obj/item/device/radio/headset/heads/hop(src) + new /obj/item/clothing/shoes/sneakers/brown(src) + new /obj/item/weapon/storage/box/ids(src) + new /obj/item/weapon/storage/box/ids(src) + new /obj/item/clothing/suit/armor/vest(src) + new /obj/item/weapon/gun/energy/gun(src) + new /obj/item/device/flash(src) + new /obj/item/clothing/glasses/sunglasses(src) + new /obj/item/weapon/mining_voucher(src) + return @@ -66,24 +66,24 @@ icon_broken = "hossecurebroken" icon_off = "hossecureoff" - New() - ..() - sleep(2) - new /obj/item/clothing/suit/armor/vest(src) - new /obj/item/clothing/suit/armor/hos/jensen(src) - new /obj/item/clothing/head/helmet/HoS/dermal(src) - new /obj/item/weapon/cartridge/hos(src) - new /obj/item/device/radio/headset/heads/hos/alt(src) - new /obj/item/clothing/glasses/hud/security/sunglasses(src) - new /obj/item/weapon/shield/riot(src) - new /obj/item/clothing/mask/gas/sechailer/hos(src) - new /obj/item/weapon/storage/lockbox/loyalty(src) - new /obj/item/weapon/storage/box/flashbangs(src) - new /obj/item/device/flash(src) - new /obj/item/weapon/melee/baton/loaded(src) - new /obj/item/weapon/gun/energy/gun(src) - new /obj/item/weapon/storage/belt/security(src) - return +/obj/structure/closet/secure_closet/hos/New() + ..() + sleep(2) + new /obj/item/clothing/suit/armor/vest(src) + new /obj/item/clothing/suit/armor/hos/jensen(src) + new /obj/item/clothing/head/helmet/HoS/dermal(src) + new /obj/item/weapon/cartridge/hos(src) + new /obj/item/device/radio/headset/heads/hos/alt(src) + new /obj/item/clothing/glasses/hud/security/sunglasses(src) + new /obj/item/weapon/shield/riot(src) + new /obj/item/clothing/mask/gas/sechailer/hos(src) + new /obj/item/weapon/storage/lockbox/loyalty(src) + new /obj/item/weapon/storage/box/flashbangs(src) + new /obj/item/device/flash(src) + new /obj/item/weapon/melee/baton/loaded(src) + new /obj/item/weapon/gun/energy/gun(src) + new /obj/item/weapon/storage/belt/security(src) + return /obj/structure/closet/secure_closet/warden @@ -97,23 +97,23 @@ icon_off = "wardensecureoff" - New() - ..() - sleep(2) - new /obj/item/clothing/suit/armor/vest(src) - new /obj/item/clothing/under/rank/warden(src) - new /obj/item/clothing/suit/armor/vest/warden(src) - new /obj/item/clothing/head/helmet/warden(src) - new /obj/item/weapon/clipboard(src) - new /obj/item/device/radio/headset/headset_sec/alt(src) - new /obj/item/clothing/glasses/hud/security/sunglasses(src) - new /obj/item/clothing/mask/gas/sechailer/warden(src) - new /obj/item/weapon/storage/box/flashbangs(src) - new /obj/item/weapon/reagent_containers/spray/pepper(src) - new /obj/item/weapon/melee/baton/loaded(src) - new /obj/item/weapon/gun/energy/taser(src) - new /obj/item/weapon/storage/belt/security(src) - return +/obj/structure/closet/secure_closet/warden/New() + ..() + sleep(2) + new /obj/item/clothing/suit/armor/vest(src) + new /obj/item/clothing/under/rank/warden(src) + new /obj/item/clothing/suit/armor/vest/warden(src) + new /obj/item/clothing/head/helmet/warden(src) + new /obj/item/weapon/clipboard(src) + new /obj/item/device/radio/headset/headset_sec/alt(src) + new /obj/item/clothing/glasses/hud/security/sunglasses(src) + new /obj/item/clothing/mask/gas/sechailer/warden(src) + new /obj/item/weapon/storage/box/flashbangs(src) + new /obj/item/weapon/reagent_containers/spray/pepper(src) + new /obj/item/weapon/melee/baton/loaded(src) + new /obj/item/weapon/gun/energy/taser(src) + new /obj/item/weapon/storage/belt/security(src) + return @@ -127,60 +127,60 @@ icon_broken = "secbroken" icon_off = "secoff" - New() - ..() - sleep(2) - new /obj/item/clothing/suit/armor/vest(src) - new /obj/item/clothing/head/helmet(src) - new /obj/item/device/radio/headset/headset_sec/alt(src) - new /obj/item/clothing/mask/gas/sechailer(src) - new /obj/item/device/flash(src) - new /obj/item/weapon/reagent_containers/spray/pepper(src) - new /obj/item/weapon/grenade/flashbang(src) - new /obj/item/weapon/gun/energy/taser(src) - new /obj/item/weapon/storage/belt/security(src) - new /obj/item/clothing/glasses/hud/security/sunglasses(src) - return +/obj/structure/closet/secure_closet/security/New() + ..() + sleep(2) + new /obj/item/clothing/suit/armor/vest(src) + new /obj/item/clothing/head/helmet(src) + new /obj/item/device/radio/headset/headset_sec/alt(src) + new /obj/item/clothing/mask/gas/sechailer(src) + new /obj/item/device/flash(src) + new /obj/item/weapon/reagent_containers/spray/pepper(src) + new /obj/item/weapon/grenade/flashbang(src) + new /obj/item/weapon/gun/energy/taser(src) + new /obj/item/weapon/storage/belt/security(src) + new /obj/item/clothing/glasses/hud/security/sunglasses(src) + return /obj/structure/closet/secure_closet/security/sec - New() - new /obj/item/weapon/melee/baton/loaded(src) - ..() - return +/obj/structure/closet/secure_closet/security/sec/New() + new /obj/item/weapon/melee/baton/loaded(src) + ..() + return /obj/structure/closet/secure_closet/security/cargo - New() - new /obj/item/clothing/tie/armband/cargo(src) - new /obj/item/device/encryptionkey/headset_cargo(src) - ..() - return +/obj/structure/closet/secure_closet/security/cargo/New() + new /obj/item/clothing/tie/armband/cargo(src) + new /obj/item/device/encryptionkey/headset_cargo(src) + ..() + return /obj/structure/closet/secure_closet/security/engine - New() - new /obj/item/clothing/tie/armband/engine(src) - new /obj/item/device/encryptionkey/headset_eng(src) - ..() - return +/obj/structure/closet/secure_closet/security/engine/New() + new /obj/item/clothing/tie/armband/engine(src) + new /obj/item/device/encryptionkey/headset_eng(src) + ..() + return /obj/structure/closet/secure_closet/security/science - New() - new /obj/item/clothing/tie/armband/science(src) - new /obj/item/device/encryptionkey/headset_sci(src) - ..() - return +/obj/structure/closet/secure_closet/security/science/New() + new /obj/item/clothing/tie/armband/science(src) + new /obj/item/device/encryptionkey/headset_sci(src) + ..() + return /obj/structure/closet/secure_closet/security/med - New() - new /obj/item/clothing/tie/armband/medblue(src) - new /obj/item/device/encryptionkey/headset_med(src) - ..() - return +/obj/structure/closet/secure_closet/security/med/New() + new /obj/item/clothing/tie/armband/medblue(src) + new /obj/item/device/encryptionkey/headset_med(src) + ..() + return /obj/structure/closet/secure_closet/detective @@ -193,23 +193,23 @@ icon_broken = "cabinetdetective_broken" icon_off = "cabinetdetective_broken" - New() - ..() - sleep(2) - new /obj/item/clothing/under/rank/det(src) - new /obj/item/clothing/suit/det_suit(src) - new /obj/item/clothing/gloves/black(src) - new /obj/item/clothing/head/det_hat(src) - new /obj/item/clothing/shoes/sneakers/brown(src) - new /obj/item/weapon/storage/box/evidence(src) - new /obj/item/weapon/clipboard(src) - new /obj/item/device/radio/headset/headset_sec(src) - new /obj/item/device/detective_scanner(src) - new /obj/item/clothing/suit/armor/vest/det_suit(src) - new /obj/item/ammo_box/c38(src) - new /obj/item/ammo_box/c38(src) - new /obj/item/weapon/gun/projectile/revolver/detective(src) - return +/obj/structure/closet/secure_closet/detective/New() + ..() + sleep(2) + new /obj/item/clothing/under/rank/det(src) + new /obj/item/clothing/suit/det_suit(src) + new /obj/item/clothing/gloves/black(src) + new /obj/item/clothing/head/det_hat(src) + new /obj/item/clothing/shoes/sneakers/brown(src) + new /obj/item/weapon/storage/box/evidence(src) + new /obj/item/weapon/clipboard(src) + new /obj/item/device/radio/headset/headset_sec(src) + new /obj/item/device/detective_scanner(src) + new /obj/item/clothing/suit/armor/vest/det_suit(src) + new /obj/item/ammo_box/c38(src) + new /obj/item/ammo_box/c38(src) + new /obj/item/weapon/gun/projectile/revolver/detective(src) + return /obj/structure/closet/secure_closet/detective/update_icon() if(broken) @@ -227,14 +227,14 @@ name = "lethal injections" req_access = list(access_hos) - New() - ..() - sleep(2) - new /obj/item/weapon/reagent_containers/syringe/lethal/choral(src) - new /obj/item/weapon/reagent_containers/syringe/lethal/choral(src) - new /obj/item/weapon/reagent_containers/syringe/lethal/choral(src) - new /obj/item/weapon/reagent_containers/syringe/lethal/choral(src) - new /obj/item/weapon/reagent_containers/syringe/lethal/choral(src) +/obj/structure/closet/secure_closet/injection/New() + ..() + sleep(2) + new /obj/item/weapon/reagent_containers/syringe/lethal/choral(src) + new /obj/item/weapon/reagent_containers/syringe/lethal/choral(src) + new /obj/item/weapon/reagent_containers/syringe/lethal/choral(src) + new /obj/item/weapon/reagent_containers/syringe/lethal/choral(src) + new /obj/item/weapon/reagent_containers/syringe/lethal/choral(src) /obj/structure/closet/secure_closet/brig @@ -243,10 +243,10 @@ anchored = 1 var/id = null - New() - new /obj/item/clothing/under/color/orange( src ) - new /obj/item/clothing/shoes/sneakers/orange( src ) - return +/obj/structure/closet/secure_closet/brig/New() + new /obj/item/clothing/under/color/orange( src ) + new /obj/item/clothing/shoes/sneakers/orange( src ) + return @@ -254,18 +254,18 @@ name = "courtroom locker" req_access = list(access_court) - New() - ..() - sleep(2) - new /obj/item/clothing/shoes/sneakers/brown(src) - new /obj/item/weapon/paper/Court (src) - new /obj/item/weapon/paper/Court (src) - new /obj/item/weapon/paper/Court (src) - new /obj/item/weapon/pen (src) - new /obj/item/clothing/suit/judgerobe (src) - new /obj/item/clothing/head/powdered_wig (src) - new /obj/item/weapon/storage/briefcase(src) - return +/obj/structure/closet/secure_closet/courtroom/New() + ..() + sleep(2) + new /obj/item/clothing/shoes/sneakers/brown(src) + new /obj/item/weapon/paper/Court (src) + new /obj/item/weapon/paper/Court (src) + new /obj/item/weapon/paper/Court (src) + new /obj/item/weapon/pen (src) + new /obj/item/clothing/suit/judgerobe (src) + new /obj/item/clothing/head/powdered_wig (src) + new /obj/item/weapon/storage/briefcase(src) + return /obj/structure/closet/secure_closet/wall name = "wall locker" diff --git a/code/game/objects/structures/crates_lockers/closets/statue.dm b/code/game/objects/structures/crates_lockers/closets/statue.dm index 04c1f737b46..9b38707774e 100644 --- a/code/game/objects/structures/crates_lockers/closets/statue.dm +++ b/code/game/objects/structures/crates_lockers/closets/statue.dm @@ -23,6 +23,8 @@ L.client.eye = src L.loc = src L.sdisabilities += MUTE + L.faction += "mimic" //Stops mimics from instaqdeling people in statues + health = L.health + 100 //stoning damaged mobs will result in easier to shatter statues intialTox = L.getToxLoss() intialFire = L.getFireLoss() @@ -79,6 +81,7 @@ M.loc = src.loc M.sdisabilities -= MUTE M.take_overall_damage((M.health - health - 100),0) //any new damage the statue incurred is transfered to the mob + M.faction -= "mimic" if(M.client) M.client.eye = M.client.mob M.client.perspective = MOB_PERSPECTIVE @@ -154,4 +157,4 @@ qdel(src) /obj/structure/closet/statue/container_resist() - return + return \ No newline at end of file diff --git a/code/game/objects/structures/crates_lockers/closets/syndicate.dm b/code/game/objects/structures/crates_lockers/closets/syndicate.dm index fbc52019f21..d0aed1ca894 100644 --- a/code/game/objects/structures/crates_lockers/closets/syndicate.dm +++ b/code/game/objects/structures/crates_lockers/closets/syndicate.dm @@ -50,87 +50,87 @@ new /obj/item/device/pda/syndicate(src) return -/obj/structure/closet/syndicate/resources/ +/obj/structure/closet/syndicate/resources desc = "An old, dusty locker." - New() - ..() - var/common_min = 30 //Minimum amount of minerals in the stack for common minerals - var/common_max = 50 //Maximum amount of HONK in the stack for HONK common minerals - var/rare_min = 5 //Minimum HONK of HONK in the stack HONK HONK rare minerals - var/rare_max = 20 //Maximum HONK HONK HONK in the HONK for HONK rare HONK +/obj/structure/closet/syndicate/resources/New() + ..() + var/common_min = 30 //Minimum amount of minerals in the stack for common minerals + var/common_max = 50 //Maximum amount of HONK in the stack for HONK common minerals + var/rare_min = 5 //Minimum HONK of HONK in the stack HONK HONK rare minerals + var/rare_max = 20 //Maximum HONK HONK HONK in the HONK for HONK rare HONK - sleep(2) + sleep(2) - var/pickednum = rand(1, 50) + var/pickednum = rand(1, 50) - //Sad trombone - if(pickednum == 1) - var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(src) - P.name = "\improper IOU" - P.info = "Sorry man, we needed the money so we sold your stash. It's ok, we'll double our money for sure this time!" + //Sad trombone + if(pickednum == 1) + var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(src) + P.name = "\improper IOU" + P.info = "Sorry man, we needed the money so we sold your stash. It's ok, we'll double our money for sure this time!" - //Metal (common ore) - if(pickednum >= 2) - new /obj/item/stack/sheet/metal(src, rand(common_min, common_max)) + //Metal (common ore) + if(pickednum >= 2) + new /obj/item/stack/sheet/metal(src, rand(common_min, common_max)) - //Glass (common ore) - if(pickednum >= 5) - new /obj/item/stack/sheet/glass(src, rand(common_min, common_max)) + //Glass (common ore) + if(pickednum >= 5) + new /obj/item/stack/sheet/glass(src, rand(common_min, common_max)) - //Plasteel (common ore) Because it has a million more uses then plasma - if(pickednum >= 10) - new /obj/item/stack/sheet/plasteel(src, rand(common_min, common_max)) + //Plasteel (common ore) Because it has a million more uses then plasma + if(pickednum >= 10) + new /obj/item/stack/sheet/plasteel(src, rand(common_min, common_max)) - //Plasma (rare ore) - if(pickednum >= 15) - new /obj/item/stack/sheet/mineral/plasma(src, rand(rare_min, rare_max)) + //Plasma (rare ore) + if(pickednum >= 15) + new /obj/item/stack/sheet/mineral/plasma(src, rand(rare_min, rare_max)) - //Silver (rare ore) - if(pickednum >= 20) - new /obj/item/stack/sheet/mineral/silver(src, rand(rare_min, rare_max)) + //Silver (rare ore) + if(pickednum >= 20) + new /obj/item/stack/sheet/mineral/silver(src, rand(rare_min, rare_max)) - //Gold (rare ore) - if(pickednum >= 30) - new /obj/item/stack/sheet/mineral/gold(src, rand(rare_min, rare_max)) + //Gold (rare ore) + if(pickednum >= 30) + new /obj/item/stack/sheet/mineral/gold(src, rand(rare_min, rare_max)) - //Uranium (rare ore) - if(pickednum >= 40) - new /obj/item/stack/sheet/mineral/uranium(src, rand(rare_min, rare_max)) + //Uranium (rare ore) + if(pickednum >= 40) + new /obj/item/stack/sheet/mineral/uranium(src, rand(rare_min, rare_max)) - //Diamond (rare HONK) - if(pickednum >= 45) - new /obj/item/stack/sheet/mineral/diamond(src, rand(rare_min, rare_max)) + //Diamond (rare HONK) + if(pickednum >= 45) + new /obj/item/stack/sheet/mineral/diamond(src, rand(rare_min, rare_max)) - //Jetpack (You hit the jackpot!) - if(pickednum == 50) - new /obj/item/weapon/tank/jetpack/carbondioxide(src) + //Jetpack (You hit the jackpot!) + if(pickednum == 50) + new /obj/item/weapon/tank/jetpack/carbondioxide(src) - return + return /obj/structure/closet/syndicate/resources/everything desc = "It's an emergency storage closet for repairs." - New() - var/list/resources = list( - /obj/item/stack/sheet/metal, - /obj/item/stack/sheet/glass, - /obj/item/stack/sheet/mineral/gold, - /obj/item/stack/sheet/mineral/silver, - /obj/item/stack/sheet/mineral/plasma, - /obj/item/stack/sheet/mineral/uranium, - /obj/item/stack/sheet/mineral/diamond, - /obj/item/stack/sheet/mineral/clown, - /obj/item/stack/sheet/plasteel, - /obj/item/stack/rods - ) +/obj/structure/closet/syndicate/resources/everything/New() + var/list/resources = list( + /obj/item/stack/sheet/metal, + /obj/item/stack/sheet/glass, + /obj/item/stack/sheet/mineral/gold, + /obj/item/stack/sheet/mineral/silver, + /obj/item/stack/sheet/mineral/plasma, + /obj/item/stack/sheet/mineral/uranium, + /obj/item/stack/sheet/mineral/diamond, + /obj/item/stack/sheet/mineral/clown, + /obj/item/stack/sheet/plasteel, + /obj/item/stack/rods + ) - sleep(2) + sleep(2) - for(var/i = 0, i<2, i++) - for(var/res in resources) - var/obj/item/stack/R = new res(src) - R.amount = R.max_amount + for(var/i = 0, i<2, i++) + for(var/res in resources) + var/obj/item/stack/R = new res(src) + R.amount = R.max_amount - return \ No newline at end of file + return \ No newline at end of file diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 097d7b400ae..bdf97295bab 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -82,23 +82,23 @@ var/target_temp = T0C - 40 var/cooling_power = 40 - return_air() - var/datum/gas_mixture/gas = (..()) - if(!gas) return null - var/datum/gas_mixture/newgas = new/datum/gas_mixture() - newgas.oxygen = gas.oxygen - newgas.carbon_dioxide = gas.carbon_dioxide - newgas.nitrogen = gas.nitrogen - newgas.toxins = gas.toxins - newgas.volume = gas.volume - newgas.temperature = gas.temperature - if(newgas.temperature <= target_temp) return +/obj/structure/closet/crate/freezer/return_air() + var/datum/gas_mixture/gas = (..()) + if(!gas) return null + var/datum/gas_mixture/newgas = new/datum/gas_mixture() + newgas.oxygen = gas.oxygen + newgas.carbon_dioxide = gas.carbon_dioxide + newgas.nitrogen = gas.nitrogen + newgas.toxins = gas.toxins + newgas.volume = gas.volume + newgas.temperature = gas.temperature + if(newgas.temperature <= target_temp) return - if((newgas.temperature - cooling_power) > target_temp) - newgas.temperature -= cooling_power - else - newgas.temperature = target_temp - return newgas + if((newgas.temperature - cooling_power) > target_temp) + newgas.temperature -= cooling_power + else + newgas.temperature = target_temp + return newgas /obj/structure/closet/crate/radiation @@ -189,11 +189,12 @@ icon_opened = "hydrocrateopen" icon_closed = "hydrocrate" density = 1*/ - New() - ..() - new /obj/item/weapon/reagent_containers/spray/plantbgone(src) - new /obj/item/weapon/reagent_containers/spray/plantbgone(src) - new /obj/item/weapon/minihoe(src) + +/obj/structure/closet/crate/hydroponics/prespawned/New() + ..() + new /obj/item/weapon/reagent_containers/spray/plantbgone(src) + new /obj/item/weapon/reagent_containers/spray/plantbgone(src) + new /obj/item/weapon/minihoe(src) // new /obj/item/weapon/reagent_containers/spray/weedspray(src) // new /obj/item/weapon/reagent_containers/spray/weedspray(src) // new /obj/item/weapon/reagent_containers/spray/pestspray(src) diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm index db202e16461..bdef9f967bf 100644 --- a/code/game/objects/structures/door_assembly.dm +++ b/code/game/objects/structures/door_assembly.dm @@ -16,309 +16,309 @@ obj/structure/door_assembly var/glass_type = /obj/machinery/door/airlock/glass var/created_name = null - New() - base_icon_state = copytext(icon_state,1,lentext(icon_state)) +obj/structure/door_assembly/New() + base_icon_state = copytext(icon_state,1,lentext(icon_state)) - /obj/structure/door_assembly/door_assembly_0 - name = "airlock assembly" - icon_state = "door_as_1" - airlock_type = /obj/machinery/door/airlock - anchored = 1 - density = 1 - state = 1 +/obj/structure/door_assembly/door_assembly_0 + name = "airlock assembly" + icon_state = "door_as_1" + airlock_type = /obj/machinery/door/airlock + anchored = 1 + density = 1 + state = 1 - /obj/structure/door_assembly/door_assembly_com - name = "command airlock assembly" - icon_state = "door_as_com1" - glass_base_icon_state = "door_as_gcom" - typetext = "command" - icontext = "com" - glass_type = /obj/machinery/door/airlock/glass_command - airlock_type = /obj/machinery/door/airlock/command - anchored = 1 - density = 1 - state = 1 +/obj/structure/door_assembly/door_assembly_com + name = "command airlock assembly" + icon_state = "door_as_com1" + glass_base_icon_state = "door_as_gcom" + typetext = "command" + icontext = "com" + glass_type = /obj/machinery/door/airlock/glass_command + airlock_type = /obj/machinery/door/airlock/command + anchored = 1 + density = 1 + state = 1 - glass - mineral = "glass" - icon_state = "door_as_gcom1" +/obj/structure/door_assembly/door_assembly_com/glass + mineral = "glass" + icon_state = "door_as_gcom1" - /obj/structure/door_assembly/door_assembly_sec - name = "security airlock assembly" - icon_state = "door_as_sec1" - glass_base_icon_state = "door_as_gsec" - typetext = "security" - icontext = "sec" - glass_type = /obj/machinery/door/airlock/glass_security - airlock_type = /obj/machinery/door/airlock/security - anchored = 1 - density = 1 - state = 1 +/obj/structure/door_assembly/door_assembly_sec + name = "security airlock assembly" + icon_state = "door_as_sec1" + glass_base_icon_state = "door_as_gsec" + typetext = "security" + icontext = "sec" + glass_type = /obj/machinery/door/airlock/glass_security + airlock_type = /obj/machinery/door/airlock/security + anchored = 1 + density = 1 + state = 1 - glass - mineral = "glass" - icon_state = "door_as_gsec1" +/obj/structure/door_assembly/door_assembly_sec/glass + mineral = "glass" + icon_state = "door_as_gsec1" - /obj/structure/door_assembly/door_assembly_eng - name = "engineering airlock assembly" - icon_state = "door_as_eng1" - glass_base_icon_state = "door_as_geng" - typetext = "engineering" - icontext = "eng" - glass_type = /obj/machinery/door/airlock/glass_engineering - airlock_type = /obj/machinery/door/airlock/engineering - anchored = 1 - density = 1 - state = 1 +/obj/structure/door_assembly/door_assembly_eng + name = "engineering airlock assembly" + icon_state = "door_as_eng1" + glass_base_icon_state = "door_as_geng" + typetext = "engineering" + icontext = "eng" + glass_type = /obj/machinery/door/airlock/glass_engineering + airlock_type = /obj/machinery/door/airlock/engineering + anchored = 1 + density = 1 + state = 1 - glass - mineral = "glass" - icon_state = "door_as_geng1" +/obj/structure/door_assembly/door_assembly_eng/glass + mineral = "glass" + icon_state = "door_as_geng1" - /obj/structure/door_assembly/door_assembly_min - name = "mining airlock assembly" - icon_state = "door_as_min1" - glass_base_icon_state = "door_as_gmin" - typetext = "mining" - icontext = "min" - glass_type = /obj/machinery/door/airlock/glass_mining - airlock_type = /obj/machinery/door/airlock/mining - anchored = 1 - density = 1 - state = 1 +/obj/structure/door_assembly/door_assembly_min + name = "mining airlock assembly" + icon_state = "door_as_min1" + glass_base_icon_state = "door_as_gmin" + typetext = "mining" + icontext = "min" + glass_type = /obj/machinery/door/airlock/glass_mining + airlock_type = /obj/machinery/door/airlock/mining + anchored = 1 + density = 1 + state = 1 - glass - mineral = "glass" - icon_state = "door_as_gmin1" +/obj/structure/door_assembly/door_assembly_min/glass + mineral = "glass" + icon_state = "door_as_gmin1" - /obj/structure/door_assembly/door_assembly_atmo - name = "atmospherics airlock assembly" - icon_state = "door_as_atmo1" - glass_base_icon_state = "door_as_gatmo" - typetext = "atmos" - icontext = "atmo" - glass_type = /obj/machinery/door/airlock/glass_atmos - airlock_type = /obj/machinery/door/airlock/atmos - anchored = 1 - density = 1 - state = 1 +/obj/structure/door_assembly/door_assembly_atmo + name = "atmospherics airlock assembly" + icon_state = "door_as_atmo1" + glass_base_icon_state = "door_as_gatmo" + typetext = "atmos" + icontext = "atmo" + glass_type = /obj/machinery/door/airlock/glass_atmos + airlock_type = /obj/machinery/door/airlock/atmos + anchored = 1 + density = 1 + state = 1 - glass - mineral = "glass" - icon_state = "door_as_gatmo1" +/obj/structure/door_assembly/door_assembly_atmo/glass + mineral = "glass" + icon_state = "door_as_gatmo1" - /obj/structure/door_assembly/door_assembly_research - name = "research airlock assembly" - icon_state = "door_as_res1" - glass_base_icon_state = "door_as_gres" - typetext = "research" - icontext = "res" - glass_type = /obj/machinery/door/airlock/glass_research - airlock_type = /obj/machinery/door/airlock/research - anchored = 1 - density = 1 - state = 1 +/obj/structure/door_assembly/door_assembly_research + name = "research airlock assembly" + icon_state = "door_as_res1" + glass_base_icon_state = "door_as_gres" + typetext = "research" + icontext = "res" + glass_type = /obj/machinery/door/airlock/glass_research + airlock_type = /obj/machinery/door/airlock/research + anchored = 1 + density = 1 + state = 1 - glass - mineral = "glass" - icon_state = "door_as_gres1" +/obj/structure/door_assembly/door_assembly_research/glass + mineral = "glass" + icon_state = "door_as_gres1" - /obj/structure/door_assembly/door_assembly_science - name = "science airlock assembly" - icon_state = "door_as_sci1" - glass_base_icon_state = "door_as_gsci" - typetext = "science" - icontext = "sci" - glass_type = /obj/machinery/door/airlock/glass_science - airlock_type = /obj/machinery/door/airlock/science - anchored = 1 - density = 1 - state = 1 +/obj/structure/door_assembly/door_assembly_science + name = "science airlock assembly" + icon_state = "door_as_sci1" + glass_base_icon_state = "door_as_gsci" + typetext = "science" + icontext = "sci" + glass_type = /obj/machinery/door/airlock/glass_science + airlock_type = /obj/machinery/door/airlock/science + anchored = 1 + density = 1 + state = 1 - glass - mineral = "glass" - icon_state = "door_as_gsci1" +/obj/structure/door_assembly/door_assembly_science/glass + mineral = "glass" + icon_state = "door_as_gsci1" - /obj/structure/door_assembly/door_assembly_med - name = "medical airlock assembly" - icon_state = "door_as_med1" - typetext = "medical" - icontext = "med" - airlock_type = /obj/machinery/door/airlock/medical - anchored = 1 - density = 1 - state = 1 +/obj/structure/door_assembly/door_assembly_med + name = "medical airlock assembly" + icon_state = "door_as_med1" + typetext = "medical" + icontext = "med" + airlock_type = /obj/machinery/door/airlock/medical + anchored = 1 + density = 1 + state = 1 - glass - mineral = "glass" - icon_state = "door_as_gmed1" +/obj/structure/door_assembly/door_assembly_med/glass + mineral = "glass" + icon_state = "door_as_gmed1" - /obj/structure/door_assembly/door_assembly_mai - name = "maintenance airlock assembly" - icon_state = "door_as_mai1" - typetext = "maintenance" - icontext = "mai" - airlock_type = /obj/machinery/door/airlock/maintenance - anchored = 1 - density = 1 - state = 1 +/obj/structure/door_assembly/door_assembly_mai + name = "maintenance airlock assembly" + icon_state = "door_as_mai1" + typetext = "maintenance" + icontext = "mai" + airlock_type = /obj/machinery/door/airlock/maintenance + anchored = 1 + density = 1 + state = 1 - /obj/structure/door_assembly/door_assembly_ext - name = "external airlock assembly" - icon_state = "door_as_ext1" - typetext = "external" - icontext = "ext" - airlock_type = /obj/machinery/door/airlock/external - anchored = 1 - density = 1 - state = 1 +/obj/structure/door_assembly/door_assembly_ext + name = "external airlock assembly" + icon_state = "door_as_ext1" + typetext = "external" + icontext = "ext" + airlock_type = /obj/machinery/door/airlock/external + anchored = 1 + density = 1 + state = 1 - /obj/structure/door_assembly/door_assembly_fre - name = "freezer airlock assembly" - icon_state = "door_as_fre1" - typetext = "freezer" - icontext = "fre" - airlock_type = /obj/machinery/door/airlock/freezer - anchored = 1 - density = 1 - state = 1 +/obj/structure/door_assembly/door_assembly_fre + name = "freezer airlock assembly" + icon_state = "door_as_fre1" + typetext = "freezer" + icontext = "fre" + airlock_type = /obj/machinery/door/airlock/freezer + anchored = 1 + density = 1 + state = 1 - /obj/structure/door_assembly/door_assembly_hatch - name = "airtight hatch assembly" - icon_state = "door_as_hatch1" - typetext = "hatch" - icontext = "hatch" - airlock_type = /obj/machinery/door/airlock/hatch - anchored = 1 - density = 1 - state = 1 +/obj/structure/door_assembly/door_assembly_hatch + name = "airtight hatch assembly" + icon_state = "door_as_hatch1" + typetext = "hatch" + icontext = "hatch" + airlock_type = /obj/machinery/door/airlock/hatch + anchored = 1 + density = 1 + state = 1 - /obj/structure/door_assembly/door_assembly_mhatch - name = "maintenance hatch assembly" - icon_state = "door_as_mhatch1" - typetext = "maintenance_hatch" - icontext = "mhatch" - airlock_type = /obj/machinery/door/airlock/maintenance_hatch - anchored = 1 - density = 1 - state = 1 +/obj/structure/door_assembly/door_assembly_mhatch + name = "maintenance hatch assembly" + icon_state = "door_as_mhatch1" + typetext = "maintenance_hatch" + icontext = "mhatch" + airlock_type = /obj/machinery/door/airlock/maintenance_hatch + anchored = 1 + density = 1 + state = 1 - /obj/structure/door_assembly/door_assembly_glass - name = "glass airlock assembly" - icon_state = "door_as_g1" - airlock_type = /obj/machinery/door/airlock/glass - anchored = 1 - density = 1 - state = 1 - mineral = "glass" +/obj/structure/door_assembly/door_assembly_glass + name = "glass airlock assembly" + icon_state = "door_as_g1" + airlock_type = /obj/machinery/door/airlock/glass + anchored = 1 + density = 1 + state = 1 + mineral = "glass" - /obj/structure/door_assembly/door_assembly_gold - name = "gold airlock assembly" - icon_state = "door_as_gold1" - airlock_type = /obj/machinery/door/airlock/gold - anchored = 1 - density = 1 - state = 1 - mineral = "gold" +/obj/structure/door_assembly/door_assembly_gold + name = "gold airlock assembly" + icon_state = "door_as_gold1" + airlock_type = /obj/machinery/door/airlock/gold + anchored = 1 + density = 1 + state = 1 + mineral = "gold" - /obj/structure/door_assembly/door_assembly_silver - name = "silver airlock assembly" - icon_state = "door_as_silver1" - airlock_type = /obj/machinery/door/airlock/silver - anchored = 1 - density = 1 - state = 1 - mineral = "silver" +/obj/structure/door_assembly/door_assembly_silver + name = "silver airlock assembly" + icon_state = "door_as_silver1" + airlock_type = /obj/machinery/door/airlock/silver + anchored = 1 + density = 1 + state = 1 + mineral = "silver" - /obj/structure/door_assembly/door_assembly_diamond - name = "diamond airlock assembly" - icon_state = "door_as_diamond1" - airlock_type = /obj/machinery/door/airlock/diamond - anchored = 1 - density = 1 - state = 1 - mineral = "diamond" +/obj/structure/door_assembly/door_assembly_diamond + name = "diamond airlock assembly" + icon_state = "door_as_diamond1" + airlock_type = /obj/machinery/door/airlock/diamond + anchored = 1 + density = 1 + state = 1 + mineral = "diamond" - /obj/structure/door_assembly/door_assembly_uranium - name = "uranium airlock assembly" - icon_state = "door_as_uranium1" - airlock_type = /obj/machinery/door/airlock/uranium - anchored = 1 - density = 1 - state = 1 - mineral = "uranium" +/obj/structure/door_assembly/door_assembly_uranium + name = "uranium airlock assembly" + icon_state = "door_as_uranium1" + airlock_type = /obj/machinery/door/airlock/uranium + anchored = 1 + density = 1 + state = 1 + mineral = "uranium" - /obj/structure/door_assembly/door_assembly_plasma - name = "plasma airlock assembly" - icon_state = "door_as_plasma1" - airlock_type = /obj/machinery/door/airlock/plasma - anchored = 1 - density = 1 - state = 1 - mineral = "plasma" +/obj/structure/door_assembly/door_assembly_plasma + name = "plasma airlock assembly" + icon_state = "door_as_plasma1" + airlock_type = /obj/machinery/door/airlock/plasma + anchored = 1 + density = 1 + state = 1 + mineral = "plasma" - /obj/structure/door_assembly/door_assembly_clown - name = "bananium airlock assembly" - desc = "Honk" - icon_state = "door_as_clown1" - airlock_type = /obj/machinery/door/airlock/clown - anchored = 1 - density = 1 - state = 1 - mineral = "clown" +/obj/structure/door_assembly/door_assembly_clown + name = "bananium airlock assembly" + desc = "Honk" + icon_state = "door_as_clown1" + airlock_type = /obj/machinery/door/airlock/clown + anchored = 1 + density = 1 + state = 1 + mineral = "clown" - /obj/structure/door_assembly/door_assembly_sandstone - name = "sandstone airlock assembly" - icon_state = "door_as_sandstone1" - airlock_type = /obj/machinery/door/airlock/sandstone - anchored = 1 - density = 1 - state = 1 - mineral = "sandstone" +/obj/structure/door_assembly/door_assembly_sandstone + name = "sandstone airlock assembly" + icon_state = "door_as_sandstone1" + airlock_type = /obj/machinery/door/airlock/sandstone + anchored = 1 + density = 1 + state = 1 + mineral = "sandstone" - /obj/structure/door_assembly/door_assembly_highsecurity // Borrowing this until WJohnston makes sprites for the assembly - name = "high security airlock assembly" - icon_state = "door_as_highsec1" - typetext = "highsecurity" - icontext = "highsec" - airlock_type = /obj/machinery/door/airlock/highsecurity - anchored = 1 - density = 1 - state = 1 +/obj/structure/door_assembly/door_assembly_highsecurity // Borrowing this until WJohnston makes sprites for the assembly + name = "high security airlock assembly" + icon_state = "door_as_highsec1" + typetext = "highsecurity" + icontext = "highsec" + airlock_type = /obj/machinery/door/airlock/highsecurity + anchored = 1 + density = 1 + state = 1 - /obj/structure/door_assembly/door_assembly_vault - name = "vault door assembly" - icon_state = "door_as_vault1" - typetext = "vault" - icontext = "vault" - airlock_type = /obj/machinery/door/airlock/vault - anchored = 1 - density = 1 - state = 1 +/obj/structure/door_assembly/door_assembly_vault + name = "vault door assembly" + icon_state = "door_as_vault1" + typetext = "vault" + icontext = "vault" + airlock_type = /obj/machinery/door/airlock/vault + anchored = 1 + density = 1 + state = 1 - /obj/structure/door_assembly/door_assembly_shuttle - name = "shuttle airlock assembly" - icon_state = "door_as_shuttle1" - typetext = "shuttle" - icontext = "shuttle" - airlock_type = /obj/machinery/door/airlock/shuttle - anchored = 1 - density = 1 - state = 1 +/obj/structure/door_assembly/door_assembly_shuttle + name = "shuttle airlock assembly" + icon_state = "door_as_shuttle1" + typetext = "shuttle" + icontext = "shuttle" + airlock_type = /obj/machinery/door/airlock/shuttle + anchored = 1 + density = 1 + state = 1 - /obj/structure/door_assembly/door_assembly_wood - name = "wooden airlock assembly" - icon_state = "door_as_wood1" - airlock_type = /obj/machinery/door/airlock/wood - anchored = 1 - density = 1 - state = 1 - mineral = "wood" +/obj/structure/door_assembly/door_assembly_wood + name = "wooden airlock assembly" + icon_state = "door_as_wood1" + airlock_type = /obj/machinery/door/airlock/wood + anchored = 1 + density = 1 + state = 1 + mineral = "wood" /obj/structure/door_assembly/attackby(obj/item/W as obj, mob/user as mob) if(istype(W, /obj/item/weapon/pen)) var/t = copytext(stripped_input(user, "Enter the name for the door.", src.name, src.created_name),1,MAX_NAME_LEN) - if(!t) + if(!t) return if(!in_range(src, usr) && src.loc != usr) return @@ -426,7 +426,7 @@ obj/structure/door_assembly playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1) if(do_after(user, 40)) - if( !WT.isOn() ) + if( !WT.isOn() ) return user << " You've disassembled the airlock assembly." new /obj/item/stack/sheet/metal(get_turf(src), 4) @@ -447,7 +447,7 @@ obj/structure/door_assembly user.visible_message("[user] secures the airlock assembly to the floor.", "You start to secure the airlock assembly to the floor.") if(do_after(user, 40)) - if( src.anchored ) + if( src.anchored ) return user << " You've secured the airlock assembly." src.name = "secured airlock assembly" @@ -457,7 +457,7 @@ obj/structure/door_assembly playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1) user.visible_message("[user] unsecures the airlock assembly from the floor.", "You start to unsecure the airlock assembly from the floor.") if(do_after(user, 40)) - if( !src.anchored ) + if( !src.anchored ) return user << " You've unsecured the airlock assembly." src.name = "airlock assembly" @@ -469,11 +469,11 @@ obj/structure/door_assembly user << "You need one length of cable to wire the airlock assembly." return user.visible_message("[user] wires the airlock assembly.", "You start to wire the airlock assembly.") - if(do_after(user, 40)) + if(do_after(user, 40)) if(C.get_amount() < 1 || state != 0) return C.use(1) src.state = 1 - user << "You've wired the airlock assembly." + user << "You've wired the airlock assembly." src.name = "wired airlock assembly" else if(istype(W, /obj/item/weapon/wirecutters) && state == 1 ) @@ -481,7 +481,7 @@ obj/structure/door_assembly user.visible_message("[user] cuts the wires from the airlock assembly.", "You start to cut the wires from airlock assembly.") if(do_after(user, 40)) - if( src.state != 1 ) + if( src.state != 1 ) return user << " You've cut the wires from the airlock assembly." new/obj/item/stack/cable_coil(get_turf(user), 1) @@ -495,7 +495,7 @@ obj/structure/door_assembly W.loc = src if(do_after(user, 40)) - if( src.state != 1 ) + if( src.state != 1 ) return user << " You've installed the airlock electronics." src.state = 2 @@ -530,9 +530,9 @@ obj/structure/door_assembly if(G.type == /obj/item/stack/sheet/rglass) playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1) user.visible_message("[user] adds [G.name] to the airlock assembly.", "You start to install [G.name] into the airlock assembly.") - if(do_after(user, 40)) - if(G.get_amount() < 1 || mineral) return - user << "You've installed reinforced glass windows into the airlock assembly." + if(do_after(user, 40)) + if(G.get_amount() < 1 || mineral) return + user << "You've installed reinforced glass windows into the airlock assembly." G.use(1) mineral = "glass" name = "near finished window airlock assembly" @@ -553,9 +553,9 @@ obj/structure/door_assembly if(G.get_amount() >= 2) playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1) user.visible_message("[user] adds [G.name] to the airlock assembly.", "You start to install [G.name] into the airlock assembly.") - if(do_after(user, 40)) - if(G.get_amount() < 2 || mineral) return - user << "You've installed [M] plating into the airlock assembly." + if(do_after(user, 40)) + if(G.get_amount() < 2 || mineral) return + user << "You've installed [M] plating into the airlock assembly." G.use(2) mineral = "[M]" name = "near finished [M] airlock assembly" diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index bfaa43fd18a..514572d4e9b 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -5,199 +5,199 @@ layer = 2 var/state = 0 - attackby(obj/item/W as obj, mob/user as mob) - add_fingerprint(user) - if(istype(W, /obj/item/weapon/wrench) && state == 0) - if(anchored && !istype(src,/obj/structure/girder/displaced)) - playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1) - user << "Now disassembling the girder..." - if(do_after(user,40)) - if(!src) return - user << "You dissasembled the girder!" - new /obj/item/stack/sheet/metal(get_turf(src)) - qdel(src) - else if(!anchored) - playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1) - user << "Now securing the girder..." - if(do_after(user, 40)) - if(!src) return - user << "You secured the girder!" - var/obj/structure/girder/G = new (loc) - transfer_fingerprints_to(G) - qdel(src) - - else if(istype(W, /obj/item/weapon/pickaxe/plasmacutter)) - user << "Now slicing apart the girder..." - if(do_after(user,30)) +/obj/structure/girder/attackby(obj/item/W as obj, mob/user as mob) + add_fingerprint(user) + if(istype(W, /obj/item/weapon/wrench) && state == 0) + if(anchored && !istype(src,/obj/structure/girder/displaced)) + playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1) + user << "Now disassembling the girder..." + if(do_after(user,40)) if(!src) return - user << "You slice apart the girder!" + user << "You dissasembled the girder!" new /obj/item/stack/sheet/metal(get_turf(src)) qdel(src) - - else if(istype(W, /obj/item/weapon/pickaxe/diamonddrill)) - user << "You drill through the girder!" - new /obj/item/stack/sheet/metal(get_turf(src)) - qdel(src) - - else if(istype(W, /obj/item/weapon/screwdriver) && state == 2 && istype(src,/obj/structure/girder/reinforced)) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1) - user << "Now unsecuring support struts..." - if(do_after(user,40)) + else if(!anchored) + playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1) + user << "Now securing the girder..." + if(do_after(user, 40)) if(!src) return - user << "You unsecured the support struts!" - state = 1 - - else if(istype(W, /obj/item/weapon/wirecutters) && istype(src,/obj/structure/girder/reinforced) && state == 1) - playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1) - user << "Now removing support struts..." - if(do_after(user,40)) - if(!src) return - user << "You removed the support struts!" + user << "You secured the girder!" var/obj/structure/girder/G = new (loc) transfer_fingerprints_to(G) qdel(src) - else if(istype(W, /obj/item/weapon/crowbar) && state == 0 && anchored ) - playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1) - user << "Now dislodging the girder..." - if(do_after(user, 40)) - if(!src) return - user << "You dislodged the girder!" - var/obj/structure/girder/displaced/D = new (loc) - transfer_fingerprints_to(D) - qdel(src) + else if(istype(W, /obj/item/weapon/pickaxe/plasmacutter)) + user << "Now slicing apart the girder..." + if(do_after(user,30)) + if(!src) return + user << "You slice apart the girder!" + new /obj/item/stack/sheet/metal(get_turf(src)) + qdel(src) - else if(istype(W, /obj/item/stack/sheet)) + else if(istype(W, /obj/item/weapon/pickaxe/diamonddrill)) + user << "You drill through the girder!" + new /obj/item/stack/sheet/metal(get_turf(src)) + qdel(src) - var/obj/item/stack/sheet/S = W - switch(S.type) + else if(istype(W, /obj/item/weapon/screwdriver) && state == 2 && istype(src,/obj/structure/girder/reinforced)) + playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1) + user << "Now unsecuring support struts..." + if(do_after(user,40)) + if(!src) return + user << "You unsecured the support struts!" + state = 1 - if(/obj/item/stack/sheet/metal, /obj/item/stack/sheet/metal/cyborg) - if(!anchored) - if (S.use(2)) - user << "You 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 - user << "You need two sheets of metal to create a false wall." - return - else - if(S.get_amount() < 2) - user << "You need two sheets of metal to finish a wall." - return - user << "Now adding plating..." - if (do_after(user, 40)) - if(loc == null || S.get_amount() < 2) - return - S.use(2) - user << "You added the plating!" - var/turf/Tsrc = get_turf(src) - Tsrc.ChangeTurf(/turf/simulated/wall) - for(var/turf/simulated/wall/X in Tsrc.loc) - if(X) - transfer_fingerprints_to(X) - qdel(src) - return + else if(istype(W, /obj/item/weapon/wirecutters) && istype(src,/obj/structure/girder/reinforced) && state == 1) + playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1) + user << "Now removing support struts..." + if(do_after(user,40)) + if(!src) return + user << "You removed the support struts!" + var/obj/structure/girder/G = new (loc) + transfer_fingerprints_to(G) + qdel(src) - if(/obj/item/stack/sheet/plasteel) - if(!anchored) - if(S.amount < 2) - user << "You need at least two sheets to create a false wall." - return - S.use(2) + else if(istype(W, /obj/item/weapon/crowbar) && state == 0 && anchored ) + playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1) + user << "Now dislodging the girder..." + if(do_after(user, 40)) + if(!src) return + user << "You dislodged the girder!" + var/obj/structure/girder/displaced/D = new (loc) + transfer_fingerprints_to(D) + qdel(src) + + else if(istype(W, /obj/item/stack/sheet)) + + var/obj/item/stack/sheet/S = W + switch(S.type) + + if(/obj/item/stack/sheet/metal, /obj/item/stack/sheet/metal/cyborg) + if(!anchored) + if (S.use(2)) user << "You create a false wall! Push on it to open or close the passage." - var/obj/structure/falsewall/reinforced/FW = new (loc) - transfer_fingerprints_to(FW) + var/obj/structure/falsewall/F = new (loc) + transfer_fingerprints_to(F) qdel(src) else - if (src.icon_state == "reinforced") //I cant believe someone would actually write this line of code... - if(S.amount < 1) return ..() - user << "Now finalising reinforced wall..." - if(do_after(user, 50)) - if(!src || !S || S.amount < 1) return - S.use(1) - user << "Wall fully reinforced!" - var/turf/Tsrc = get_turf(src) - Tsrc.ChangeTurf(/turf/simulated/wall/r_wall) - for(var/turf/simulated/wall/r_wall/X in Tsrc.loc) - if(X) transfer_fingerprints_to(X) - qdel(src) - return - else - if(S.amount < 1) return ..() - user << "Now reinforcing girders..." - if (do_after(user,60)) - if(!src || !S || S.amount < 1) return - S.use(1) - user << "Girders reinforced!" - var/obj/structure/girder/reinforced/R = new (loc) - transfer_fingerprints_to(R) - qdel(src) + user << "You need two sheets of metal to create a false wall." + return + else + if(S.get_amount() < 2) + user << "You need two sheets of metal to finish a wall." + return + user << "Now adding plating..." + if (do_after(user, 40)) + if(loc == null || S.get_amount() < 2) return + S.use(2) + user << "You added the plating!" + var/turf/Tsrc = get_turf(src) + Tsrc.ChangeTurf(/turf/simulated/wall) + for(var/turf/simulated/wall/X in Tsrc.loc) + if(X) + transfer_fingerprints_to(X) + qdel(src) + return - if(S.sheettype) - var/M = S.sheettype + if(/obj/item/stack/sheet/plasteel) if(!anchored) if(S.amount < 2) user << "You need at least two sheets to create a false wall." return S.use(2) user << "You 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) + var/obj/structure/falsewall/reinforced/FW = new (loc) transfer_fingerprints_to(FW) qdel(src) else - if(S.amount < 2) return ..() - user << "Now adding plating..." - if (do_after(user,40)) - if(!src || !S || S.amount < 2) return - S.use(2) - user << "You added the plating!" - var/turf/Tsrc = get_turf(src) - Tsrc.ChangeTurf(text2path("/turf/simulated/wall/mineral/[M]")) - for(var/turf/simulated/wall/mineral/X in Tsrc.loc) - if(X) transfer_fingerprints_to(X) - qdel(src) + if (src.icon_state == "reinforced") //I cant believe someone would actually write this line of code... + if(S.amount < 1) return ..() + user << "Now finalising reinforced wall..." + if(do_after(user, 50)) + if(!src || !S || S.amount < 1) return + S.use(1) + user << "Wall fully reinforced!" + var/turf/Tsrc = get_turf(src) + Tsrc.ChangeTurf(/turf/simulated/wall/r_wall) + for(var/turf/simulated/wall/r_wall/X in Tsrc.loc) + if(X) transfer_fingerprints_to(X) + qdel(src) + return + else + if(S.amount < 1) return ..() + user << "Now reinforcing girders..." + if (do_after(user,60)) + if(!src || !S || S.amount < 1) return + S.use(1) + user << "Girders reinforced!" + var/obj/structure/girder/reinforced/R = new (loc) + transfer_fingerprints_to(R) + qdel(src) + return + + if(S.sheettype) + var/M = S.sheettype + if(!anchored) + if(S.amount < 2) + user << "You need at least two sheets to create a false wall." return - - add_hiddenprint(usr) - - else if(istype(W, /obj/item/pipe)) - var/obj/item/pipe/P = W - if (P.pipe_type in list(0, 1, 5)) //simple pipes, simple bends, and simple manifolds. - user.drop_item() - P.loc = src.loc - user << "You fit the pipe into the [src]!" - else - ..() - - - blob_act() - if(prob(40)) - qdel(src) - - - ex_act(severity) - switch(severity) - if(1.0) + S.use(2) + user << "You 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) - return - if(2.0) - if (prob(30)) - var/remains = pick(/obj/item/stack/rods,/obj/item/stack/sheet/metal) - new remains(loc) - qdel(src) - return - if(3.0) - if (prob(5)) - var/remains = pick(/obj/item/stack/rods,/obj/item/stack/sheet/metal) - new remains(loc) - qdel(src) - return else - return + if(S.amount < 2) return ..() + user << "Now adding plating..." + if (do_after(user,40)) + if(!src || !S || S.amount < 2) return + S.use(2) + user << "You added the plating!" + var/turf/Tsrc = get_turf(src) + Tsrc.ChangeTurf(text2path("/turf/simulated/wall/mineral/[M]")) + for(var/turf/simulated/wall/mineral/X in Tsrc.loc) + if(X) transfer_fingerprints_to(X) + qdel(src) + return + + add_hiddenprint(usr) + + else if(istype(W, /obj/item/pipe)) + var/obj/item/pipe/P = W + if (P.pipe_type in list(0, 1, 5)) //simple pipes, simple bends, and simple manifolds. + user.drop_item() + P.loc = src.loc + user << "You fit the pipe into the [src]!" + else + ..() + + +/obj/structure/girder/blob_act() + if(prob(40)) + qdel(src) + + +/obj/structure/girder/ex_act(severity) + switch(severity) + if(1.0) + qdel(src) + return + if(2.0) + if (prob(30)) + var/remains = pick(/obj/item/stack/rods,/obj/item/stack/sheet/metal) + new remains(loc) + qdel(src) + return + if(3.0) + if (prob(5)) + var/remains = pick(/obj/item/stack/rods,/obj/item/stack/sheet/metal) + new remains(loc) + qdel(src) + return + else + return /obj/structure/girder/displaced icon_state = "displaced" @@ -214,50 +214,50 @@ density = 1 layer = 2 - attackby(obj/item/W as obj, mob/user as mob) - if(istype(W, /obj/item/weapon/wrench)) - playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1) - user << "Now disassembling the girder..." - if(do_after(user,40)) - user << "You dissasembled the girder!" - var/obj/effect/decal/remains/human/R = new (get_turf(src)) - transfer_fingerprints_to(R) - qdel(src) - - else if(istype(W, /obj/item/weapon/pickaxe/plasmacutter)) - user << "Now slicing apart the girder..." - if(do_after(user,30)) - user << "You slice apart the girder!" - var/obj/effect/decal/remains/human/R = new (get_turf(src)) - transfer_fingerprints_to(R) - qdel(src) - - else if(istype(W, /obj/item/weapon/pickaxe/diamonddrill)) - user << "You drill through the girder!" - if(do_after(user, 5)) - var/obj/effect/decal/remains/human/R = new (get_turf(src)) - transfer_fingerprints_to(R) - qdel(src) - - blob_act() - if(prob(40)) +/obj/structure/cultgirder/attackby(obj/item/W as obj, mob/user as mob) + if(istype(W, /obj/item/weapon/wrench)) + playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1) + user << "Now disassembling the girder..." + if(do_after(user,40)) + user << "You dissasembled the girder!" + var/obj/effect/decal/remains/human/R = new (get_turf(src)) + transfer_fingerprints_to(R) qdel(src) + else if(istype(W, /obj/item/weapon/pickaxe/plasmacutter)) + user << "Now slicing apart the girder..." + if(do_after(user,30)) + user << "You slice apart the girder!" + var/obj/effect/decal/remains/human/R = new (get_turf(src)) + transfer_fingerprints_to(R) + qdel(src) - ex_act(severity) - switch(severity) - if(1.0) + else if(istype(W, /obj/item/weapon/pickaxe/diamonddrill)) + user << "You drill through the girder!" + if(do_after(user, 5)) + var/obj/effect/decal/remains/human/R = new (get_turf(src)) + transfer_fingerprints_to(R) + qdel(src) + +/obj/structure/cultgirder/blob_act() + if(prob(40)) + qdel(src) + + +/obj/structure/cultgirder/ex_act(severity) + switch(severity) + if(1.0) + qdel(src) + return + if(2.0) + if (prob(30)) + new /obj/effect/decal/remains/human(loc) qdel(src) - return - if(2.0) - if (prob(30)) - new /obj/effect/decal/remains/human(loc) - qdel(src) - return - if(3.0) - if (prob(5)) - new /obj/effect/decal/remains/human(loc) - qdel(src) - return - else - return \ No newline at end of file + return + if(3.0) + if (prob(5)) + new /obj/effect/decal/remains/human(loc) + qdel(src) + return + else + return \ No newline at end of file diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index a526f7ec191..df18f1b114e 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -120,51 +120,52 @@ //window placing begin else if(istype(W, /obj/item/stack/sheet/rglass) || istype(W, /obj/item/stack/sheet/glass)) - var/obj/item/stack/ST = W - if (ST.get_amount() < 1) - user << "You need at least one sheet of glass for that." - return - var/dir_to_set = 1 - if(loc == user.loc) - dir_to_set = user.dir - else - if( ( x == user.x ) || (y == user.y) ) //Only supposed to work for cardinal directions. - if( x == user.x ) - if( y > user.y ) - dir_to_set = 2 - else - dir_to_set = 1 - else if( y == user.y ) - if( x > user.x ) - dir_to_set = 8 - else - dir_to_set = 4 - else - user << "You can't reach." - return //Only works for cardinal direcitons, diagonals aren't supposed to work like this. - for(var/obj/structure/window/WINDOW in loc) - if(WINDOW.dir == dir_to_set) - user << "There is already a window facing this way there." + if (!destroyed) + var/obj/item/stack/ST = W + if (ST.get_amount() < 1) + user << "You need at least one sheet of glass for that." return - user << "You start placing the window." - if(do_after(user,20)) - if(!src) return //Grille destroyed while waiting + var/dir_to_set = 1 + if(loc == user.loc) + dir_to_set = user.dir + else + if( ( x == user.x ) || (y == user.y) ) //Only supposed to work for cardinal directions. + if( x == user.x ) + if( y > user.y ) + dir_to_set = 2 + else + dir_to_set = 1 + else if( y == user.y ) + if( x > user.x ) + dir_to_set = 8 + else + dir_to_set = 4 + else + user << "You can't reach." + return //Only works for cardinal direcitons, diagonals aren't supposed to work like this. for(var/obj/structure/window/WINDOW in loc) - if(WINDOW.dir == dir_to_set)//checking this for a 2nd time to check if a window was made while we were waiting. + if(WINDOW.dir == dir_to_set) user << "There is already a window facing this way there." return - var/obj/structure/window/WD - if(istype(W, /obj/item/stack/sheet/rglass)) - WD = new/obj/structure/window(loc,1) //reinforced window - else - WD = new/obj/structure/window(loc,0) //normal window - WD.dir = dir_to_set - WD.ini_dir = dir_to_set - WD.anchored = 0 - WD.state = 0 - ST.use(1) - user << "You place the [WD] on [src]." - return + user << "You start placing the window." + if(do_after(user,20)) + if(!src) return //Grille destroyed while waiting + for(var/obj/structure/window/WINDOW in loc) + if(WINDOW.dir == dir_to_set)//checking this for a 2nd time to check if a window was made while we were waiting. + user << "There is already a window facing this way there." + return + var/obj/structure/window/WD + if(istype(W, /obj/item/stack/sheet/rglass)) + WD = new/obj/structure/window(loc,1) //reinforced window + else + WD = new/obj/structure/window(loc,0) //normal window + WD.dir = dir_to_set + WD.ini_dir = dir_to_set + WD.anchored = 0 + WD.state = 0 + ST.use(1) + user << "You place the [WD] on [src]." + return //window placing end else if(istype(W, /obj/item/weapon/shard)) @@ -184,13 +185,12 @@ /obj/structure/grille/proc/healthcheck() if(health <= 0) - var/obj/item/stack/rods/newrods = new(loc) - transfer_fingerprints_to(newrods) - if(!destroyed) icon_state = "brokengrille" density = 0 destroyed = 1 + var/obj/item/stack/rods/newrods = new(loc) + transfer_fingerprints_to(newrods) else if(health <= -6) diff --git a/code/game/objects/structures/kitchen_spike.dm b/code/game/objects/structures/kitchen_spike.dm index 82c7850793e..e1a1c6b449d 100644 --- a/code/game/objects/structures/kitchen_spike.dm +++ b/code/game/objects/structures/kitchen_spike.dm @@ -11,70 +11,69 @@ var/occupied = 0 var/meattype = 0 // 0 - Nothing, 1 - Monkey, 2 - Xeno -/obj/structure/kitchenspike - attack_paw(mob/user as mob) - return src.attack_hand(usr) +/obj/structure/kitchenspike/attack_paw(mob/user as mob) + return src.attack_hand(usr) - attackby(obj/item/weapon/grab/G as obj, mob/user as mob) - if(!istype(G, /obj/item/weapon/grab)) - return - if(istype(G.affecting, /mob/living/carbon/monkey)) - if(src.occupied == 0) - src.icon_state = "spikebloody" - src.occupied = 1 - src.meat = 5 - src.meattype = 1 - for(var/mob/O in viewers(src, null)) - O.show_message(text("\red [user] has forced [G.affecting] onto the spike, killing them instantly!")) - qdel(G.affecting) - qdel(G) +/obj/structure/kitchenspike/attackby(obj/item/weapon/grab/G as obj, mob/user as mob) + if(!istype(G, /obj/item/weapon/grab)) + return + if(istype(G.affecting, /mob/living/carbon/monkey)) + if(src.occupied == 0) + src.icon_state = "spikebloody" + src.occupied = 1 + src.meat = 5 + src.meattype = 1 + for(var/mob/O in viewers(src, null)) + O.show_message(text("\red [user] has forced [G.affecting] onto the spike, killing them instantly!")) + qdel(G.affecting) + qdel(G) - else - user << "\red The spike already has something on it, finish collecting its meat first!" - else if(istype(G.affecting, /mob/living/carbon/alien)) - if(src.occupied == 0) - src.icon_state = "spikebloodygreen" - src.occupied = 1 - src.meat = 5 - src.meattype = 2 - for(var/mob/O in viewers(src, null)) - O.show_message(text("\red [user] has forced [G.affecting] onto the spike, killing them instantly!")) - qdel(G.affecting) - qdel(G) - else - user << "\red The spike already has something on it, finish collecting its meat first!" else - user << "\red They are too big for the spike, try something smaller!" - return + user << "\red The spike already has something on it, finish collecting its meat first!" + else if(istype(G.affecting, /mob/living/carbon/alien)) + if(src.occupied == 0) + src.icon_state = "spikebloodygreen" + src.occupied = 1 + src.meat = 5 + src.meattype = 2 + for(var/mob/O in viewers(src, null)) + O.show_message(text("\red [user] has forced [G.affecting] onto the spike, killing them instantly!")) + qdel(G.affecting) + qdel(G) + else + user << "\red The spike already has something on it, finish collecting its meat first!" + else + user << "\red They are too big for the spike, try something smaller!" + return -// MouseDrop_T(var/atom/movable/C, mob/user) -// if(istype(C, /obj/mob/carbon/monkey) -// else if(istype(C, /obj/mob/carbon/alien) && !istype(C, /mob/living/carbon/alien/larva/slime)) -// else if(istype(C, /obj/livestock/spesscarp +///obj/structure/kitchenspike/MouseDrop_T(var/atom/movable/C, mob/user) +// if(istype(C, /obj/mob/carbon/monkey) +// else if(istype(C, /obj/mob/carbon/alien) && !istype(C, /mob/living/carbon/alien/larva/slime)) +// else if(istype(C, /obj/livestock/spesscarp - attack_hand(mob/user as mob) - if(..()) - return - if(src.occupied) - if(src.meattype == 1) - if(src.meat > 1) - src.meat-- - new /obj/item/weapon/reagent_containers/food/snacks/meat/monkey( src.loc ) - usr << "You remove some meat from the monkey." - else if(src.meat == 1) - src.meat-- - new /obj/item/weapon/reagent_containers/food/snacks/meat/monkey(src.loc) - usr << "You remove the last piece of meat from the monkey!" - src.icon_state = "spike" - src.occupied = 0 - else if(src.meattype == 2) - if(src.meat > 1) - src.meat-- - new /obj/item/weapon/reagent_containers/food/snacks/xenomeat( src.loc ) - usr << "You remove some meat from the alien." - else if(src.meat == 1) - src.meat-- - new /obj/item/weapon/reagent_containers/food/snacks/xenomeat(src.loc) - usr << "You remove the last piece of meat from the alien!" - src.icon_state = "spike" - src.occupied = 0 \ No newline at end of file +/obj/structure/kitchenspike/attack_hand(mob/user as mob) + if(..()) + return + if(src.occupied) + if(src.meattype == 1) + if(src.meat > 1) + src.meat-- + new /obj/item/weapon/reagent_containers/food/snacks/meat/monkey( src.loc ) + usr << "You remove some meat from the monkey." + else if(src.meat == 1) + src.meat-- + new /obj/item/weapon/reagent_containers/food/snacks/meat/monkey(src.loc) + usr << "You remove the last piece of meat from the monkey!" + src.icon_state = "spike" + src.occupied = 0 + else if(src.meattype == 2) + if(src.meat > 1) + src.meat-- + new /obj/item/weapon/reagent_containers/food/snacks/xenomeat( src.loc ) + usr << "You remove some meat from the alien." + else if(src.meat == 1) + src.meat-- + new /obj/item/weapon/reagent_containers/food/snacks/xenomeat(src.loc) + usr << "You remove the last piece of meat from the alien!" + src.icon_state = "spike" + src.occupied = 0 diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index b22febb5900..e18c9ef7b6c 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -103,6 +103,32 @@ tools = list(/obj/item/weapon/screwdriver) time = 20 +/datum/table_recipe/meteorshot + name = "Meteorshot Shell" + result_path = /obj/item/ammo_casing/shotgun/meteorshot + reqs = list(/obj/item/ammo_casing/shotgun/techshell = 1, + /obj/item/weapon/rcd_ammo = 1, + /obj/item/weapon/stock_parts/manipulator = 2) + tools = list(/obj/item/weapon/screwdriver) + time = 5 + +/datum/table_recipe/pulseslug + name = "Pulse Slug Shell" + result_path = /obj/item/ammo_casing/shotgun/pulseslug + reqs = list(/obj/item/ammo_casing/shotgun/techshell = 1, + /obj/item/weapon/stock_parts/capacitor/adv = 2, + /obj/item/weapon/stock_parts/micro_laser/ultra = 1) + tools = list(/obj/item/weapon/screwdriver) + time = 5 + +/datum/table_recipe/dragonsbreath + name = "Dragonsbreath Shell" + result_path = /obj/item/ammo_casing/shotgun/incendiary/dragonsbreath + reqs = list(/obj/item/ammo_casing/shotgun/techshell = 1, + /datum/reagent/phosphorus = 5,) + tools = list(/obj/item/weapon/screwdriver) + time = 5 + /obj/structure/table name = "table" diff --git a/code/game/objects/structures/target_stake.dm b/code/game/objects/structures/target_stake.dm index 7b972e6b0b9..9f0f6e9686e 100644 --- a/code/game/objects/structures/target_stake.dm +++ b/code/game/objects/structures/target_stake.dm @@ -8,45 +8,45 @@ flags = CONDUCT var/obj/item/target/pinned_target // the current pinned target - Move() - ..() - // Move the pinned target along with the stake - if(pinned_target in view(3, src)) - pinned_target.loc = loc +/obj/structure/target_stake/Move() + ..() + // Move the pinned target along with the stake + if(pinned_target in view(3, src)) + pinned_target.loc = loc - else // Sanity check: if the pinned target can't be found in immediate view - pinned_target = null - density = 1 + else // Sanity check: if the pinned target can't be found in immediate view + pinned_target = null + density = 1 - attackby(obj/item/W as obj, mob/user as mob) - // Putting objects on the stake. Most importantly, targets - if(pinned_target) - return // get rid of that pinned target first! +/obj/structure/target_stake/attackby(obj/item/W as obj, mob/user as mob) + // Putting objects on the stake. Most importantly, targets + if(pinned_target) + return // get rid of that pinned target first! - if(istype(W, /obj/item/target)) - density = 0 - W.density = 1 - user.drop_item() - W.loc = loc - W.layer = 3.1 - pinned_target = W - user << "You slide the target into the stake." - return + if(istype(W, /obj/item/target)) + density = 0 + W.density = 1 + user.drop_item() + W.loc = loc + W.layer = 3.1 + pinned_target = W + user << "You slide the target into the stake." + return - attack_hand(mob/user as mob) - // taking pinned targets off! - if(pinned_target) - density = 1 - pinned_target.density = 0 - pinned_target.layer = OBJ_LAYER +/obj/structure/target_stake/attack_hand(mob/user as mob) + // taking pinned targets off! + if(pinned_target) + density = 1 + pinned_target.density = 0 + pinned_target.layer = OBJ_LAYER - pinned_target.loc = user.loc - if(ishuman(user)) - if(!user.get_active_hand()) - user.put_in_hands(pinned_target) - user << "You take the target out of the stake." - else - pinned_target.loc = get_turf(user) + pinned_target.loc = user.loc + if(ishuman(user)) + if(!user.get_active_hand()) + user.put_in_hands(pinned_target) user << "You take the target out of the stake." + else + pinned_target.loc = get_turf(user) + user << "You take the target out of the stake." - pinned_target = null \ No newline at end of file + pinned_target = null diff --git a/code/game/smoothwall.dm b/code/game/smoothwall.dm index 9078e262b45..29800a163e8 100644 --- a/code/game/smoothwall.dm +++ b/code/game/smoothwall.dm @@ -97,14 +97,11 @@ ..()*/ /turf/simulated/wall/Del() - - var/temploc = src.loc - spawn(10) - for(var/turf/simulated/wall/W in range(temploc,1)) + for(var/turf/simulated/wall/W in range(src,1)) W.relativewall() - for(var/obj/structure/falsewall/W in range(temploc,1)) + for(var/obj/structure/falsewall/W in range(src,1)) W.relativewall() for(var/direction in cardinal) @@ -114,19 +111,8 @@ shroom.icon_state = "glowshroomf" shroom.pixel_x = 0 shroom.pixel_y = 0 - ..() -/*/turf/simulated/shuttle/wall/Del() - - var/temploc = src.loc - - spawn(10) - for(var/turf/simulated/shuttle/wall/W in range(temploc,1)) - W.relativewall() - - ..()*/ - /turf/simulated/wall/relativewall() if(istype(src,/turf/simulated/wall/vault)) //HACK!!! return diff --git a/code/game/turfs/simulated/dirtystation.dm b/code/game/turfs/simulated/dirtystation.dm index a9c7e18f082..c47f0c55da5 100644 --- a/code/game/turfs/simulated/dirtystation.dm +++ b/code/game/turfs/simulated/dirtystation.dm @@ -6,24 +6,27 @@ /obj/effect/decal/cleanable/blood/old name = "dried blood" desc = "Looks like it's been here a while. Eew." - New() - ..() - icon_state += "-old" + +/obj/effect/decal/cleanable/blood/old/New() + ..() + icon_state += "-old" /obj/effect/decal/cleanable/blood/gibs/old name = "old rotting gibs" desc = "Oh god, why didn't anyone clean this up? It smells terrible." - New() - ..() - icon_state += "-old" - dir = pick(1,2,4,8) + +/obj/effect/decal/cleanable/blood/gibs/old/New() + ..() + icon_state += "-old" + dir = pick(1,2,4,8) /obj/effect/decal/cleanable/vomit/old name = "crusty dried vomit" desc = "You try not to look at the chunks, and fail." - New() - ..() - icon_state += "-old" + +/obj/effect/decal/cleanable/vomit/old/New() + ..() + icon_state += "-old" /obj/effect/decal/cleanable/robot_debris/old name = "dusty robot debris" diff --git a/code/game/turfs/simulated/floor_types.dm b/code/game/turfs/simulated/floor_types.dm index 97c433114f5..bde21ba4e57 100644 --- a/code/game/turfs/simulated/floor_types.dm +++ b/code/game/turfs/simulated/floor_types.dm @@ -5,9 +5,9 @@ nitrogen = 0.01 temperature = TCMB - New() - ..() - name = "floor" +/turf/simulated/floor/airless/New() + ..() + name = "floor" /turf/simulated/floor/light name = "Light floor" @@ -15,14 +15,14 @@ icon_state = "light_on" floor_tile = new/obj/item/stack/tile/light - New() - floor_tile.New() //I guess New() isn't run on objects spawned without the definition of a turf to house them, ah well. - var/n = name //just in case commands rename it in the ..() call - ..() - spawn(4) - if(src) - update_icon() - name = n +/turf/simulated/floor/light/New() + floor_tile.New() //I guess New() isn't run on objects spawned without the definition of a turf to house them, ah well. + var/n = name //just in case commands rename it in the ..() call + ..() + spawn(4) + if(src) + update_icon() + name = n @@ -68,17 +68,16 @@ icon_state = "cult" -/turf/simulated/floor/engine/n20 - New() - ..() - var/datum/gas_mixture/adding = new - var/datum/gas/sleeping_agent/trace_gas = new +/turf/simulated/floor/engine/n20/New() + ..() + var/datum/gas_mixture/adding = new + var/datum/gas/sleeping_agent/trace_gas = new - trace_gas.moles = 6000 - adding.trace_gases += trace_gas - adding.temperature = T20C + trace_gas.moles = 6000 + adding.trace_gases += trace_gas + adding.temperature = T20C - assume_air(adding) + assume_air(adding) /turf/simulated/floor/engine/vacuum name = "vacuum floor" @@ -100,9 +99,9 @@ nitrogen = 0.01 temperature = TCMB - New() - ..() - name = "plating" +/turf/simulated/floor/plating/airless/New() + ..() + name = "plating" /turf/simulated/floor/bluegrid icon = 'icons/turf/floors.dmi' @@ -163,35 +162,35 @@ icon_state = "grass1" floor_tile = new/obj/item/stack/tile/grass - New() - floor_tile.New() //I guess New() isn't ran on objects spawned without the definition of a turf to house them, ah well. - icon_state = "grass[pick("1","2","3","4")]" - ..() - spawn(4) - if(src) - update_icon() - for(var/direction in cardinal) - if(istype(get_step(src,direction),/turf/simulated/floor)) - var/turf/simulated/floor/FF = get_step(src,direction) - FF.update_icon() //so siding get updated properly +/turf/simulated/floor/grass/New() + floor_tile.New() //I guess New() isn't ran on objects spawned without the definition of a turf to house them, ah well. + icon_state = "grass[pick("1","2","3","4")]" + ..() + spawn(4) + if(src) + update_icon() + for(var/direction in cardinal) + if(istype(get_step(src,direction),/turf/simulated/floor)) + var/turf/simulated/floor/FF = get_step(src,direction) + FF.update_icon() //so siding get updated properly /turf/simulated/floor/carpet name = "Carpet" icon_state = "carpet" floor_tile = new/obj/item/stack/tile/carpet - New() - floor_tile.New() //I guess New() isn't ran on objects spawned without the definition of a turf to house them, ah well. - if(!icon_state) - icon_state = "carpet" - ..() - spawn(4) - if(src) - update_icon() - for(var/direction in list(1,2,4,8,5,6,9,10)) - if(istype(get_step(src,direction),/turf/simulated/floor)) - var/turf/simulated/floor/FF = get_step(src,direction) - FF.update_icon() //so siding get updated properly +/turf/simulated/floor/carpet/New() + floor_tile.New() //I guess New() isn't ran on objects spawned without the definition of a turf to house them, ah well. + if(!icon_state) + icon_state = "carpet" + ..() + spawn(4) + if(src) + update_icon() + for(var/direction in list(1,2,4,8,5,6,9,10)) + if(istype(get_step(src,direction),/turf/simulated/floor)) + var/turf/simulated/floor/FF = get_step(src,direction) + FF.update_icon() //so siding get updated properly @@ -206,4 +205,4 @@ icon_state = "snow" /turf/simulated/floor/plating/snow/ex_act(severity) - return \ No newline at end of file + return diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 1e4d75217fb..dad61d9796e 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -245,15 +245,14 @@ src.ChangeTurf(/turf/space) new /obj/structure/lattice( locate(src.x, src.y, src.z) ) -/turf/proc/kill_creatures(mob/U = null)//Will kill people/creatures and damage mechs./N -//Useful to batch-add creatures to the list. +/turf/proc/phase_damage_creatures(damage,mob/U = null)//>Ninja Code. Hurts and knocks out creatures on this turf for(var/mob/living/M in src) - if(M==U) continue//Will not harm U. Since null != M, can be excluded to kill everyone. - spawn(0) - M.gib() - for(var/obj/mecha/M in src)//Mecha are not gibbed but are damaged. - spawn(0) - M.take_damage(100, "brute") + if(M==U) + continue//Will not harm U. Since null != M, can be excluded to kill everyone. + M.adjustBruteLoss(damage) + M.Paralyse(damage/5) + for(var/obj/mecha/M in src) + M.take_damage(damage*2, "brute") /turf/proc/Bless() flags |= NOJAUNT @@ -371,13 +370,15 @@ if (M.m_intent=="walk" && (lube&NO_SLIP_WHEN_WALKING)) return 0 if(!M.lying) + var/olddir = M.dir + M.Stun(s_amount) + M.Weaken(w_amount) M.stop_pulling() - if(lube&STEP) - step(M, M.dir) if(lube&SLIDE) for(var/i=1, i<5, i++) spawn (i) - step(M, M.dir) + step(M, olddir) + M.spin(1,1) if(M.lying) //did I fall over? M.adjustBruteLoss(2) if(O) @@ -385,7 +386,5 @@ else M << "You slipped!" playsound(M.loc, 'sound/misc/slip.ogg', 50, 1, -3) - M.Stun(s_amount) - M.Weaken(w_amount) return 1 - return 0 // no success. Used in clown pda and wet floors + return 0 // no success. Used in clown pda and wet floors \ No newline at end of file diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index d1363c55f80..999ece2b788 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -430,32 +430,8 @@ var/global/floorIsLava = 0
    "} - if(check_rights(R_FUN,0))//TODO: Make all this hardcoded random event panel stuff its own proc so we can actually remove poor events without making the code stop compiling + if(check_rights(R_FUN,0)) dat += {" - 'Random' Events
    -
    - Spawn a wave of meteors (aka lagocolyptic shower)
    - Spawn a vortex anomaly
    - Spawn a gravitational anomaly
    - Spawn a pyroclastic anomaly
    - Spawn a flux wave anomaly
    - Spawn a bluespace anomaly
    - Spawn wormholes
    - Spawn blob
    - Trigger an Alien infestation
    - Spawn an Alien silently
    - Trigger a Spider infestation
    - Send in a space ninja
    - Trigger an Carp migration
    - Irradiate the station
    - Trigger a Prison Break
    - Trigger a Virus Outbreak
    - Spawn an Immovable Rod
    - Toggle a "lights out" event
    - Spawn an Ion Storm
    - Spawn Space-Vines
    - Trigger a communication blackout
    -
    Fun Secrets

    Turn all humans into monkeys
    diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index c13e1ac79d4..b47e41b4d1c 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -81,7 +81,8 @@ var/list/admin_verbs_fun = list( /client/proc/cmd_admin_add_random_ai_law, /client/proc/make_sound, /client/proc/toggle_random_events, - /client/proc/set_ooc + /client/proc/set_ooc, + /client/proc/forceEvent ) var/list/admin_verbs_spawn = list( /datum/admins/proc/spawn_atom, /*allows us to spawn instances*/ diff --git a/code/modules/admin/verbs/deadsay.dm b/code/modules/admin/verbs/deadsay.dm index d716210ce43..6707ef17a7c 100644 --- a/code/modules/admin/verbs/deadsay.dm +++ b/code/modules/admin/verbs/deadsay.dm @@ -19,8 +19,9 @@ if (!msg) return + var/nicknames = file2list("config/admin_nicknames.txt") - var/rendered = "DEAD: ADMIN([src.holder.fakekey ? pick("BADMIN", "Fun Police", "Conspiracy", "ERP BLOCKER", "Button Masher", "MissPhaeron", "Turdicide", "hornigranny", "TLC", "scaredofshowers", "SXSI", "HerpEs", "Nerdrak", "Dickarrus", "Wario90900", "Deurpyn", "Fatbeaver", "Arrowage", "Intigaycy", "Hosin Hitter", "Cheridumb", "Petethegoatse", "HotelHabboLover", "Giacunt", "Muskrats", "FickleInspector", "Tankbutt", "Ulisex", "Scrotemis", "Sillnazi", "Stillachair", "cbdsm", "Un_Professional", "Doopenis", "Calasrear", "Quackink ", "ANyan:3", "Slieve", "Pali-en269", "Teamcreep", "Agoatsie", "Zoomerdik", "LewdMechanic", "NemoPanFried", "LameMontgommery", "EndGameOver", "LocalDingus", "ThoughtlessNaps", "Sewage", "hbgay6969", "Cockdtbent", "Iranclanos", "Liarwhine", "Vagyina", "Nohrape", "Dumboner69", "Gaymarr", "Jesusfraud") : src.key]) says, \"[msg]\"" + var/rendered = "DEAD: ADMIN([src.holder.fakekey ? pick(nicknames) : src.key]) says, \"[msg]\"" for (var/mob/M in player_list) if (istype(M, /mob/new_player)) diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 758d7c9fc9b..2e34f000e3a 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -663,7 +663,8 @@ var/global/list/g_fancy_list_of_safe_types = null if ("as job...") if(jobdatum) - dresscode = "[jobdatum.title]" + dresscode = jobdatum.title + M.job = jobdatum.title jobdatum.equip(M) if ("standard space gear") @@ -1136,4 +1137,4 @@ var/global/list/g_fancy_list_of_safe_types = null W.assignment = "Death Commando" W.registered_name = M.real_name W.update_label(M.real_name) - M.equip_to_slot_or_del(W, slot_wear_id) \ No newline at end of file + M.equip_to_slot_or_del(W, slot_wear_id) diff --git a/code/modules/admin/verbs/mapping.dm b/code/modules/admin/verbs/mapping.dm index a567d4eaec6..efe38fa2172 100644 --- a/code/modules/admin/verbs/mapping.dm +++ b/code/modules/admin/verbs/mapping.dm @@ -140,7 +140,6 @@ var/intercom_range_display_status = 0 src.verbs += /datum/admins/proc/show_traitor_panel src.verbs += /client/proc/print_jobban_old src.verbs += /client/proc/print_jobban_old_filter - src.verbs += /client/proc/forceEvent src.verbs += /client/proc/kill_pipe_processing src.verbs += /client/proc/kill_air_processing src.verbs += /client/proc/disable_communication diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index 2c258ec15ba..abad6da9082 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -423,23 +423,11 @@ Traitors and the like can also be revived with the previous role mostly intact. var/confirm = alert(src, "Do you want to announce the contents of the report to the crew?", "Announce", "Yes", "No") if(confirm == "Yes") - priority_announce(input, null, 'sound/AI/commandreport.ogg'); - for (var/obj/machinery/computer/communications/C in machines) - if(! (C.stat & (BROKEN|NOPOWER) ) ) - var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( C.loc ) - P.name = "paper- '[command_name()] Update.'" - P.info = input - C.messagetitle.Add("[command_name()] Update") - C.messagetext.Add(P.info) + priority_announce(input, null, 'sound/AI/commandreport.ogg') else - priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/AI/commandreport.ogg'); - for (var/obj/machinery/computer/communications/C in machines) - if(! (C.stat & (BROKEN|NOPOWER) ) ) - var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( C.loc ) - P.name = "paper- 'Classified [command_name()] Update.'" - P.info = input - C.messagetitle.Add("Classified [command_name()] Update") - C.messagetext.Add(P.info) + priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/AI/commandreport.ogg') + + print_command_report(input,"[confirm=="Yes" ? "" : "Classified"] [command_name()] Update") log_admin("[key_name(src)] has created a command report: [input]") message_admins("[key_name_admin(src)] has created a command report", 1) diff --git a/code/modules/awaymissions/loot.dm b/code/modules/awaymissions/loot.dm deleted file mode 100644 index d67610f4525..00000000000 --- a/code/modules/awaymissions/loot.dm +++ /dev/null @@ -1,17 +0,0 @@ -/obj/effect/spawner/lootdrop - icon = 'icons/mob/screen_gen.dmi' - icon_state = "x2" - var/lootcount = 1 //how many items will be spawned - var/lootdoubles = 0 //if the same item can be spawned twice - var/list/loot //a list of possible items to spawn e.g. list(/obj/item, /obj/structure, /obj/effect) - -/obj/effect/spawner/lootdrop/initialize() - if(loot && loot.len) - for(var/i = lootcount, i > 0, i--) - if(!loot.len) break - var/lootspawn = pick(loot) - if(!lootdoubles) - loot.Remove(lootspawn) - - new lootspawn(get_turf(src)) - qdel(src) \ No newline at end of file diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 320075e2181..8dae6424bb8 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -171,18 +171,18 @@ BLIND // can't see anything attachTie(I, user) ..() -/obj/item/clothing/under/proc/attachTie(obj/item/I, mob/user) +/obj/item/clothing/under/proc/attachTie(obj/item/I, mob/user, notifyAttach = 1) if(istype(I, /obj/item/clothing/tie)) if(hastie) if(user) user << "[src] already has an accessory." - return + return 0 else if(user) user.drop_item() hastie = I I.loc = src - if(user) + if(user && notifyAttach) user << "You attach [I] to [src]." I.transform *= 0.5 //halve the size so it doesn't overpower the under I.pixel_x += 8 @@ -195,7 +195,7 @@ BLIND // can't see anything var/mob/living/carbon/human/H = loc H.update_inv_w_uniform(0) - return + return 1 /obj/item/clothing/under/examine() diff --git a/code/modules/clothing/under/jobs/medsci.dm b/code/modules/clothing/under/jobs/medsci.dm index b4a083d9912..551d38d7f26 100644 --- a/code/modules/clothing/under/jobs/medsci.dm +++ b/code/modules/clothing/under/jobs/medsci.dm @@ -2,8 +2,8 @@ * Science */ /obj/item/clothing/under/rank/research_director - desc = "It's a jumpsuit worn by those with the know-how to achieve the position of \"Research Director\". Its fabric provides minor protection from biological contaminants." - name = "research director's jumpsuit" + desc = "It's a suit worn by those with the know-how to achieve the position of \"Research Director\". Its fabric provides minor protection from biological contaminants." + name = "research director's suit" icon_state = "director" item_state = "g_suit" item_color = "director" @@ -11,7 +11,7 @@ /obj/item/clothing/under/rank/research_director/alt desc = "Maybe you'll engineer your own half-man, half-pig creature some day. Its fabric provides minor protection from biological contaminants." - name = "research director's jumpsuit" + name = "research director's suit" icon_state = "rdwhimsy" item_state = "rdwhimsy" item_color = "rdwhimsy" diff --git a/code/modules/clothing/under/ties.dm b/code/modules/clothing/under/ties.dm index 0617a258039..92c6e97985a 100644 --- a/code/modules/clothing/under/ties.dm +++ b/code/modules/clothing/under/ties.dm @@ -96,19 +96,12 @@ if(M.w_uniform) var/obj/item/clothing/under/U = M.w_uniform - if(!U.hastie) //Check if he is not already wearing an accessory - user.drop_item() - U.hastie = src - src.loc = U - + if(U.attachTie(src, user, 0)) //Attach it, do not notify the user of the attachment if(user == M) user << "You attach [src] to [U]." else user.visible_message("[user] pins \the [src] on [M]'s chest.", \ "You pin \the [src] on [M]'s chest.") - M.update_inv_w_uniform(0) - - else user << "\The [U] already has an accessory." else user << "Medals can only be pinned on jumpsuits." else ..() diff --git a/code/modules/events/event_manager.dm b/code/modules/events/event_manager.dm index b41e08d2d0c..2775524fce3 100644 --- a/code/modules/events/event_manager.dm +++ b/code/modules/events/event_manager.dm @@ -111,15 +111,16 @@ var/datum/controller/event/events //allows a client to trigger an event (For Debugging Purposes) /client/proc/forceEvent(var/datum/round_event_control/E in events.control) - set name = "Trigger Event (Debug Only)" - set category = "Debug" + set name = "Trigger Event" + set category = "Fun" - if(!holder) + if(!holder ||!check_rights(R_FUN)) return if(istype(E)) E.runEvent() message_admins("[key_name_admin(usr)] has triggered an event. ([E.name])", 1) + log_admin("[key_name(usr)] has triggered an event. ([E.name])") /* diff --git a/code/modules/events/ninja.dm b/code/modules/events/ninja.dm index 06c821888bc..f058be6ccd2 100644 --- a/code/modules/events/ninja.dm +++ b/code/modules/events/ninja.dm @@ -5,6 +5,7 @@ name = "Space Ninja" typepath = /datum/round_event/ninja max_occurrences = 1 + earliest_start = 30000 // 1 hour /datum/round_event/ninja var/success_spawn = 0 @@ -1002,7 +1003,7 @@ Not sure why this would be useful (it's not) but whatever. Ninjas need their smo anim(U.loc,U,'icons/mob/mob.dmi',,"phasein",,U.dir) spawn(0) - destination.kill_creatures(U)//Any living mobs in teleport area are gibbed. Check turf procs for how it does it. + destination.phase_damage_creatures(20,U)//Paralyse and damage mobs and mechas on the turf s_coold = 1 cell.charge-=(C*10) else @@ -1036,7 +1037,7 @@ Not sure why this would be useful (it's not) but whatever. Ninjas need their smo anim(U.loc,U,'icons/mob/mob.dmi',,"phasein",,U.dir) spawn(0)//Any living mobs in teleport area are gibbed. - T.kill_creatures(U) + T.phase_damage_creatures(20,U)//Paralyse and damage mobs and mechas on the turf s_coold = 1 cell.charge-=(C*10) else @@ -1223,10 +1224,10 @@ Or otherwise known as anime mode. Which also happens to be ridiculously powerful return //=======//5 TILE TELEPORT/GIB//=======// -//Allows to gib up to five squares in a straight line. Seriously. +//Allows to kill up to five squares in a straight line. Seriously. /obj/item/clothing/suit/space/space_ninja/proc/ninjaslayer() set name = "Phase Slayer" - set desc = "Utilizes the internal VOID-shift device to mutilate creatures in a straight line." + set desc = "Utilizes the internal VOID-shift device to kill all creatures in a straight line." set category = "Ninja Ability" set popup_menu = 0 @@ -1243,7 +1244,7 @@ Or otherwise known as anime mode. Which also happens to be ridiculously powerful spawn(0) for(var/turf/T in getline(mobloc, destination)) spawn(0) - T.kill_creatures(U) + T.phase_damage_creatures(190,U) if(T==mobloc||T==destination) continue spawn(0) anim(T,U,'icons/mob/mob.dmi',,"phasein",,U.dir) diff --git a/code/modules/food&drinks/drinks/drinks.dm b/code/modules/food&drinks/drinks/drinks.dm index 26b35cdc487..b3ec99101bf 100644 --- a/code/modules/food&drinks/drinks/drinks.dm +++ b/code/modules/food&drinks/drinks/drinks.dm @@ -11,37 +11,24 @@ possible_transfer_amounts = list(5,10,25) volume = 50 - on_reagent_change() - if (gulp_size < 5) gulp_size = 5 - else gulp_size = max(round(reagents.total_volume / 5), 5) +/obj/item/weapon/reagent_containers/food/drinks/on_reagent_change() + if (gulp_size < 5) gulp_size = 5 + else gulp_size = max(round(reagents.total_volume / 5), 5) - attack_self(mob/user as mob) - return +/obj/item/weapon/reagent_containers/food/drinks/attack_self(mob/user as mob) + return - attack(mob/M as mob, mob/user as mob, def_zone) +/obj/item/weapon/reagent_containers/food/drinks/attack(mob/M as mob, mob/user as mob, def_zone) - if(!reagents || !reagents.total_volume) - user << "None of [src] left, oh no!" - return 0 + if(!reagents || !reagents.total_volume) + user << "None of [src] left, oh no!" + return 0 - if(!canconsume(M, user)) - return 0 + if(!canconsume(M, user)) + return 0 - if(M == user) - M << "You swallow a gulp of [src]." - if(reagents.total_volume) - reagents.reaction(M, INGEST) - spawn(5) - reagents.trans_to(M, gulp_size) - - playsound(M.loc,'sound/items/drink.ogg', rand(10,50), 1) - return 1 - - M.visible_message("[user] attempts to feed [src] to [M].", "You attempt to feed [src] to [M].") - if(!do_mob(user, M)) return - if(!reagents.total_volume) return // The drink might be empty after the delay, such as by spam-feeding - M.visible_message("[user] feeds [src] to [M].", "You feed [src] to [M].") - add_logs(user, M, "fed", object="[reagentlist(src)]") + if(M == user) + M << "You swallow a gulp of [src]." if(reagents.total_volume) reagents.reaction(M, INGEST) spawn(5) @@ -50,57 +37,70 @@ playsound(M.loc,'sound/items/drink.ogg', rand(10,50), 1) return 1 + M.visible_message("[user] attempts to feed [src] to [M].", "You attempt to feed [src] to [M].") + if(!do_mob(user, M)) return + if(!reagents.total_volume) return // The drink might be empty after the delay, such as by spam-feeding + M.visible_message("[user] feeds [src] to [M].", "You feed [src] to [M].") + add_logs(user, M, "fed", object="[reagentlist(src)]") + if(reagents.total_volume) + reagents.reaction(M, INGEST) + spawn(5) + reagents.trans_to(M, gulp_size) - afterattack(obj/target, mob/user , proximity) - if(!proximity) return - if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us. + playsound(M.loc,'sound/items/drink.ogg', rand(10,50), 1) + return 1 - if(!target.reagents.total_volume) - user << "[target] is empty." - return - if(reagents.total_volume >= reagents.maximum_volume) - user << "[src] is full." - return +/obj/item/weapon/reagent_containers/food/drinks/afterattack(obj/target, mob/user , proximity) + if(!proximity) return + if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us. - var/trans = target.reagents.trans_to(src, target:amount_per_transfer_from_this) - user << "You fill [src] with [trans] units of the contents of [target]." + if(!target.reagents.total_volume) + user << "[target] is empty." + return - else if(target.is_open_container()) //Something like a glass. Player probably wants to transfer TO it. - if(!reagents.total_volume) - user << "[src] is empty." - return + if(reagents.total_volume >= reagents.maximum_volume) + user << "[src] is full." + return - if(target.reagents.total_volume >= target.reagents.maximum_volume) - user << "[target] is full." - return + var/trans = target.reagents.trans_to(src, target:amount_per_transfer_from_this) + user << "You fill [src] with [trans] units of the contents of [target]." - var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this) - user << " You transfer [trans] units of the solution to [target]." + else if(target.is_open_container()) //Something like a glass. Player probably wants to transfer TO it. + if(!reagents.total_volume) + user << "[src] is empty." + return - if(isrobot(user)) //Cyborg modules that include drinks automatically refill themselves, but drain the borg's cell - var/mob/living/silicon/robot/bro = user - bro.cell.use(30) - var/refill = reagents.get_master_reagent_id() - spawn(600) - reagents.add_reagent(refill, trans) + if(target.reagents.total_volume >= target.reagents.maximum_volume) + user << "[target] is full." + return - return + var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this) + user << " You transfer [trans] units of the solution to [target]." - examine() - set src in view() - ..() - if (!(usr in range(0)) && usr!=src.loc) return - if(!reagents || reagents.total_volume==0) - usr << "\The [src] is empty!" - else if (reagents.total_volume<=src.volume/4) - usr << "\The [src] is almost empty!" - else if (reagents.total_volume<=src.volume*0.66) - usr << "\The [src] is half full!" - else if (reagents.total_volume<=src.volume*0.90) - usr << "\The [src] is almost full!" - else - usr << "\The [src] is full!" + if(isrobot(user)) //Cyborg modules that include drinks automatically refill themselves, but drain the borg's cell + var/mob/living/silicon/robot/bro = user + bro.cell.use(30) + var/refill = reagents.get_master_reagent_id() + spawn(600) + reagents.add_reagent(refill, trans) + + return + +/obj/item/weapon/reagent_containers/food/drinks/examine() + set src in view() + ..() + if (!(usr in range(0)) && usr!=src.loc) return + if(!reagents || reagents.total_volume==0) + usr << "\The [src] is empty!" + else if (reagents.total_volume<=src.volume/4) + usr << "\The [src] is almost empty!" + else if (reagents.total_volume<=src.volume*0.66) + usr << "\The [src] is half full!" + else if (reagents.total_volume<=src.volume*0.90) + usr << "\The [src] is almost full!" + else + usr << "\The [src] is full!" //////////////////////////////////////////////////////////////////////////////// @@ -134,11 +134,12 @@ desc = "It's milk. White and nutritious goodness!" icon_state = "milk" item_state = "carton" - New() - ..() - reagents.add_reagent("milk", 50) - src.pixel_x = rand(-10.0, 10) - src.pixel_y = rand(-10.0, 10) + +/obj/item/weapon/reagent_containers/food/drinks/milk/New() + ..() + reagents.add_reagent("milk", 50) + src.pixel_x = rand(-10.0, 10) + src.pixel_y = rand(-10.0, 10) /obj/item/weapon/reagent_containers/food/drinks/flour name = "flour sack" @@ -146,95 +147,104 @@ icon = 'icons/obj/food.dmi' icon_state = "flour" item_state = "flour" - New() - ..() - reagents.add_reagent("flour", 30) - src.pixel_x = rand(-10.0, 10) - src.pixel_y = rand(-10.0, 10) + +/obj/item/weapon/reagent_containers/food/drinks/flour/New() + ..() + reagents.add_reagent("flour", 30) + src.pixel_x = rand(-10.0, 10) + src.pixel_y = rand(-10.0, 10) /obj/item/weapon/reagent_containers/food/drinks/soymilk name = "SoyMilk" desc = "It's soy milk. White and nutritious goodness!" icon_state = "soymilk" item_state = "carton" - New() - ..() - reagents.add_reagent("soymilk", 50) - src.pixel_x = rand(-10.0, 10) - src.pixel_y = rand(-10.0, 10) + +/obj/item/weapon/reagent_containers/food/drinks/soymilk/New() + ..() + reagents.add_reagent("soymilk", 50) + src.pixel_x = rand(-10.0, 10) + src.pixel_y = rand(-10.0, 10) /obj/item/weapon/reagent_containers/food/drinks/coffee name = "Robust Coffee" desc = "Careful, the beverage you're about to enjoy is extremely hot." icon_state = "coffee" - New() - ..() - reagents.add_reagent("coffee", 30) - src.pixel_x = rand(-10.0, 10) - src.pixel_y = rand(-10.0, 10) + +/obj/item/weapon/reagent_containers/food/drinks/coffee/New() + ..() + reagents.add_reagent("coffee", 30) + src.pixel_x = rand(-10.0, 10) + src.pixel_y = rand(-10.0, 10) /obj/item/weapon/reagent_containers/food/drinks/tea name = "Duke Purple Tea" desc = "An insult to Duke Purple is an insult to the Space Queen! Any proper gentleman will fight you, if you sully this tea." icon_state = "tea" item_state = "coffee" - New() - ..() - reagents.add_reagent("tea", 30) - src.pixel_x = rand(-10.0, 10) - src.pixel_y = rand(-10.0, 10) + +/obj/item/weapon/reagent_containers/food/drinks/tea/New() + ..() + reagents.add_reagent("tea", 30) + src.pixel_x = rand(-10.0, 10) + src.pixel_y = rand(-10.0, 10) /obj/item/weapon/reagent_containers/food/drinks/ice name = "Ice Cup" desc = "Careful, cold ice, do not chew." icon_state = "coffee" - New() - ..() - reagents.add_reagent("ice", 30) - src.pixel_x = rand(-10.0, 10) - src.pixel_y = rand(-10.0, 10) + +/obj/item/weapon/reagent_containers/food/drinks/ice/New() + ..() + reagents.add_reagent("ice", 30) + src.pixel_x = rand(-10.0, 10) + src.pixel_y = rand(-10.0, 10) /obj/item/weapon/reagent_containers/food/drinks/h_chocolate name = "Dutch Hot Coco" desc = "Made in Space South America." icon_state = "tea" item_state = "coffee" - New() - ..() - reagents.add_reagent("hot_coco", 30) - src.pixel_x = rand(-10.0, 10) - src.pixel_y = rand(-10.0, 10) + +/obj/item/weapon/reagent_containers/food/drinks/h_chocolate/New() + ..() + reagents.add_reagent("hot_coco", 30) + src.pixel_x = rand(-10.0, 10) + src.pixel_y = rand(-10.0, 10) /obj/item/weapon/reagent_containers/food/drinks/dry_ramen name = "Cup Ramen" desc = "Just add 10ml water, self heats! A taste that reminds you of your school years." icon_state = "ramen" - New() - ..() - reagents.add_reagent("dry_ramen", 30) - src.pixel_x = rand(-10.0, 10) - src.pixel_y = rand(-10.0, 10) + +/obj/item/weapon/reagent_containers/food/drinks/dry_ramen/New() + ..() + reagents.add_reagent("dry_ramen", 30) + src.pixel_x = rand(-10.0, 10) + src.pixel_y = rand(-10.0, 10) /obj/item/weapon/reagent_containers/food/drinks/beer name = "Space Beer" desc = "Beer. In space." icon_state = "beer" - New() - ..() - reagents.add_reagent("beer", 30) - src.pixel_x = rand(-10.0, 10) - src.pixel_y = rand(-10.0, 10) + +/obj/item/weapon/reagent_containers/food/drinks/beer/New() + ..() + reagents.add_reagent("beer", 30) + src.pixel_x = rand(-10.0, 10) + src.pixel_y = rand(-10.0, 10) /obj/item/weapon/reagent_containers/food/drinks/ale name = "Magm-Ale" desc = "A true dorf's drink of choice." icon_state = "alebottle" item_state = "beer" - New() - ..() - reagents.add_reagent("ale", 30) - src.pixel_x = rand(-10.0, 10) - src.pixel_y = rand(-10.0, 10) + +/obj/item/weapon/reagent_containers/food/drinks/ale/New() + ..() + reagents.add_reagent("ale", 30) + src.pixel_x = rand(-10.0, 10) + src.pixel_y = rand(-10.0, 10) /obj/item/weapon/reagent_containers/food/drinks/sillycup name = "Paper Cup" @@ -242,15 +252,17 @@ icon_state = "water_cup_e" possible_transfer_amounts = null volume = 10 - New() - ..() - src.pixel_x = rand(-10.0, 10) - src.pixel_y = rand(-10.0, 10) - on_reagent_change() - if(reagents.total_volume) - icon_state = "water_cup" - else - icon_state = "water_cup_e" + +/obj/item/weapon/reagent_containers/food/drinks/sillycup/New() + ..() + src.pixel_x = rand(-10.0, 10) + src.pixel_y = rand(-10.0, 10) + +/obj/item/weapon/reagent_containers/food/drinks/sillycup/on_reagent_change() + if(reagents.total_volume) + icon_state = "water_cup" + else + icon_state = "water_cup_e" //////////////////////////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 @@ -292,87 +304,96 @@ name = "Space Cola" desc = "Cola. in space." icon_state = "cola" - New() - ..() - reagents.add_reagent("cola", 30) - src.pixel_x = rand(-10.0, 10) - src.pixel_y = rand(-10.0, 10) + +/obj/item/weapon/reagent_containers/food/drinks/soda_cans/cola/New() + ..() + reagents.add_reagent("cola", 30) + src.pixel_x = rand(-10.0, 10) + src.pixel_y = rand(-10.0, 10) /obj/item/weapon/reagent_containers/food/drinks/soda_cans/tonic name = "T-Borg's Tonic Water" desc = "Quinine tastes funny, but at least it'll keep that Space Malaria away." icon_state = "tonic" - New() - ..() - reagents.add_reagent("tonic", 50) + +/obj/item/weapon/reagent_containers/food/drinks/soda_cans/tonic/New() + ..() + reagents.add_reagent("tonic", 50) /obj/item/weapon/reagent_containers/food/drinks/soda_cans/sodawater name = "Soda Water" desc = "A can of soda water. Why not make a scotch and soda?" icon_state = "sodawater" - New() - ..() - reagents.add_reagent("sodawater", 50) + +/obj/item/weapon/reagent_containers/food/drinks/soda_cans/sodawater/New() + ..() + reagents.add_reagent("sodawater", 50) /obj/item/weapon/reagent_containers/food/drinks/soda_cans/lemon_lime name = "Orange Soda" desc = "You wanted ORANGE. It gave you Lemon Lime." icon_state = "lemon-lime" - New() - ..() - name = "Lemon-Lime Soda" - reagents.add_reagent("lemon_lime", 30) - src.pixel_x = rand(-10.0, 10) - src.pixel_y = rand(-10.0, 10) + +/obj/item/weapon/reagent_containers/food/drinks/soda_cans/lemon_lime/New() + ..() + name = "Lemon-Lime Soda" + reagents.add_reagent("lemon_lime", 30) + src.pixel_x = rand(-10.0, 10) + src.pixel_y = rand(-10.0, 10) /obj/item/weapon/reagent_containers/food/drinks/soda_cans/space_up name = "Space-Up" desc = "Tastes like a hull breach in your mouth." icon_state = "space-up" - New() - ..() - reagents.add_reagent("space_up", 30) - src.pixel_x = rand(-10.0, 10) - src.pixel_y = rand(-10.0, 10) + +/obj/item/weapon/reagent_containers/food/drinks/soda_cans/space_up/New() + ..() + reagents.add_reagent("space_up", 30) + src.pixel_x = rand(-10.0, 10) + src.pixel_y = rand(-10.0, 10) /obj/item/weapon/reagent_containers/food/drinks/soda_cans/starkist name = "Star-kist" desc = "The taste of a star in liquid form. And, a bit of tuna...?" icon_state = "starkist" - New() - ..() - reagents.add_reagent("cola", 15) - reagents.add_reagent("orangejuice", 15) - src.pixel_x = rand(-10.0, 10) - src.pixel_y = rand(-10.0, 10) + +/obj/item/weapon/reagent_containers/food/drinks/soda_cans/starkist/New() + ..() + reagents.add_reagent("cola", 15) + reagents.add_reagent("orangejuice", 15) + src.pixel_x = rand(-10.0, 10) + src.pixel_y = rand(-10.0, 10) /obj/item/weapon/reagent_containers/food/drinks/soda_cans/space_mountain_wind name = "Space Mountain Wind" desc = "Blows right through you like a space wind." icon_state = "space_mountain_wind" - New() - ..() - reagents.add_reagent("spacemountainwind", 30) - src.pixel_x = rand(-10.0, 10) - src.pixel_y = rand(-10.0, 10) + +/obj/item/weapon/reagent_containers/food/drinks/soda_cans/space_mountain_wind/New() + ..() + reagents.add_reagent("spacemountainwind", 30) + src.pixel_x = rand(-10.0, 10) + src.pixel_y = rand(-10.0, 10) /obj/item/weapon/reagent_containers/food/drinks/soda_cans/thirteenloko name = "Thirteen Loko" desc = "The CMO has advised crew members that consumption of Thirteen Loko may result in seizures, blindness, drunkeness, or even death. Please Drink Responsably." icon_state = "thirteen_loko" - New() - ..() - reagents.add_reagent("thirteenloko", 30) - src.pixel_x = rand(-10.0, 10) - src.pixel_y = rand(-10.0, 10) + +/obj/item/weapon/reagent_containers/food/drinks/soda_cans/thirteenloko/New() + ..() + reagents.add_reagent("thirteenloko", 30) + src.pixel_x = rand(-10.0, 10) + src.pixel_y = rand(-10.0, 10) /obj/item/weapon/reagent_containers/food/drinks/soda_cans/dr_gibb name = "Dr. Gibb" desc = "A delicious mixture of 42 different flavors." icon_state = "dr_gibb" - New() - ..() - reagents.add_reagent("dr_gibb", 30) - src.pixel_x = rand(-10.0, 10) - src.pixel_y = rand(-10.0, 10) + +/obj/item/weapon/reagent_containers/food/drinks/soda_cans/dr_gibb/New() + ..() + reagents.add_reagent("dr_gibb", 30) + src.pixel_x = rand(-10.0, 10) + src.pixel_y = rand(-10.0, 10) diff --git a/code/modules/food&drinks/drinks/drinks/bottle.dm b/code/modules/food&drinks/drinks/drinks/bottle.dm index 90673de7f8b..3864c80e917 100644 --- a/code/modules/food&drinks/drinks/drinks/bottle.dm +++ b/code/modules/food&drinks/drinks/drinks/bottle.dm @@ -130,105 +130,118 @@ name = "Griffeater Gin" desc = "A bottle of high quality gin, produced in the New London Space Station." icon_state = "ginbottle" - New() - ..() - reagents.add_reagent("gin", 100) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/gin/New() + ..() + reagents.add_reagent("gin", 100) /obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey name = "Uncle Git's Special Reserve" desc = "A premium single-malt whiskey, gently matured inside the tunnels of a nuclear shelter. TUNNEL WHISKEY RULES." icon_state = "whiskeybottle" - New() - ..() - reagents.add_reagent("whiskey", 100) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey/New() + ..() + reagents.add_reagent("whiskey", 100) /obj/item/weapon/reagent_containers/food/drinks/bottle/vodka name = "Tunguska Triple Distilled" desc = "Aah, vodka. Prime choice of drink AND fuel by Russians worldwide." icon_state = "vodkabottle" - New() - ..() - reagents.add_reagent("vodka", 100) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka/New() + ..() + reagents.add_reagent("vodka", 100) /obj/item/weapon/reagent_containers/food/drinks/bottle/tequilla name = "Caccavo Guaranteed Quality Tequilla" desc = "Made from premium petroleum distillates, pure thalidomide and other fine quality ingredients!" icon_state = "tequillabottle" - New() - ..() - reagents.add_reagent("tequilla", 100) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/tequilla/New() + ..() + reagents.add_reagent("tequilla", 100) /obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing name = "Bottle of Nothing" desc = "A bottle filled with nothing" icon_state = "bottleofnothing" - New() - ..() - reagents.add_reagent("nothing", 100) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing/New() + ..() + reagents.add_reagent("nothing", 100) /obj/item/weapon/reagent_containers/food/drinks/bottle/patron name = "Wrapp Artiste Patron" desc = "Silver laced tequilla, served in space night clubs across the galaxy." icon_state = "patronbottle" - New() - ..() - reagents.add_reagent("patron", 100) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/patron/New() + ..() + reagents.add_reagent("patron", 100) /obj/item/weapon/reagent_containers/food/drinks/bottle/rum name = "Captain Pete's Cuban Spiced Rum" desc = "This isn't just rum, oh no. It's practically GRIFF in a bottle." icon_state = "rumbottle" - New() - ..() - reagents.add_reagent("rum", 100) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/rum/New() + ..() + reagents.add_reagent("rum", 100) /obj/item/weapon/reagent_containers/food/drinks/bottle/holywater name = "Flask of Holy Water" desc = "A flask of the chaplain's holy water." icon_state = "holyflask" - New() - ..() - reagents.add_reagent("holywater", 100) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/holywater/New() + ..() + reagents.add_reagent("holywater", 100) /obj/item/weapon/reagent_containers/food/drinks/bottle/vermouth name = "Goldeneye Vermouth" desc = "Sweet, sweet dryness~" icon_state = "vermouthbottle" - New() - ..() - reagents.add_reagent("vermouth", 100) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/vermouth/New() + ..() + reagents.add_reagent("vermouth", 100) /obj/item/weapon/reagent_containers/food/drinks/bottle/kahlua name = "Robert Robust's Coffee Liqueur" desc = "A widely known, Mexican coffee-flavoured liqueur. In production since 1936, HONK" icon_state = "kahluabottle" - New() - ..() - reagents.add_reagent("kahlua", 100) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/kahlua/New() + ..() + reagents.add_reagent("kahlua", 100) /obj/item/weapon/reagent_containers/food/drinks/bottle/goldschlager name = "College Girl Goldschlager" desc = "Because they are the only ones who will drink 100 proof cinnamon schnapps." icon_state = "goldschlagerbottle" - New() - ..() - reagents.add_reagent("goldschlager", 100) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/goldschlager/New() + ..() + reagents.add_reagent("goldschlager", 100) /obj/item/weapon/reagent_containers/food/drinks/bottle/cognac name = "Chateau De Baton Premium Cognac" desc = "A sweet and strongly alchoholic drink, made after numerous distillations and years of maturing. You might as well not scream 'SHITCURITY' this time." icon_state = "cognacbottle" - New() - ..() - reagents.add_reagent("cognac", 100) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/cognac/New() + ..() + reagents.add_reagent("cognac", 100) /obj/item/weapon/reagent_containers/food/drinks/bottle/wine name = "Doublebeard Bearded Special Wine" desc = "A faint aura of unease and asspainery surrounds the bottle." icon_state = "winebottle" - New() - ..() - reagents.add_reagent("wine", 100) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/wine/New() + ..() + reagents.add_reagent("wine", 100) //////////////////////////JUICES AND STUFF /////////////////////// @@ -238,9 +251,10 @@ icon_state = "orangejuice" item_state = "carton" isGlass = 0 - New() - ..() - reagents.add_reagent("orangejuice", 100) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice/New() + ..() + reagents.add_reagent("orangejuice", 100) /obj/item/weapon/reagent_containers/food/drinks/bottle/cream name = "Milk Cream" @@ -248,9 +262,10 @@ icon_state = "cream" item_state = "carton" isGlass = 0 - New() - ..() - reagents.add_reagent("cream", 100) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/cream/New() + ..() + reagents.add_reagent("cream", 100) /obj/item/weapon/reagent_containers/food/drinks/bottle/tomatojuice name = "Tomato Juice" @@ -258,9 +273,10 @@ icon_state = "tomatojuice" item_state = "carton" isGlass = 0 - New() - ..() - reagents.add_reagent("tomatojuice", 100) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/tomatojuice/New() + ..() + reagents.add_reagent("tomatojuice", 100) /obj/item/weapon/reagent_containers/food/drinks/bottle/limejuice name = "Lime Juice" @@ -268,6 +284,7 @@ icon_state = "limejuice" item_state = "carton" isGlass = 0 - New() - ..() - reagents.add_reagent("limejuice", 100) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/limejuice/New() + ..() + reagents.add_reagent("limejuice", 100) diff --git a/code/modules/food&drinks/drinks/drinks/drinkingglass.dm b/code/modules/food&drinks/drinks/drinks/drinkingglass.dm index 353cb8e6f9f..6320f340a6d 100644 --- a/code/modules/food&drinks/drinks/drinks/drinkingglass.dm +++ b/code/modules/food&drinks/drinks/drinks/drinkingglass.dm @@ -7,450 +7,450 @@ amount_per_transfer_from_this = 10 volume = 50 - on_reagent_change() - if (reagents.reagent_list.len > 0) - switch(reagents.get_master_reagent_id()) - if("beer") - icon_state = "beerglass" - name = "glass of beer" - desc = "A freezing pint of beer" - if("beer2") - icon_state = "beerglass" - name = "glass of beer" - desc = "A freezing pint of beer" - if("greenbeer") - icon_state = "greenbeerglass" - name = "glass of green beer" - desc = "A freezing pint of green beer. Festive." - if("ale") - icon_state = "aleglass" - name = "glass of ale" - desc = "A freezing pint of delicious Ale" - if("milk") - icon_state = "glass_white" - name = "glass of milk" - desc = "White and nutritious goodness!" - if("cream") - icon_state = "glass_white" - name = "glass of cream" - desc = "Ewwww..." - if("hot_coco") - icon_state = "chocolateglass" - name = "glass of chocolate" - desc = "Tasty" - if("lemonjuice") - icon_state = "lemonglass" - name = "glass of lemon juice" - desc = "Sour..." - if("holywater") - icon_state = "glass_clear" - name = "glass of Holy Water" - desc = "A glass of holy water." - if("potato") - icon_state = "glass_brown" - name = "glass of potato juice" - desc = "Bleh..." - if("watermelonjuice") - icon_state = "glass_red" - name = "glass of watermelon juice" - desc = "A glass of watermelon juice." - if("cola") - icon_state = "glass_brown" - name = "glass of space Cola" - desc = "A glass of refreshing Space Cola" - if("nuka_cola") - icon_state = "nuka_colaglass" - name = "Nuka Cola" - desc = "Don't cry, Don't raise your eye, It's only nuclear wasteland" - if("orangejuice") - icon_state = "glass_orange" - name = "glass of orange juice" - desc = "Vitamins! Yay!" - if("tomatojuice") - icon_state = "glass_red" - name = "glass of tomato juice" - desc = "Are you sure this is tomato juice?" - if("blood") - icon_state = "glass_red" - name = "glass of tomato juice" - desc = "Are you sure this is tomato juice?" - if("limejuice") - icon_state = "glass_green" - name = "glass of lime juice" - desc = "A glass of sweet-sour lime juice." - if("whiskey") - icon_state = "whiskeyglass" - name = "glass of whiskey" - desc = "The silky, smokey whiskey goodness inside the glass makes the drink look very classy." - if("gin") - icon_state = "ginvodkaglass" - name = "glass of gin" - desc = "A crystal clear glass of Griffeater gin." - if("vodka") - icon_state = "ginvodkaglass" - name = "glass of vodka" - desc = "The glass contain wodka. Xynta." - if("goldschlager") - icon_state = "ginvodkaglass" - name = "glass of Goldschlager" - desc = "100 proof that teen girls will drink anything with gold in it." - if("wine") - icon_state = "wineglass" - name = "glass of wine" - desc = "A very classy looking drink." - if("cognac") - icon_state = "cognacglass" - name = "glass of cognac" - desc = "Damn, you feel like some kind of French aristocrat just by holding this." - if ("kahlua") - icon_state = "kahluaglass" - name = "glass of RR Coffee Liquor" - desc = "DAMN, THIS THING LOOKS ROBUST" - if("vermouth") - icon_state = "vermouthglass" - name = "glass of vermouth" - desc = "You wonder why you're even drinking this straight." - if("tequilla") - icon_state = "tequillaglass" - name = "glass of tequilla" - desc = "Now all that's missing is the weird colored shades!" - if("patron") - icon_state = "patronglass" - name = "glass of patron" - desc = "Drinking patron in the bar, with all the subpar ladies." - if("rum") - icon_state = "rumglass" - name = "glass of rum" - desc = "Now you want to Pray for a pirate suit, don't you?" - if("gintonic") - icon_state = "gintonicglass" - name = "Gin and Tonic" - desc = "A mild but still great cocktail. Drink up, like a true Englishman." - if("whiskeycola") - icon_state = "whiskeycolaglass" - name = "Whiskey Cola" - desc = "An innocent-looking mixture of cola and Whiskey. Delicious." - if("whiterussian") - icon_state = "whiterussianglass" - name = "White Russian" - desc = "A very nice looking drink. But that's just, like, your opinion, man." - if("screwdrivercocktail") - icon_state = "screwdriverglass" - name = "Screwdriver" - desc = "A simple, yet superb mixture of Vodka and orange juice. Just the thing for the tired engineer." - if("bloodymary") - icon_state = "bloodymaryglass" - name = "Bloody Mary" - desc = "Tomato juice, mixed with Vodka and a lil' bit of lime. Tastes like liquid murder." - if("martini") - icon_state = "martiniglass" - name = "Classic Martini" - desc = "Damn, the bartender even stirred it, not shook it." - if("vodkamartini") - icon_state = "martiniglass" - name = "Vodka martini" - desc ="A bastardisation of the classic martini. Still great." - if("gargleblaster") - icon_state = "gargleblasterglass" - name = "Pan-Galactic Gargle Blaster" - desc = "Does... does this mean that Arthur and Ford are on the station? Oh joy." - if("bravebull") - icon_state = "bravebullglass" - name = "Brave Bull" - desc = "Tequilla and Coffee liquor, brought together in a mouthwatering mixture. Drink up." - if("tequillasunrise") - icon_state = "tequillasunriseglass" - name = "Tequilla Sunrise" - desc = "Oh great, now you feel nostalgic about sunrises back on Terra..." - if("toxinsspecial") - icon_state = "toxinsspecialglass" - name = "Toxins Special" - desc = "Whoah, this thing is on FIRE" - if("beepskysmash") - icon_state = "beepskysmashglass" - name = "Beepsky Smash" - desc = "Heavy, hot and strong. Just like the Iron fist of the LAW." - if("doctorsdelight") - icon_state = "doctorsdelightglass" - name = "Doctor's Delight" - desc = "A healthy mixture of juices, guaranteed to keep you healthy until the next toolboxing takes place." - if("manlydorf") - icon_state = "manlydorfglass" - name = "The Manly Dorf" - desc = "A manly concotion made from Ale and Beer. Intended for true men only." - if("irishcream") - icon_state = "irishcreamglass" - name = "Irish Cream" - desc = "It's cream, mixed with whiskey. What else would you expect from the Irish?" - if("cubalibre") - icon_state = "cubalibreglass" - name = "Cuba Libre" - desc = "A classic mix of rum and cola." - if("b52") - icon_state = "b52glass" - name = "B-52" - desc = "Kahlua, Irish Cream, and cognac. You will get bombed." - if("atomicbomb") - icon_state = "atomicbombglass" - name = "Atomic Bomb" - desc = "Nanotrasen cannot take legal responsibility for your actions after imbibing." - if("longislandicedtea") - icon_state = "longislandicedteaglass" - name = "Long Island Iced Tea" - desc = "The liquor cabinet, brought together in a delicious mix. Intended for middle-aged alcoholic women only." - if("threemileisland") - icon_state = "threemileislandglass" - name = "Three Mile Island Ice Tea" - desc = "A glass of this is sure to prevent a meltdown." - if("margarita") - icon_state = "margaritaglass" - name = "Margarita" - desc = "On the rocks with salt on the rim. Arriba~!" - if("blackrussian") - icon_state = "blackrussianglass" - name = "Black Russian" - desc = "For the lactose-intolerant. Still as classy as a White Russian." - if("vodkatonic") - icon_state = "vodkatonicglass" - name = "Vodka and Tonic" - desc = "For when a gin and tonic isn't Russian enough." - if("manhattan") - icon_state = "manhattanglass" - name = "Manhattan" - desc = "The Detective's undercover drink of choice. He never could stomach gin..." - if("manhattan_proj") - icon_state = "proj_manhattanglass" - name = "Manhattan Project" - desc = "A scientist drink of choice, for thinking how to blow up the station." - if("ginfizz") - icon_state = "ginfizzglass" - name = "Gin Fizz" - desc = "Refreshingly lemony, deliciously dry." - if("irishcoffee") - icon_state = "irishcoffeeglass" - name = "Irish Coffee" - desc = "Coffee and alcohol. More fun than a Mimosa to drink in the morning." - if("hooch") - icon_state = "glass_brown2" - name = "Hooch" - desc = "You've really hit rock bottom now... your liver packed its bags and left last night." - if("whiskeysoda") - icon_state = "whiskeysodaglass2" - name = "Whiskey Soda" - desc = "Ultimate refreshment." - if("tonic") - icon_state = "glass_clear" - name = "Glass of Tonic Water" - desc = "Quinine tastes funny, but at least it'll keep that Space Malaria away." - if("sodawater") - icon_state = "glass_clear" - name = "Glass of Soda Water" - desc = "Soda water. Why not make a scotch and soda?" - if("water") - icon_state = "glass_clear" - name = "Glass of Water" - desc = "The father of all refreshments." - if("spacemountainwind") - icon_state = "Space_mountain_wind_glass" - name = "Glass of Space Mountain Wind" - desc = "Space Mountain Wind. As you know, there are no mountains in space, only wind." - if("thirteenloko") - icon_state = "thirteen_loko_glass" - name = "Glass of Thirteen Loko" - desc = "This is a glass of Thirteen Loko, it appears to be of the highest quality. The drink, not the glass" - if("dr_gibb") - icon_state = "dr_gibb_glass" - name = "Glass of Dr. Gibb" - desc = "Dr. Gibb. Not as dangerous as the name might imply." - if("space_up") - icon_state = "space-up_glass" - name = "Glass of Space-up" - desc = "Space-up. It helps keep your cool." - if("lemon_lime") - icon_state = "glass_yellow" - name = "Glass of Lemon-Lime" - desc = "You're pretty certain a real fruit has never actually touched this." - if("moonshine") - icon_state = "glass_clear" - name = "Moonshine" - desc = "You've really hit rock bottom now... your liver packed its bags and left last night." - if("soymilk") - icon_state = "glass_white" - name = "Glass of soy milk" - desc = "White and nutritious soy goodness!" - if("berryjuice") - icon_state = "berryjuice" - name = "Glass of berry juice" - desc = "Berry juice. Or maybe it's jam. Who cares?" - if("poisonberryjuice") - icon_state = "poisonberryjuice" - name = "Glass of berry juice" - desc = "Berry juice. Or maybe it's poison. Who cares?" - if("carrotjuice") - icon_state = "carrotjuice" - name = "Glass of carrot juice" - desc = "It is just like a carrot but without crunching." - if("banana") - icon_state = "banana" - name = "Glass of banana juice" - desc = "The raw essence of a banana. HONK" - if("bahama_mama") - icon_state = "bahama_mama" - name = "Bahama Mama" - desc = "Tropic cocktail" - if("singulo") - icon_state = "singulo" - name = "Singulo" - desc = "A blue-space beverage." - if("alliescocktail") - icon_state = "alliescocktail" - name = "Allies cocktail" - desc = "A drink made from your allies." - if("antifreeze") - icon_state = "antifreeze" - name = "Anti-freeze" - desc = "The ultimate refreshment." - if("barefoot") - icon_state = "b&p" - name = "Barefoot" - desc = "Barefoot and pregnant" - if("demonsblood") - icon_state = "demonsblood" - name = "Demons Blood" - desc = "Just looking at this thing makes the hair at the back of your neck stand up." - if("booger") - icon_state = "booger" - name = "Booger" - desc = "Ewww..." - if("snowwhite") - icon_state = "snowwhite" - name = "Snow White" - desc = "A cold refreshment." - if("aloe") - icon_state = "aloe" - name = "Aloe" - desc = "Very, very, very good." - if("andalusia") - icon_state = "andalusia" - name = "Andalusia" - desc = "A nice, strange named drink." - if("sbiten") - icon_state = "sbitenglass" - name = "Sbiten" - desc = "A spicy mix of Vodka and Spice. Very hot." - if("red_mead") - icon_state = "red_meadglass" - name = "Red Mead" - desc = "A True Vikings Beverage, though its color is strange." - if("mead") - icon_state = "meadglass" - name = "Mead" - desc = "A Vikings Beverage, though a cheap one." - if("iced_beer") - icon_state = "iced_beerglass" - name = "Iced Beer" - desc = "A beer so frosty, the air around it freezes." - if("grog") - icon_state = "grogglass" - name = "Grog" - desc = "A fine and cepa drink for Space." - if("soy_latte") - icon_state = "soy_latte" - name = "Soy Latte" - desc = "A nice and refrshing beverage while you are reading." - if("cafe_latte") - icon_state = "cafe_latte" - name = "Cafe Latte" - desc = "A nice, strong and refreshing beverage while you are reading." - if("acidspit") - icon_state = "acidspitglass" - name = "Acid Spit" - desc = "A drink from Nanotrasen. Made from live aliens." - if("amasec") - icon_state = "amasecglass" - name = "Amasec" - desc = "Always handy before COMBAT!!!" - if("neurotoxin") - icon_state = "neurotoxinglass" - name = "Neurotoxin" - desc = "A drink that is guaranteed to knock you silly." - if("hippiesdelight") - icon_state = "hippiesdelightglass" - name = "Hippie's Delight" - desc = "A drink enjoyed by people during the 1960's." - if("bananahonk") - icon_state = "bananahonkglass" - name = "Banana Honk" - desc = "A drink from Clown Heaven." - if("silencer") - icon_state = "silencerglass" - name = "Silencer" - desc = "A drink from mime Heaven." - if("nothing") - icon_state = "nothing" - name = "Nothing" - desc = "Absolutely nothing." - if("devilskiss") - icon_state = "devilskiss" - name = "Devils Kiss" - desc = "Creepy time!" - if("changelingsting") - icon_state = "changelingsting" - name = "Changeling Sting" - desc = "A stingy drink." - if("irishcarbomb") - icon_state = "irishcarbomb" - name = "Irish Car Bomb" - desc = "An irish car bomb." - if("syndicatebomb") - icon_state = "syndicatebomb" - name = "Syndicate Bomb" - desc = "A syndicate bomb." - if("erikasurprise") - icon_state = "erikasurprise" - name = "Erika Surprise" - desc = "The surprise is, it's green!" - if("driestmartini") - icon_state = "driestmartiniglass" - name = "Driest Martini" - desc = "Only for the experienced. You think you see sand floating in the glass." - if("ice") - icon_state = "iceglass" - name = "Glass of ice" - desc = "Generally, you're supposed to put something else in there too..." - if("icecoffee") - icon_state = "icedcoffeeglass" - name = "Iced Coffee" - desc = "A drink to perk you up and refresh you!" - if("icetea") - icon_state = "icedteaglass" - name = "Iced Tea" - desc = "All natural, antioxidant-rich flavour sensation." - if("coffee") - icon_state = "glass_brown" - name = "Glass of coffee" - desc = "Don't drop it, or you'll send scalding liquid and glass shards everywhere." - if("tea") - icon_state = "teaglass" - name = "Glass of tea" - desc = "Drinking it from here would not seem right." - if("bilk") - icon_state = "glass_brown" - name = "Glass of bilk" - desc = "A brew of milk and beer. For those alcoholics who fear osteoporosis." - if("fuel") - icon_state = "dr_gibb_glass" - name = "Glass of welder fuel" - desc = "Unless you are an industrial tool, this is probably not safe for consumption." - else - icon_state ="glass_brown" - name = "Glass of ..what?" - desc = "You can't really tell what this is." - else - icon_state = "glass_empty" - name = "Drinking glass" - desc = "Your standard drinking glass" - return +/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/on_reagent_change() + if (reagents.reagent_list.len > 0) + switch(reagents.get_master_reagent_id()) + if("beer") + icon_state = "beerglass" + name = "glass of beer" + desc = "A freezing pint of beer" + if("beer2") + icon_state = "beerglass" + name = "glass of beer" + desc = "A freezing pint of beer" + if("greenbeer") + icon_state = "greenbeerglass" + name = "glass of green beer" + desc = "A freezing pint of green beer. Festive." + if("ale") + icon_state = "aleglass" + name = "glass of ale" + desc = "A freezing pint of delicious Ale" + if("milk") + icon_state = "glass_white" + name = "glass of milk" + desc = "White and nutritious goodness!" + if("cream") + icon_state = "glass_white" + name = "glass of cream" + desc = "Ewwww..." + if("hot_coco") + icon_state = "chocolateglass" + name = "glass of chocolate" + desc = "Tasty" + if("lemonjuice") + icon_state = "lemonglass" + name = "glass of lemon juice" + desc = "Sour..." + if("holywater") + icon_state = "glass_clear" + name = "glass of Holy Water" + desc = "A glass of holy water." + if("potato") + icon_state = "glass_brown" + name = "glass of potato juice" + desc = "Bleh..." + if("watermelonjuice") + icon_state = "glass_red" + name = "glass of watermelon juice" + desc = "A glass of watermelon juice." + if("cola") + icon_state = "glass_brown" + name = "glass of space Cola" + desc = "A glass of refreshing Space Cola" + if("nuka_cola") + icon_state = "nuka_colaglass" + name = "Nuka Cola" + desc = "Don't cry, Don't raise your eye, It's only nuclear wasteland" + if("orangejuice") + icon_state = "glass_orange" + name = "glass of orange juice" + desc = "Vitamins! Yay!" + if("tomatojuice") + icon_state = "glass_red" + name = "glass of tomato juice" + desc = "Are you sure this is tomato juice?" + if("blood") + icon_state = "glass_red" + name = "glass of tomato juice" + desc = "Are you sure this is tomato juice?" + if("limejuice") + icon_state = "glass_green" + name = "glass of lime juice" + desc = "A glass of sweet-sour lime juice." + if("whiskey") + icon_state = "whiskeyglass" + name = "glass of whiskey" + desc = "The silky, smokey whiskey goodness inside the glass makes the drink look very classy." + if("gin") + icon_state = "ginvodkaglass" + name = "glass of gin" + desc = "A crystal clear glass of Griffeater gin." + if("vodka") + icon_state = "ginvodkaglass" + name = "glass of vodka" + desc = "The glass contain wodka. Xynta." + if("goldschlager") + icon_state = "ginvodkaglass" + name = "glass of Goldschlager" + desc = "100 proof that teen girls will drink anything with gold in it." + if("wine") + icon_state = "wineglass" + name = "glass of wine" + desc = "A very classy looking drink." + if("cognac") + icon_state = "cognacglass" + name = "glass of cognac" + desc = "Damn, you feel like some kind of French aristocrat just by holding this." + if ("kahlua") + icon_state = "kahluaglass" + name = "glass of RR Coffee Liquor" + desc = "DAMN, THIS THING LOOKS ROBUST" + if("vermouth") + icon_state = "vermouthglass" + name = "glass of vermouth" + desc = "You wonder why you're even drinking this straight." + if("tequilla") + icon_state = "tequillaglass" + name = "glass of tequilla" + desc = "Now all that's missing is the weird colored shades!" + if("patron") + icon_state = "patronglass" + name = "glass of patron" + desc = "Drinking patron in the bar, with all the subpar ladies." + if("rum") + icon_state = "rumglass" + name = "glass of rum" + desc = "Now you want to Pray for a pirate suit, don't you?" + if("gintonic") + icon_state = "gintonicglass" + name = "Gin and Tonic" + desc = "A mild but still great cocktail. Drink up, like a true Englishman." + if("whiskeycola") + icon_state = "whiskeycolaglass" + name = "Whiskey Cola" + desc = "An innocent-looking mixture of cola and Whiskey. Delicious." + if("whiterussian") + icon_state = "whiterussianglass" + name = "White Russian" + desc = "A very nice looking drink. But that's just, like, your opinion, man." + if("screwdrivercocktail") + icon_state = "screwdriverglass" + name = "Screwdriver" + desc = "A simple, yet superb mixture of Vodka and orange juice. Just the thing for the tired engineer." + if("bloodymary") + icon_state = "bloodymaryglass" + name = "Bloody Mary" + desc = "Tomato juice, mixed with Vodka and a lil' bit of lime. Tastes like liquid murder." + if("martini") + icon_state = "martiniglass" + name = "Classic Martini" + desc = "Damn, the bartender even stirred it, not shook it." + if("vodkamartini") + icon_state = "martiniglass" + name = "Vodka martini" + desc ="A bastardisation of the classic martini. Still great." + if("gargleblaster") + icon_state = "gargleblasterglass" + name = "Pan-Galactic Gargle Blaster" + desc = "Does... does this mean that Arthur and Ford are on the station? Oh joy." + if("bravebull") + icon_state = "bravebullglass" + name = "Brave Bull" + desc = "Tequilla and Coffee liquor, brought together in a mouthwatering mixture. Drink up." + if("tequillasunrise") + icon_state = "tequillasunriseglass" + name = "Tequilla Sunrise" + desc = "Oh great, now you feel nostalgic about sunrises back on Terra..." + if("toxinsspecial") + icon_state = "toxinsspecialglass" + name = "Toxins Special" + desc = "Whoah, this thing is on FIRE" + if("beepskysmash") + icon_state = "beepskysmashglass" + name = "Beepsky Smash" + desc = "Heavy, hot and strong. Just like the Iron fist of the LAW." + if("doctorsdelight") + icon_state = "doctorsdelightglass" + name = "Doctor's Delight" + desc = "A healthy mixture of juices, guaranteed to keep you healthy until the next toolboxing takes place." + if("manlydorf") + icon_state = "manlydorfglass" + name = "The Manly Dorf" + desc = "A manly concotion made from Ale and Beer. Intended for true men only." + if("irishcream") + icon_state = "irishcreamglass" + name = "Irish Cream" + desc = "It's cream, mixed with whiskey. What else would you expect from the Irish?" + if("cubalibre") + icon_state = "cubalibreglass" + name = "Cuba Libre" + desc = "A classic mix of rum and cola." + if("b52") + icon_state = "b52glass" + name = "B-52" + desc = "Kahlua, Irish Cream, and cognac. You will get bombed." + if("atomicbomb") + icon_state = "atomicbombglass" + name = "Atomic Bomb" + desc = "Nanotrasen cannot take legal responsibility for your actions after imbibing." + if("longislandicedtea") + icon_state = "longislandicedteaglass" + name = "Long Island Iced Tea" + desc = "The liquor cabinet, brought together in a delicious mix. Intended for middle-aged alcoholic women only." + if("threemileisland") + icon_state = "threemileislandglass" + name = "Three Mile Island Ice Tea" + desc = "A glass of this is sure to prevent a meltdown." + if("margarita") + icon_state = "margaritaglass" + name = "Margarita" + desc = "On the rocks with salt on the rim. Arriba~!" + if("blackrussian") + icon_state = "blackrussianglass" + name = "Black Russian" + desc = "For the lactose-intolerant. Still as classy as a White Russian." + if("vodkatonic") + icon_state = "vodkatonicglass" + name = "Vodka and Tonic" + desc = "For when a gin and tonic isn't Russian enough." + if("manhattan") + icon_state = "manhattanglass" + name = "Manhattan" + desc = "The Detective's undercover drink of choice. He never could stomach gin..." + if("manhattan_proj") + icon_state = "proj_manhattanglass" + name = "Manhattan Project" + desc = "A scientist drink of choice, for thinking how to blow up the station." + if("ginfizz") + icon_state = "ginfizzglass" + name = "Gin Fizz" + desc = "Refreshingly lemony, deliciously dry." + if("irishcoffee") + icon_state = "irishcoffeeglass" + name = "Irish Coffee" + desc = "Coffee and alcohol. More fun than a Mimosa to drink in the morning." + if("hooch") + icon_state = "glass_brown2" + name = "Hooch" + desc = "You've really hit rock bottom now... your liver packed its bags and left last night." + if("whiskeysoda") + icon_state = "whiskeysodaglass2" + name = "Whiskey Soda" + desc = "Ultimate refreshment." + if("tonic") + icon_state = "glass_clear" + name = "Glass of Tonic Water" + desc = "Quinine tastes funny, but at least it'll keep that Space Malaria away." + if("sodawater") + icon_state = "glass_clear" + name = "Glass of Soda Water" + desc = "Soda water. Why not make a scotch and soda?" + if("water") + icon_state = "glass_clear" + name = "Glass of Water" + desc = "The father of all refreshments." + if("spacemountainwind") + icon_state = "Space_mountain_wind_glass" + name = "Glass of Space Mountain Wind" + desc = "Space Mountain Wind. As you know, there are no mountains in space, only wind." + if("thirteenloko") + icon_state = "thirteen_loko_glass" + name = "Glass of Thirteen Loko" + desc = "This is a glass of Thirteen Loko, it appears to be of the highest quality. The drink, not the glass" + if("dr_gibb") + icon_state = "dr_gibb_glass" + name = "Glass of Dr. Gibb" + desc = "Dr. Gibb. Not as dangerous as the name might imply." + if("space_up") + icon_state = "space-up_glass" + name = "Glass of Space-up" + desc = "Space-up. It helps keep your cool." + if("lemon_lime") + icon_state = "glass_yellow" + name = "Glass of Lemon-Lime" + desc = "You're pretty certain a real fruit has never actually touched this." + if("moonshine") + icon_state = "glass_clear" + name = "Moonshine" + desc = "You've really hit rock bottom now... your liver packed its bags and left last night." + if("soymilk") + icon_state = "glass_white" + name = "Glass of soy milk" + desc = "White and nutritious soy goodness!" + if("berryjuice") + icon_state = "berryjuice" + name = "Glass of berry juice" + desc = "Berry juice. Or maybe it's jam. Who cares?" + if("poisonberryjuice") + icon_state = "poisonberryjuice" + name = "Glass of berry juice" + desc = "Berry juice. Or maybe it's poison. Who cares?" + if("carrotjuice") + icon_state = "carrotjuice" + name = "Glass of carrot juice" + desc = "It is just like a carrot but without crunching." + if("banana") + icon_state = "banana" + name = "Glass of banana juice" + desc = "The raw essence of a banana. HONK" + if("bahama_mama") + icon_state = "bahama_mama" + name = "Bahama Mama" + desc = "Tropic cocktail" + if("singulo") + icon_state = "singulo" + name = "Singulo" + desc = "A blue-space beverage." + if("alliescocktail") + icon_state = "alliescocktail" + name = "Allies cocktail" + desc = "A drink made from your allies." + if("antifreeze") + icon_state = "antifreeze" + name = "Anti-freeze" + desc = "The ultimate refreshment." + if("barefoot") + icon_state = "b&p" + name = "Barefoot" + desc = "Barefoot and pregnant" + if("demonsblood") + icon_state = "demonsblood" + name = "Demons Blood" + desc = "Just looking at this thing makes the hair at the back of your neck stand up." + if("booger") + icon_state = "booger" + name = "Booger" + desc = "Ewww..." + if("snowwhite") + icon_state = "snowwhite" + name = "Snow White" + desc = "A cold refreshment." + if("aloe") + icon_state = "aloe" + name = "Aloe" + desc = "Very, very, very good." + if("andalusia") + icon_state = "andalusia" + name = "Andalusia" + desc = "A nice, strange named drink." + if("sbiten") + icon_state = "sbitenglass" + name = "Sbiten" + desc = "A spicy mix of Vodka and Spice. Very hot." + if("red_mead") + icon_state = "red_meadglass" + name = "Red Mead" + desc = "A True Vikings Beverage, though its color is strange." + if("mead") + icon_state = "meadglass" + name = "Mead" + desc = "A Vikings Beverage, though a cheap one." + if("iced_beer") + icon_state = "iced_beerglass" + name = "Iced Beer" + desc = "A beer so frosty, the air around it freezes." + if("grog") + icon_state = "grogglass" + name = "Grog" + desc = "A fine and cepa drink for Space." + if("soy_latte") + icon_state = "soy_latte" + name = "Soy Latte" + desc = "A nice and refrshing beverage while you are reading." + if("cafe_latte") + icon_state = "cafe_latte" + name = "Cafe Latte" + desc = "A nice, strong and refreshing beverage while you are reading." + if("acidspit") + icon_state = "acidspitglass" + name = "Acid Spit" + desc = "A drink from Nanotrasen. Made from live aliens." + if("amasec") + icon_state = "amasecglass" + name = "Amasec" + desc = "Always handy before COMBAT!!!" + if("neurotoxin") + icon_state = "neurotoxinglass" + name = "Neurotoxin" + desc = "A drink that is guaranteed to knock you silly." + if("hippiesdelight") + icon_state = "hippiesdelightglass" + name = "Hippie's Delight" + desc = "A drink enjoyed by people during the 1960's." + if("bananahonk") + icon_state = "bananahonkglass" + name = "Banana Honk" + desc = "A drink from Clown Heaven." + if("silencer") + icon_state = "silencerglass" + name = "Silencer" + desc = "A drink from mime Heaven." + if("nothing") + icon_state = "nothing" + name = "Nothing" + desc = "Absolutely nothing." + if("devilskiss") + icon_state = "devilskiss" + name = "Devils Kiss" + desc = "Creepy time!" + if("changelingsting") + icon_state = "changelingsting" + name = "Changeling Sting" + desc = "A stingy drink." + if("irishcarbomb") + icon_state = "irishcarbomb" + name = "Irish Car Bomb" + desc = "An irish car bomb." + if("syndicatebomb") + icon_state = "syndicatebomb" + name = "Syndicate Bomb" + desc = "A syndicate bomb." + if("erikasurprise") + icon_state = "erikasurprise" + name = "Erika Surprise" + desc = "The surprise is, it's green!" + if("driestmartini") + icon_state = "driestmartiniglass" + name = "Driest Martini" + desc = "Only for the experienced. You think you see sand floating in the glass." + if("ice") + icon_state = "iceglass" + name = "Glass of ice" + desc = "Generally, you're supposed to put something else in there too..." + if("icecoffee") + icon_state = "icedcoffeeglass" + name = "Iced Coffee" + desc = "A drink to perk you up and refresh you!" + if("icetea") + icon_state = "icedteaglass" + name = "Iced Tea" + desc = "All natural, antioxidant-rich flavour sensation." + if("coffee") + icon_state = "glass_brown" + name = "Glass of coffee" + desc = "Don't drop it, or you'll send scalding liquid and glass shards everywhere." + if("tea") + icon_state = "teaglass" + name = "Glass of tea" + desc = "Drinking it from here would not seem right." + if("bilk") + icon_state = "glass_brown" + name = "Glass of bilk" + desc = "A brew of milk and beer. For those alcoholics who fear osteoporosis." + if("fuel") + icon_state = "dr_gibb_glass" + name = "Glass of welder fuel" + desc = "Unless you are an industrial tool, this is probably not safe for consumption." + else + icon_state ="glass_brown" + name = "Glass of ..what?" + desc = "You can't really tell what this is." + else + icon_state = "glass_empty" + name = "Drinking glass" + desc = "Your standard drinking glass" + return // for /obj/machinery/vending/sovietsoda /obj/item/weapon/reagent_containers/food/drinks/drinkingglass/soda diff --git a/code/modules/food&drinks/food/condiment.dm b/code/modules/food&drinks/food/condiment.dm index 9433751e0be..ff7706eec96 100644 --- a/code/modules/food&drinks/food/condiment.dm +++ b/code/modules/food&drinks/food/condiment.dm @@ -118,15 +118,15 @@ desc = "Used in cooking various dishes." icon_state = "enzyme" - New() - ..() - reagents.add_reagent("enzyme", 50) +/obj/item/weapon/reagent_containers/food/condiment/enzyme/New() + ..() + reagents.add_reagent("enzyme", 50) /obj/item/weapon/reagent_containers/food/condiment/sugar - New() - ..() - reagents.add_reagent("sugar", 50) +/obj/item/weapon/reagent_containers/food/condiment/sugar/New() + ..() + reagents.add_reagent("sugar", 50) /obj/item/weapon/reagent_containers/food/condiment/saltshaker //Seperate from above since it's a small shaker rather then name = "Salt Shaker" // a large one. @@ -136,9 +136,9 @@ amount_per_transfer_from_this = 1 volume = 20 - New() - ..() - reagents.add_reagent("sodiumchloride", 20) +/obj/item/weapon/reagent_containers/food/condiment/saltshaker/New() + ..() + reagents.add_reagent("sodiumchloride", 20) /obj/item/weapon/reagent_containers/food/condiment/peppermill name = "Pepper Mill" @@ -148,9 +148,9 @@ amount_per_transfer_from_this = 1 volume = 20 - New() - ..() - reagents.add_reagent("blackpepper", 20) +/obj/item/weapon/reagent_containers/food/condiment/peppermill/New() + ..() + reagents.add_reagent("blackpepper", 20) //Food packs. To easily apply deadly toxi... delicious sauces to your food! /obj/item/weapon/reagent_containers/food/condiment/pack diff --git a/code/modules/food&drinks/food/snacks.dm b/code/modules/food&drinks/food/snacks.dm index 6d3d4effe66..2d066e7b8c0 100644 --- a/code/modules/food&drinks/food/snacks.dm +++ b/code/modules/food&drinks/food/snacks.dm @@ -229,33 +229,36 @@ desc = "Probably too incredible for mortal men to fully enjoy." icon_state = "aesirsalad" trash = /obj/item/trash/snack_bowl - New() - ..() - eatverb = pick("crunch","devour","nibble","gnaw","gobble","chomp") - reagents.add_reagent("nutriment", 8) - reagents.add_reagent("tricordrazine", 8) - bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/aesirsalad/New() + ..() + eatverb = pick("crunch","devour","nibble","gnaw","gobble","chomp") + reagents.add_reagent("nutriment", 8) + reagents.add_reagent("tricordrazine", 8) + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/herbsalad name = "herb salad" desc = "A tasty salad with apples on top." icon_state = "herbsalad" trash = /obj/item/trash/snack_bowl - New() - ..() - reagents.add_reagent("nutriment", 8) - bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/herbsalad/New() + ..() + reagents.add_reagent("nutriment", 8) + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/validsalad name = "valid salad" desc = "It's just an herb salad with meatballs and fried potato slices. Nothing suspicious about it." icon_state = "validsalad" trash = /obj/item/trash/snack_bowl - New() - ..() - reagents.add_reagent("nutriment", 8) - reagents.add_reagent("doctorsdelight", 5) - bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/validsalad/New() + ..() + reagents.add_reagent("nutriment", 8) + reagents.add_reagent("doctorsdelight", 5) + bitesize = 3 ////////////////////////////////////////////DONUTS//////////////////////////////////////////// @@ -266,49 +269,51 @@ /obj/item/weapon/reagent_containers/food/snacks/donut/normal desc = "Goes great with Robust Coffee." - New() - ..() - reagents.add_reagent("nutriment", 3) - reagents.add_reagent("sprinkles", 1) - src.bitesize = 3 - if(prob(30)) - src.icon_state = "donut2" - src.name = "frosted donut" - reagents.add_reagent("sprinkles", 2) + +/obj/item/weapon/reagent_containers/food/snacks/donut/normal/New() + ..() + reagents.add_reagent("nutriment", 3) + reagents.add_reagent("sprinkles", 1) + src.bitesize = 3 + if(prob(30)) + src.icon_state = "donut2" + src.name = "frosted donut" + reagents.add_reagent("sprinkles", 2) /obj/item/weapon/reagent_containers/food/snacks/donut/chaos name = "chaos donut" desc = "Like life, it never quite tastes the same." - New() - ..() - reagents.add_reagent("nutriment", 2) - reagents.add_reagent("sprinkles", 1) - bitesize = 10 - switch(rand(1,10)) - if(1) - reagents.add_reagent("nutriment", 3) - if(2) - reagents.add_reagent("capsaicin", 3) - if(3) - reagents.add_reagent("frostoil", 3) - if(4) - reagents.add_reagent("sprinkles", 3) - if(5) - reagents.add_reagent("plasma", 3) - if(6) - reagents.add_reagent("coco", 3) - if(7) - reagents.add_reagent("slimejelly", 3) - if(8) - reagents.add_reagent("banana", 3) - if(9) - reagents.add_reagent("berryjuice", 3) - if(10) - reagents.add_reagent("tricordrazine", 3) - if(prob(30)) - icon_state = "donut2" - name = "frosted chaos donut" - reagents.add_reagent("sprinkles", 2) + +/obj/item/weapon/reagent_containers/food/snacks/donut/chaos/New() + ..() + reagents.add_reagent("nutriment", 2) + reagents.add_reagent("sprinkles", 1) + bitesize = 10 + switch(rand(1,10)) + if(1) + reagents.add_reagent("nutriment", 3) + if(2) + reagents.add_reagent("capsaicin", 3) + if(3) + reagents.add_reagent("frostoil", 3) + if(4) + reagents.add_reagent("sprinkles", 3) + if(5) + reagents.add_reagent("plasma", 3) + if(6) + reagents.add_reagent("coco", 3) + if(7) + reagents.add_reagent("slimejelly", 3) + if(8) + reagents.add_reagent("banana", 3) + if(9) + reagents.add_reagent("berryjuice", 3) + if(10) + reagents.add_reagent("tricordrazine", 3) + if(prob(30)) + icon_state = "donut2" + name = "frosted chaos donut" + reagents.add_reagent("sprinkles", 2) /obj/item/weapon/reagent_containers/food/snacks/donut/jelly @@ -316,46 +321,49 @@ desc = "You jelly?" icon_state = "jdonut1" bitesize = 5 - New() - ..() - reagents.add_reagent("nutriment", 3) - reagents.add_reagent("sprinkles", 1) - reagents.add_reagent("berryjuice", 5) - if(prob(30)) - icon_state = "jdonut2" - name = "Frosted Jelly Donut" - reagents.add_reagent("sprinkles", 2) + +/obj/item/weapon/reagent_containers/food/snacks/donut/jelly/New() + ..() + reagents.add_reagent("nutriment", 3) + reagents.add_reagent("sprinkles", 1) + reagents.add_reagent("berryjuice", 5) + if(prob(30)) + icon_state = "jdonut2" + name = "Frosted Jelly Donut" + reagents.add_reagent("sprinkles", 2) /obj/item/weapon/reagent_containers/food/snacks/donut/slimejelly name = "jelly donut" desc = "You jelly?" icon_state = "jdonut1" bitesize = 5 - New() - ..() - reagents.add_reagent("nutriment", 3) - reagents.add_reagent("sprinkles", 1) - reagents.add_reagent("slimejelly", 5) - bitesize = 5 - if(prob(30)) - icon_state = "jdonut2" - name = "Frosted Jelly Donut" - reagents.add_reagent("sprinkles", 2) + +/obj/item/weapon/reagent_containers/food/snacks/donut/slimejelly/New() + ..() + reagents.add_reagent("nutriment", 3) + reagents.add_reagent("sprinkles", 1) + reagents.add_reagent("slimejelly", 5) + bitesize = 5 + if(prob(30)) + icon_state = "jdonut2" + name = "Frosted Jelly Donut" + reagents.add_reagent("sprinkles", 2) /obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly name = "jelly donut" desc = "You jelly?" icon_state = "jdonut1" bitesize = 5 - New() - ..() - reagents.add_reagent("nutriment", 3) - reagents.add_reagent("sprinkles", 1) - reagents.add_reagent("cherryjelly", 5) - if(prob(30)) - icon_state = "jdonut2" - name = "Frosted Jelly Donut" - reagents.add_reagent("sprinkles", 2) + +/obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly/New() + ..() + reagents.add_reagent("nutriment", 3) + reagents.add_reagent("sprinkles", 1) + reagents.add_reagent("cherryjelly", 5) + if(prob(30)) + icon_state = "jdonut2" + name = "Frosted Jelly Donut" + reagents.add_reagent("sprinkles", 2) ////////////////////////////////////////////WAFFLES//////////////////////////////////////////// @@ -364,41 +372,45 @@ desc = "Mmm, waffles." icon_state = "waffles" trash = /obj/item/trash/waffles - New() - ..() - reagents.add_reagent("nutriment", 8) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/waffles/New() + ..() + reagents.add_reagent("nutriment", 8) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/soylentgreen name = "\improper Soylent Green" desc = "Not made of people. Honest." //Totally people. icon_state = "soylent_green" trash = /obj/item/trash/waffles - New() - ..() - reagents.add_reagent("nutriment", 10) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/soylentgreen/New() + ..() + reagents.add_reagent("nutriment", 10) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/soylenviridians name = "\improper Soylent Virdians" desc = "Not made of people. Honest." //Actually honest for once. icon_state = "soylent_yellow" trash = /obj/item/trash/waffles - New() - ..() - reagents.add_reagent("nutriment", 10) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/soylenviridians/New() + ..() + reagents.add_reagent("nutriment", 10) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/rofflewaffles name = "roffle waffles" desc = "Waffles from Roffle. Co." icon_state = "rofflewaffles" trash = /obj/item/trash/waffles - New() - ..() - reagents.add_reagent("nutriment", 8) - reagents.add_reagent("mushroomhallucinogen", 8) - bitesize = 4 + +/obj/item/weapon/reagent_containers/food/snacks/rofflewaffles/New() + ..() + reagents.add_reagent("nutriment", 8) + reagents.add_reagent("mushroomhallucinogen", 8) + bitesize = 4 ////////////////////////////////////////////FISH//////////////////////////////////////////// @@ -407,23 +419,25 @@ desc = "A grifftastic sandwich that burns your tongue and then leaves it numb!" icon_state = "cubancarp" trash = /obj/item/trash/plate - New() - ..() - reagents.add_reagent("nutriment", 6) - reagents.add_reagent("carpotoxin", 3) - reagents.add_reagent("capsaicin", 3) - bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/cubancarp/New() + ..() + reagents.add_reagent("nutriment", 6) + reagents.add_reagent("carpotoxin", 3) + reagents.add_reagent("capsaicin", 3) + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/carpmeat name = "carp fillet" desc = "A fillet of spess carp meat." icon_state = "fishfillet" - New() - ..() - eatverb = pick("bite","chew","choke down","gnaw","swallow","chomp") - reagents.add_reagent("nutriment", 3) - reagents.add_reagent("carpotoxin", 3) - bitesize = 6 + +/obj/item/weapon/reagent_containers/food/snacks/carpmeat/New() + ..() + eatverb = pick("bite","chew","choke down","gnaw","swallow","chomp") + reagents.add_reagent("nutriment", 3) + reagents.add_reagent("carpotoxin", 3) + bitesize = 6 /obj/item/weapon/reagent_containers/food/snacks/carpmeat/imitation name = "imitation carp fillet" @@ -433,21 +447,23 @@ name = "fish fingers" desc = "A finger of fish." icon_state = "fishfingers" - New() - ..() - reagents.add_reagent("nutriment", 4) - reagents.add_reagent("carpotoxin", 3) - bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/fishfingers/New() + ..() + reagents.add_reagent("nutriment", 4) + reagents.add_reagent("carpotoxin", 3) + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/fishandchips name = "fish and chips" desc = "I do say so myself chap." icon_state = "fishandchips" - New() - ..() - reagents.add_reagent("nutriment", 6) - reagents.add_reagent("carpotoxin", 3) - bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/fishandchips/New() + ..() + reagents.add_reagent("nutriment", 6) + reagents.add_reagent("carpotoxin", 3) + bitesize = 3 ////////////////////////////////////////////EGGS//////////////////////////////////////////// @@ -455,41 +471,43 @@ name = "chocolate egg" desc = "Such, sweet, fattening food." icon_state = "chocolateegg" - New() - ..() - reagents.add_reagent("nutriment", 4) - reagents.add_reagent("sugar", 2) - reagents.add_reagent("coco", 2) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/chocolateegg/New() + ..() + reagents.add_reagent("nutriment", 4) + reagents.add_reagent("sugar", 2) + reagents.add_reagent("coco", 2) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/egg name = "egg" desc = "An egg!" icon_state = "egg" - New() + +/obj/item/weapon/reagent_containers/food/snacks/egg/New() + ..() + reagents.add_reagent("nutriment", 1) + +/obj/item/weapon/reagent_containers/food/snacks/egg/throw_impact(atom/hit_atom) + ..() + new/obj/effect/decal/cleanable/egg_smudge(src.loc) + reagents.reaction(hit_atom, TOUCH) + del(src) // Not qdel, because it'll hit other mobs then the floor for runtimes. + +/obj/item/weapon/reagent_containers/food/snacks/egg/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(istype( W, /obj/item/toy/crayon )) + var/obj/item/toy/crayon/C = W + var/clr = C.colourName + + if(!(clr in list("blue", "green", "mime", "orange", "purple", "rainbow", "red", "yellow"))) + usr << "[src] refuses to take on this colour!" + return + + usr << "You colour [src] [clr]." + icon_state = "egg-[clr]" + item_color = clr + else ..() - reagents.add_reagent("nutriment", 1) - - throw_impact(atom/hit_atom) - ..() - new/obj/effect/decal/cleanable/egg_smudge(src.loc) - reagents.reaction(hit_atom, TOUCH) - del(src) // Not qdel, because it'll hit other mobs then the floor for runtimes. - - attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype( W, /obj/item/toy/crayon )) - var/obj/item/toy/crayon/C = W - var/clr = C.colourName - - if(!(clr in list("blue", "green", "mime", "orange", "purple", "rainbow", "red", "yellow"))) - usr << "[src] refuses to take on this colour!" - return - - usr << "You colour [src] [clr]." - icon_state = "egg-[clr]" - item_color = clr - else - ..() /obj/item/weapon/reagent_containers/food/snacks/egg/blue icon_state = "egg-blue" @@ -527,20 +545,22 @@ name = "fried egg" desc = "A fried egg, with a touch of salt and pepper." icon_state = "friedegg" - New() - ..() - reagents.add_reagent("nutriment", 2) - reagents.add_reagent("sodiumchloride", 1) - reagents.add_reagent("blackpepper", 1) - bitesize = 1 + +/obj/item/weapon/reagent_containers/food/snacks/friedegg/New() + ..() + reagents.add_reagent("nutriment", 2) + reagents.add_reagent("sodiumchloride", 1) + reagents.add_reagent("blackpepper", 1) + bitesize = 1 /obj/item/weapon/reagent_containers/food/snacks/boiledegg name = "boiled egg" desc = "A hard boiled egg." icon_state = "egg" - New() - ..() - reagents.add_reagent("nutriment", 2) + +/obj/item/weapon/reagent_containers/food/snacks/boiledegg/New() + ..() + reagents.add_reagent("nutriment", 2) /obj/item/weapon/reagent_containers/food/snacks/omelette //FUCK THIS name = "omelette du fromage" @@ -548,33 +568,34 @@ icon_state = "omelette" trash = /obj/item/trash/plate - New() - ..() - reagents.add_reagent("nutriment", 8) - bitesize = 1 +/obj/item/weapon/reagent_containers/food/snacks/omelette/New() + ..() + reagents.add_reagent("nutriment", 8) + bitesize = 1 - attackby(obj/item/weapon/W, mob/user) - if(istype(W,/obj/item/weapon/kitchen/utensil/fork)) - if(W.icon_state == "forkloaded") - user << "You already have omelette on your fork." - return - W.icon_state = "forkloaded" - user.visible_message( \ - "[user] takes a piece of omelette with their fork!", \ - "You take a piece of omelette with your fork!" \ - ) - reagents.remove_reagent("nutriment", 1) - if(reagents.total_volume <= 0) - qdel(src) +/obj/item/weapon/reagent_containers/food/snacks/omelette/attackby(obj/item/weapon/W, mob/user) + if(istype(W,/obj/item/weapon/kitchen/utensil/fork)) + if(W.icon_state == "forkloaded") + user << "You already have omelette on your fork." + return + W.icon_state = "forkloaded" + user.visible_message( \ + "[user] takes a piece of omelette with their fork!", \ + "You take a piece of omelette with your fork!" \ + ) + reagents.remove_reagent("nutriment", 1) + if(reagents.total_volume <= 0) + qdel(src) /obj/item/weapon/reagent_containers/food/snacks/benedict name = "eggs benedict" desc = "There is only one egg on this, how rude." icon_state = "benedict" - New() - ..() - reagents.add_reagent("nutriment", 6) - bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/benedict/New() + ..() + reagents.add_reagent("nutriment", 6) + bitesize = 3 ////////////////////////////////////////////MUFFINS//////////////////////////////////////////// @@ -582,10 +603,11 @@ name = "muffin" desc = "A delicious and spongy little cake." icon_state = "muffin" - New() - ..() - reagents.add_reagent("nutriment", 6) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/muffin/New() + ..() + reagents.add_reagent("nutriment", 6) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/muffin/berry name = "berry muffin" @@ -605,40 +627,44 @@ desc = "Nougat love it or hate it." icon_state = "candy" trash = /obj/item/trash/candy - New() - ..() - reagents.add_reagent("nutriment", 1) - reagents.add_reagent("sugar", 3) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/candy/New() + ..() + reagents.add_reagent("nutriment", 1) + reagents.add_reagent("sugar", 3) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/candy_corn name = "candy corn" desc = "It's a handful of candy corn. Can be stored in a detective's hat." icon_state = "candy_corn" - New() - ..() - reagents.add_reagent("nutriment", 4) - reagents.add_reagent("sugar", 2) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/candy_corn/New() + ..() + reagents.add_reagent("nutriment", 4) + reagents.add_reagent("sugar", 2) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/chips name = "chips" desc = "Commander Riker's What-The-Crisps" icon_state = "chips" trash = /obj/item/trash/chips - New() - ..() - reagents.add_reagent("nutriment", 3) - bitesize = 1 + +/obj/item/weapon/reagent_containers/food/snacks/chips/New() + ..() + reagents.add_reagent("nutriment", 3) + bitesize = 1 /obj/item/weapon/reagent_containers/food/snacks/cookie name = "cookie" desc = "COOKIE!!!" icon_state = "COOKIE!!!" - New() - ..() - reagents.add_reagent("nutriment", 5) - bitesize = 1 + +/obj/item/weapon/reagent_containers/food/snacks/cookie/New() + ..() + reagents.add_reagent("nutriment", 5) + bitesize = 1 /obj/item/weapon/reagent_containers/food/snacks/chocolatebar name = "chocolate bar" @@ -646,17 +672,18 @@ icon_state = "chocolatebarunwrapped" wrapped = 0 bitesize = 2 - New() - ..() - reagents.add_reagent("nutriment", 3) - reagents.add_reagent("sugar", 2) - reagents.add_reagent("coco", 2) - attack_self(mob/user) - if(wrapped) - Unwrap(user) - else - ..() +/obj/item/weapon/reagent_containers/food/snacks/chocolatebar/New() + ..() + reagents.add_reagent("nutriment", 3) + reagents.add_reagent("sugar", 2) + reagents.add_reagent("coco", 2) + +/obj/item/weapon/reagent_containers/food/snacks/chocolatebar/attack_self(mob/user) + if(wrapped) + Unwrap(user) + else + ..() /obj/item/weapon/reagent_containers/food/snacks/chocolatebar/proc/Unwrap(mob/user) icon_state = "chocolatebarunwrapped" @@ -674,153 +701,170 @@ name = "tofu" desc = "We all love tofu." icon_state = "tofu" - New() - ..() - reagents.add_reagent("nutriment", 3) - bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/tofu/New() + ..() + reagents.add_reagent("nutriment", 3) + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice name = "huge mushroom slice" desc = "A slice from a huge mushroom." icon_state = "hugemushroomslice" - New() - ..() - reagents.add_reagent("nutriment", 3) - src.bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice/New() + ..() + reagents.add_reagent("nutriment", 3) + src.bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/tomatomeat name = "tomato slice" desc = "A slice from a huge tomato." icon_state = "tomatomeat" - New() - ..() - reagents.add_reagent("nutriment", 3) - src.bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/tomatomeat/New() + ..() + reagents.add_reagent("nutriment", 3) + src.bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/bearmeat name = "bear meat" desc = "A very manly slab of meat." icon_state = "bearmeat" - New() - ..() - reagents.add_reagent("nutriment", 12) - reagents.add_reagent("hyperzine", 5) - src.bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/bearmeat/New() + ..() + reagents.add_reagent("nutriment", 12) + reagents.add_reagent("hyperzine", 5) + src.bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/xenomeat name = "meat" desc = "A slab of meat" icon_state = "xenomeat" - New() - ..() - reagents.add_reagent("nutriment", 3) - src.bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/xenomeat/New() + ..() + reagents.add_reagent("nutriment", 3) + src.bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/spidermeat name = "spider meat" desc = "A slab of spider meat." icon_state = "spidermeat" - New() - ..() - reagents.add_reagent("nutriment", 3) - reagents.add_reagent("toxin", 3) - bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/spidermeat/New() + ..() + reagents.add_reagent("nutriment", 3) + reagents.add_reagent("toxin", 3) + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/spiderleg name = "spider leg" desc = "A still twitching leg of a giant spider... you don't really want to eat this, do you?" icon_state = "spiderleg" - New() - ..() - reagents.add_reagent("nutriment", 2) - reagents.add_reagent("toxin", 2) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/spiderleg/New() + ..() + reagents.add_reagent("nutriment", 2) + reagents.add_reagent("toxin", 2) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/cornedbeef name = "corned beef and cabbage" desc = "Now you can feel like a real tourist vacationing in Ireland." icon_state = "cornedbeef" trash = /obj/item/trash/plate - New() - ..() - reagents.add_reagent("nutriment", 6) - bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/cornedbeef/New() + ..() + reagents.add_reagent("nutriment", 6) + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/faggot name = "faggot" desc = "A great meal all round. Not a cord of wood." icon_state = "faggot" - New() - ..() - reagents.add_reagent("nutriment", 3) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/faggot/New() + ..() + reagents.add_reagent("nutriment", 3) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/sausage name = "sausage" desc = "A piece of mixed, long meat." icon_state = "sausage" - New() - ..() - eatverb = pick("bite","chew","nibble","deep throat","gobble","chomp") - reagents.add_reagent("nutriment", 6) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/sausage/New() + ..() + eatverb = pick("bite","chew","nibble","deep throat","gobble","chomp") + reagents.add_reagent("nutriment", 6) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/donkpocket name = "\improper Donk-pocket" desc = "The food of choice for the seasoned traitor." icon_state = "donkpocket" - New() - ..() - reagents.add_reagent("nutriment", 4) - var/warm = 0 - proc/cooltime() //Not working, derp? - if(warm) - spawn(4200) //ew - warm = 0 - reagents.del_reagent("tricordrazine") - name = initial(name) - return + +/obj/item/weapon/reagent_containers/food/snacks/donkpocket/New() + ..() + reagents.add_reagent("nutriment", 4) + + + +/obj/item/weapon/reagent_containers/food/snacks/donkpocket/proc/cooltime() //Not working, derp? + if(warm) + spawn(4200) //ew + warm = 0 + reagents.del_reagent("tricordrazine") + name = initial(name) + return /obj/item/weapon/reagent_containers/food/snacks/wingfangchu name = "wing fang chu" desc = "A savory dish of alien wing wang in soy." icon_state = "wingfangchu" trash = /obj/item/trash/snack_bowl - New() - ..() - reagents.add_reagent("nutriment", 6) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/wingfangchu/New() + ..() + reagents.add_reagent("nutriment", 6) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/human/kebab name = "-kebab" icon_state = "kebab" desc = "A human meat, on a stick." trash = /obj/item/stack/rods - New() - ..() - reagents.add_reagent("nutriment", 8) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/human/kebab/New() + ..() + reagents.add_reagent("nutriment", 8) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/monkeykebab name = "meat-kebab" icon_state = "kebab" desc = "Delicious meat, on a stick." trash = /obj/item/stack/rods - New() - ..() - reagents.add_reagent("nutriment", 8) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/monkeykebab/New() + ..() + reagents.add_reagent("nutriment", 8) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/tofukebab name = "tofu-kebab" icon_state = "kebab" desc = "Vegan meat, on a stick." trash = /obj/item/stack/rods - New() - ..() - reagents.add_reagent("nutriment", 8) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/tofukebab/New() + ..() + reagents.add_reagent("nutriment", 8) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/popcorn name = "popcorn" @@ -828,18 +872,20 @@ icon_state = "popcorn" trash = /obj/item/trash/popcorn var/unpopped = 0 - New() - ..() - eatverb = pick("bite","crunch","nibble","gnaw","gobble","chomp") - unpopped = rand(1,10) - reagents.add_reagent("nutriment", 2) - bitesize = 0.1 //this snack is supposed to be eating during looooong time. And this it not dinner food! --rastaf0 - On_Consume() - if(prob(unpopped)) //lol ...what's the point? << AINT SO POINTLESS NO MORE - usr << "\red You bite down on an un-popped kernel, and it hurts your teeth!" - unpopped = max(0, unpopped-1) - reagents.add_reagent("sacid",0.1) //only a little tingle. - ..() + +/obj/item/weapon/reagent_containers/food/snacks/popcorn/New() + ..() + eatverb = pick("bite","crunch","nibble","gnaw","gobble","chomp") + unpopped = rand(1,10) + reagents.add_reagent("nutriment", 2) + bitesize = 0.1 //this snack is supposed to be eating during looooong time. And this it not dinner food! --rastaf0 + +/obj/item/weapon/reagent_containers/food/snacks/popcorn/On_Consume() + if(prob(unpopped)) //lol ...what's the point? << AINT SO POINTLESS NO MORE + usr << "\red You bite down on an un-popped kernel, and it hurts your teeth!" + unpopped = max(0, unpopped-1) + reagents.add_reagent("sacid",0.1) //only a little tingle. + ..() /obj/item/weapon/reagent_containers/food/snacks/sosjerky @@ -847,153 +893,168 @@ icon_state = "sosjerky" desc = "Beef jerky made from the finest space cows." trash = /obj/item/trash/sosjerky - New() - ..() - reagents.add_reagent("nutriment", 4) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/sosjerky/New() + ..() + reagents.add_reagent("nutriment", 4) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/no_raisin name = "4no raisins" icon_state = "4no_raisins" desc = "Best raisins in the universe. Not sure why." trash = /obj/item/trash/raisins - New() - ..() - reagents.add_reagent("nutriment", 6) + +/obj/item/weapon/reagent_containers/food/snacks/no_raisin/New() + ..() + reagents.add_reagent("nutriment", 6) /obj/item/weapon/reagent_containers/food/snacks/spacetwinkie name = "space twinkie" icon_state = "space_twinkie" desc = "Guaranteed to survive longer than you will." - New() - ..() - reagents.add_reagent("sugar", 4) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/spacetwinkie/New() + ..() + reagents.add_reagent("sugar", 4) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers name = "cheesie honkers" desc = "Bite sized cheesie snacks that will honk all over your mouth." icon_state = "cheesie_honkers" trash = /obj/item/trash/cheesie - New() - ..() - reagents.add_reagent("nutriment", 4) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers/New() + ..() + reagents.add_reagent("nutriment", 4) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/syndicake name = "syndi-cakes" icon_state = "syndi_cakes" desc = "An extremely moist snack cake that tastes just as good after being nuked." trash = /obj/item/trash/syndi_cakes - New() - ..() - reagents.add_reagent("nutriment", 4) - reagents.add_reagent("doctorsdelight", 5) - bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/syndicake/New() + ..() + reagents.add_reagent("nutriment", 4) + reagents.add_reagent("doctorsdelight", 5) + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/loadedbakedpotato name = "loaded baked potato" desc = "Totally baked." icon_state = "loadedbakedpotato" - New() - ..() - reagents.add_reagent("nutriment", 6) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/loadedbakedpotato/New() + ..() + reagents.add_reagent("nutriment", 6) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/fries name = "space fries" desc = "AKA: French Fries, Freedom Fries, etc." icon_state = "fries" trash = /obj/item/trash/plate - New() - ..() - reagents.add_reagent("nutriment", 4) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/fries/New() + ..() + reagents.add_reagent("nutriment", 4) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/soydope name = "soy dope" desc = "Dope from a soy." icon_state = "soydope" trash = /obj/item/trash/plate - New() - ..() - reagents.add_reagent("nutriment", 2) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/soydope/New() + ..() + reagents.add_reagent("nutriment", 2) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/cheesyfries name = "cheesy fries" desc = "Fries. Covered in cheese. Duh." icon_state = "cheesyfries" trash = /obj/item/trash/plate - New() - ..() - reagents.add_reagent("nutriment", 6) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/cheesyfries/New() + ..() + reagents.add_reagent("nutriment", 6) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/fortunecookie name = "fortune cookie" desc = "A true prophecy in each cookie!" icon_state = "fortune_cookie" - New() - ..() - reagents.add_reagent("nutriment", 3) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/fortunecookie/New() + ..() + reagents.add_reagent("nutriment", 3) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/badrecipe name = "burned mess" desc = "Someone should be demoted from chef for this." icon_state = "badrecipe" - New() - ..() - eatverb = pick("choke down","nibble","gnaw","chomp") - reagents.add_reagent("toxin", 1) - reagents.add_reagent("carbon", 3) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/badrecipe/New() + ..() + eatverb = pick("choke down","nibble","gnaw","chomp") + reagents.add_reagent("toxin", 1) + reagents.add_reagent("carbon", 3) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/meatsteak name = "meat steak" desc = "A piece of hot spicy meat." icon_state = "meatsteak" trash = /obj/item/trash/plate - New() - ..() - reagents.add_reagent("nutriment", 4) - reagents.add_reagent("sodiumchloride", 1) - reagents.add_reagent("blackpepper", 1) - bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/meatsteak/New() + ..() + reagents.add_reagent("nutriment", 4) + reagents.add_reagent("sodiumchloride", 1) + reagents.add_reagent("blackpepper", 1) + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/spacylibertyduff name = "spacy liberty duff" desc = "Jello gelatin, from Alfred Hubbard's cookbook." icon_state = "spacylibertyduff" trash = /obj/item/trash/snack_bowl - New() - ..() - reagents.add_reagent("nutriment", 6) - reagents.add_reagent("mushroomhallucinogen", 6) - bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/spacylibertyduff/New() + ..() + reagents.add_reagent("nutriment", 6) + reagents.add_reagent("mushroomhallucinogen", 6) + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/amanitajelly name = "amanita jelly" desc = "Looks curiously toxic." icon_state = "amanitajelly" trash = /obj/item/trash/snack_bowl - New() - ..() - reagents.add_reagent("nutriment", 6) - reagents.add_reagent("amatoxin", 6) - reagents.add_reagent("mushroomhallucinogen", 3) - bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/amanitajelly/New() + ..() + reagents.add_reagent("nutriment", 6) + reagents.add_reagent("amatoxin", 6) + reagents.add_reagent("mushroomhallucinogen", 3) + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/poppypretzel name = "poppy pretzel" desc = "It's all twisted up!" icon_state = "poppypretzel" bitesize = 2 - New() - ..() - reagents.add_reagent("nutriment", 5) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/poppypretzel/New() + ..() + reagents.add_reagent("nutriment", 5) + bitesize = 2 /* No more of this /obj/item/weapon/reagent_containers/food/snacks/telebacon @@ -1002,14 +1063,15 @@ icon_state = "bacon" var/obj/item/device/radio/beacon/bacon/baconbeacon bitesize = 2 - New() - ..() - reagents.add_reagent("nutriment", 4) - baconbeacon = new /obj/item/device/radio/beacon/bacon(src) - On_Consume() - if(!reagents.total_volume) - baconbeacon.loc = usr - baconbeacon.digest_delay() + +/obj/item/weapon/reagent_containers/food/snacks/telebacon/New() + ..() + reagents.add_reagent("nutriment", 4) + baconbeacon = new /obj/item/device/radio/beacon/bacon(src) +/obj/item/weapon/reagent_containers/food/snacks/telebacon/On_Consume() + if(!reagents.total_volume) + baconbeacon.loc = usr + baconbeacon.digest_delay() */ /obj/item/weapon/reagent_containers/food/snacks/monkeycube @@ -1019,33 +1081,33 @@ bitesize = 12 wrapped = 0 - New() - ..() - reagents.add_reagent("nutriment",10) +/obj/item/weapon/reagent_containers/food/snacks/monkeycube/New() + ..() + reagents.add_reagent("nutriment",10) - afterattack(obj/O, mob/user,proximity) - if(!proximity) return - if(istype(O,/obj/structure/sink) && !wrapped) - user << "You place [src] under a stream of water..." - user.drop_item() - loc = get_turf(O) - return Expand() - ..() +/obj/item/weapon/reagent_containers/food/snacks/monkeycube/afterattack(obj/O, mob/user,proximity) + if(!proximity) return + if(istype(O,/obj/structure/sink) && !wrapped) + user << "You place [src] under a stream of water..." + user.drop_item() + loc = get_turf(O) + return Expand() + ..() - attack_self(mob/user) - if(wrapped) - Unwrap(user) +/obj/item/weapon/reagent_containers/food/snacks/monkeycube/attack_self(mob/user) + if(wrapped) + Unwrap(user) - proc/Expand() - visible_message("[src] expands!") - new /mob/living/carbon/monkey(get_turf(src)) - qdel(src) +/obj/item/weapon/reagent_containers/food/snacks/monkeycube/proc/Expand() + visible_message("[src] expands!") + new /mob/living/carbon/monkey(get_turf(src)) + qdel(src) - proc/Unwrap(mob/user) - icon_state = "monkeycube" - desc = "Just add water!" - user << "You unwrap the cube." - wrapped = 0 +/obj/item/weapon/reagent_containers/food/snacks/monkeycube/proc/Unwrap(mob/user) + icon_state = "monkeycube" + desc = "Just add water!" + user << "You unwrap the cube." + wrapped = 0 /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped @@ -1057,112 +1119,122 @@ name = "enchiladas" desc = "Viva La Mexico!" icon_state = "enchiladas" - New() - ..() - reagents.add_reagent("nutriment",8) - reagents.add_reagent("capsaicin", 6) - bitesize = 4 + +/obj/item/weapon/reagent_containers/food/snacks/enchiladas/New() + ..() + reagents.add_reagent("nutriment",8) + reagents.add_reagent("capsaicin", 6) + bitesize = 4 /obj/item/weapon/reagent_containers/food/snacks/stew name = "stew" desc = "A nice and warm stew. Healthy and strong." icon_state = "stew" trash = /obj/item/trash/snack_bowl - New() - ..() - eatverb = pick("slurp","sip","suck","inhale","drink") - reagents.add_reagent("nutriment", 10) - reagents.add_reagent("tomatojuice", 5) - reagents.add_reagent("imidazoline", 5) - reagents.add_reagent("water", 5) - bitesize = 10 + +/obj/item/weapon/reagent_containers/food/snacks/stew/New() + ..() + eatverb = pick("slurp","sip","suck","inhale","drink") + reagents.add_reagent("nutriment", 10) + reagents.add_reagent("tomatojuice", 5) + reagents.add_reagent("imidazoline", 5) + reagents.add_reagent("water", 5) + bitesize = 10 /obj/item/weapon/reagent_containers/food/snacks/stewedsoymeat name = "stewed soy meat" desc = "Even non-vegetarians will LOVE this!" icon_state = "stewedsoymeat" trash = /obj/item/trash/plate - New() - ..() - eatverb = pick("slurp","sip","suck","inhale","drink") - reagents.add_reagent("nutriment", 8) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/stewedsoymeat/New() + ..() + eatverb = pick("slurp","sip","suck","inhale","drink") + reagents.add_reagent("nutriment", 8) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/carrotfries name = "carrot fries" desc = "Tasty fries from fresh Carrots." icon_state = "carrotfries" trash = /obj/item/trash/plate - New() - ..() - reagents.add_reagent("nutriment", 3) - reagents.add_reagent("imidazoline", 3) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/carrotfries/New() + ..() + reagents.add_reagent("nutriment", 3) + reagents.add_reagent("imidazoline", 3) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/candiedapple name = "candied apple" desc = "An apple coated in sugary sweetness." icon_state = "candiedapple" - New() - ..() - reagents.add_reagent("nutriment", 3) - bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/candiedapple/New() + ..() + reagents.add_reagent("nutriment", 3) + bitesize = 3 /* /obj/item/weapon/reagent_containers/food/snacks/boiledslimecore name = "Boiled slime Core" desc = "A boiled red thing." icon_state = "boiledslimecore" - New() - ..() - reagents.add_reagent("slimejelly", 5) - bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/boiledslimecore/New() + ..() + reagents.add_reagent("slimejelly", 5) + bitesize = 3 */ /obj/item/weapon/reagent_containers/food/snacks/mint name = "mint" desc = "it is only wafer thin." icon_state = "mint" - New() - ..() - reagents.add_reagent("minttoxin", 1) - bitesize = 1 + +/obj/item/weapon/reagent_containers/food/snacks/mint/New() + ..() + reagents.add_reagent("minttoxin", 1) + bitesize = 1 /obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit name = "plump helmet biscuit" desc = "This is a finely-prepared plump helmet biscuit. The ingredients are exceptionally minced plump helmet, and well-minced dwarven wheat flour." icon_state = "phelmbiscuit" - New() - ..() - if(prob(10)) - name = "exceptional plump helmet biscuit" - desc = "Microwave is taken by a fey mood! It has cooked an exceptional plump helmet biscuit!" - reagents.add_reagent("nutriment", 8) - reagents.add_reagent("tricordrazine", 5) - bitesize = 2 - else - reagents.add_reagent("nutriment", 5) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit/New() + ..() + if(prob(10)) + name = "exceptional plump helmet biscuit" + desc = "Microwave is taken by a fey mood! It has cooked an exceptional plump helmet biscuit!" + reagents.add_reagent("nutriment", 8) + reagents.add_reagent("tricordrazine", 5) + bitesize = 2 + else + reagents.add_reagent("nutriment", 5) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/chawanmushi name = "chawanmushi" desc = "A legendary egg custard that makes friends out of enemies. Probably too hot for a cat to eat." icon_state = "chawanmushi" trash = /obj/item/trash/snack_bowl - New() - ..() - reagents.add_reagent("nutriment", 5) - bitesize = 1 + +/obj/item/weapon/reagent_containers/food/snacks/chawanmushi/New() + ..() + reagents.add_reagent("nutriment", 5) + bitesize = 1 /obj/item/weapon/reagent_containers/food/snacks/appletart name = "golden apple streusel tart" desc = "A tasty dessert that won't make it through a metal detector." icon_state = "gappletart" trash = /obj/item/trash/plate - New() - ..() - reagents.add_reagent("nutriment", 8) - reagents.add_reagent("gold", 5) - bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/appletart/New() + ..() + reagents.add_reagent("nutriment", 8) + reagents.add_reagent("gold", 5) + bitesize = 3 /////////////////////////////////////////////////Sliceable//////////////////////////////////////// // All the food items that can be sliced into smaller bits like Meatbread and Cheesewheels @@ -1193,10 +1265,11 @@ icon_state = "cheesewheel" slice_path = /obj/item/weapon/reagent_containers/food/snacks/cheesewedge slices_num = 5 - New() - ..() - reagents.add_reagent("nutriment", 20) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesewheel/New() + ..() + reagents.add_reagent("nutriment", 20) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/cheesewedge name = "cheese wedge" @@ -1215,9 +1288,9 @@ desc = "It's a salted cracker." icon_state = "cracker" - New() - ..() - reagents.add_reagent("nutriment", 1) +/obj/item/weapon/reagent_containers/food/snacks/cracker/New() + ..() + reagents.add_reagent("nutriment", 1) ////////////////////////////////FOOD ADDITIONS//////////////////////////////////////////// @@ -1226,88 +1299,97 @@ name = "egg wrap" desc = "The precursor to Pigs in a Blanket." icon_state = "wrap" - New() - ..() - reagents.add_reagent("nutriment", 5) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/wrap/New() + ..() + reagents.add_reagent("nutriment", 5) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/beans name = "tin of beans" desc = "Musical fruit in a slightly less musical container." icon_state = "beans" - New() - ..() - reagents.add_reagent("nutriment", 10) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/beans/New() + ..() + reagents.add_reagent("nutriment", 10) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/hotdog name = "hotdog" desc = "Fresh footlong ready to go down on." icon_state = "hotdog" - New() - ..() - reagents.add_reagent("nutriment", 6) - reagents.add_reagent("ketchup", 3) - bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/hotdog/New() + ..() + reagents.add_reagent("nutriment", 6) + reagents.add_reagent("ketchup", 3) + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/meatbun name = "meat bun" desc = "Has the potential to not be Dog." icon_state = "meatbun" - New() - ..() - reagents.add_reagent("nutriment", 6) - bitesize = 6 + +/obj/item/weapon/reagent_containers/food/snacks/meatbun/New() + ..() + reagents.add_reagent("nutriment", 6) + bitesize = 6 /obj/item/weapon/reagent_containers/food/snacks/sugarcookie name = "sugar cookie" desc = "Just like your little sister used to make." icon_state = "sugarcookie" - New() - ..() - reagents.add_reagent("nutriment", 2) - reagents.add_reagent("sugar", 5) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/sugarcookie/New() + ..() + reagents.add_reagent("nutriment", 2) + reagents.add_reagent("sugar", 5) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/boiledspiderleg name = "boiled spider leg" desc = "A giant spider's leg that's still twitching after being cooked. Gross!" icon_state = "spiderlegcooked" trash = /obj/item/trash/plate - New() - ..() - reagents.add_reagent("nutriment", 3) - reagents.add_reagent("toxin", 2) - bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/boiledspiderleg/New() + ..() + reagents.add_reagent("nutriment", 3) + reagents.add_reagent("toxin", 2) + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/spidereggs name = "spider eggs" desc = "A cluster of juicy spider eggs. A great side dish for when you care not for your health." icon_state = "spidereggs" - New() - ..() - reagents.add_reagent("nutriment", 2) - reagents.add_reagent("toxin", 3) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/spidereggs/New() + ..() + reagents.add_reagent("nutriment", 2) + reagents.add_reagent("toxin", 3) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/spidereggsham name = "green eggs and ham" desc = "Would you eat them on a train? Would you eat them on a plane? Would you eat them on a state of the art corporate deathtrap floating through space?" icon_state = "spidereggsham" trash = /obj/item/trash/plate - New() - ..() - reagents.add_reagent("nutriment", 6) - reagents.add_reagent("sodiumchloride", 1) - reagents.add_reagent("toxin", 3) - bitesize = 4 + +/obj/item/weapon/reagent_containers/food/snacks/spidereggsham/New() + ..() + reagents.add_reagent("nutriment", 6) + reagents.add_reagent("sodiumchloride", 1) + reagents.add_reagent("toxin", 3) + bitesize = 4 /obj/item/weapon/reagent_containers/food/snacks/sashimi name = "carp sashimi" desc = "Celebrate surviving attack from hostile alien lifeforms by hospitalising yourself." icon_state = "sashimi" - New() - ..() - reagents.add_reagent("nutriment", 6) - reagents.add_reagent("toxin", 5) - bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/sashimi/New() + ..() + reagents.add_reagent("nutriment", 6) + reagents.add_reagent("toxin", 5) + bitesize = 3 diff --git a/code/modules/food&drinks/food/snacks/meat.dm b/code/modules/food&drinks/food/snacks/meat.dm index d35e905f857..82eed258268 100644 --- a/code/modules/food&drinks/food/snacks/meat.dm +++ b/code/modules/food&drinks/food/snacks/meat.dm @@ -3,10 +3,11 @@ desc = "A slab of meat" icon_state = "meat" dried_type = /obj/item/weapon/reagent_containers/food/snacks/sosjerky - New() - ..() - reagents.add_reagent("nutriment", 3) - src.bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/meat/New() + ..() + reagents.add_reagent("nutriment", 3) + src.bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh diff --git a/code/modules/food&drinks/food/snacks_bread.dm b/code/modules/food&drinks/food/snacks_bread.dm index 01f8b0c2744..793dd7f1e9f 100644 --- a/code/modules/food&drinks/food/snacks_bread.dm +++ b/code/modules/food&drinks/food/snacks_bread.dm @@ -5,10 +5,11 @@ icon_state = "meatbread" slice_path = /obj/item/weapon/reagent_containers/food/snacks/meatbreadslice slices_num = 5 - New() - ..() - reagents.add_reagent("nutriment", 30) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/store/meatbread/New() + ..() + reagents.add_reagent("nutriment", 30) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/meatbreadslice name = "meatbread slice" @@ -23,10 +24,11 @@ icon_state = "xenomeatbread" slice_path = /obj/item/weapon/reagent_containers/food/snacks/xenomeatbreadslice slices_num = 5 - New() - ..() - reagents.add_reagent("nutriment", 30) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/store/xenomeatbread/New() + ..() + reagents.add_reagent("nutriment", 30) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/xenomeatbreadslice name = "xenomeatbread slice" @@ -41,11 +43,12 @@ icon_state = "spidermeatbread" slice_path = /obj/item/weapon/reagent_containers/food/snacks/spidermeatbreadslice slices_num = 5 - New() - ..() - reagents.add_reagent("nutriment", 30) - reagents.add_reagent("toxin", 15) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/store/spidermeatbread/New() + ..() + reagents.add_reagent("nutriment", 30) + reagents.add_reagent("toxin", 15) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/spidermeatbreadslice name = "spider meat bread slice" @@ -53,9 +56,10 @@ icon_state = "xenobreadslice" trash = /obj/item/trash/plate bitesize = 2 - New() - ..() - reagents.add_reagent("toxin", 2) + +/obj/item/weapon/reagent_containers/food/snacks/spidermeatbreadslice/New() + ..() + reagents.add_reagent("toxin", 2) /obj/item/weapon/reagent_containers/food/snacks/sliceable/store/bananabread name = "banana-nut bread" @@ -63,11 +67,12 @@ icon_state = "bananabread" slice_path = /obj/item/weapon/reagent_containers/food/snacks/bananabreadslice slices_num = 5 - New() - ..() - reagents.add_reagent("banana", 20) - reagents.add_reagent("nutriment", 20) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/store/bananabread/New() + ..() + reagents.add_reagent("banana", 20) + reagents.add_reagent("nutriment", 20) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/bananabreadslice name = "banana-nut bread slice" @@ -82,10 +87,11 @@ icon_state = "tofubread" slice_path = /obj/item/weapon/reagent_containers/food/snacks/tofubreadslice slices_num = 5 - New() - ..() - reagents.add_reagent("nutriment", 30) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/store/tofubread/New() + ..() + reagents.add_reagent("nutriment", 30) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/tofubreadslice name = "tofubread slice" @@ -100,10 +106,11 @@ icon_state = "bread" slice_path = /obj/item/weapon/reagent_containers/food/snacks/breadslice slices_num = 5 - New() - ..() - reagents.add_reagent("nutriment", 6) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/store/bread/New() + ..() + reagents.add_reagent("nutriment", 6) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/breadslice name = "bread slice" @@ -119,10 +126,11 @@ icon_state = "creamcheesebread" slice_path = /obj/item/weapon/reagent_containers/food/snacks/creamcheesebreadslice slices_num = 5 - New() - ..() - reagents.add_reagent("nutriment", 20) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/store/creamcheesebread/New() + ..() + reagents.add_reagent("nutriment", 20) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/creamcheesebreadslice name = "cream cheese bread slice" @@ -135,9 +143,10 @@ name = "baguette" desc = "Bon appetit!" icon_state = "baguette" - New() - ..() - reagents.add_reagent("nutriment", 6) - reagents.add_reagent("blackpepper", 1) - reagents.add_reagent("sodiumchloride", 1) - bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/baguette/New() + ..() + reagents.add_reagent("nutriment", 6) + reagents.add_reagent("blackpepper", 1) + reagents.add_reagent("sodiumchloride", 1) + bitesize = 3 diff --git a/code/modules/food&drinks/food/snacks_burgers.dm b/code/modules/food&drinks/food/snacks_burgers.dm index cd707375e7b..268f0502894 100644 --- a/code/modules/food&drinks/food/snacks_burgers.dm +++ b/code/modules/food&drinks/food/snacks_burgers.dm @@ -2,10 +2,11 @@ name = "burger" desc = "The cornerstone of every nutritious breakfast." icon_state = "hburger" - New() - ..() - reagents.add_reagent("nutriment", 6) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/burger/New() + ..() + reagents.add_reagent("nutriment", 6) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/burger/human var/hname = "" @@ -22,10 +23,11 @@ name = "fillet -o- carp sandwich" desc = "Almost like a carp is yelling somewhere... Give me back that fillet -o- carp, give me that carp." icon_state = "fishburger" - New() - ..() - reagents.add_reagent("carpotoxin", 3) - bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/burger/fish/New() + ..() + reagents.add_reagent("carpotoxin", 3) + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/burger/tofu name = "tofu burger" @@ -36,27 +38,30 @@ name = "roburger" desc = "The lettuce is the only organic component. Beep." icon_state = "roburger" - New() - ..() - reagents.add_reagent("nanites", 2) + +/obj/item/weapon/reagent_containers/food/snacks/burger/roburger/New() + ..() + reagents.add_reagent("nanites", 2) /obj/item/weapon/reagent_containers/food/snacks/burger/roburgerbig name = "roburger" desc = "This massive patty looks like poison. Beep." icon_state = "roburger" volume = 106 - New() - ..() - reagents.add_reagent("nanites", 100) - bitesize = 0.1 + +/obj/item/weapon/reagent_containers/food/snacks/burger/roburgerbig/New() + ..() + reagents.add_reagent("nanites", 100) + bitesize = 0.1 /obj/item/weapon/reagent_containers/food/snacks/burger/xeno name = "xenoburger" desc = "Smells caustic. Tastes like heresy." icon_state = "xburger" - New() - ..() - reagents.add_reagent("nutriment", 2) + +/obj/item/weapon/reagent_containers/food/snacks/burger/xeno/New() + ..() + reagents.add_reagent("nutriment", 2) /obj/item/weapon/reagent_containers/food/snacks/burger/clown name = "clown burger" @@ -72,9 +77,10 @@ name = "brainburger" desc = "A strange looking burger. It looks almost sentient." icon_state = "brainburger" - New() - ..() - reagents.add_reagent("alkysine", 6) + +/obj/item/weapon/reagent_containers/food/snacks/burger/brain/New() + ..() + reagents.add_reagent("alkysine", 6) /obj/item/weapon/reagent_containers/food/snacks/burger/ghost name = "ghost burger" @@ -86,60 +92,66 @@ desc = "Perfect for hiding the fact it's burnt to a crisp." icon_state = "cburger" color = "#DA0000FF" - New() - ..() - reagents.add_reagent("redcrayonpowder", 10) - bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/burger/red/New() + ..() + reagents.add_reagent("redcrayonpowder", 10) + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/burger/orange name = "orange burger" desc = "Contains 0% juice." icon_state = "cburger" color = "#FF9300FF" - New() - ..() - reagents.add_reagent("orangecrayonpowder", 10) - bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/burger/orange/New() + ..() + reagents.add_reagent("orangecrayonpowder", 10) + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/burger/yellow name = "yellow burger" desc = "Bright to the last bite." icon_state = "cburger" color = "#FFF200FF" - New() - ..() - reagents.add_reagent("yellowcrayonpowder", 10) - bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/burger/yellow/New() + ..() + reagents.add_reagent("yellowcrayonpowder", 10) + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/burger/green name = "green burger" desc = "It's not tainted meat, it's painted meat!" icon_state = "cburger" color = "#A8E61DFF" - New() - ..() - reagents.add_reagent("greencrayonpowder", 10) - bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/burger/green/New() + ..() + reagents.add_reagent("greencrayonpowder", 10) + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/burger/blue name = "blue burger" desc = "Is this blue rare?" icon_state = "cburger" color = "#00B7EFFF" - New() - ..() - reagents.add_reagent("bluecrayonpowder", 10) - bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/burger/blue/New() + ..() + reagents.add_reagent("bluecrayonpowder", 10) + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/burger/purple name = "purple burger" desc = "Regal and low class at the same time." icon_state = "cburger" color = "#DA00FFFF" - New() - ..() - reagents.add_reagent("purplecrayonpowder", 10) - bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/burger/purple/New() + ..() + reagents.add_reagent("purplecrayonpowder", 10) + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/burger/spell name = "spell burger" @@ -150,31 +162,31 @@ name = "big bite burger" desc = "Forget the Big Mac. THIS is the future!" icon_state = "bigbiteburger" - New() - ..() - reagents.add_reagent("nutriment", 8) - bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/burger/bigbite/New() + ..() + reagents.add_reagent("nutriment", 8) + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/burger/jelly name = "jelly burger" desc = "Culinary delight..?" icon_state = "jellyburger" -/obj/item/weapon/reagent_containers/food/snacks/burger/jelly/slime - New() - ..() - reagents.add_reagent("slimejelly", 5) +/obj/item/weapon/reagent_containers/food/snacks/burger/jelly/slime/New() + ..() + reagents.add_reagent("slimejelly", 5) -/obj/item/weapon/reagent_containers/food/snacks/burger/jelly/cherry - New() - ..() - reagents.add_reagent("cherryjelly", 5) +/obj/item/weapon/reagent_containers/food/snacks/burger/jelly/cherry/New() + ..() + reagents.add_reagent("cherryjelly", 5) /obj/item/weapon/reagent_containers/food/snacks/burger/superbite name = "super bite burger" desc = "This is a mountain of a burger. FOOD!" icon_state = "superbiteburger" - New() - ..() - reagents.add_reagent("nutriment", 40) - bitesize = 10 + +/obj/item/weapon/reagent_containers/food/snacks/burger/superbite/New() + ..() + reagents.add_reagent("nutriment", 40) + bitesize = 10 diff --git a/code/modules/food&drinks/food/snacks_cake.dm b/code/modules/food&drinks/food/snacks_cake.dm index 208e034a4ab..76163b4723b 100644 --- a/code/modules/food&drinks/food/snacks_cake.dm +++ b/code/modules/food&drinks/food/snacks_cake.dm @@ -5,11 +5,12 @@ icon_state = "carrotcake" slice_path = /obj/item/weapon/reagent_containers/food/snacks/carrotcakeslice slices_num = 5 - New() - ..() - reagents.add_reagent("nutriment", 25) - reagents.add_reagent("imidazoline", 10) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/store/carrotcake/New() + ..() + reagents.add_reagent("nutriment", 25) + reagents.add_reagent("imidazoline", 10) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/carrotcakeslice name = "carrot cake slice" @@ -24,11 +25,12 @@ icon_state = "braincake" slice_path = /obj/item/weapon/reagent_containers/food/snacks/braincakeslice slices_num = 5 - New() - ..() - reagents.add_reagent("nutriment", 25) - reagents.add_reagent("alkysine", 10) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/store/braincake/New() + ..() + reagents.add_reagent("nutriment", 25) + reagents.add_reagent("alkysine", 10) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/braincakeslice name = "brain cake slice" @@ -43,10 +45,11 @@ icon_state = "cheesecake" slice_path = /obj/item/weapon/reagent_containers/food/snacks/cheesecakeslice slices_num = 5 - New() - ..() - reagents.add_reagent("nutriment", 25) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/store/cheesecake/New() + ..() + reagents.add_reagent("nutriment", 25) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/cheesecakeslice name = "cheese cake slice" @@ -61,9 +64,10 @@ icon_state = "plaincake" slice_path = /obj/item/weapon/reagent_containers/food/snacks/plaincakeslice slices_num = 5 - New() - ..() - reagents.add_reagent("nutriment", 20) + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/store/plaincake/New() + ..() + reagents.add_reagent("nutriment", 20) /obj/item/weapon/reagent_containers/food/snacks/plaincakeslice name = "vanilla cake slice" @@ -78,9 +82,10 @@ icon_state = "orangecake" slice_path = /obj/item/weapon/reagent_containers/food/snacks/orangecakeslice slices_num = 5 - New() - ..() - reagents.add_reagent("nutriment", 20) + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/store/orangecake/New() + ..() + reagents.add_reagent("nutriment", 20) /obj/item/weapon/reagent_containers/food/snacks/orangecakeslice name = "orange cake slice" @@ -95,9 +100,10 @@ icon_state = "limecake" slice_path = /obj/item/weapon/reagent_containers/food/snacks/limecakeslice slices_num = 5 - New() - ..() - reagents.add_reagent("nutriment", 20) + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/store/limecake/New() + ..() + reagents.add_reagent("nutriment", 20) /obj/item/weapon/reagent_containers/food/snacks/limecakeslice name = "lime cake slice" @@ -112,9 +118,10 @@ icon_state = "lemoncake" slice_path = /obj/item/weapon/reagent_containers/food/snacks/lemoncakeslice slices_num = 5 - New() - ..() - reagents.add_reagent("nutriment", 20) + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/store/lemoncake/New() + ..() + reagents.add_reagent("nutriment", 20) /obj/item/weapon/reagent_containers/food/snacks/lemoncakeslice name = "lemon cake slice" @@ -129,9 +136,10 @@ icon_state = "chocolatecake" slice_path = /obj/item/weapon/reagent_containers/food/snacks/chocolatecakeslice slices_num = 5 - New() - ..() - reagents.add_reagent("nutriment", 20) + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/store/chocolatecake/New() + ..() + reagents.add_reagent("nutriment", 20) /obj/item/weapon/reagent_containers/food/snacks/chocolatecakeslice name = "chocolate cake slice" @@ -146,11 +154,12 @@ icon_state = "birthdaycake" slice_path = /obj/item/weapon/reagent_containers/food/snacks/birthdaycakeslice slices_num = 5 - New() - ..() - reagents.add_reagent("nutriment", 20) - reagents.add_reagent("sprinkles", 10) - bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/store/birthdaycake/New() + ..() + reagents.add_reagent("nutriment", 20) + reagents.add_reagent("sprinkles", 10) + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/birthdaycakeslice name = "birthday cake slice" @@ -165,9 +174,10 @@ icon_state = "applecake" slice_path = /obj/item/weapon/reagent_containers/food/snacks/applecakeslice slices_num = 5 - New() - ..() - reagents.add_reagent("nutriment", 15) + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/store/applecake/New() + ..() + reagents.add_reagent("nutriment", 15) /obj/item/weapon/reagent_containers/food/snacks/applecakeslice name = "apple cake slice" diff --git a/code/modules/food&drinks/food/snacks_pies.dm b/code/modules/food&drinks/food/snacks_pies.dm index 095ed99c971..7cb7c79d9a7 100644 --- a/code/modules/food&drinks/food/snacks_pies.dm +++ b/code/modules/food&drinks/food/snacks_pies.dm @@ -4,11 +4,12 @@ desc = "Just like back home, on clown planet! HONK!" icon_state = "pie" trash = /obj/item/trash/plate - New() - ..() - reagents.add_reagent("nutriment", 4) - reagents.add_reagent("banana",5) - bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/pie/New() + ..() + reagents.add_reagent("nutriment", 4) + reagents.add_reagent("banana",5) + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/pie/throw_impact(atom/hit_atom) ..() @@ -21,86 +22,94 @@ desc = "No black birds, this is a good sign." icon_state = "berryclafoutis" trash = /obj/item/trash/plate - New() - ..() - reagents.add_reagent("nutriment", 4) - reagents.add_reagent("berryjuice", 5) - bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/berryclafoutis/New() + ..() + reagents.add_reagent("nutriment", 4) + reagents.add_reagent("berryjuice", 5) + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/meatpie name = "meat-pie" icon_state = "meatpie" desc = "An old barber recipe, very delicious!" trash = /obj/item/trash/plate - New() - ..() - reagents.add_reagent("nutriment", 10) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/meatpie/New() + ..() + reagents.add_reagent("nutriment", 10) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/tofupie name = "tofu-pie" icon_state = "meatpie" desc = "A delicious tofu pie." trash = /obj/item/trash/plate - New() - ..() - reagents.add_reagent("nutriment", 10) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/tofupie/New() + ..() + reagents.add_reagent("nutriment", 10) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/amanita_pie name = "amanita pie" desc = "Sweet and tasty poison pie." icon_state = "amanita_pie" - New() - ..() - reagents.add_reagent("nutriment", 5) - reagents.add_reagent("amatoxin", 3) - reagents.add_reagent("mushroomhallucinogen", 1) - bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/amanita_pie/New() + ..() + reagents.add_reagent("nutriment", 5) + reagents.add_reagent("amatoxin", 3) + reagents.add_reagent("mushroomhallucinogen", 1) + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/plump_pie name = "plump pie" desc = "I bet you love stuff made out of plump helmets!" icon_state = "plump_pie" - New() - ..() - if(prob(10)) - name = "exceptional plump pie" - desc = "Microwave is taken by a fey mood! It has cooked an exceptional plump pie!" - reagents.add_reagent("nutriment", 8) - reagents.add_reagent("tricordrazine", 5) - bitesize = 2 - else - reagents.add_reagent("nutriment", 8) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/plump_pie/New() + ..() + if(prob(10)) + name = "exceptional plump pie" + desc = "Microwave is taken by a fey mood! It has cooked an exceptional plump pie!" + reagents.add_reagent("nutriment", 8) + reagents.add_reagent("tricordrazine", 5) + bitesize = 2 + else + reagents.add_reagent("nutriment", 8) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/xemeatpie name = "xeno-pie" icon_state = "xenomeatpie" desc = "A delicious meatpie. Probably heretical." trash = /obj/item/trash/plate - New() - ..() - reagents.add_reagent("nutriment", 10) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/xemeatpie/New() + ..() + reagents.add_reagent("nutriment", 10) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/applepie name = "apple pie" desc = "A pie containing sweet sweet love...or apple." icon_state = "applepie" - New() - ..() - reagents.add_reagent("nutriment", 4) - bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/applepie/New() + ..() + reagents.add_reagent("nutriment", 4) + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/cherrypie name = "cherry pie" desc = "Taste so good, make a grown man cry." icon_state = "cherrypie" - New() - ..() - reagents.add_reagent("nutriment", 4) - bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/cherrypie/New() + ..() + reagents.add_reagent("nutriment", 4) + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/sliceable/pumpkinpie name = "pumpkin pie" @@ -108,9 +117,10 @@ icon_state = "pumpkinpie" slice_path = /obj/item/weapon/reagent_containers/food/snacks/pumpkinpieslice slices_num = 5 - New() - ..() - reagents.add_reagent("nutriment", 15) + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/pumpkinpie/New() + ..() + reagents.add_reagent("nutriment", 15) /obj/item/weapon/reagent_containers/food/snacks/pumpkinpieslice name = "pumpkin pie slice" diff --git a/code/modules/food&drinks/food/snacks_pizza.dm b/code/modules/food&drinks/food/snacks_pizza.dm index d3096addb0b..f8e003172dd 100644 --- a/code/modules/food&drinks/food/snacks_pizza.dm +++ b/code/modules/food&drinks/food/snacks_pizza.dm @@ -10,11 +10,12 @@ icon_state = "pizzamargherita" slice_path = /obj/item/weapon/reagent_containers/food/snacks/margheritaslice slices_num = 6 - New() - ..() - reagents.add_reagent("nutriment", 40) - reagents.add_reagent("tomatojuice", 6) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/margherita/New() + ..() + reagents.add_reagent("nutriment", 40) + reagents.add_reagent("tomatojuice", 6) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/margheritaslice name = "margherita slice" @@ -28,11 +29,12 @@ icon_state = "meatpizza" slice_path = /obj/item/weapon/reagent_containers/food/snacks/meatpizzaslice slices_num = 6 - New() - ..() - reagents.add_reagent("nutriment", 50) - reagents.add_reagent("tomatojuice", 6) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/meatpizza/New() + ..() + reagents.add_reagent("nutriment", 50) + reagents.add_reagent("tomatojuice", 6) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/meatpizzaslice name = "meatpizza slice" @@ -46,10 +48,11 @@ icon_state = "mushroompizza" slice_path = /obj/item/weapon/reagent_containers/food/snacks/mushroompizzaslice slices_num = 6 - New() - ..() - reagents.add_reagent("nutriment", 35) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/mushroompizza/New() + ..() + reagents.add_reagent("nutriment", 35) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/mushroompizzaslice name = "mushroom pizza slice" @@ -63,12 +66,13 @@ icon_state = "vegetablepizza" slice_path = /obj/item/weapon/reagent_containers/food/snacks/vegetablepizzaslice slices_num = 6 - New() - ..() - reagents.add_reagent("nutriment", 30) - reagents.add_reagent("tomatojuice", 6) - reagents.add_reagent("imidazoline", 12) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza/New() + ..() + reagents.add_reagent("nutriment", 30) + reagents.add_reagent("tomatojuice", 6) + reagents.add_reagent("imidazoline", 12) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/vegetablepizzaslice name = "vegetable pizza slice" diff --git a/code/modules/food&drinks/food/snacks_sandwichtoast.dm b/code/modules/food&drinks/food/snacks_sandwichtoast.dm index ee45942cb46..7ca43af1f4a 100644 --- a/code/modules/food&drinks/food/snacks_sandwichtoast.dm +++ b/code/modules/food&drinks/food/snacks_sandwichtoast.dm @@ -4,97 +4,101 @@ desc = "A grand creation of meat, cheese, bread, and several leaves of lettuce! Arthur Dent would be proud." icon_state = "sandwich" trash = /obj/item/trash/plate - New() - ..() - reagents.add_reagent("nutriment", 6) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/sandwich/New() + ..() + reagents.add_reagent("nutriment", 6) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/toastedsandwich name = "toasted sandwich" desc = "Now if you only had a pepper bar." icon_state = "toastedsandwich" trash = /obj/item/trash/plate - New() - ..() - reagents.add_reagent("nutriment", 6) - reagents.add_reagent("carbon", 2) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/toastedsandwich/New() + ..() + reagents.add_reagent("nutriment", 6) + reagents.add_reagent("carbon", 2) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/grilledcheese name = "grilled cheese sandwich" desc = "Goes great with Tomato soup!" icon_state = "toastedsandwich" trash = /obj/item/trash/plate - New() - ..() - reagents.add_reagent("nutriment", 7) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/grilledcheese/New() + ..() + reagents.add_reagent("nutriment", 7) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/jellysandwich name = "jelly sandwich" desc = "You wish you had some peanut butter to go with this..." icon_state = "jellysandwich" trash = /obj/item/trash/plate - New() - ..() - reagents.add_reagent("nutriment", 2) - bitesize = 3 -/obj/item/weapon/reagent_containers/food/snacks/jellysandwich/slime - New() - ..() - reagents.add_reagent("slimejelly", 5) +/obj/item/weapon/reagent_containers/food/snacks/jellysandwich/New() + ..() + reagents.add_reagent("nutriment", 2) + bitesize = 3 -/obj/item/weapon/reagent_containers/food/snacks/jellysandwich/cherry - New() - ..() - reagents.add_reagent("cherryjelly", 5) +/obj/item/weapon/reagent_containers/food/snacks/jellysandwich/slime/New() + ..() + reagents.add_reagent("slimejelly", 5) + +/obj/item/weapon/reagent_containers/food/snacks/jellysandwich/cherry/New() + ..() + reagents.add_reagent("cherryjelly", 5) /obj/item/weapon/reagent_containers/food/snacks/icecreamsandwich name = "icecream sandwich" desc = "Portable Ice-cream in it's own packaging." icon_state = "icecreamsandwich" - New() - ..() - reagents.add_reagent("nutriment", 2) - reagents.add_reagent("ice", 2) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/icecreamsandwich/New() + ..() + reagents.add_reagent("nutriment", 2) + reagents.add_reagent("ice", 2) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/notasandwich name = "not-a-sandwich" desc = "Something seems to be wrong with this, you can't quite figure what. Maybe it's his moustache." icon_state = "notasandwich" trash = /obj/item/trash/plate - New() - ..() - reagents.add_reagent("nutriment", 6) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/notasandwich/New() + ..() + reagents.add_reagent("nutriment", 6) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/jelliedtoast name = "jellied toast" desc = "A slice of bread covered with delicious jam." icon_state = "jellytoast" trash = /obj/item/trash/plate - New() - ..() - reagents.add_reagent("nutriment", 1) - bitesize = 3 -/obj/item/weapon/reagent_containers/food/snacks/jelliedtoast/cherry - New() - ..() - reagents.add_reagent("cherryjelly", 5) +/obj/item/weapon/reagent_containers/food/snacks/jelliedtoast/New() + ..() + reagents.add_reagent("nutriment", 1) + bitesize = 3 -/obj/item/weapon/reagent_containers/food/snacks/jelliedtoast/slime - New() - ..() - reagents.add_reagent("slimejelly", 5) +/obj/item/weapon/reagent_containers/food/snacks/jelliedtoast/cherry/New() + ..() + reagents.add_reagent("cherryjelly", 5) + +/obj/item/weapon/reagent_containers/food/snacks/jelliedtoast/slime/New() + ..() + reagents.add_reagent("slimejelly", 5) /obj/item/weapon/reagent_containers/food/snacks/twobread name = "two bread" desc = "This seems awfully bitter." icon_state = "twobread" - New() - ..() - reagents.add_reagent("nutriment", 2) - bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/twobread/New() + ..() + reagents.add_reagent("nutriment", 2) + bitesize = 3 diff --git a/code/modules/food&drinks/food/snacks_soup.dm b/code/modules/food&drinks/food/snacks_soup.dm index f0e471f02e5..05bf0568838 100644 --- a/code/modules/food&drinks/food/snacks_soup.dm +++ b/code/modules/food&drinks/food/snacks_soup.dm @@ -4,144 +4,153 @@ desc = "You've got balls kid, BALLS!" icon_state = "meatballsoup" trash = /obj/item/trash/snack_bowl - New() - ..() - eatverb = pick("slurp","sip","suck","inhale","drink") - reagents.add_reagent("nutriment", 8) - reagents.add_reagent("water", 5) - bitesize = 5 + +/obj/item/weapon/reagent_containers/food/snacks/meatballsoup/New() + ..() + eatverb = pick("slurp","sip","suck","inhale","drink") + reagents.add_reagent("nutriment", 8) + reagents.add_reagent("water", 5) + bitesize = 5 /obj/item/weapon/reagent_containers/food/snacks/slimesoup name = "slime soup" desc = "If no water is available, you may substitute tears." icon_state = "slimesoup" - New() - ..() - eatverb = pick("slurp","sip","suck","inhale","drink") - reagents.add_reagent("slimejelly", 5) - reagents.add_reagent("water", 10) - bitesize = 5 + +/obj/item/weapon/reagent_containers/food/snacks/slimesoup/New() + ..() + eatverb = pick("slurp","sip","suck","inhale","drink") + reagents.add_reagent("slimejelly", 5) + reagents.add_reagent("water", 10) + bitesize = 5 /obj/item/weapon/reagent_containers/food/snacks/bloodsoup name = "tomato soup" desc = "Smells like copper." icon_state = "tomatosoup" - New() - ..() - eatverb = pick("slurp","sip","suck","inhale","drink") - reagents.add_reagent("nutriment", 2) - reagents.add_reagent("blood", 10) - reagents.add_reagent("water", 5) - bitesize = 5 + +/obj/item/weapon/reagent_containers/food/snacks/bloodsoup/New() + ..() + eatverb = pick("slurp","sip","suck","inhale","drink") + reagents.add_reagent("nutriment", 2) + reagents.add_reagent("blood", 10) + reagents.add_reagent("water", 5) + bitesize = 5 /obj/item/weapon/reagent_containers/food/snacks/clownstears name = "clown's tears" desc = "Not very funny." icon_state = "clownstears" - New() - ..() - eatverb = pick("slurp","sip","suck","inhale","drink") - reagents.add_reagent("nutriment", 4) - reagents.add_reagent("banana", 5) - reagents.add_reagent("water", 10) - bitesize = 5 + +/obj/item/weapon/reagent_containers/food/snacks/clownstears/New() + ..() + eatverb = pick("slurp","sip","suck","inhale","drink") + reagents.add_reagent("nutriment", 4) + reagents.add_reagent("banana", 5) + reagents.add_reagent("water", 10) + bitesize = 5 /obj/item/weapon/reagent_containers/food/snacks/vegetablesoup name = "vegetable soup" desc = "A true vegan meal." icon_state = "vegetablesoup" trash = /obj/item/trash/snack_bowl - New() - ..() - eatverb = pick("slurp","sip","suck","inhale","drink") - reagents.add_reagent("nutriment", 8) - reagents.add_reagent("water", 5) - bitesize = 5 + +/obj/item/weapon/reagent_containers/food/snacks/vegetablesoup/New() + ..() + eatverb = pick("slurp","sip","suck","inhale","drink") + reagents.add_reagent("nutriment", 8) + reagents.add_reagent("water", 5) + bitesize = 5 /obj/item/weapon/reagent_containers/food/snacks/nettlesoup name = "nettle soup" desc = "To think, the botanist would've beat you to death with one of these." icon_state = "nettlesoup" trash = /obj/item/trash/snack_bowl - New() - ..() - eatverb = pick("slurp","sip","suck","inhale","drink") - reagents.add_reagent("nutriment", 8) - reagents.add_reagent("water", 5) - reagents.add_reagent("tricordrazine", 5) - bitesize = 5 + +/obj/item/weapon/reagent_containers/food/snacks/nettlesoup/New() + ..() + eatverb = pick("slurp","sip","suck","inhale","drink") + reagents.add_reagent("nutriment", 8) + reagents.add_reagent("water", 5) + reagents.add_reagent("tricordrazine", 5) + bitesize = 5 /obj/item/weapon/reagent_containers/food/snacks/mysterysoup name = "mystery soup" desc = "The mystery is, why aren't you eating it?" icon_state = "mysterysoup" trash = /obj/item/trash/snack_bowl - New() - ..() - eatverb = pick("slurp","sip","suck","inhale","drink") - switch(rand(1,10)) - if(1) - reagents.add_reagent("nutriment", 6) - reagents.add_reagent("capsaicin", 3) - reagents.add_reagent("tomatojuice", 2) - if(2) - reagents.add_reagent("nutriment", 6) - reagents.add_reagent("frostoil", 3) - reagents.add_reagent("tomatojuice", 2) - if(3) - reagents.add_reagent("nutriment", 5) - reagents.add_reagent("water", 5) - reagents.add_reagent("tricordrazine", 5) - if(4) - reagents.add_reagent("nutriment", 5) - reagents.add_reagent("water", 10) - if(5) - reagents.add_reagent("nutriment", 2) - reagents.add_reagent("banana", 10) - if(6) - reagents.add_reagent("nutriment", 6) - reagents.add_reagent("blood", 10) - if(7) - reagents.add_reagent("slimejelly", 10) - reagents.add_reagent("water", 10) - if(8) - reagents.add_reagent("carbon", 10) - reagents.add_reagent("toxin", 10) - if(9) - reagents.add_reagent("nutriment", 5) - reagents.add_reagent("tomatojuice", 10) - if(10) - reagents.add_reagent("nutriment", 6) - reagents.add_reagent("tomatojuice", 5) - reagents.add_reagent("imidazoline", 5) - bitesize = 5 + +/obj/item/weapon/reagent_containers/food/snacks/mysterysoup/New() + ..() + eatverb = pick("slurp","sip","suck","inhale","drink") + switch(rand(1,10)) + if(1) + reagents.add_reagent("nutriment", 6) + reagents.add_reagent("capsaicin", 3) + reagents.add_reagent("tomatojuice", 2) + if(2) + reagents.add_reagent("nutriment", 6) + reagents.add_reagent("frostoil", 3) + reagents.add_reagent("tomatojuice", 2) + if(3) + reagents.add_reagent("nutriment", 5) + reagents.add_reagent("water", 5) + reagents.add_reagent("tricordrazine", 5) + if(4) + reagents.add_reagent("nutriment", 5) + reagents.add_reagent("water", 10) + if(5) + reagents.add_reagent("nutriment", 2) + reagents.add_reagent("banana", 10) + if(6) + reagents.add_reagent("nutriment", 6) + reagents.add_reagent("blood", 10) + if(7) + reagents.add_reagent("slimejelly", 10) + reagents.add_reagent("water", 10) + if(8) + reagents.add_reagent("carbon", 10) + reagents.add_reagent("toxin", 10) + if(9) + reagents.add_reagent("nutriment", 5) + reagents.add_reagent("tomatojuice", 10) + if(10) + reagents.add_reagent("nutriment", 6) + reagents.add_reagent("tomatojuice", 5) + reagents.add_reagent("imidazoline", 5) + bitesize = 5 /obj/item/weapon/reagent_containers/food/snacks/wishsoup name = "wish soup" desc = "I wish this was soup." icon_state = "wishsoup" trash = /obj/item/trash/snack_bowl - New() - ..() - eatverb = pick("slurp","sip","suck","inhale","drink") - reagents.add_reagent("water", 10) - bitesize = 5 - if(prob(25)) - desc = "A wish come true!" - reagents.add_reagent("nutriment", 8) + +/obj/item/weapon/reagent_containers/food/snacks/wishsoup/New() + ..() + eatverb = pick("slurp","sip","suck","inhale","drink") + reagents.add_reagent("water", 10) + bitesize = 5 + if(prob(25)) + desc = "A wish come true!" + reagents.add_reagent("nutriment", 8) /obj/item/weapon/reagent_containers/food/snacks/hotchili name = "hot chili" desc = "A five alarm Texan Chili!" icon_state = "hotchili" trash = /obj/item/trash/snack_bowl - New() - ..() - eatverb = pick("slurp","sip","suck","inhale","drink") - reagents.add_reagent("nutriment", 6) - reagents.add_reagent("capsaicin", 3) - reagents.add_reagent("tomatojuice", 2) - bitesize = 5 + +/obj/item/weapon/reagent_containers/food/snacks/hotchili/New() + ..() + eatverb = pick("slurp","sip","suck","inhale","drink") + reagents.add_reagent("nutriment", 6) + reagents.add_reagent("capsaicin", 3) + reagents.add_reagent("tomatojuice", 2) + bitesize = 5 /obj/item/weapon/reagent_containers/food/snacks/coldchili @@ -149,70 +158,76 @@ desc = "This slush is barely a liquid!" icon_state = "coldchili" trash = /obj/item/trash/snack_bowl - New() - ..() - eatverb = pick("slurp","sip","suck","inhale","drink") - reagents.add_reagent("nutriment", 6) - reagents.add_reagent("frostoil", 3) - reagents.add_reagent("tomatojuice", 2) - bitesize = 5 + +/obj/item/weapon/reagent_containers/food/snacks/coldchili/New() + ..() + eatverb = pick("slurp","sip","suck","inhale","drink") + reagents.add_reagent("nutriment", 6) + reagents.add_reagent("frostoil", 3) + reagents.add_reagent("tomatojuice", 2) + bitesize = 5 /obj/item/weapon/reagent_containers/food/snacks/monkeysdelight name = "monkey's delight" desc = "A delicious soup with dumplings and hunks of monkey meat simmered to perfection, in a broth that tastes faintly of bananas." icon_state = "monkeysdelight" trash = /obj/item/trash/snack_bowl - New() - ..() - reagents.add_reagent("nutriment", 10) - reagents.add_reagent("banana", 5) - reagents.add_reagent("blackpepper", 1) - reagents.add_reagent("sodiumchloride", 1) - bitesize = 6 + +/obj/item/weapon/reagent_containers/food/snacks/monkeysdelight/New() + ..() + reagents.add_reagent("nutriment", 10) + reagents.add_reagent("banana", 5) + reagents.add_reagent("blackpepper", 1) + reagents.add_reagent("sodiumchloride", 1) + bitesize = 6 /obj/item/weapon/reagent_containers/food/snacks/tomatosoup name = "tomato soup" desc = "Drinking this feels like being a vampire! A tomato vampire..." icon_state = "tomatosoup" trash = /obj/item/trash/snack_bowl - New() - ..() - eatverb = pick("slurp","sip","suck","inhale","drink") - reagents.add_reagent("nutriment", 5) - reagents.add_reagent("tomatojuice", 10) - bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/tomatosoup/New() + ..() + eatverb = pick("slurp","sip","suck","inhale","drink") + reagents.add_reagent("nutriment", 5) + reagents.add_reagent("tomatojuice", 10) + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/milosoup name = "milosoup" desc = "The universes best soup! Yum!!!" icon_state = "milosoup" trash = /obj/item/trash/snack_bowl - New() - ..() - eatverb = pick("slurp","sip","suck","inhale","drink") - reagents.add_reagent("nutriment", 8) - reagents.add_reagent("water", 5) - bitesize = 4 + +/obj/item/weapon/reagent_containers/food/snacks/milosoup/New() + ..() + eatverb = pick("slurp","sip","suck","inhale","drink") + reagents.add_reagent("nutriment", 8) + reagents.add_reagent("water", 5) + bitesize = 4 /obj/item/weapon/reagent_containers/food/snacks/mushroomsoup name = "chantrelle soup" desc = "A delicious and hearty mushroom soup." icon_state = "mushroomsoup" trash = /obj/item/trash/snack_bowl - New() - ..() - eatverb = pick("slurp","sip","suck","inhale","drink") - reagents.add_reagent("nutriment", 8) - bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/mushroomsoup/New() + ..() + eatverb = pick("slurp","sip","suck","inhale","drink") + reagents.add_reagent("nutriment", 8) + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/beetsoup name = "beet soup" desc = "Wait, how do you spell it again..?" icon_state = "beetsoup" trash = /obj/item/trash/snack_bowl - New() - ..() - eatverb = pick("slurp","sip","suck","inhale","drink") - name = pick("borsch","bortsch","borstch","borsh","borshch","borscht") - reagents.add_reagent("nutriment", 8) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/beetsoup/New() + ..() + eatverb = pick("slurp","sip","suck","inhale","drink") + name = pick("borsch","bortsch","borstch","borsh","borshch","borscht") + reagents.add_reagent("nutriment", 8) + bitesize = 2 diff --git a/code/modules/food&drinks/food/snacks_spaghetti.dm b/code/modules/food&drinks/food/snacks_spaghetti.dm index 7d3b013aeee..5b73364e628 100644 --- a/code/modules/food&drinks/food/snacks_spaghetti.dm +++ b/code/modules/food&drinks/food/snacks_spaghetti.dm @@ -3,68 +3,75 @@ name = "spaghetti" desc = "Now that's a nic'e pasta!" icon_state = "spaghetti" - New() - ..() - reagents.add_reagent("nutriment", 1) - bitesize = 1 + +/obj/item/weapon/reagent_containers/food/snacks/spaghetti/New() + ..() + reagents.add_reagent("nutriment", 1) + bitesize = 1 /obj/item/weapon/reagent_containers/food/snacks/boiledspaghetti name = "boiled spaghetti" desc = "A plain dish of noodles, this sucks." icon_state = "spaghettiboiled" trash = /obj/item/trash/plate - New() - ..() - reagents.add_reagent("nutriment", 2) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/boiledspaghetti/New() + ..() + reagents.add_reagent("nutriment", 2) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/pastatomato name = "spaghetti" desc = "Spaghetti and crushed tomatoes. Just like your abusive father used to make!" icon_state = "pastatomato" trash = /obj/item/trash/plate - New() - ..() - reagents.add_reagent("nutriment", 6) - reagents.add_reagent("tomatojuice", 10) - bitesize = 4 + +/obj/item/weapon/reagent_containers/food/snacks/pastatomato/New() + ..() + reagents.add_reagent("nutriment", 6) + reagents.add_reagent("tomatojuice", 10) + bitesize = 4 /obj/item/weapon/reagent_containers/food/snacks/copypasta name = "copypasta" desc = "You probably shouldn't try this, you always hear people talking about how bad it is..." icon_state = "copypasta" trash = /obj/item/trash/plate - New() - ..() - reagents.add_reagent("nutriment", 12) - reagents.add_reagent("tomatojuice", 20) - bitesize = 1 + +/obj/item/weapon/reagent_containers/food/snacks/copypasta/New() + ..() + reagents.add_reagent("nutriment", 12) + reagents.add_reagent("tomatojuice", 20) + bitesize = 1 /obj/item/weapon/reagent_containers/food/snacks/meatballspaghetti name = "spaghetti and meatballs" desc = "Now that's a nic'e meatball!" icon_state = "meatballspaghetti" trash = /obj/item/trash/plate - New() - ..() - reagents.add_reagent("nutriment", 8) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/meatballspaghetti/New() + ..() + reagents.add_reagent("nutriment", 8) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/spesslaw name = "spesslaw" desc = "A lawyers favourite." icon_state = "spesslaw" - New() - ..() - reagents.add_reagent("nutriment", 8) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/spesslaw/New() + ..() + reagents.add_reagent("nutriment", 8) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/eggplantparm name = "eggplant parmigiana" desc = "The only good recipe for eggplant." icon_state = "eggplantparm" trash = /obj/item/trash/plate - New() - ..() - reagents.add_reagent("nutriment", 6) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/eggplantparm/New() + ..() + reagents.add_reagent("nutriment", 6) + bitesize = 2 diff --git a/code/modules/food&drinks/kitchen machinery/gibber.dm b/code/modules/food&drinks/kitchen machinery/gibber.dm index c948602119b..b39710779dd 100644 --- a/code/modules/food&drinks/kitchen machinery/gibber.dm +++ b/code/modules/food&drinks/kitchen machinery/gibber.dm @@ -17,31 +17,30 @@ /obj/machinery/gibber/autogibber var/turf/input_plate - New() - ..() - spawn(5) - for(var/i in cardinal) - var/obj/machinery/mineral/input/input_obj = locate( /obj/machinery/mineral/input, get_step(src.loc, i) ) - if(input_obj) - if(isturf(input_obj.loc)) - input_plate = input_obj.loc - qdel(input_obj) - break +/obj/machinery/gibber/autogibber/New() + ..() + spawn(5) + for(var/i in cardinal) + var/obj/machinery/mineral/input/input_obj = locate( /obj/machinery/mineral/input, get_step(src.loc, i) ) + if(input_obj) + if(isturf(input_obj.loc)) + input_plate = input_obj.loc + qdel(input_obj) + break - if(!input_plate) - diary << "a [src] didn't find an input plate." - return + if(!input_plate) + diary << "a [src] didn't find an input plate." + return - Bumped(var/atom/A) - if(!input_plate) return +/obj/machinery/gibber/autogibber/Bumped(var/atom/A) + if(!input_plate) return - if(ismob(A)) - var/mob/M = A + if(ismob(A)) + var/mob/M = A - if(M.loc == input_plate - ) - M.loc = src - M.gib() + if(M.loc == input_plate) + M.loc = src + M.gib() /obj/machinery/gibber/New() diff --git a/code/modules/food&drinks/kitchen machinery/juicer.dm b/code/modules/food&drinks/kitchen machinery/juicer.dm index 2047c071103..80ba39354a3 100644 --- a/code/modules/food&drinks/kitchen machinery/juicer.dm +++ b/code/modules/food&drinks/kitchen machinery/juicer.dm @@ -162,20 +162,19 @@ if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume) break -/obj/structure/closet/crate/juice - New() - ..() - new/obj/machinery/juicer(src) - new/obj/item/weapon/reagent_containers/food/snacks/grown/tomato(src) - new/obj/item/weapon/reagent_containers/food/snacks/grown/carrot(src) - new/obj/item/weapon/reagent_containers/food/snacks/grown/berries(src) - new/obj/item/weapon/reagent_containers/food/snacks/grown/banana(src) - new/obj/item/weapon/reagent_containers/food/snacks/grown/tomato(src) - new/obj/item/weapon/reagent_containers/food/snacks/grown/carrot(src) - new/obj/item/weapon/reagent_containers/food/snacks/grown/berries(src) - new/obj/item/weapon/reagent_containers/food/snacks/grown/banana(src) - new/obj/item/weapon/reagent_containers/food/snacks/grown/tomato(src) - new/obj/item/weapon/reagent_containers/food/snacks/grown/carrot(src) - new/obj/item/weapon/reagent_containers/food/snacks/grown/berries(src) - new/obj/item/weapon/reagent_containers/food/snacks/grown/banana(src) +/obj/structure/closet/crate/juice/New() + ..() + new/obj/machinery/juicer(src) + new/obj/item/weapon/reagent_containers/food/snacks/grown/tomato(src) + new/obj/item/weapon/reagent_containers/food/snacks/grown/carrot(src) + new/obj/item/weapon/reagent_containers/food/snacks/grown/berries(src) + new/obj/item/weapon/reagent_containers/food/snacks/grown/banana(src) + new/obj/item/weapon/reagent_containers/food/snacks/grown/tomato(src) + new/obj/item/weapon/reagent_containers/food/snacks/grown/carrot(src) + new/obj/item/weapon/reagent_containers/food/snacks/grown/berries(src) + new/obj/item/weapon/reagent_containers/food/snacks/grown/banana(src) + new/obj/item/weapon/reagent_containers/food/snacks/grown/tomato(src) + new/obj/item/weapon/reagent_containers/food/snacks/grown/carrot(src) + new/obj/item/weapon/reagent_containers/food/snacks/grown/berries(src) + new/obj/item/weapon/reagent_containers/food/snacks/grown/banana(src) diff --git a/code/modules/food&drinks/kitchen machinery/processor.dm b/code/modules/food&drinks/kitchen machinery/processor.dm index 87d11a48a1a..ad9344b21af 100644 --- a/code/modules/food&drinks/kitchen machinery/processor.dm +++ b/code/modules/food&drinks/kitchen machinery/processor.dm @@ -26,77 +26,74 @@ qdel(what) // Note to self: Make this safer /* objs */ - meat - input = /obj/item/weapon/reagent_containers/food/snacks/meat - output = /obj/item/weapon/reagent_containers/food/snacks/faggot +/datum/food_processor_process/meat + input = /obj/item/weapon/reagent_containers/food/snacks/meat + output = /obj/item/weapon/reagent_containers/food/snacks/faggot - potato - input = /obj/item/weapon/reagent_containers/food/snacks/grown/potato - output = /obj/item/weapon/reagent_containers/food/snacks/fries +/datum/food_processor_process/potato + input = /obj/item/weapon/reagent_containers/food/snacks/grown/potato + output = /obj/item/weapon/reagent_containers/food/snacks/fries - carrot - input = /obj/item/weapon/reagent_containers/food/snacks/grown/carrot - output = /obj/item/weapon/reagent_containers/food/snacks/carrotfries +/datum/food_processor_process/carrot + input = /obj/item/weapon/reagent_containers/food/snacks/grown/carrot + output = /obj/item/weapon/reagent_containers/food/snacks/carrotfries - soybeans - input = /obj/item/weapon/reagent_containers/food/snacks/grown/soybeans - output = /obj/item/weapon/reagent_containers/food/snacks/soydope +/datum/food_processor_process/soybeans + input = /obj/item/weapon/reagent_containers/food/snacks/grown/soybeans + output = /obj/item/weapon/reagent_containers/food/snacks/soydope - /* mobs */ - mob - process(loc, what) - ..() +/* mobs */ +/datum/food_processor_process/mob/process(loc, what) + ..() - slime +/datum/food_processor_process/mob/slime/process(loc, what) + var/mob/living/carbon/slime/S = what + var/C = S.cores + if(S.stat != DEAD) + S.loc = loc + S.visible_message("\blue [C] crawls free of the processor!") + return + for(var/i = 1, i <= C, i++) + new S.coretype(loc) + feedback_add_details("slime_core_harvested","[replacetext(S.colour," ","_")]") + ..() - process(loc, what) +/datum/food_processor_process/mob/slime/input = /mob/living/carbon/slime +/datum/food_processor_process/mob/slime/output = null - var/mob/living/carbon/slime/S = what - var/C = S.cores - if(S.stat != DEAD) - S.loc = loc - S.visible_message("\blue [C] crawls free of the processor!") - return - for(var/i = 1, i <= C, i++) - new S.coretype(loc) - feedback_add_details("slime_core_harvested","[replacetext(S.colour," ","_")]") - ..() - input = /mob/living/carbon/slime - output = null - monkey - process(loc, what) - var/mob/living/carbon/monkey/O = what - if (O.client) //grief-proof - O.loc = loc - O.visible_message("\blue Suddenly [O] jumps out from the processor!", \ - "You jump out from the processor", \ - "You hear chimpering") - return - var/obj/item/weapon/reagent_containers/glass/bucket/bucket_of_blood = new(loc) - var/datum/reagent/blood/B = new() - B.holder = bucket_of_blood - B.volume = 70 - //set reagent data - B.data["donor"] = O +/datum/food_processor_process/mob/monkey/process(loc, what) + var/mob/living/carbon/monkey/O = what + if (O.client) //grief-proof + O.loc = loc + O.visible_message("\blue Suddenly [O] jumps out from the processor!", \ + "You jump out from the processor", \ + "You hear chimpering") + return + var/obj/item/weapon/reagent_containers/glass/bucket/bucket_of_blood = new(loc) + var/datum/reagent/blood/B = new() + B.holder = bucket_of_blood + B.volume = 70 + //set reagent data + B.data["donor"] = O - for(var/datum/disease/D in O.viruses) - if(D.spread_type != SPECIAL) - B.data["viruses"] += D.Copy() - if(check_dna_integrity(O)) - B.data["blood_DNA"] = copytext(O.dna.unique_enzymes,1,0) + for(var/datum/disease/D in O.viruses) + if(D.spread_type != SPECIAL) + B.data["viruses"] += D.Copy() + if(check_dna_integrity(O)) + B.data["blood_DNA"] = copytext(O.dna.unique_enzymes,1,0) - if(O.resistances&&O.resistances.len) - B.data["resistances"] = O.resistances.Copy() - bucket_of_blood.reagents.reagent_list += B - bucket_of_blood.reagents.update_total() - bucket_of_blood.on_reagent_change() - //bucket_of_blood.reagents.handle_reactions() //blood doesn't react - ..() + if(O.resistances&&O.resistances.len) + B.data["resistances"] = O.resistances.Copy() + bucket_of_blood.reagents.reagent_list += B + bucket_of_blood.reagents.update_total() + bucket_of_blood.on_reagent_change() + //bucket_of_blood.reagents.handle_reactions() //blood doesn't react + ..() - input = /mob/living/carbon/monkey - output = null +/datum/food_processor_process/mob/monkey/input = /mob/living/carbon/monkey +/datum/food_processor_process/mob/monkey/output = null /obj/machinery/processor/proc/select_recipe(var/X) for (var/Type in typesof(/datum/food_processor_process) - /datum/food_processor_process - /datum/food_processor_process/mob) diff --git a/code/modules/food&drinks/recipes/microwave/recipes_burgers.dm b/code/modules/food&drinks/recipes/microwave/recipes_burgers.dm index b21eab3ead0..8823a0928f5 100644 --- a/code/modules/food&drinks/recipes/microwave/recipes_burgers.dm +++ b/code/modules/food&drinks/recipes/microwave/recipes_burgers.dm @@ -184,11 +184,11 @@ result = /obj/item/weapon/reagent_containers/food/snacks/burger/superbite /datum/recipe/burger/slime - reagents = list("slimejelly" = 5, "flour" = 15) + reagents = list("slimejelly" = 5, "flour" = 5) items = list() result = /obj/item/weapon/reagent_containers/food/snacks/burger/jelly/slime /datum/recipe/burger/jelly - reagents = list("cherryjelly" = 5, "flour" = 15) + reagents = list("cherryjelly" = 5, "flour" = 5) items = list() result = /obj/item/weapon/reagent_containers/food/snacks/burger/jelly/cherry diff --git a/code/modules/mining/laborcamp/laborstacker.dm b/code/modules/mining/laborcamp/laborstacker.dm index 334d71311e5..81c682355d5 100644 --- a/code/modules/mining/laborcamp/laborstacker.dm +++ b/code/modules/mining/laborcamp/laborstacker.dm @@ -3,7 +3,6 @@ /obj/machinery/mineral/labor_claim_console name = "point claim console" desc = "A stacking console with an electromagnetic writer, used to track ore mined by prisoners." - name = "stacking machine console" icon = 'icons/obj/machines/mining_machines.dmi' icon_state = "console" density = 0 @@ -34,18 +33,14 @@ /obj/machinery/mineral/labor_claim_console/attack_hand(user as mob) - name = "point claim console" - icon = 'icons/obj/machines/mining_machines.dmi' - icon_state = "console" - desc = "A stacking console with an electromagnetic writer, used to track ore mined by prisoners." - density = 0 - anchored = 1 var/dat dat += text("Point Claim Console

    ") if(emagged) //Shit's broken dat += text("QU&#t0A In%aL*D
    ") else if(istype(inserted_id)) //There's an ID in there. - dat += text("[inserted_id.points] / [inserted_id.goal] collected. Eject ID.
    ") + dat += text("ID: [inserted_id.registered_name] Eject ID.
    ") + dat += text("Points Collected:[inserted_id.points]
    ") + dat += text("Point Quota: [inserted_id.goal ? inserted_id.goal : "Unlimited"] - Reach your quota to earn your release
    ") dat += text("Unclaimed Collection Points: [machine.points]. Claim points.
    ") else //No ID in sight. Complain about it. dat += text("No ID inserted. Insert ID.
    ") @@ -91,26 +86,31 @@ usr.drop_item() I.loc = src inserted_id = I - else usr << "\red No valid ID." + else usr << "Invalid ID." if(check_auth()) //Sanity check against hef spoofs if(href_list["choice"] == "station") var/datum/shuttle_manager/s = shuttles["laborcamp"] if(s.location == /area/shuttle/laborcamp/outpost) if(alone_in_area(get_area(loc), usr)) if (s.move_shuttle(0)) // No delay, to stop people from getting on while it is departing. - usr << "\blue Shuttle recieved message and will be sent shortly." + broadcast_hud_message("[inserted_id.registered_name] has met their quota and has returned to the station. Minerals and Prisoner ID card ready for retrieval.", src) + usr << "Shuttle recieved message and will be sent shortly." else - usr << "\blue Shuttle is already moving." + usr << "Shuttle is already moving." else - usr << "\red Prisoners are only allowed to be released while alone." + usr << "Prisoners are only allowed to be released while alone." else - usr << "\blue Shuttle is already on-station." + usr << "Shuttle is already on-station." if(href_list["choice"] == "release") + var/datum/shuttle_manager/s = shuttles["laborcamp"] + if(s.location == /area/shuttle/laborcamp/outpost) + usr << "Prisoners can only be released while docked with the station." + return if(alone_in_area(get_area(loc), usr)) if(release_door.density) release_door.open() else - usr << "\red Prisoners are only allowed to be released while alone." + usr << "Prisoners are only allowed to be released while alone." src.updateUsrDialog() return @@ -136,4 +136,30 @@ var/a = inp.amount if(n in ore_values) points += ore_values[n] * a + ..() + + +/**********************Point Lookup Console**************************/ +/obj/machinery/mineral/labor_points_checker + name = "points checking console" + desc = "A console used by prisoners to check the progress on their quotas. Simply swipe a prisoner ID." + icon = 'icons/obj/machines/mining_machines.dmi' + icon_state = "console" + density = 0 + anchored = 1 + +/obj/machinery/mineral/labor_points_checker/attack_hand(user as mob) + examine(user) + +/obj/machinery/mineral/labor_points_checker/attackby(obj/item/I as obj, mob/user as mob) + if(istype(I, /obj/item/weapon/card/id)) + if(istype(I, /obj/item/weapon/card/id/prisoner)) + var/obj/item/weapon/card/id/prisoner/prisoner_id = I + user << "ID: [prisoner_id.registered_name]" + user << "Points Collected:[prisoner_id.points]" + user << "Point Quota: [prisoner_id.goal ? prisoner_id.goal : "Unlimited"]" + user << "Collect points by bringing smelted minerals to the Labor Shuttle stacking machine. Reach your quota to earn your release." + else + user << "Error: Invalid ID" + return ..() \ No newline at end of file diff --git a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm index cf14f45c838..80cb1fdc642 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm @@ -8,13 +8,13 @@ Doesn't work on other aliens/AI.*/ /mob/living/carbon/alien/proc/powerc(X, Y)//Y is optional, checks for weed planting. X can be null. if(stat) - src << "\green You must be conscious to do this." + src << "You must be conscious to do this." return 0 else if(X && getPlasma() < X) - src << "\green Not enough plasma stored." + src << "Not enough plasma stored." return 0 else if(Y && (!isturf(src.loc) || istype(src.loc, /turf/space))) - src << "\green Bad place for a garden!" + src << "Bad place for a garden!" return 0 else return 1 @@ -30,7 +30,7 @@ Doesn't work on other aliens/AI.*/ if(powerc(50,1)) adjustToxLoss(-50) for(var/mob/O in viewers(src, null)) - O.show_message(text("\green [src] has planted some alien weeds!"), 1) + O.show_message(text("[src] has planted some alien weeds!"), 1) new /obj/structure/alien/weeds/node(loc) return @@ -57,8 +57,8 @@ Doesn't work on other aliens/AI.*/ var/msg = sanitize(input("Message:", "Alien Whisper") as text|null) if(msg) log_say("AlienWhisper: [key_name(src)]->[M.key] : [msg]") - M << "\green You hear a strange, alien voice in your head... \italic [msg]" - src << {"\green You said: "[msg]" to [M]"} + M << "You hear a strange, alien voice in your head...[msg]" + src << {"You said: "[msg]" to [M]"} return /mob/living/carbon/alien/humanoid/verb/transfer_plasma(mob/living/carbon/alien/M as mob in oview()) @@ -74,10 +74,10 @@ Doesn't work on other aliens/AI.*/ if (get_dist(src,M) <= 1) M.adjustToxLoss(amount) adjustToxLoss(-amount) - M << "\green [src] has transfered [amount] plasma to you." - src << {"\green You have trasferred [amount] plasma to [M]"} + M << "[src] has transfered [amount] plasma to you." + src << {"You have trasferred [amount] plasma to [M]"} else - src << "\green You need to be closer." + src << "You need to be closer." return @@ -92,27 +92,27 @@ Doesn't work on other aliens/AI.*/ if(isobj(O)) var/obj/I = O if(I.unacidable) //So the aliens don't destroy energy fields/singularies/other aliens/etc with their acid. - src << "\green You cannot dissolve this object." + src << "You cannot dissolve this object." return // TURF CHECK else if(istype(O, /turf/simulated)) var/turf/T = O // R WALL if(istype(T, /turf/simulated/wall/r_wall)) - src << "\green You cannot dissolve this object." + src << "You cannot dissolve this object." return // R FLOOR if(istype(T, /turf/simulated/floor/engine)) - src << "\green You cannot dissolve this object." + src << "You cannot dissolve this object." return else// Not a type we can acid. return adjustToxLoss(-200) new /obj/effect/acid(get_turf(O), O) - visible_message("\green [src] vomits globs of vile stuff all over [O]. It begins to sizzle and melt under the bubbling mess of acid!") + visible_message("[src] vomits globs of vile stuff all over [O]. It begins to sizzle and melt under the bubbling mess of acid!") else - src << "\green Target is too far away." + src << "Target is too far away." return @@ -123,7 +123,7 @@ Doesn't work on other aliens/AI.*/ if(powerc(50)) adjustToxLoss(-50) - src.visible_message("\red [src] spits neurotoxin!", "\green You spit neurotoxin.") + src.visible_message("[src] spits neurotoxin!", "You spit neurotoxin.") var/turf/T = loc var/turf/U = get_step(src, dir) // Get the tile infront of the move, based on their direction @@ -146,9 +146,9 @@ Doesn't work on other aliens/AI.*/ var/choice = input("Choose what you wish to shape.","Resin building") as null|anything in list("resin door","resin wall","resin membrane","resin nest") //would do it through typesof but then the player choice would have the type path and we don't want the internal workings to be exposed ICly - Urist if(!choice || !powerc(75)) return adjustToxLoss(-75) - src << "\green You shape a [choice]." + src << "You shape a [choice]." for(var/mob/O in viewers(src, null)) - O.show_message(text("\red [src] vomits up a thick purple substance and begins to shape it!"), 1) + O.show_message(text("[src] vomits up a thick purple substance and begins to shape it!"), 1) switch(choice) if("resin door") new /obj/structure/mineral_door/resin(loc) @@ -171,5 +171,5 @@ Doesn't work on other aliens/AI.*/ stomach_contents.Remove(A) A.loc = loc //Paralyse(10) - src.visible_message("\green [src] hurls out the contents of their stomach!") + src.visible_message("[src] hurls out the contents of their stomach!") return \ No newline at end of file diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm index efe7e9d47aa..bae52d99d01 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm @@ -37,9 +37,9 @@ if(no_queen) adjustToxLoss(-500) - src << "\green You begin to evolve!" + src << "You begin to evolve!" for(var/mob/O in viewers(src, null)) - O.show_message(text("\green [src] begins to twist and contort!"), 1) + O.show_message(text("[src] begins to twist and contort!"), 1) var/mob/living/carbon/alien/humanoid/queen/new_xeno = new (loc) mind.transfer_to(new_xeno) qdel(src) diff --git a/code/modules/mob/living/carbon/alien/humanoid/death.dm b/code/modules/mob/living/carbon/alien/humanoid/death.dm index 91138a43090..bee27cda077 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/death.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/death.dm @@ -6,7 +6,7 @@ if(!gibbed) playsound(loc, 'sound/voice/hiss6.ogg', 80, 1, 1) for(var/mob/O in viewers(src, null)) - O.show_message("[src] lets out a waning guttural screech, green blood bubbling from its maw...", 1) + O.show_message("[src] lets out a waning guttural screech, green blood bubbling from its maw...", 1) update_canmove() if(client) blind.layer = 0 update_icons() diff --git a/code/modules/mob/living/carbon/alien/humanoid/emote.dm b/code/modules/mob/living/carbon/alien/humanoid/emote.dm index 4351ced974f..ed3061be2e8 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/emote.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/emote.dm @@ -14,54 +14,54 @@ switch(act) //Alphabetical please if ("deathgasp") - message = "[src] lets out a waning guttural screech, green blood bubbling from its maw..." + message = "[src] lets out a waning guttural screech, green blood bubbling from its maw..." m_type = 2 if ("gnarl") if (!muzzled) - message = "[src] gnarls and shows its teeth.." + message = "[src] gnarls and shows its teeth.." m_type = 2 if ("hiss") if(!muzzled) - message = "[src] hisses." + message = "[src] hisses." m_type = 2 if ("moan") - message = "[src] moans!" + message = "[src] moans!" m_type = 2 if ("roar") if (!muzzled) - message = "[src] roars." + message = "[src] roars." m_type = 2 if ("roll") if (!src.restrained()) - message = "[src] rolls." + message = "[src] rolls." m_type = 1 if ("scratch") if (!src.restrained()) - message = "[src] scratches." + message = "[src] scratches." m_type = 1 if ("scretch") if (!muzzled) - message = "[src] scretches." + message = "[src] scretches." m_type = 2 if ("shiver") - message = "[src] shivers." + message = "[src] shivers." m_type = 2 if ("sign") if (!src.restrained()) - message = text("[src] signs[].", (text2num(param) ? text(" the number []", text2num(param)) : null)) + message = text("[src] signs[].", (text2num(param) ? text(" the number []", text2num(param)) : null)) m_type = 1 if ("tail") - message = "[src] waves its tail." + message = "[src] waves its tail." m_type = 1 if ("help") //This is an exception diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm index eb89d6cf49b..c5c99d24fd7 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm @@ -345,7 +345,7 @@ In all, this is a lot like the monkey code. /N /mob/living/carbon/alien/humanoid/Topic(href, href_list) ..() //strip panel - if(!usr.stat && usr.canmove && !usr.restrained() && in_range(src, usr)) + if(canUseTopic(src, BE_CLOSE, NO_DEXTERY)) if(href_list["pouches"]) visible_message("[usr] tries to empty [src]'s pouches.", \ "[usr] tries to empty [src]'s pouches.") diff --git a/code/modules/mob/living/carbon/alien/humanoid/life.dm b/code/modules/mob/living/carbon/alien/humanoid/life.dm index 937323da58f..a759c75c0cf 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/life.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/life.dm @@ -68,404 +68,403 @@ handle_regular_hud_updates() -/mob/living/carbon/alien/humanoid - proc/handle_disabilities() - if (disabilities & EPILEPSY) - if ((prob(1) && paralysis < 10)) - src << "\red You have a seizure!" - Paralyse(10) - if (disabilities & COUGHING) - if ((prob(5) && paralysis <= 1)) - drop_item() - spawn( 0 ) - emote("cough") - return - if (disabilities & TOURETTES) - if ((prob(10) && paralysis <= 1)) - Stun(10) - spawn( 0 ) - emote("twitch") - return - if (disabilities & NERVOUS) - if (prob(10)) - stuttering = max(10, stuttering) +/mob/living/carbon/alien/humanoid/proc/handle_disabilities() + if (disabilities & EPILEPSY) + if ((prob(1) && paralysis < 10)) + src << "\red You have a seizure!" + Paralyse(10) + if (disabilities & COUGHING) + if ((prob(5) && paralysis <= 1)) + drop_item() + spawn( 0 ) + emote("cough") + return + if (disabilities & TOURETTES) + if ((prob(10) && paralysis <= 1)) + Stun(10) + spawn( 0 ) + emote("twitch") + return + if (disabilities & NERVOUS) + if (prob(10)) + stuttering = max(10, stuttering) - proc/breathe() - if(reagents) - if(reagents.has_reagent("lexorin")) return - if(istype(loc, /obj/machinery/atmospherics/unary/cryo_cell)) return +/mob/living/carbon/alien/humanoid/proc/breathe() + if(reagents) + if(reagents.has_reagent("lexorin")) return + if(istype(loc, /obj/machinery/atmospherics/unary/cryo_cell)) return - var/datum/gas_mixture/environment = loc.return_air() - var/datum/gas_mixture/breath - // HACK NEED CHANGING LATER - if(health <= config.health_threshold_crit) - losebreath++ + var/datum/gas_mixture/environment = loc.return_air() + var/datum/gas_mixture/breath + // HACK NEED CHANGING LATER + if(health <= config.health_threshold_crit) + losebreath++ - if(losebreath>0) //Suffocating so do not take a breath - losebreath-- - if (prob(75)) //High chance of gasping for air - spawn emote("gasp") + if(losebreath>0) //Suffocating so do not take a breath + losebreath-- + if (prob(75)) //High chance of gasping for air + spawn emote("gasp") + if(istype(loc, /obj/)) + var/obj/location_as_object = loc + location_as_object.handle_internal_lifeform(src, 0) + else + //First, check for air from internal atmosphere (using an air tank and mask generally) + breath = get_breath_from_internal(BREATH_VOLUME) + + //No breath from internal atmosphere so get breath from location + if(!breath) + if(istype(loc, /obj/)) + var/obj/location_as_object = loc + breath = location_as_object.handle_internal_lifeform(src, BREATH_VOLUME) + else if(istype(loc, /turf/)) + var/breath_moles = 0 + /*if(environment.return_pressure() > ONE_ATMOSPHERE) + // Loads of air around (pressure effect will be handled elsewhere), so lets just take a enough to fill our lungs at normal atmos pressure (using n = Pv/RT) + breath_moles = (ONE_ATMOSPHERE*BREATH_VOLUME/R_IDEAL_GAS_EQUATION*environment.temperature) + else*/ + // Not enough air around, take a percentage of what's there to model this properly + breath_moles = environment.total_moles()*BREATH_PERCENTAGE + + breath = loc.remove_air(breath_moles) + + // Handle chem smoke effect -- Doohl + for(var/obj/effect/effect/chem_smoke/smoke in view(1, src)) + if(smoke.reagents.total_volume) + smoke.reagents.reaction(src, INGEST) + spawn(5) + if(smoke) + smoke.reagents.copy_to(src, 10) // I dunno, maybe the reagents enter the blood stream through the lungs? + break // If they breathe in the nasty stuff once, no need to continue checking + + + else //Still give containing object the chance to interact if(istype(loc, /obj/)) var/obj/location_as_object = loc location_as_object.handle_internal_lifeform(src, 0) - else - //First, check for air from internal atmosphere (using an air tank and mask generally) - breath = get_breath_from_internal(BREATH_VOLUME) - //No breath from internal atmosphere so get breath from location - if(!breath) - if(istype(loc, /obj/)) - var/obj/location_as_object = loc - breath = location_as_object.handle_internal_lifeform(src, BREATH_VOLUME) - else if(istype(loc, /turf/)) - var/breath_moles = 0 - /*if(environment.return_pressure() > ONE_ATMOSPHERE) - // Loads of air around (pressure effect will be handled elsewhere), so lets just take a enough to fill our lungs at normal atmos pressure (using n = Pv/RT) - breath_moles = (ONE_ATMOSPHERE*BREATH_VOLUME/R_IDEAL_GAS_EQUATION*environment.temperature) - else*/ - // Not enough air around, take a percentage of what's there to model this properly - breath_moles = environment.total_moles()*BREATH_PERCENTAGE + handle_breath(breath) - breath = loc.remove_air(breath_moles) - - // Handle chem smoke effect -- Doohl - for(var/obj/effect/effect/chem_smoke/smoke in view(1, src)) - if(smoke.reagents.total_volume) - smoke.reagents.reaction(src, INGEST) - spawn(5) - if(smoke) - smoke.reagents.copy_to(src, 10) // I dunno, maybe the reagents enter the blood stream through the lungs? - break // If they breathe in the nasty stuff once, no need to continue checking + if(breath) + loc.assume_air(breath) - else //Still give containing object the chance to interact - if(istype(loc, /obj/)) - var/obj/location_as_object = loc - location_as_object.handle_internal_lifeform(src, 0) - - handle_breath(breath) - - if(breath) - loc.assume_air(breath) - - - proc/get_breath_from_internal(volume_needed) +/mob/living/carbon/alien/humanoid/proc/get_breath_from_internal(volume_needed) + if(internal) + if (!contents.Find(internal)) + internal = null + if (!wear_mask || !(wear_mask.flags & MASKINTERNALS) ) + internal = null if(internal) - if (!contents.Find(internal)) - internal = null - if (!wear_mask || !(wear_mask.flags & MASKINTERNALS) ) - internal = null - if(internal) - if (internals) - internals.icon_state = "internal1" - return internal.remove_air_volume(volume_needed) - else - if (internals) - internals.icon_state = "internal0" - return null - - proc/handle_breath(datum/gas_mixture/breath) - if(status_flags & GODMODE) - return - - if(!breath || (breath.total_moles() == 0)) - //Aliens breathe in vaccuum - return 0 - - var/toxins_used = 0 - var/breath_pressure = (breath.total_moles()*R_IDEAL_GAS_EQUATION*breath.temperature)/BREATH_VOLUME - - //Partial pressure of the toxins in our breath - var/Toxins_pp = (breath.toxins/breath.total_moles())*breath_pressure - - if(Toxins_pp) // Detect toxins in air - - adjustToxLoss(breath.toxins*250) - toxins_alert = max(toxins_alert, 1) - - toxins_used = breath.toxins - + if (internals) + internals.icon_state = "internal1" + return internal.remove_air_volume(volume_needed) else - toxins_alert = 0 + if (internals) + internals.icon_state = "internal0" + return null - //Breathe in toxins and out oxygen - breath.toxins -= toxins_used - breath.oxygen += toxins_used +/mob/living/carbon/alien/humanoid/proc/handle_breath(datum/gas_mixture/breath) + if(status_flags & GODMODE) + return - if(breath.temperature > (T0C+66) && !(COLD_RESISTANCE in mutations)) // Hot air hurts :( - if(prob(20)) - src << "\red You feel a searing heat in your lungs!" - fire_alert = max(fire_alert, 1) - else - fire_alert = 0 + if(!breath || (breath.total_moles() == 0)) + //Aliens breathe in vaccuum + return 0 - //Temporary fixes to the alerts. + var/toxins_used = 0 + var/breath_pressure = (breath.total_moles()*R_IDEAL_GAS_EQUATION*breath.temperature)/BREATH_VOLUME - return 1 + //Partial pressure of the toxins in our breath + var/Toxins_pp = (breath.toxins/breath.total_moles())*breath_pressure + + if(Toxins_pp) // Detect toxins in air + + adjustToxLoss(breath.toxins*250) + toxins_alert = max(toxins_alert, 1) + + toxins_used = breath.toxins + + else + toxins_alert = 0 + + //Breathe in toxins and out oxygen + breath.toxins -= toxins_used + breath.oxygen += toxins_used + + if(breath.temperature > (T0C+66) && !(COLD_RESISTANCE in mutations)) // Hot air hurts :( + if(prob(20)) + src << "You feel a searing heat in your lungs!>/span>" + fire_alert = max(fire_alert, 1) + else + fire_alert = 0 + + //Temporary fixes to the alerts. + + return 1 - proc/adjust_body_temperature(current, loc_temp, boost) - var/temperature = current - var/difference = abs(current-loc_temp) //get difference - var/increments// = difference/10 //find how many increments apart they are - if(difference > 50) - increments = difference/5 - else - increments = difference/10 - var/change = increments*boost // Get the amount to change by (x per increment) - var/temp_change - if(current < loc_temp) - temperature = min(loc_temp, temperature+change) - else if(current > loc_temp) - temperature = max(loc_temp, temperature-change) - temp_change = (temperature - current) - return temp_change +/mob/living/carbon/alien/humanoid/proc/adjust_body_temperature(current, loc_temp, boost) + var/temperature = current + var/difference = abs(current-loc_temp) //get difference + var/increments// = difference/10 //find how many increments apart they are + if(difference > 50) + increments = difference/5 + else + increments = difference/10 + var/change = increments*boost // Get the amount to change by (x per increment) + var/temp_change + if(current < loc_temp) + temperature = min(loc_temp, temperature+change) + else if(current > loc_temp) + temperature = max(loc_temp, temperature-change) + temp_change = (temperature - current) + return temp_change /* - proc/get_thermal_protection() - var/thermal_protection = 1.0 - //Handle normal clothing - if(head && (head.body_parts_covered & HEAD)) - thermal_protection += 0.5 - if(wear_suit && (wear_suit.body_parts_covered & CHEST)) - thermal_protection += 0.5 - if(wear_suit && (wear_suit.body_parts_covered & LEGS)) - thermal_protection += 0.2 - if(wear_suit && (wear_suit.body_parts_covered & ARMS)) - thermal_protection += 0.2 - if(wear_suit && (wear_suit.body_parts_covered & HANDS)) - thermal_protection += 0.2 - if(wear_suit && (wear_suit.flags & SUITSPACE)) - thermal_protection += 3 - if(COLD_RESISTANCE in mutations) - thermal_protection += 5 +/mob/living/carbon/alien/humanoid/proc/get_thermal_protection() + var/thermal_protection = 1.0 + //Handle normal clothing + if(head && (head.body_parts_covered & HEAD)) + thermal_protection += 0.5 + if(wear_suit && (wear_suit.body_parts_covered & CHEST)) + thermal_protection += 0.5 + if(wear_suit && (wear_suit.body_parts_covered & LEGS)) + thermal_protection += 0.2 + if(wear_suit && (wear_suit.body_parts_covered & ARMS)) + thermal_protection += 0.2 + if(wear_suit && (wear_suit.body_parts_covered & HANDS)) + thermal_protection += 0.2 + if(wear_suit && (wear_suit.flags & SUITSPACE)) + thermal_protection += 3 + if(COLD_RESISTANCE in mutations) + thermal_protection += 5 - return thermal_protection + return thermal_protection - proc/add_fire_protection(var/temp) - var/fire_prot = 0 - if(head) - if(head.protective_temperature > temp) - fire_prot += (head.protective_temperature/10) - if(wear_mask) - if(wear_mask.protective_temperature > temp) - fire_prot += (wear_mask.protective_temperature/10) - if(wear_suit) - if(wear_suit.protective_temperature > temp) - fire_prot += (wear_suit.protective_temperature/10) +/mob/living/carbon/alien/humanoid/proc/add_fire_protection(var/temp) + var/fire_prot = 0 + if(head) + if(head.protective_temperature > temp) + fire_prot += (head.protective_temperature/10) + if(wear_mask) + if(wear_mask.protective_temperature > temp) + fire_prot += (wear_mask.protective_temperature/10) + if(wear_suit) + if(wear_suit.protective_temperature > temp) + fire_prot += (wear_suit.protective_temperature/10) - return fire_prot - */ + return fire_prot +*/ - proc/handle_chemicals_in_body() +/mob/living/carbon/alien/humanoid/proc/handle_chemicals_in_body() - if(reagents) reagents.metabolize(src) + if(reagents) reagents.metabolize(src) - if(FAT in mutations) - if(nutrition < 100) - if(prob(round((50 - nutrition) / 100))) - src << "\blue You feel fit again!" - mutations.Remove(FAT) - else - if(nutrition > 500) - if(prob(5 + round((nutrition - 200) / 2))) - src << "\red You suddenly feel blubbery!" - mutations.Add(FAT) + if(FAT in mutations) + if(nutrition < 100) + if(prob(round((50 - nutrition) / 100))) + src << "You feel fit again!" + mutations.Remove(FAT) + else + if(nutrition > 500) + if(prob(5 + round((nutrition - 200) / 2))) + src << "You suddenly feel blubbery!" + mutations.Add(FAT) - if (nutrition > 0) - nutrition -= HUNGER_FACTOR + if (nutrition > 0) + nutrition -= HUNGER_FACTOR - if (drowsyness) - drowsyness-- - eye_blurry = max(2, eye_blurry) - if (prob(5)) - sleeping += 1 - Paralyse(5) + if (drowsyness) + drowsyness-- + eye_blurry = max(2, eye_blurry) + if (prob(5)) + sleeping += 1 + Paralyse(5) - confused = max(0, confused - 1) - // decrement dizziness counter, clamped to 0 - if(resting) - dizziness = max(0, dizziness - 5) - jitteriness = max(0, jitteriness - 5) - else - dizziness = max(0, dizziness - 1) - jitteriness = max(0, jitteriness - 1) + confused = max(0, confused - 1) + // decrement dizziness counter, clamped to 0 + if(resting) + dizziness = max(0, dizziness - 5) + jitteriness = max(0, jitteriness - 5) + else + dizziness = max(0, dizziness - 1) + jitteriness = max(0, jitteriness - 1) - updatehealth() + updatehealth() - return //TODO: DEFERRED + return //TODO: DEFERRED - proc/handle_regular_status_updates() - updatehealth() +/mob/living/carbon/alien/humanoid/proc/handle_regular_status_updates() + updatehealth() - if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP + if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP + blinded = 1 + silent = 0 + else //ALIVE. LIGHTS ARE ON + if(health < config.health_threshold_dead || !getorgan(/obj/item/organ/brain)) + death() blinded = 1 + stat = DEAD silent = 0 - else //ALIVE. LIGHTS ARE ON - if(health < config.health_threshold_dead || !getorgan(/obj/item/organ/brain)) - death() - blinded = 1 - stat = DEAD - silent = 0 - return 1 + return 1 - //UNCONSCIOUS. NO-ONE IS HOME - if( (getOxyLoss() > 50) || (config.health_threshold_crit >= health) ) - if( health <= 20 && prob(1) ) - spawn(0) - emote("gasp") - if(!reagents.has_reagent("inaprovaline")) - adjustOxyLoss(1) - Paralyse(3) + //UNCONSCIOUS. NO-ONE IS HOME + if( (getOxyLoss() > 50) || (config.health_threshold_crit >= health) ) + if( health <= 20 && prob(1) ) + spawn(0) + emote("gasp") + if(!reagents.has_reagent("inaprovaline")) + adjustOxyLoss(1) + Paralyse(3) - if(paralysis) - AdjustParalysis(-1) - blinded = 1 - stat = UNCONSCIOUS - else if(sleeping) - sleeping = max(sleeping-1, 0) - blinded = 1 - stat = UNCONSCIOUS - if( prob(10) && health ) - spawn(0) - emote("hiss") - //CONSCIOUS - else - stat = CONSCIOUS + if(paralysis) + AdjustParalysis(-1) + blinded = 1 + stat = UNCONSCIOUS + else if(sleeping) + sleeping = max(sleeping-1, 0) + blinded = 1 + stat = UNCONSCIOUS + if( prob(10) && health ) + spawn(0) + emote("hiss") + //CONSCIOUS + else + stat = CONSCIOUS - /* What in the living hell is this?*/ - if(move_delay_add > 0) - move_delay_add = max(0, move_delay_add - rand(1, 2)) + /* What in the living hell is this?*/ + if(move_delay_add > 0) + move_delay_add = max(0, move_delay_add - rand(1, 2)) - //Eyes - if(sdisabilities & BLIND) //disabled-blind, doesn't get better on its own - blinded = 1 - else if(eye_blind) //blindness, heals slowly over time - eye_blind = max(eye_blind-1,0) - blinded = 1 - else if(eye_blurry) //blurry eyes heal slowly - eye_blurry = max(eye_blurry-1, 0) + //Eyes + if(sdisabilities & BLIND) //disabled-blind, doesn't get better on its own + blinded = 1 + else if(eye_blind) //blindness, heals slowly over time + eye_blind = max(eye_blind-1,0) + blinded = 1 + else if(eye_blurry) //blurry eyes heal slowly + eye_blurry = max(eye_blurry-1, 0) - //Ears - if(sdisabilities & DEAF) //disabled-deaf, doesn't get better on its own - ear_deaf = max(ear_deaf, 1) - else if(ear_deaf) //deafness, heals slowly over time - ear_deaf = max(ear_deaf-1, 0) - else if(ear_damage < 25) //ear damage heals slowly under this threshold. otherwise you'll need earmuffs - ear_damage = max(ear_damage-0.05, 0) + //Ears + if(sdisabilities & DEAF) //disabled-deaf, doesn't get better on its own + ear_deaf = max(ear_deaf, 1) + else if(ear_deaf) //deafness, heals slowly over time + ear_deaf = max(ear_deaf-1, 0) + else if(ear_damage < 25) //ear damage heals slowly under this threshold. otherwise you'll need earmuffs + ear_damage = max(ear_damage-0.05, 0) - //Other - if(stunned) - AdjustStunned(-1) - if(!stunned) - update_icons() + //Other + if(stunned) + AdjustStunned(-1) + if(!stunned) + update_icons() - if(weakened) - weakened = max(weakened-1,0) + if(weakened) + weakened = max(weakened-1,0) - if(stuttering) - stuttering = max(stuttering-1, 0) + if(stuttering) + stuttering = max(stuttering-1, 0) - if(silent) - silent = max(silent-1, 0) + if(silent) + silent = max(silent-1, 0) - if(druggy) - druggy = max(druggy-1, 0) - return 1 + if(druggy) + druggy = max(druggy-1, 0) + return 1 - proc/handle_regular_hud_updates() +/mob/living/carbon/alien/humanoid/proc/handle_regular_hud_updates() - if (stat == 2 || (XRAY in mutations)) - sight |= SEE_TURFS - sight |= SEE_MOBS - sight |= SEE_OBJS - see_in_dark = 8 - see_invisible = SEE_INVISIBLE_LEVEL_TWO - else if (stat != 2) - sight |= SEE_MOBS - sight &= ~SEE_TURFS - sight &= ~SEE_OBJS - see_in_dark = 4 - see_invisible = SEE_INVISIBLE_LEVEL_TWO - if(see_override) - see_invisible = see_override - - if (healths) - if (stat != 2) - switch(health) - if(100 to INFINITY) - healths.icon_state = "health0" - if(75 to 100) - healths.icon_state = "health1" - if(50 to 75) - healths.icon_state = "health2" - if(25 to 50) - healths.icon_state = "health3" - if(0 to 25) - healths.icon_state = "health4" - else - healths.icon_state = "health5" - else - healths.icon_state = "health6" - - if(pullin) - if(pulling) - pullin.icon_state = "pull" - else - pullin.icon_state = "pull0" - - - if (toxin) toxin.icon_state = "tox[toxins_alert ? 1 : 0]" - if (oxygen) oxygen.icon_state = "oxy[oxygen_alert ? 1 : 0]" - if (fire) fire.icon_state = "fire[fire_alert ? 1 : 0]" - //NOTE: the alerts dont reset when youre out of danger. dont blame me, - //blame the person who coded them. Temporary fix added. - - client.screen.Remove(global_hud.blurry,global_hud.druggy,global_hud.vimpaired) - - if ((blind && stat != 2)) - if ((blinded)) - blind.layer = 18 - else - blind.layer = 0 - - if (disabilities & NEARSIGHTED) - client.screen += global_hud.vimpaired - - if (eye_blurry) - client.screen += global_hud.blurry - - if (druggy) - client.screen += global_hud.druggy + if (stat == 2 || (XRAY in mutations)) + sight |= SEE_TURFS + sight |= SEE_MOBS + sight |= SEE_OBJS + see_in_dark = 8 + see_invisible = SEE_INVISIBLE_LEVEL_TWO + else if (stat != 2) + sight |= SEE_MOBS + sight &= ~SEE_TURFS + sight &= ~SEE_OBJS + see_in_dark = 4 + see_invisible = SEE_INVISIBLE_LEVEL_TWO + if(see_override) + see_invisible = see_override + if (healths) if (stat != 2) - if (machine) - if (!( machine.check_eye(src) )) - reset_view(null) - else - if(!client.adminobs) - reset_view(null) + switch(health) + if(100 to INFINITY) + healths.icon_state = "health0" + if(75 to 100) + healths.icon_state = "health1" + if(50 to 75) + healths.icon_state = "health2" + if(25 to 50) + healths.icon_state = "health3" + if(0 to 25) + healths.icon_state = "health4" + else + healths.icon_state = "health5" + else + healths.icon_state = "health6" - return 1 + if(pullin) + if(pulling) + pullin.icon_state = "pull" + else + pullin.icon_state = "pull0" - proc/handle_stomach() - spawn(0) - for(var/mob/living/M in stomach_contents) - if(M.loc != src) + + if (toxin) toxin.icon_state = "tox[toxins_alert ? 1 : 0]" + if (oxygen) oxygen.icon_state = "oxy[oxygen_alert ? 1 : 0]" + if (fire) fire.icon_state = "fire[fire_alert ? 1 : 0]" + //NOTE: the alerts dont reset when youre out of danger. dont blame me, + //blame the person who coded them. Temporary fix added. + + client.screen.Remove(global_hud.blurry,global_hud.druggy,global_hud.vimpaired) + + if ((blind && stat != 2)) + if ((blinded)) + blind.layer = 18 + else + blind.layer = 0 + + if (disabilities & NEARSIGHTED) + client.screen += global_hud.vimpaired + + if (eye_blurry) + client.screen += global_hud.blurry + + if (druggy) + client.screen += global_hud.druggy + + if (stat != 2) + if (machine) + if (!( machine.check_eye(src) )) + reset_view(null) + else + if(!client.adminobs) + reset_view(null) + + return 1 + +/mob/living/carbon/alien/humanoid/proc/handle_stomach() + spawn(0) + for(var/mob/living/M in stomach_contents) + if(M.loc != src) + stomach_contents.Remove(M) + continue + if(istype(M, /mob/living/carbon) && stat != 2) + if(M.stat == 2) + M.death(1) stomach_contents.Remove(M) + qdel(M) continue - if(istype(M, /mob/living/carbon) && stat != 2) - if(M.stat == 2) - M.death(1) - stomach_contents.Remove(M) - qdel(M) - continue - if(air_master.current_cycle%3==1) - if(!(status_flags & GODMODE)) - M.adjustBruteLoss(5) - nutrition += 10 + if(air_master.current_cycle%3==1) + if(!(status_flags & GODMODE)) + M.adjustBruteLoss(5) + nutrition += 10 diff --git a/code/modules/mob/living/carbon/alien/humanoid/queen.dm b/code/modules/mob/living/carbon/alien/humanoid/queen.dm index bdbb5bbcad5..4b47808e80a 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/queen.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/queen.dm @@ -65,7 +65,7 @@ if(powerc(75,1))//Can't plant eggs on spess tiles. That's silly. adjustToxLoss(-75) for(var/mob/O in viewers(src, null)) - O.show_message(text("\green [src] has laid an egg!"), 1) + O.show_message(text("[src] has laid an egg!"), 1) new /obj/structure/alien/egg(loc) return diff --git a/code/modules/mob/living/carbon/alien/larva/emote.dm b/code/modules/mob/living/carbon/alien/larva/emote.dm index 8a662b5dc47..3504b211893 100644 --- a/code/modules/mob/living/carbon/alien/larva/emote.dm +++ b/code/modules/mob/living/carbon/alien/larva/emote.dm @@ -15,92 +15,92 @@ switch(act) //Alphabetically sorted please. if ("burp") if (!muzzled) - message = "[src] burps." + message = "[src] burps." m_type = 2 if ("choke") - message = "[src] chokes." + message = "[src] chokes." m_type = 2 if ("collapse") Paralyse(2) - message = "[src] collapses!" + message = "[src] collapses!" m_type = 2 if ("dance") if (!src.restrained()) - message = "[src] dances around happily." + message = "[src] dances around happily." m_type = 1 if ("drool") - message = "[src] drools." + message = "[src] drools." m_type = 1 if ("gasp") - message = "[src] gasps." + message = "[src] gasps." m_type = 2 if ("gnarl") if (!muzzled) - message = "[src] gnarls and shows its teeth.." + message = "[src] gnarls and shows its teeth.." m_type = 2 if ("hiss") - message = "[src] hisses softly." + message = "[src] hisses softly." m_type = 1 if ("jump") - message = "[src] jumps!" + message = "[src] jumps!" m_type = 1 if ("moan") - message = "[src] moans!" + message = "[src] moans!" m_type = 2 if ("nod") - message = "[src] nods its head." + message = "[src] nods its head." m_type = 1 // if ("roar") // if (!muzzled) -// message = "[src] roars." Commenting out since larva shouldn't roar /N +// message = "[src] roars." Commenting out since larva shouldn't roar /N // m_type = 2 if ("roll") if (!src.restrained()) - message = "[src] rolls." + message = "[src] rolls." m_type = 1 if ("scratch") if (!src.restrained()) - message = "[src] scratches." + message = "[src] scratches." m_type = 1 if ("scretch") if (!muzzled) - message = "[src] scretches." + message = "[src] scretches." m_type = 2 if ("shake") - message = "[src] shakes its head." + message = "[src] shakes its head." m_type = 1 if ("shiver") - message = "[src] shivers." + message = "[src] shivers." m_type = 2 if ("sign") if (!src.restrained()) - message = text("The alien signs[].", (text2num(param) ? text(" the number []", text2num(param)) : null)) + message = text("[src] signs[].", (text2num(param) ? text(" the number []", text2num(param)) : null)) m_type = 1 // if ("sit") -// message = "[src] sits down." //Larvan can't sit down, /N +// message = "[src] sits down." //Larvan can't sit down, /N // m_type = 1 if ("sulk") - message = "[src] sulks down sadly." + message = "[src] sulks down sadly." m_type = 1 if ("sway") - message = "[src] sways around dizzily." + message = "[src] sways around dizzily." m_type = 1 if ("tail") - message = "[src] waves its tail." + message = "[src] waves its tail." m_type = 1 if ("twitch") - message = "[src] twitches violently." + message = "[src] twitches violently." m_type = 1 if ("whimper") if (!muzzled) - message = "[src] whimpers." + message = "[src] whimpers." m_type = 2 if ("help") //"The exception" src << "Help for larva emotes. You can use these emotes with say \"*emote\":\n\nburp, choke, collapse, dance, drool, gasp, gnarl, hiss, jump, moan, nod, roll, scratch,\nscretch, shake, shiver, sign-#, sulk, sway, tail, twitch, whimper" else - src << "\blue Unusable emote '[act]'. Say *help for a list." + src << " Unusable emote '[act]'. Say *help for a list." if ((message && src.stat == 0)) log_emote("[name]/[key] : [message]") if (m_type & 1) diff --git a/code/modules/mob/living/carbon/alien/larva/life.dm b/code/modules/mob/living/carbon/alien/larva/life.dm index cb4774f6b90..b7f6cb35a41 100644 --- a/code/modules/mob/living/carbon/alien/larva/life.dm +++ b/code/modules/mob/living/carbon/alien/larva/life.dm @@ -62,327 +62,325 @@ handle_regular_hud_updates() -/mob/living/carbon/alien/larva +/mob/living/carbon/alien/larva/proc/breathe() - proc/breathe() + if(reagents.has_reagent("lexorin")) return + if(istype(loc, /obj/machinery/atmospherics/unary/cryo_cell)) return - if(reagents.has_reagent("lexorin")) return - if(istype(loc, /obj/machinery/atmospherics/unary/cryo_cell)) return + var/datum/gas_mixture/environment = loc.return_air() + var/datum/gas_mixture/breath + // HACK NEED CHANGING LATER + if(health <= config.health_threshold_crit) + losebreath++ - var/datum/gas_mixture/environment = loc.return_air() - var/datum/gas_mixture/breath - // HACK NEED CHANGING LATER - if(health <= config.health_threshold_crit) - losebreath++ + if(losebreath>0) //Suffocating so do not take a breath + losebreath-- + if (prob(75)) //High chance of gasping for air + spawn emote("gasp") + if(istype(loc, /obj/)) + var/obj/location_as_object = loc + location_as_object.handle_internal_lifeform(src, 0) + else + //First, check for air from internal atmosphere (using an air tank and mask generally) + breath = get_breath_from_internal(BREATH_VOLUME) - if(losebreath>0) //Suffocating so do not take a breath - losebreath-- - if (prob(75)) //High chance of gasping for air - spawn emote("gasp") + //No breath from internal atmosphere so get breath from location + if(!breath) + if(istype(loc, /obj/)) + var/obj/location_as_object = loc + breath = location_as_object.handle_internal_lifeform(src, BREATH_VOLUME) + else if(istype(loc, /turf/)) + var/breath_moles = 0 + /*if(environment.return_pressure() > ONE_ATMOSPHERE) + // Loads of air around (pressure effect will be handled elsewhere), so lets just take a enough to fill our lungs at normal atmos pressure (using n = Pv/RT) + breath_moles = (ONE_ATMOSPHERE*BREATH_VOLUME/R_IDEAL_GAS_EQUATION*environment.temperature) + else*/ + // Not enough air around, take a percentage of what's there to model this properly + breath_moles = environment.total_moles()*BREATH_PERCENTAGE + + breath = loc.remove_air(breath_moles) + + // Handle chem smoke effect -- Doohl + for(var/obj/effect/effect/chem_smoke/smoke in view(1, src)) + if(smoke.reagents.total_volume) + smoke.reagents.reaction(src, INGEST) + spawn(5) + if(smoke) + smoke.reagents.copy_to(src, 10) // I dunno, maybe the reagents enter the blood stream through the lungs? + break // If they breathe in the nasty stuff once, no need to continue checking + + + else //Still give containing object the chance to interact if(istype(loc, /obj/)) var/obj/location_as_object = loc location_as_object.handle_internal_lifeform(src, 0) - else - //First, check for air from internal atmosphere (using an air tank and mask generally) - breath = get_breath_from_internal(BREATH_VOLUME) - //No breath from internal atmosphere so get breath from location - if(!breath) - if(istype(loc, /obj/)) - var/obj/location_as_object = loc - breath = location_as_object.handle_internal_lifeform(src, BREATH_VOLUME) - else if(istype(loc, /turf/)) - var/breath_moles = 0 - /*if(environment.return_pressure() > ONE_ATMOSPHERE) - // Loads of air around (pressure effect will be handled elsewhere), so lets just take a enough to fill our lungs at normal atmos pressure (using n = Pv/RT) - breath_moles = (ONE_ATMOSPHERE*BREATH_VOLUME/R_IDEAL_GAS_EQUATION*environment.temperature) - else*/ - // Not enough air around, take a percentage of what's there to model this properly - breath_moles = environment.total_moles()*BREATH_PERCENTAGE + handle_breath(breath) - breath = loc.remove_air(breath_moles) - - // Handle chem smoke effect -- Doohl - for(var/obj/effect/effect/chem_smoke/smoke in view(1, src)) - if(smoke.reagents.total_volume) - smoke.reagents.reaction(src, INGEST) - spawn(5) - if(smoke) - smoke.reagents.copy_to(src, 10) // I dunno, maybe the reagents enter the blood stream through the lungs? - break // If they breathe in the nasty stuff once, no need to continue checking + if(breath) + loc.assume_air(breath) - else //Still give containing object the chance to interact - if(istype(loc, /obj/)) - var/obj/location_as_object = loc - location_as_object.handle_internal_lifeform(src, 0) - - handle_breath(breath) - - if(breath) - loc.assume_air(breath) - - - proc/get_breath_from_internal(volume_needed) +/mob/living/carbon/alien/larva/proc/get_breath_from_internal(volume_needed) + if(internal) + if (!contents.Find(internal)) + internal = null + if (!wear_mask || !(wear_mask.flags & MASKINTERNALS) ) + internal = null if(internal) - if (!contents.Find(internal)) - internal = null - if (!wear_mask || !(wear_mask.flags & MASKINTERNALS) ) - internal = null - if(internal) - if (internals) - internals.icon_state = "internal1" - return internal.remove_air_volume(volume_needed) - else - if (internals) - internals.icon_state = "internal0" - return null - - proc/handle_breath(datum/gas_mixture/breath) - if(status_flags & GODMODE) - return - - if(!breath || (breath.total_moles() == 0)) - //Aliens breathe in vaccuum - return 0 - - var/toxins_used = 0 - var/breath_pressure = (breath.total_moles()*R_IDEAL_GAS_EQUATION*breath.temperature)/BREATH_VOLUME - - //Partial pressure of the toxins in our breath - var/Toxins_pp = (breath.toxins/breath.total_moles())*breath_pressure - - if(Toxins_pp) // Detect toxins in air - - adjustToxLoss(breath.toxins*250) - toxins_alert = max(toxins_alert, 1) - - toxins_used = breath.toxins - + if (internals) + internals.icon_state = "internal1" + return internal.remove_air_volume(volume_needed) else - toxins_alert = 0 + if (internals) + internals.icon_state = "internal0" + return null - //Breathe in toxins and out oxygen - breath.toxins -= toxins_used - breath.oxygen += toxins_used - - if(breath.temperature > (T0C+66) && !(COLD_RESISTANCE in mutations)) // Hot air hurts :( - if(prob(20)) - src << "\red You feel a searing heat in your lungs!" - fire_alert = max(fire_alert, 1) - else - fire_alert = 0 - - //Temporary fixes to the alerts. - - return 1 - - - proc/handle_chemicals_in_body() - if(reagents) reagents.metabolize(src) - - if(FAT in mutations) - if(nutrition < 100) - if(prob(round((50 - nutrition) / 100))) - src << "\blue You feel fit again!" - mutations.Add(FAT) - else - if(nutrition > 500) - if(prob(5 + round((nutrition - max_grown) / 2))) - src << "\red You suddenly feel blubbery!" - mutations.Add(FAT) - - if (nutrition > 0) - nutrition-= HUNGER_FACTOR - - if (drowsyness) - drowsyness-- - eye_blurry = max(2, eye_blurry) - if (prob(5)) - sleeping += 1 - Paralyse(5) - - confused = max(0, confused - 1) - // decrement dizziness counter, clamped to 0 - if(resting) - dizziness = max(0, dizziness - 5) - jitteriness = max(0, jitteriness - 5) - else - dizziness = max(0, dizziness - 1) - jitteriness = max(0, jitteriness - 1) - - updatehealth() - - return //TODO: DEFERRED - - proc/handle_regular_status_updates() - updatehealth() - - if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP - blinded = 1 - silent = 0 - else //ALIVE. LIGHTS ARE ON - if(health < -25 || !getorgan(/obj/item/organ/brain)) - death() - blinded = 1 - silent = 0 - return 1 - - //UNCONSCIOUS. NO-ONE IS HOME - if( (getOxyLoss() > 25) || (config.health_threshold_crit >= health) ) - //if( health <= 20 && prob(1) ) - // spawn(0) - // emote("gasp") - if(!reagents.has_reagent("inaprovaline")) - adjustOxyLoss(1) - Paralyse(3) - - if(paralysis) - AdjustParalysis(-2) - blinded = 1 - stat = UNCONSCIOUS - else if(sleeping) - sleeping = max(sleeping-1, 0) - blinded = 1 - stat = UNCONSCIOUS - if( prob(10) && health ) - spawn(0) - emote("hiss_") - //CONSCIOUS - else - stat = CONSCIOUS - - /* What in the living hell is this?*/ - if(move_delay_add > 0) - move_delay_add = max(0, move_delay_add - rand(1, 2)) - - //Eyes - if(sdisabilities & BLIND) //disabled-blind, doesn't get better on its own - blinded = 1 - else if(eye_blind) //blindness, heals slowly over time - eye_blind = max(eye_blind-1,0) - blinded = 1 - else if(eye_blurry) //blurry eyes heal slowly - eye_blurry = max(eye_blurry-1, 0) - - //Ears - if(sdisabilities & DEAF) //disabled-deaf, doesn't get better on its own - ear_deaf = max(ear_deaf, 1) - else if(ear_deaf) //deafness, heals slowly over time - ear_deaf = max(ear_deaf-1, 0) - else if(ear_damage < 25) //ear damage heals slowly under this threshold. - ear_damage = max(ear_damage-0.05, 0) - - //Other - if(stunned) - AdjustStunned(-1) - - if(weakened) - weakened = max(weakened-1,0) - - if(stuttering) - stuttering = max(stuttering-1, 0) - - if(silent) - silent = max(silent-1, 0) - - if(druggy) - druggy = max(druggy-1, 0) - return 1 - - - proc/handle_regular_hud_updates() - - if (stat == 2 || (XRAY in mutations)) - sight |= SEE_TURFS - sight |= SEE_MOBS - sight |= SEE_OBJS - see_in_dark = 8 - see_invisible = SEE_INVISIBLE_LEVEL_TWO - else if (stat != 2) - sight |= SEE_MOBS - sight &= ~SEE_TURFS - sight &= ~SEE_OBJS - see_in_dark = 4 - see_invisible = SEE_INVISIBLE_LEVEL_TWO - if(see_override) - see_invisible = see_override - - if (healths) - if (stat != 2) - switch(health) - if(25 to INFINITY) - healths.icon_state = "health0" - if(19 to 25) - healths.icon_state = "health1" - if(13 to 19) - healths.icon_state = "health2" - if(7 to 13) - healths.icon_state = "health3" - if(0 to 7) - healths.icon_state = "health4" - else - healths.icon_state = "health5" - else - healths.icon_state = "health6" - - if(pullin) - if(pulling) - pullin.icon_state = "pull" - else - pullin.icon_state = "pull0" - - if (toxin) toxin.icon_state = "tox[toxins_alert ? 1 : 0]" - if (oxygen) oxygen.icon_state = "oxy[oxygen_alert ? 1 : 0]" - if (fire) fire.icon_state = "fire[fire_alert ? 1 : 0]" - //NOTE: the alerts dont reset when youre out of danger. dont blame me, - //blame the person who coded them. Temporary fix added. - - - client.screen.Remove(global_hud.blurry,global_hud.druggy,global_hud.vimpaired) - - if ((blind && stat != 2)) - if ((blinded)) - blind.layer = 18 - else - blind.layer = 0 - - if (disabilities & NEARSIGHTED) - client.screen += global_hud.vimpaired - - if (eye_blurry) - client.screen += global_hud.blurry - - if (druggy) - client.screen += global_hud.druggy - - if (stat != 2) - if (machine) - if (!( machine.check_eye(src) )) - reset_view(null) - else - if(!client.adminobs) - reset_view(null) - - return 1 - - proc/handle_random_events() +/mob/living/carbon/alien/larva/proc/handle_breath(datum/gas_mixture/breath) + if(status_flags & GODMODE) return + if(!breath || (breath.total_moles() == 0)) + //Aliens breathe in vaccuum + return 0 - proc/handle_stomach() - spawn(0) - for(var/mob/living/M in stomach_contents) - if(M.loc != src) + var/toxins_used = 0 + var/breath_pressure = (breath.total_moles()*R_IDEAL_GAS_EQUATION*breath.temperature)/BREATH_VOLUME + + //Partial pressure of the toxins in our breath + var/Toxins_pp = (breath.toxins/breath.total_moles())*breath_pressure + + if(Toxins_pp) // Detect toxins in air + + adjustToxLoss(breath.toxins*250) + toxins_alert = max(toxins_alert, 1) + + toxins_used = breath.toxins + + else + toxins_alert = 0 + + //Breathe in toxins and out oxygen + breath.toxins -= toxins_used + breath.oxygen += toxins_used + + if(breath.temperature > (T0C+66) && !(COLD_RESISTANCE in mutations)) // Hot air hurts :( + if(prob(20)) + src << "You feel a searing heat in your lungs!" + fire_alert = max(fire_alert, 1) + else + fire_alert = 0 + + //Temporary fixes to the alerts. + + return 1 + + +/mob/living/carbon/alien/larva/proc/handle_chemicals_in_body() + if(reagents) reagents.metabolize(src) + + if(FAT in mutations) + if(nutrition < 100) + if(prob(round((50 - nutrition) / 100))) + src << "You feel fit again!" + mutations.Add(FAT) + else + if(nutrition > 500) + if(prob(5 + round((nutrition - max_grown) / 2))) + src << "You suddenly feel blubbery!" + mutations.Add(FAT) + + if (nutrition > 0) + nutrition-= HUNGER_FACTOR + + if (drowsyness) + drowsyness-- + eye_blurry = max(2, eye_blurry) + if (prob(5)) + sleeping += 1 + Paralyse(5) + + confused = max(0, confused - 1) + // decrement dizziness counter, clamped to 0 + if(resting) + dizziness = max(0, dizziness - 5) + jitteriness = max(0, jitteriness - 5) + else + dizziness = max(0, dizziness - 1) + jitteriness = max(0, jitteriness - 1) + + updatehealth() + + return //TODO: DEFERRED + +/mob/living/carbon/alien/larva/proc/handle_regular_status_updates() + updatehealth() + + if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP + blinded = 1 + silent = 0 + else //ALIVE. LIGHTS ARE ON + if(health < -25 || !getorgan(/obj/item/organ/brain)) + death() + blinded = 1 + silent = 0 + return 1 + + //UNCONSCIOUS. NO-ONE IS HOME + if( (getOxyLoss() > 25) || (config.health_threshold_crit >= health) ) + //if( health <= 20 && prob(1) ) + // spawn(0) + // emote("gasp") + if(!reagents.has_reagent("inaprovaline")) + adjustOxyLoss(1) + Paralyse(3) + + if(paralysis) + AdjustParalysis(-2) + blinded = 1 + stat = UNCONSCIOUS + else if(sleeping) + sleeping = max(sleeping-1, 0) + blinded = 1 + stat = UNCONSCIOUS + if( prob(10) && health ) + spawn(0) + emote("hiss_") + //CONSCIOUS + else + stat = CONSCIOUS + + /* What in the living hell is this?*/ + if(move_delay_add > 0) + move_delay_add = max(0, move_delay_add - rand(1, 2)) + + //Eyes + if(sdisabilities & BLIND) //disabled-blind, doesn't get better on its own + blinded = 1 + else if(eye_blind) //blindness, heals slowly over time + eye_blind = max(eye_blind-1,0) + blinded = 1 + else if(eye_blurry) //blurry eyes heal slowly + eye_blurry = max(eye_blurry-1, 0) + + //Ears + if(sdisabilities & DEAF) //disabled-deaf, doesn't get better on its own + ear_deaf = max(ear_deaf, 1) + else if(ear_deaf) //deafness, heals slowly over time + ear_deaf = max(ear_deaf-1, 0) + else if(ear_damage < 25) //ear damage heals slowly under this threshold. + ear_damage = max(ear_damage-0.05, 0) + + //Other + if(stunned) + AdjustStunned(-1) + + if(weakened) + weakened = max(weakened-1,0) + + if(stuttering) + stuttering = max(stuttering-1, 0) + + if(silent) + silent = max(silent-1, 0) + + if(druggy) + druggy = max(druggy-1, 0) + return 1 + + +/mob/living/carbon/alien/larva/proc/handle_regular_hud_updates() + + if (stat == 2 || (XRAY in mutations)) + sight |= SEE_TURFS + sight |= SEE_MOBS + sight |= SEE_OBJS + see_in_dark = 8 + see_invisible = SEE_INVISIBLE_LEVEL_TWO + else if (stat != 2) + sight |= SEE_MOBS + sight &= ~SEE_TURFS + sight &= ~SEE_OBJS + see_in_dark = 4 + see_invisible = SEE_INVISIBLE_LEVEL_TWO + if(see_override) + see_invisible = see_override + + if (healths) + if (stat != 2) + switch(health) + if(25 to INFINITY) + healths.icon_state = "health0" + if(19 to 25) + healths.icon_state = "health1" + if(13 to 19) + healths.icon_state = "health2" + if(7 to 13) + healths.icon_state = "health3" + if(0 to 7) + healths.icon_state = "health4" + else + healths.icon_state = "health5" + else + healths.icon_state = "health6" + + if(pullin) + if(pulling) + pullin.icon_state = "pull" + else + pullin.icon_state = "pull0" + + if (toxin) toxin.icon_state = "tox[toxins_alert ? 1 : 0]" + if (oxygen) oxygen.icon_state = "oxy[oxygen_alert ? 1 : 0]" + if (fire) fire.icon_state = "fire[fire_alert ? 1 : 0]" + //NOTE: the alerts dont reset when youre out of danger. dont blame me, + //blame the person who coded them. Temporary fix added. + + + client.screen.Remove(global_hud.blurry,global_hud.druggy,global_hud.vimpaired) + + if ((blind && stat != 2)) + if ((blinded)) + blind.layer = 18 + else + blind.layer = 0 + + if (disabilities & NEARSIGHTED) + client.screen += global_hud.vimpaired + + if (eye_blurry) + client.screen += global_hud.blurry + + if (druggy) + client.screen += global_hud.druggy + + if (stat != 2) + if (machine) + if (!( machine.check_eye(src) )) + reset_view(null) + else + if(!client.adminobs) + reset_view(null) + + return 1 + +/mob/living/carbon/alien/larva/proc/handle_random_events() + return + + +/mob/living/carbon/alien/larva/proc/handle_stomach() + spawn(0) + for(var/mob/living/M in stomach_contents) + if(M.loc != src) + stomach_contents.Remove(M) + continue + if(istype(M, /mob/living/carbon) && stat != 2) + if(M.stat == 2) + M.death(1) stomach_contents.Remove(M) + qdel(M) continue - if(istype(M, /mob/living/carbon) && stat != 2) - if(M.stat == 2) - M.death(1) - stomach_contents.Remove(M) - qdel(M) - continue - if(air_master.current_cycle%3==1) - if(!(M.status_flags & GODMODE)) - M.adjustBruteLoss(5) - nutrition += 10 \ No newline at end of file + if(air_master.current_cycle%3==1) + if(!(M.status_flags & GODMODE)) + M.adjustBruteLoss(5) + nutrition += 10 diff --git a/code/modules/mob/living/carbon/alien/larva/powers.dm b/code/modules/mob/living/carbon/alien/larva/powers.dm index 21e5494e2bb..46097e7c411 100644 --- a/code/modules/mob/living/carbon/alien/larva/powers.dm +++ b/code/modules/mob/living/carbon/alien/larva/powers.dm @@ -9,13 +9,13 @@ if (layer != TURF_LAYER+0.2) layer = TURF_LAYER+0.2 - src << text("\green You are now hiding.") + src << text("You are now hiding.") for(var/mob/O in oviewers(src, null)) if ((O.client && !( O.blinded ))) - O << text("[] scurries to the ground!", src) + O << text("[] scurries to the ground!", src) else layer = MOB_LAYER - src << text("\green You have stopped hiding.") + src << text("You have stopped hiding.") for(var/mob/O in oviewers(src, null)) if ((O.client && !( O.blinded ))) O << text("[] slowly peaks up from the ground...", src) @@ -29,15 +29,14 @@ return if(handcuffed || legcuffed) - src << "\red You cannot evolve when you are cuffed." + src << "You cannot evolve when you are cuffed." if(amount_grown >= max_grown) //TODO ~Carn - //green is impossible to read, so i made these blue and changed the formatting slightly - src << "\blue You are growing into a beautiful alien! It is time to choose a caste." - src << "\blue There are three to choose from:" - src << "Hunters \blue are strong and agile, able to hunt away from the hive and rapidly move through ventilation shafts. Hunters generate plasma slowly and have low reserves." - src << "Sentinels \blue are tasked with protecting the hive and are deadly up close and at a range. They are not as physically imposing nor fast as the hunters." - src << "Drones \blue are the working class, offering the largest plasma storage and generation. They are the only caste which may evolve again, turning into the dreaded alien queen." + src << "You are growing into a beautiful alien! It is time to choose a caste." + src << "There are three to choose from:" + src << "Hunters are strong and agile, able to hunt away from the hive and rapidly move through ventilation shafts. Hunters generate plasma slowly and have low reserves." + src << "Sentinels are tasked with protecting the hive and are deadly up close and at a range. They are not as physically imposing nor fast as the hunters." + src << "Drones are the working class, offering the largest plasma storage and generation. They are the only caste which may evolve again, turning into the dreaded alien queen." var/alien_caste = alert(src, "Please choose which alien caste you shall belong to.",,"Hunter","Sentinel","Drone") var/mob/living/carbon/alien/humanoid/new_xeno @@ -52,5 +51,5 @@ qdel(src) return else - src << "\red You are not fully grown." + src << "You are not fully grown." return diff --git a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm index 0a1b0e02ea1..b895068c1c2 100644 --- a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm +++ b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm @@ -49,25 +49,25 @@ var/const/ALIEN_AFK_BRACKET = 450 // 45 seconds if(prob(1)) affected_mob.emote("cough") if(prob(1)) - affected_mob << "\red Your throat feels sore." + affected_mob << "Your throat feels sore." if(prob(1)) - affected_mob << "\red Mucous runs down the back of your throat." + affected_mob << "Mucous runs down the back of your throat." if(4) if(prob(1)) affected_mob.emote("sneeze") if(prob(1)) affected_mob.emote("cough") if(prob(2)) - affected_mob << "\red Your muscles ache." + affected_mob << "Your muscles ache." if(prob(20)) affected_mob.take_organ_damage(1) if(prob(2)) - affected_mob << "\red Your stomach hurts." + affected_mob << "Your stomach hurts." if(prob(20)) affected_mob.adjustToxLoss(1) affected_mob.updatehealth() if(5) - affected_mob << "\red You feel something tearing its way out of your stomach..." + affected_mob << "You feel something tearing its way out of your stomach..." affected_mob.adjustToxLoss(10) affected_mob.updatehealth() if(prob(50)) diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm index d337e56d4dd..df9a0e26887 100644 --- a/code/modules/mob/living/carbon/alien/special/facehugger.dm +++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm @@ -47,11 +47,11 @@ var/const/MAX_ACTIVE_TIME = 400 ..() switch(stat) if(DEAD,UNCONSCIOUS) - usr << "\red \b [src] is not moving." + usr << "[src] is not moving." if(CONSCIOUS) - usr << "\red \b [src] seems to be active." + usr << "[src] seems to be active." if (sterile) - usr << "\red \b It looks like the proboscis has been removed." + usr << "It looks like the proboscis has been removed." return /obj/item/clothing/mask/facehugger/attackby(var/obj/item/O,var/mob/m) @@ -117,12 +117,12 @@ var/const/MAX_ACTIVE_TIME = 400 if(stat != CONSCIOUS) return 0 if(!sterile) L.take_organ_damage(strength,0) //done here so that even borgs and humans in helmets take damage - L.visible_message("\red \b [src] leaps at [L]'s face!") + L.visible_message("[src] leaps at [L]'s face!") if(ishuman(L)) var/mob/living/carbon/human/H = L if(H.head && H.head.flags & HEADCOVERSMOUTH) - H.visible_message("\red \b [src] smashes against [H]'s [H.head]!") + H.visible_message("[src] smashes against [H]'s [H.head]!") Die() return 0 @@ -135,7 +135,7 @@ var/const/MAX_ACTIVE_TIME = 400 if(W.flags & NODROP) return 0 target.unEquip(W) - target.visible_message("\red \b [src] tears [W] off of [target]'s face!") + target.visible_message("[src] tears [W] off of [target]'s face!") src.loc = target target.equip_to_slot(src, slot_wear_mask,,0) @@ -164,7 +164,7 @@ var/const/MAX_ACTIVE_TIME = 400 if(!sterile) //target.contract_disease(new /datum/disease/alien_embryo(0)) //so infection chance is same as virus infection chance - target.visible_message("\red \b [src] falls limp after violating [target]'s face!") + target.visible_message("[src] falls limp after violating [target]'s face!") Die() icon_state = "[initial(icon_state)]_impregnated" @@ -178,7 +178,7 @@ var/const/MAX_ACTIVE_TIME = 400 src.loc = get_turf(C) C.facehugger = null else - target.visible_message("\red \b [src] violates [target]'s face!") + target.visible_message("[src] violates [target]'s face!") return /obj/item/clothing/mask/facehugger/proc/GoActive() @@ -218,7 +218,7 @@ var/const/MAX_ACTIVE_TIME = 400 icon_state = "[initial(icon_state)]_dead" stat = DEAD - src.visible_message("\red \b[src] curls up into a ball!") + src.visible_message("[src] curls up into a ball!") return diff --git a/code/modules/mob/living/carbon/brain/brain.dm b/code/modules/mob/living/carbon/brain/brain.dm index 82498bd1afd..6b5196a25c9 100644 --- a/code/modules/mob/living/carbon/brain/brain.dm +++ b/code/modules/mob/living/carbon/brain/brain.dm @@ -6,43 +6,43 @@ var/emp_damage = 0//Handles a type of MMI damage var/alert = null - New() - create_reagents(1000) - ..() +/mob/living/carbon/brain/New() + create_reagents(1000) + ..() - Destroy() - if(key) //If there is a mob connected to this thing. Have to check key twice to avoid false death reporting. - if(stat!=DEAD) //If not dead. - death(1) //Brains can die again. AND THEY SHOULD AHA HA HA HA HA HA - ghostize() //Ghostize checks for key so nothing else is necessary. - ..() +/mob/living/carbon/brain/Destroy() + if(key) //If there is a mob connected to this thing. Have to check key twice to avoid false death reporting. + if(stat!=DEAD) //If not dead. + death(1) //Brains can die again. AND THEY SHOULD AHA HA HA HA HA HA + ghostize() //Ghostize checks for key so nothing else is necessary. + ..() - say_understands(var/other)//Goddamn is this hackish, but this say code is so odd - if (istype(other, /mob/living/silicon/ai)) - if(!(container && istype(container, /obj/item/device/mmi))) - return 0 - else - return 1 - if (istype(other, /mob/living/silicon/decoy)) - if(!(container && istype(container, /obj/item/device/mmi))) - return 0 - else - return 1 - if (istype(other, /mob/living/silicon/pai)) - if(!(container && istype(container, /obj/item/device/mmi))) - return 0 - else - return 1 - if (istype(other, /mob/living/silicon/robot)) - if(!(container && istype(container, /obj/item/device/mmi))) - return 0 - else - return 1 - if (istype(other, /mob/living/carbon/human)) +/mob/living/carbon/brain/say_understands(var/other)//Goddamn is this hackish, but this say code is so odd + if (istype(other, /mob/living/silicon/ai)) + if(!(container && istype(container, /obj/item/device/mmi))) + return 0 + else return 1 - if (istype(other, /mob/living/carbon/slime)) + if (istype(other, /mob/living/silicon/decoy)) + if(!(container && istype(container, /obj/item/device/mmi))) + return 0 + else return 1 - return ..() + if (istype(other, /mob/living/silicon/pai)) + if(!(container && istype(container, /obj/item/device/mmi))) + return 0 + else + return 1 + if (istype(other, /mob/living/silicon/robot)) + if(!(container && istype(container, /obj/item/device/mmi))) + return 0 + else + return 1 + if (istype(other, /mob/living/carbon/human)) + return 1 + if (istype(other, /mob/living/carbon/slime)) + return 1 + return ..() /mob/living/carbon/brain/update_canmove() diff --git a/code/modules/mob/living/carbon/brain/life.dm b/code/modules/mob/living/carbon/brain/life.dm index a0d54685034..bf96cac0e2a 100644 --- a/code/modules/mob/living/carbon/brain/life.dm +++ b/code/modules/mob/living/carbon/brain/life.dm @@ -32,244 +32,243 @@ handle_regular_hud_updates() -/mob/living/carbon/brain/ - proc/handle_mutations_and_radiation() +/mob/living/carbon/brain/proc/handle_mutations_and_radiation() - if (radiation) - if (radiation > 100) - radiation = 100 - if(!container)//If it's not in an MMI - src << "\red You feel weak." - else//Fluff-wise, since the brain can't detect anything itself, the MMI handles thing like that - src << "\red STATUS: CRITICAL AMOUNTS OF RADIATION DETECTED." + if (radiation) + if (radiation > 100) + radiation = 100 + if(!container)//If it's not in an MMI + src << "\red You feel weak." + else//Fluff-wise, since the brain can't detect anything itself, the MMI handles thing like that + src << "\red STATUS: CRITICAL AMOUNTS OF RADIATION DETECTED." - switch(radiation) - if(1 to 49) - radiation-- - if(prob(25)) - adjustToxLoss(1) - updatehealth() - - if(50 to 74) - radiation -= 2 + switch(radiation) + if(1 to 49) + radiation-- + if(prob(25)) adjustToxLoss(1) - if(prob(5)) - radiation -= 5 - if(!container) - src << "\red You feel weak." - else - src << "\red STATUS: DANGEROUS LEVELS OF RADIATION DETECTED." updatehealth() - if(75 to 100) - radiation -= 3 - adjustToxLoss(3) - updatehealth() + if(50 to 74) + radiation -= 2 + adjustToxLoss(1) + if(prob(5)) + radiation -= 5 + if(!container) + src << "\red You feel weak." + else + src << "\red STATUS: DANGEROUS LEVELS OF RADIATION DETECTED." + updatehealth() + + if(75 to 100) + radiation -= 3 + adjustToxLoss(3) + updatehealth() - proc/handle_environment(datum/gas_mixture/environment) - if(!environment) - return - var/environment_heat_capacity = environment.heat_capacity() - if(istype(get_turf(src), /turf/space)) - var/turf/heat_turf = get_turf(src) - environment_heat_capacity = heat_turf.heat_capacity +/mob/living/carbon/brain/proc/handle_environment(datum/gas_mixture/environment) + if(!environment) + return + var/environment_heat_capacity = environment.heat_capacity() + if(istype(get_turf(src), /turf/space)) + var/turf/heat_turf = get_turf(src) + environment_heat_capacity = heat_turf.heat_capacity - if((environment.temperature > (T0C + 50)) || (environment.temperature < (T0C + 10))) - var/transfer_coefficient = 1 + if((environment.temperature > (T0C + 50)) || (environment.temperature < (T0C + 10))) + var/transfer_coefficient = 1 - handle_temperature_damage(HEAD, environment.temperature, environment_heat_capacity*transfer_coefficient) + handle_temperature_damage(HEAD, environment.temperature, environment_heat_capacity*transfer_coefficient) - if(stat==2) - bodytemperature += 0.1*(environment.temperature - bodytemperature)*environment_heat_capacity/(environment_heat_capacity + 270000) + if(stat==2) + bodytemperature += 0.1*(environment.temperature - bodytemperature)*environment_heat_capacity/(environment_heat_capacity + 270000) - //Account for massive pressure differences + //Account for massive pressure differences - return //TODO: DEFERRED + return //TODO: DEFERRED - proc/handle_temperature_damage(body_part, exposed_temperature, exposed_intensity) - if(status_flags & GODMODE) return +/mob/living/carbon/brain/proc/handle_temperature_damage(body_part, exposed_temperature, exposed_intensity) + if(status_flags & GODMODE) return - if(exposed_temperature > bodytemperature) - var/discomfort = min( abs(exposed_temperature - bodytemperature)*(exposed_intensity)/2000000, 1.0) - //adjustFireLoss(2.5*discomfort) - //adjustFireLoss(5.0*discomfort) - adjustFireLoss(20.0*discomfort) + if(exposed_temperature > bodytemperature) + var/discomfort = min( abs(exposed_temperature - bodytemperature)*(exposed_intensity)/2000000, 1.0) + //adjustFireLoss(2.5*discomfort) + //adjustFireLoss(5.0*discomfort) + adjustFireLoss(20.0*discomfort) - else - var/discomfort = min( abs(exposed_temperature - bodytemperature)*(exposed_intensity)/2000000, 1.0) - //adjustFireLoss(2.5*discomfort) - adjustFireLoss(5.0*discomfort) + else + var/discomfort = min( abs(exposed_temperature - bodytemperature)*(exposed_intensity)/2000000, 1.0) + //adjustFireLoss(2.5*discomfort) + adjustFireLoss(5.0*discomfort) - proc/handle_chemicals_in_body() +/mob/living/carbon/brain/proc/handle_chemicals_in_body() - if(reagents) reagents.metabolize(src) + if(reagents) reagents.metabolize(src) - confused = max(0, confused - 1) - // decrement dizziness counter, clamped to 0 - if(resting) - dizziness = max(0, dizziness - 5) - else - dizziness = max(0, dizziness - 1) + confused = max(0, confused - 1) + // decrement dizziness counter, clamped to 0 + if(resting) + dizziness = max(0, dizziness - 5) + else + dizziness = max(0, dizziness - 1) - updatehealth() + updatehealth() - return //TODO: DEFERRED + return //TODO: DEFERRED - proc/handle_regular_status_updates() //TODO: comment out the unused bits >_> - updatehealth() +/mob/living/carbon/brain/proc/handle_regular_status_updates() //TODO: comment out the unused bits >_> + updatehealth() - if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP + if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP + blinded = 1 + silent = 0 + else //ALIVE. LIGHTS ARE ON + if( !container && (health < config.health_threshold_dead || ((world.time - timeofhostdeath) > config.revival_brain_life)) ) + death() blinded = 1 silent = 0 - else //ALIVE. LIGHTS ARE ON - if( !container && (health < config.health_threshold_dead || ((world.time - timeofhostdeath) > config.revival_brain_life)) ) - death() - blinded = 1 - silent = 0 - return 1 + return 1 - //Handling EMP effect in the Life(), it's made VERY simply, and has some additional effects handled elsewhere - if(emp_damage) //This is pretty much a damage type only used by MMIs, dished out by the emp_act - if(!(container && istype(container, /obj/item/device/mmi))) - emp_damage = 0 - else - emp_damage = round(emp_damage,1)//Let's have some nice numbers to work with - switch(emp_damage) - if(31 to INFINITY) - emp_damage = 30//Let's not overdo it - if(21 to 30)//High level of EMP damage, unable to see, hear, or speak - eye_blind = 1 - blinded = 1 - ear_deaf = 1 - silent = 1 - if(!alert)//Sounds an alarm, but only once per 'level' - emote("alarm") - src << "\red Major electrical distruption detected: System rebooting." - alert = 1 - if(prob(75)) - emp_damage -= 1 - if(20) - alert = 0 - blinded = 0 - eye_blind = 0 - ear_deaf = 0 - silent = 0 - emp_damage -= 1 - if(11 to 19)//Moderate level of EMP damage, resulting in nearsightedness and ear damage - eye_blurry = 1 - ear_damage = 1 - if(!alert) - emote("alert") - src << "\red Primary systems are now online." - alert = 1 - if(prob(50)) - emp_damage -= 1 - if(10) - alert = 0 - eye_blurry = 0 - ear_damage = 0 - emp_damage -= 1 - if(2 to 9)//Low level of EMP damage, has few effects(handled elsewhere) - if(!alert) - emote("notice") - src << "\red System reboot nearly complete." - alert = 1 - if(prob(25)) - emp_damage -= 1 - if(1) - alert = 0 - src << "\red All systems restored." - emp_damage -= 1 - - //Other - /* commented out because none of these should happen - if(stunned) - AdjustStunned(-1) - - if(weakened) - weakened = max(weakened-1,0) - - if(stuttering) - stuttering = max(stuttering-1, 0) - - if(silent) - silent = max(silent-1, 0) - - if(druggy) - druggy = max(druggy-1, 0) - */ - return 1 - - - proc/handle_regular_hud_updates() - - if (stat == 2 || (XRAY in src.mutations)) - sight |= SEE_TURFS - sight |= SEE_MOBS - sight |= SEE_OBJS - see_in_dark = 8 - see_invisible = SEE_INVISIBLE_LEVEL_TWO - else if (stat != 2) - sight &= ~SEE_TURFS - sight &= ~SEE_MOBS - sight &= ~SEE_OBJS - see_in_dark = 2 - see_invisible = SEE_INVISIBLE_LIVING - if(see_override) - see_invisible = see_override - - if (healths) - if (stat != 2) - switch(health) - if(100 to INFINITY) - healths.icon_state = "health0" - if(80 to 100) - healths.icon_state = "health1" - if(60 to 80) - healths.icon_state = "health2" - if(40 to 60) - healths.icon_state = "health3" - if(20 to 40) - healths.icon_state = "health4" - if(0 to 20) - healths.icon_state = "health5" - else - healths.icon_state = "health6" + //Handling EMP effect in the Life(), it's made VERY simply, and has some additional effects handled elsewhere + if(emp_damage) //This is pretty much a damage type only used by MMIs, dished out by the emp_act + if(!(container && istype(container, /obj/item/device/mmi))) + emp_damage = 0 else - healths.icon_state = "health7" + emp_damage = round(emp_damage,1)//Let's have some nice numbers to work with + switch(emp_damage) + if(31 to INFINITY) + emp_damage = 30//Let's not overdo it + if(21 to 30)//High level of EMP damage, unable to see, hear, or speak + eye_blind = 1 + blinded = 1 + ear_deaf = 1 + silent = 1 + if(!alert)//Sounds an alarm, but only once per 'level' + emote("alarm") + src << "\red Major electrical distruption detected: System rebooting." + alert = 1 + if(prob(75)) + emp_damage -= 1 + if(20) + alert = 0 + blinded = 0 + eye_blind = 0 + ear_deaf = 0 + silent = 0 + emp_damage -= 1 + if(11 to 19)//Moderate level of EMP damage, resulting in nearsightedness and ear damage + eye_blurry = 1 + ear_damage = 1 + if(!alert) + emote("alert") + src << "\red Primary systems are now online." + alert = 1 + if(prob(50)) + emp_damage -= 1 + if(10) + alert = 0 + eye_blurry = 0 + ear_damage = 0 + emp_damage -= 1 + if(2 to 9)//Low level of EMP damage, has few effects(handled elsewhere) + if(!alert) + emote("notice") + src << "\red System reboot nearly complete." + alert = 1 + if(prob(25)) + emp_damage -= 1 + if(1) + alert = 0 + src << "\red All systems restored." + emp_damage -= 1 - if(pullin) pullin.icon_state = "pull[pulling ? 1 : 0]" + //Other + /* commented out because none of these should happen + if(stunned) + AdjustStunned(-1) - client.screen.Remove(global_hud.blurry,global_hud.druggy,global_hud.vimpaired) + if(weakened) + weakened = max(weakened-1,0) - if ((blind && stat != 2)) - if ((blinded)) - blind.layer = 18 - else - blind.layer = 0 + if(stuttering) + stuttering = max(stuttering-1, 0) - if (disabilities & NEARSIGHTED) - client.screen += global_hud.vimpaired + if(silent) + silent = max(silent-1, 0) - if (eye_blurry) - client.screen += global_hud.blurry + if(druggy) + druggy = max(druggy-1, 0) + */ + return 1 - if (druggy) - client.screen += global_hud.druggy +/mob/living/carbon/brain/proc/handle_regular_hud_updates() + + if (stat == 2 || (XRAY in src.mutations)) + sight |= SEE_TURFS + sight |= SEE_MOBS + sight |= SEE_OBJS + see_in_dark = 8 + see_invisible = SEE_INVISIBLE_LEVEL_TWO + else if (stat != 2) + sight &= ~SEE_TURFS + sight &= ~SEE_MOBS + sight &= ~SEE_OBJS + see_in_dark = 2 + see_invisible = SEE_INVISIBLE_LIVING + if(see_override) + see_invisible = see_override + + if (healths) if (stat != 2) - if (machine) - if (!( machine.check_eye(src) )) - reset_view(null) - else - if(!client.adminobs) - reset_view(null) + switch(health) + if(100 to INFINITY) + healths.icon_state = "health0" + if(80 to 100) + healths.icon_state = "health1" + if(60 to 80) + healths.icon_state = "health2" + if(40 to 60) + healths.icon_state = "health3" + if(20 to 40) + healths.icon_state = "health4" + if(0 to 20) + healths.icon_state = "health5" + else + healths.icon_state = "health6" + else + healths.icon_state = "health7" - return 1 + if(pullin) pullin.icon_state = "pull[pulling ? 1 : 0]" + + client.screen.Remove(global_hud.blurry,global_hud.druggy,global_hud.vimpaired) + + if ((blind && stat != 2)) + if ((blinded)) + blind.layer = 18 + else + blind.layer = 0 + + if (disabilities & NEARSIGHTED) + client.screen += global_hud.vimpaired + + if (eye_blurry) + client.screen += global_hud.blurry + + if (druggy) + client.screen += global_hud.druggy + + if (stat != 2) + if (machine) + if (!( machine.check_eye(src) )) + reset_view(null) + else + if(!client.adminobs) + reset_view(null) + + return 1 /*/mob/living/carbon/brain/emp_act(severity) @@ -283,4 +282,4 @@ emp_damage += rand(10,20) if(3) emp_damage += rand(0,10) - ..()*/ \ No newline at end of file + ..()*/ diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index f2dfb348f29..238ea92e612 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -420,7 +420,7 @@ /mob/living/carbon/Topic(href, href_list) ..() //strip panel - if(!usr.stat && usr.canmove && !usr.restrained() && in_range(src, usr)) + if(canUseTopic(src, BE_CLOSE, NO_DEXTERY)) if(href_list["internal"]) var/slot = text2num(href_list["internal"]) var/obj/item/ITEM = get_item_by_slot(slot) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 6cdcc417ba5..7a5624ce031 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -403,7 +403,7 @@ /mob/living/carbon/human/Topic(href, href_list) - if(!usr.stat && usr.canmove && !usr.restrained() && Adjacent(usr)) + if(canUseTopic(src, BE_CLOSE, NO_DEXTERY)) if(href_list["item"]) var/slot = text2num(href_list["item"]) if(slot in check_obscured_slots()) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 5af4af3c12c..58d70c745ec 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -124,70 +124,68 @@ return ONE_ATMOSPHERE - pressure_difference -/mob/living/carbon/human - - proc/handle_disabilities() - if (disabilities & EPILEPSY) - if ((prob(1) && paralysis < 1)) - src << "\red You have a seizure!" - for(var/mob/O in viewers(src, null)) - if(O == src) - continue - O.show_message(text("\red [src] starts having a seizure!"), 1) - Paralyse(10) - Jitter(1000) - if (disabilities & COUGHING) - if ((prob(5) && paralysis <= 1)) - drop_item() - emote("cough") - if (disabilities & TOURETTES) - if ((prob(10) && paralysis <= 1)) - Stun(10) - switch(rand(1, 3)) - if(1) - emote("twitch") - if(2 to 3) - say("[prob(50) ? ";" : ""][pick("SHIT", "PISS", "FUCK", "CUNT", "COCKSUCKER", "MOTHERFUCKER", "TITS")]") - var/x_offset = pixel_x + rand(-2,2) //Should probably be moved into the twitch emote at some point. - var/y_offset = pixel_y + rand(-1,1) - animate(src, pixel_x = pixel_x + x_offset, pixel_y = pixel_y + y_offset, time = 1) - animate(pixel_x = pixel_x - x_offset, pixel_y = pixel_y - y_offset, time = 1) - if (disabilities & NERVOUS) - if (prob(10)) - stuttering = max(10, stuttering) - if (getBrainLoss() >= 60 && stat != 2) - if (prob(3)) - switch(pick(1,2,3)) - if(1) - say(pick("IM A PONY NEEEEEEIIIIIIIIIGH", "without oxigen blob don't evoluate?", "CAPTAINS A COMDOM", "[pick("", "that faggot traitor")] [pick("joerge", "george", "gorge", "gdoruge")] [pick("mellens", "melons", "mwrlins")] is grifing me HAL;P!!!", "can u give me [pick("telikesis","halk","eppilapse")]?", "THe saiyans screwed", "Bi is THE BEST OF BOTH WORLDS>", "I WANNA PET TEH monkeyS", "stop grifing me!!!!", "SOTP IT#")) - if(2) - say(pick("FUS RO DAH","fucking 4rries!", "stat me", ">my face", "roll it easy!", "waaaaaagh!!!", "red wonz go fasta", "FOR TEH EMPRAH", "lol2cat", "dem dwarfs man, dem dwarfs", "SPESS MAHREENS", "hwee did eet fhor khayosss", "lifelike texture ;_;", "luv can bloooom", "PACKETS!!!")) - if(3) - emote("drool") +/mob/living/carbon/human/proc/handle_disabilities() + if (disabilities & EPILEPSY) + if ((prob(1) && paralysis < 1)) + src << "\red You have a seizure!" + for(var/mob/O in viewers(src, null)) + if(O == src) + continue + O.show_message(text("\red [src] starts having a seizure!"), 1) + Paralyse(10) + Jitter(1000) + if (disabilities & COUGHING) + if ((prob(5) && paralysis <= 1)) + drop_item() + emote("cough") + if (disabilities & TOURETTES) + if ((prob(10) && paralysis <= 1)) + Stun(10) + switch(rand(1, 3)) + if(1) + emote("twitch") + if(2 to 3) + say("[prob(50) ? ";" : ""][pick("SHIT", "PISS", "FUCK", "CUNT", "COCKSUCKER", "MOTHERFUCKER", "TITS")]") + var/x_offset = pixel_x + rand(-2,2) //Should probably be moved into the twitch emote at some point. + var/y_offset = pixel_y + rand(-1,1) + animate(src, pixel_x = pixel_x + x_offset, pixel_y = pixel_y + y_offset, time = 1) + animate(pixel_x = pixel_x - x_offset, pixel_y = pixel_y - y_offset, time = 1) + if (disabilities & NERVOUS) + if (prob(10)) + stuttering = max(10, stuttering) + if (getBrainLoss() >= 60 && stat != 2) + if (prob(3)) + switch(pick(1,2,3)) + if(1) + say(pick("IM A PONY NEEEEEEIIIIIIIIIGH", "without oxigen blob don't evoluate?", "CAPTAINS A COMDOM", "[pick("", "that faggot traitor")] [pick("joerge", "george", "gorge", "gdoruge")] [pick("mellens", "melons", "mwrlins")] is grifing me HAL;P!!!", "can u give me [pick("telikesis","halk","eppilapse")]?", "THe saiyans screwed", "Bi is THE BEST OF BOTH WORLDS>", "I WANNA PET TEH monkeyS", "stop grifing me!!!!", "SOTP IT#")) + if(2) + say(pick("FUS RO DAH","fucking 4rries!", "stat me", ">my face", "roll it easy!", "waaaaaagh!!!", "red wonz go fasta", "FOR TEH EMPRAH", "lol2cat", "dem dwarfs man, dem dwarfs", "SPESS MAHREENS", "hwee did eet fhor khayosss", "lifelike texture ;_;", "luv can bloooom", "PACKETS!!!")) + if(3) + emote("drool") - proc/handle_mutations_and_radiation() - if(dna) - dna.species.handle_mutations_and_radiation(src) +/mob/living/carbon/human/proc/handle_mutations_and_radiation() + if(dna) + dna.species.handle_mutations_and_radiation(src) - proc/breathe() - if(dna) - dna.species.breathe(src) +/mob/living/carbon/human/proc/breathe() + if(dna) + dna.species.breathe(src) - return + return - proc/get_breath_from_internal(volume_needed) +/mob/living/carbon/human/proc/get_breath_from_internal(volume_needed) + if(internal) + if (!contents.Find(internal)) + internal = null + if (!wear_mask || !(wear_mask.flags & MASKINTERNALS) ) + internal = null if(internal) - if (!contents.Find(internal)) - internal = null - if (!wear_mask || !(wear_mask.flags & MASKINTERNALS) ) - internal = null - if(internal) - return internal.remove_air_volume(volume_needed) - else if(internals) - internals.icon_state = "internal0" - return null + return internal.remove_air_volume(volume_needed) + else if(internals) + internals.icon_state = "internal0" + return null /*proc/handle_breath(datum/gas_mixture/breath) @@ -199,349 +197,357 @@ return 1*/ - proc/handle_environment(datum/gas_mixture/environment) - if(dna) - dna.species.handle_environment(environment, src) +/mob/living/carbon/human/proc/handle_environment(datum/gas_mixture/environment) + if(dna) + dna.species.handle_environment(environment, src) - return + return ///FIRE CODE - handle_fire() - if(dna) - dna.species.handle_fire(src) +/mob/living/carbon/human/handle_fire() + if(dna) + dna.species.handle_fire(src) - if(..()) - return - var/thermal_protection = get_heat_protection(30000) //If you don't have fire suit level protection, you get a temperature increase - if((1 - thermal_protection) > 0.0001) - bodytemperature += BODYTEMP_HEATING_MAX + if(..()) return + var/thermal_protection = get_heat_protection(30000) //If you don't have fire suit level protection, you get a temperature increase + if((1 - thermal_protection) > 0.0001) + bodytemperature += BODYTEMP_HEATING_MAX + return - IgniteMob() - if(dna) - dna.species.IgniteMob(src) - else - ..() +/mob/living/carbon/human/IgniteMob() + if(dna) + dna.species.IgniteMob(src) + else + ..() - ExtinguishMob() - if(dna) - dna.species.ExtinguishMob(src) - else - ..() +/mob/living/carbon/human/ExtinguishMob() + if(dna) + dna.species.ExtinguishMob(src) + else + ..() //END FIRE CODE /* - proc/adjust_body_temperature(current, loc_temp, boost) - var/temperature = current - var/difference = abs(current-loc_temp) //get difference - var/increments// = difference/10 //find how many increments apart they are - if(difference > 50) - increments = difference/5 - else - increments = difference/10 - var/change = increments*boost // Get the amount to change by (x per increment) - var/temp_change - if(current < loc_temp) - temperature = min(loc_temp, temperature+change) - else if(current > loc_temp) - temperature = max(loc_temp, temperature-change) - temp_change = (temperature - current) - return temp_change - */ +/mob/living/carbon/human/proc/adjust_body_temperature(current, loc_temp, boost) + var/temperature = current + var/difference = abs(current-loc_temp) //get difference + var/increments// = difference/10 //find how many increments apart they are + if(difference > 50) + increments = difference/5 + else + increments = difference/10 + var/change = increments*boost // Get the amount to change by (x per increment) + var/temp_change + if(current < loc_temp) + temperature = min(loc_temp, temperature+change) + else if(current > loc_temp) + temperature = max(loc_temp, temperature-change) + temp_change = (temperature - current) + return temp_change +*/ - proc/stabilize_temperature_from_calories() - switch(bodytemperature) - if(-INFINITY to 260.15) //260.15 is 310.15 - 50, the temperature where you start to feel effects. - if(nutrition >= 2) //If we are very, very cold we'll use up quite a bit of nutriment to heat us up. - nutrition -= 2 - var/body_temperature_difference = 310.15 - bodytemperature - bodytemperature += max((body_temperature_difference / BODYTEMP_AUTORECOVERY_DIVISOR), BODYTEMP_AUTORECOVERY_MINIMUM) - if(260.15 to 360.15) - var/body_temperature_difference = 310.15 - bodytemperature - bodytemperature += body_temperature_difference / BODYTEMP_AUTORECOVERY_DIVISOR - if(360.15 to INFINITY) //360.15 is 310.15 + 50, the temperature where you start to feel effects. - //We totally need a sweat system cause it totally makes sense...~ - var/body_temperature_difference = 310.15 - bodytemperature - bodytemperature += min((body_temperature_difference / BODYTEMP_AUTORECOVERY_DIVISOR), -BODYTEMP_AUTORECOVERY_MINIMUM) //We're dealing with negative numbers +/mob/living/carbon/human/proc/stabilize_temperature_from_calories() + switch(bodytemperature) + if(-INFINITY to 260.15) //260.15 is 310.15 - 50, the temperature where you start to feel effects. + if(nutrition >= 2) //If we are very, very cold we'll use up quite a bit of nutriment to heat us up. + nutrition -= 2 + var/body_temperature_difference = 310.15 - bodytemperature + bodytemperature += max((body_temperature_difference / BODYTEMP_AUTORECOVERY_DIVISOR), BODYTEMP_AUTORECOVERY_MINIMUM) + if(260.15 to 360.15) + var/body_temperature_difference = 310.15 - bodytemperature + bodytemperature += body_temperature_difference / BODYTEMP_AUTORECOVERY_DIVISOR + if(360.15 to INFINITY) //360.15 is 310.15 + 50, the temperature where you start to feel effects. + //We totally need a sweat system cause it totally makes sense...~ + var/body_temperature_difference = 310.15 - bodytemperature + bodytemperature += min((body_temperature_difference / BODYTEMP_AUTORECOVERY_DIVISOR), -BODYTEMP_AUTORECOVERY_MINIMUM) //We're dealing with negative numbers - //This proc returns a number made up of the flags for body parts which you are protected on. (such as HEAD, CHEST, GROIN, etc. See setup.dm for the full list) - proc/get_heat_protection_flags(temperature) //Temperature is the temperature you're being exposed to. - var/thermal_protection_flags = 0 - //Handle normal clothing - if(head) - if(head.max_heat_protection_temperature && head.max_heat_protection_temperature >= temperature) - thermal_protection_flags |= head.heat_protection - if(wear_suit) - if(wear_suit.max_heat_protection_temperature && wear_suit.max_heat_protection_temperature >= temperature) - thermal_protection_flags |= wear_suit.heat_protection - if(w_uniform) - if(w_uniform.max_heat_protection_temperature && w_uniform.max_heat_protection_temperature >= temperature) - thermal_protection_flags |= w_uniform.heat_protection - if(shoes) - if(shoes.max_heat_protection_temperature && shoes.max_heat_protection_temperature >= temperature) - thermal_protection_flags |= shoes.heat_protection - if(gloves) - if(gloves.max_heat_protection_temperature && gloves.max_heat_protection_temperature >= temperature) - thermal_protection_flags |= gloves.heat_protection - if(wear_mask) - if(wear_mask.max_heat_protection_temperature && wear_mask.max_heat_protection_temperature >= temperature) - thermal_protection_flags |= wear_mask.heat_protection +//This proc returns a number made up of the flags for body parts which you are protected on. (such as HEAD, CHEST, GROIN, etc. See setup.dm for the full list) +/mob/living/carbon/human/proc/get_heat_protection_flags(temperature) //Temperature is the temperature you're being exposed to. + var/thermal_protection_flags = 0 + //Handle normal clothing + if(head) + if(head.max_heat_protection_temperature && head.max_heat_protection_temperature >= temperature) + thermal_protection_flags |= head.heat_protection + if(wear_suit) + if(wear_suit.max_heat_protection_temperature && wear_suit.max_heat_protection_temperature >= temperature) + thermal_protection_flags |= wear_suit.heat_protection + if(w_uniform) + if(w_uniform.max_heat_protection_temperature && w_uniform.max_heat_protection_temperature >= temperature) + thermal_protection_flags |= w_uniform.heat_protection + if(shoes) + if(shoes.max_heat_protection_temperature && shoes.max_heat_protection_temperature >= temperature) + thermal_protection_flags |= shoes.heat_protection + if(gloves) + if(gloves.max_heat_protection_temperature && gloves.max_heat_protection_temperature >= temperature) + thermal_protection_flags |= gloves.heat_protection + if(wear_mask) + if(wear_mask.max_heat_protection_temperature && wear_mask.max_heat_protection_temperature >= temperature) + thermal_protection_flags |= wear_mask.heat_protection - return thermal_protection_flags + return thermal_protection_flags - proc/get_heat_protection(temperature) //Temperature is the temperature you're being exposed to. - var/thermal_protection_flags = get_heat_protection_flags(temperature) +/mob/living/carbon/human/proc/get_heat_protection(temperature) //Temperature is the temperature you're being exposed to. + var/thermal_protection_flags = get_heat_protection_flags(temperature) - var/thermal_protection = 0.0 - if(thermal_protection_flags) - if(thermal_protection_flags & HEAD) - thermal_protection += THERMAL_PROTECTION_HEAD - if(thermal_protection_flags & CHEST) - thermal_protection += THERMAL_PROTECTION_CHEST - if(thermal_protection_flags & GROIN) - thermal_protection += THERMAL_PROTECTION_GROIN - if(thermal_protection_flags & LEG_LEFT) - thermal_protection += THERMAL_PROTECTION_LEG_LEFT - if(thermal_protection_flags & LEG_RIGHT) - thermal_protection += THERMAL_PROTECTION_LEG_RIGHT - if(thermal_protection_flags & FOOT_LEFT) - thermal_protection += THERMAL_PROTECTION_FOOT_LEFT - if(thermal_protection_flags & FOOT_RIGHT) - thermal_protection += THERMAL_PROTECTION_FOOT_RIGHT - if(thermal_protection_flags & ARM_LEFT) - thermal_protection += THERMAL_PROTECTION_ARM_LEFT - if(thermal_protection_flags & ARM_RIGHT) - thermal_protection += THERMAL_PROTECTION_ARM_RIGHT - if(thermal_protection_flags & HAND_LEFT) - thermal_protection += THERMAL_PROTECTION_HAND_LEFT - if(thermal_protection_flags & HAND_RIGHT) - thermal_protection += THERMAL_PROTECTION_HAND_RIGHT + var/thermal_protection = 0.0 + if(thermal_protection_flags) + if(thermal_protection_flags & HEAD) + thermal_protection += THERMAL_PROTECTION_HEAD + if(thermal_protection_flags & CHEST) + thermal_protection += THERMAL_PROTECTION_CHEST + if(thermal_protection_flags & GROIN) + thermal_protection += THERMAL_PROTECTION_GROIN + if(thermal_protection_flags & LEG_LEFT) + thermal_protection += THERMAL_PROTECTION_LEG_LEFT + if(thermal_protection_flags & LEG_RIGHT) + thermal_protection += THERMAL_PROTECTION_LEG_RIGHT + if(thermal_protection_flags & FOOT_LEFT) + thermal_protection += THERMAL_PROTECTION_FOOT_LEFT + if(thermal_protection_flags & FOOT_RIGHT) + thermal_protection += THERMAL_PROTECTION_FOOT_RIGHT + if(thermal_protection_flags & ARM_LEFT) + thermal_protection += THERMAL_PROTECTION_ARM_LEFT + if(thermal_protection_flags & ARM_RIGHT) + thermal_protection += THERMAL_PROTECTION_ARM_RIGHT + if(thermal_protection_flags & HAND_LEFT) + thermal_protection += THERMAL_PROTECTION_HAND_LEFT + if(thermal_protection_flags & HAND_RIGHT) + thermal_protection += THERMAL_PROTECTION_HAND_RIGHT - return min(1,thermal_protection) + return min(1,thermal_protection) - //See proc/get_heat_protection_flags(temperature) for the description of this proc. - proc/get_cold_protection_flags(temperature) - var/thermal_protection_flags = 0 - //Handle normal clothing +//See proc/get_heat_protection_flags(temperature) for the description of this proc. +/mob/living/carbon/human/proc/get_cold_protection_flags(temperature) + var/thermal_protection_flags = 0 + //Handle normal clothing - if(head) - if(head.min_cold_protection_temperature && head.min_cold_protection_temperature <= temperature) - thermal_protection_flags |= head.cold_protection - if(wear_suit) - if(wear_suit.min_cold_protection_temperature && wear_suit.min_cold_protection_temperature <= temperature) - thermal_protection_flags |= wear_suit.cold_protection - if(w_uniform) - if(w_uniform.min_cold_protection_temperature && w_uniform.min_cold_protection_temperature <= temperature) - thermal_protection_flags |= w_uniform.cold_protection - if(shoes) - if(shoes.min_cold_protection_temperature && shoes.min_cold_protection_temperature <= temperature) - thermal_protection_flags |= shoes.cold_protection - if(gloves) - if(gloves.min_cold_protection_temperature && gloves.min_cold_protection_temperature <= temperature) - thermal_protection_flags |= gloves.cold_protection - if(wear_mask) - if(wear_mask.min_cold_protection_temperature && wear_mask.min_cold_protection_temperature <= temperature) - thermal_protection_flags |= wear_mask.cold_protection + if(head) + if(head.min_cold_protection_temperature && head.min_cold_protection_temperature <= temperature) + thermal_protection_flags |= head.cold_protection + if(wear_suit) + if(wear_suit.min_cold_protection_temperature && wear_suit.min_cold_protection_temperature <= temperature) + thermal_protection_flags |= wear_suit.cold_protection + if(w_uniform) + if(w_uniform.min_cold_protection_temperature && w_uniform.min_cold_protection_temperature <= temperature) + thermal_protection_flags |= w_uniform.cold_protection + if(shoes) + if(shoes.min_cold_protection_temperature && shoes.min_cold_protection_temperature <= temperature) + thermal_protection_flags |= shoes.cold_protection + if(gloves) + if(gloves.min_cold_protection_temperature && gloves.min_cold_protection_temperature <= temperature) + thermal_protection_flags |= gloves.cold_protection + if(wear_mask) + if(wear_mask.min_cold_protection_temperature && wear_mask.min_cold_protection_temperature <= temperature) + thermal_protection_flags |= wear_mask.cold_protection - return thermal_protection_flags + return thermal_protection_flags - proc/get_cold_protection(temperature) +/mob/living/carbon/human/proc/get_cold_protection(temperature) - if(COLD_RESISTANCE in mutations) - return 1 //Fully protected from the cold. + if(COLD_RESISTANCE in mutations) + return 1 //Fully protected from the cold. - if(dna && COLDRES in dna.species.specflags) - return 1 + if(dna && COLDRES in dna.species.specflags) + return 1 - temperature = max(temperature, 2.7) //There is an occasional bug where the temperature is miscalculated in ares with a small amount of gas on them, so this is necessary to ensure that that bug does not affect this calculation. Space's temperature is 2.7K and most suits that are intended to protect against any cold, protect down to 2.0K. - var/thermal_protection_flags = get_cold_protection_flags(temperature) + temperature = max(temperature, 2.7) //There is an occasional bug where the temperature is miscalculated in ares with a small amount of gas on them, so this is necessary to ensure that that bug does not affect this calculation. Space's temperature is 2.7K and most suits that are intended to protect against any cold, protect down to 2.0K. + var/thermal_protection_flags = get_cold_protection_flags(temperature) - var/thermal_protection = 0.0 - if(thermal_protection_flags) - if(thermal_protection_flags & HEAD) - thermal_protection += THERMAL_PROTECTION_HEAD - if(thermal_protection_flags & CHEST) - thermal_protection += THERMAL_PROTECTION_CHEST - if(thermal_protection_flags & GROIN) - thermal_protection += THERMAL_PROTECTION_GROIN - if(thermal_protection_flags & LEG_LEFT) - thermal_protection += THERMAL_PROTECTION_LEG_LEFT - if(thermal_protection_flags & LEG_RIGHT) - thermal_protection += THERMAL_PROTECTION_LEG_RIGHT - if(thermal_protection_flags & FOOT_LEFT) - thermal_protection += THERMAL_PROTECTION_FOOT_LEFT - if(thermal_protection_flags & FOOT_RIGHT) - thermal_protection += THERMAL_PROTECTION_FOOT_RIGHT - if(thermal_protection_flags & ARM_LEFT) - thermal_protection += THERMAL_PROTECTION_ARM_LEFT - if(thermal_protection_flags & ARM_RIGHT) - thermal_protection += THERMAL_PROTECTION_ARM_RIGHT - if(thermal_protection_flags & HAND_LEFT) - thermal_protection += THERMAL_PROTECTION_HAND_LEFT - if(thermal_protection_flags & HAND_RIGHT) - thermal_protection += THERMAL_PROTECTION_HAND_RIGHT + var/thermal_protection = 0.0 + if(thermal_protection_flags) + if(thermal_protection_flags & HEAD) + thermal_protection += THERMAL_PROTECTION_HEAD + if(thermal_protection_flags & CHEST) + thermal_protection += THERMAL_PROTECTION_CHEST + if(thermal_protection_flags & GROIN) + thermal_protection += THERMAL_PROTECTION_GROIN + if(thermal_protection_flags & LEG_LEFT) + thermal_protection += THERMAL_PROTECTION_LEG_LEFT + if(thermal_protection_flags & LEG_RIGHT) + thermal_protection += THERMAL_PROTECTION_LEG_RIGHT + if(thermal_protection_flags & FOOT_LEFT) + thermal_protection += THERMAL_PROTECTION_FOOT_LEFT + if(thermal_protection_flags & FOOT_RIGHT) + thermal_protection += THERMAL_PROTECTION_FOOT_RIGHT + if(thermal_protection_flags & ARM_LEFT) + thermal_protection += THERMAL_PROTECTION_ARM_LEFT + if(thermal_protection_flags & ARM_RIGHT) + thermal_protection += THERMAL_PROTECTION_ARM_RIGHT + if(thermal_protection_flags & HAND_LEFT) + thermal_protection += THERMAL_PROTECTION_HAND_LEFT + if(thermal_protection_flags & HAND_RIGHT) + thermal_protection += THERMAL_PROTECTION_HAND_RIGHT - return min(1,thermal_protection) + return min(1,thermal_protection) - /* - proc/add_fire_protection(var/temp) - var/fire_prot = 0 - if(head) - if(head.protective_temperature > temp) - fire_prot += (head.protective_temperature/10) - if(wear_mask) - if(wear_mask.protective_temperature > temp) - fire_prot += (wear_mask.protective_temperature/10) - if(glasses) - if(glasses.protective_temperature > temp) - fire_prot += (glasses.protective_temperature/10) - if(ears) - if(ears.protective_temperature > temp) - fire_prot += (ears.protective_temperature/10) - if(wear_suit) - if(wear_suit.protective_temperature > temp) - fire_prot += (wear_suit.protective_temperature/10) - if(w_uniform) - if(w_uniform.protective_temperature > temp) - fire_prot += (w_uniform.protective_temperature/10) - if(gloves) - if(gloves.protective_temperature > temp) - fire_prot += (gloves.protective_temperature/10) - if(shoes) - if(shoes.protective_temperature > temp) - fire_prot += (shoes.protective_temperature/10) +/* +/mob/living/carbon/human/proc/add_fire_protection(var/temp) + var/fire_prot = 0 + if(head) + if(head.protective_temperature > temp) + fire_prot += (head.protective_temperature/10) + if(wear_mask) + if(wear_mask.protective_temperature > temp) + fire_prot += (wear_mask.protective_temperature/10) + if(glasses) + if(glasses.protective_temperature > temp) + fire_prot += (glasses.protective_temperature/10) + if(ears) + if(ears.protective_temperature > temp) + fire_prot += (ears.protective_temperature/10) + if(wear_suit) + if(wear_suit.protective_temperature > temp) + fire_prot += (wear_suit.protective_temperature/10) + if(w_uniform) + if(w_uniform.protective_temperature > temp) + fire_prot += (w_uniform.protective_temperature/10) + if(gloves) + if(gloves.protective_temperature > temp) + fire_prot += (gloves.protective_temperature/10) + if(shoes) + if(shoes.protective_temperature > temp) + fire_prot += (shoes.protective_temperature/10) - return fire_prot + return fire_prot - proc/handle_temperature_damage(body_part, exposed_temperature, exposed_intensity) - if(nodamage) - return - //world <<"body_part = [body_part], exposed_temperature = [exposed_temperature], exposed_intensity = [exposed_intensity]" - var/discomfort = min(abs(exposed_temperature - bodytemperature)*(exposed_intensity)/2000000, 1.0) +/mob/living/carbon/human/proc/handle_temperature_damage(body_part, exposed_temperature, exposed_intensity) + if(nodamage) + return + //world <<"body_part = [body_part], exposed_temperature = [exposed_temperature], exposed_intensity = [exposed_intensity]" + var/discomfort = min(abs(exposed_temperature - bodytemperature)*(exposed_intensity)/2000000, 1.0) - if(exposed_temperature > bodytemperature) - discomfort *= 4 + if(exposed_temperature > bodytemperature) + discomfort *= 4 - if(mutantrace == "plant") - discomfort *= TEMPERATURE_DAMAGE_COEFFICIENT * 2 //I don't like magic numbers. I'll make mutantraces a datum with vars sometime later. -- Urist - else - discomfort *= TEMPERATURE_DAMAGE_COEFFICIENT //Dangercon 2011 - now with less magic numbers! - //world <<"[discomfort]" + if(mutantrace == "plant") + discomfort *= TEMPERATURE_DAMAGE_COEFFICIENT * 2 //I don't like magic numbers. I'll make mutantraces a datum with vars sometime later. -- Urist + else + discomfort *= TEMPERATURE_DAMAGE_COEFFICIENT //Dangercon 2011 - now with less magic numbers! + //world <<"[discomfort]" - switch(body_part) - if(HEAD) - apply_damage(2.5*discomfort, BURN, "head") - if(CHEST) - apply_damage(2.5*discomfort, BURN, "chest") - if(LEGS) - apply_damage(0.6*discomfort, BURN, "l_leg") - apply_damage(0.6*discomfort, BURN, "r_leg") - if(ARMS) - apply_damage(0.4*discomfort, BURN, "l_arm") - apply_damage(0.4*discomfort, BURN, "r_arm") - */ + switch(body_part) + if(HEAD) + apply_damage(2.5*discomfort, BURN, "head") + if(CHEST) + apply_damage(2.5*discomfort, BURN, "chest") + if(LEGS) + apply_damage(0.6*discomfort, BURN, "l_leg") + apply_damage(0.6*discomfort, BURN, "r_leg") + if(ARMS) + apply_damage(0.4*discomfort, BURN, "l_arm") + apply_damage(0.4*discomfort, BURN, "r_arm") +*/ - proc/handle_chemicals_in_body() - if(dna) - dna.species.handle_chemicals_in_body(src) +/mob/living/carbon/human/proc/handle_chemicals_in_body() + if(dna) + dna.species.handle_chemicals_in_body(src) - return //TODO: DEFERRED + return //TODO: DEFERRED - proc/handle_regular_status_updates() - if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP +/mob/living/carbon/human/proc/handle_regular_status_updates() + if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP + blinded = 1 + silent = 0 + else //ALIVE. LIGHTS ARE ON + updatehealth() //TODO + if(health <= config.health_threshold_dead || !getorgan(/obj/item/organ/brain)) + death() blinded = 1 silent = 0 - else //ALIVE. LIGHTS ARE ON - updatehealth() //TODO - if(health <= config.health_threshold_dead || !getorgan(/obj/item/organ/brain)) - death() - blinded = 1 - silent = 0 - return 1 + return 1 - //UNCONSCIOUS. NO-ONE IS HOME - if( (getOxyLoss() > 50) || (config.health_threshold_crit >= health) ) - Paralyse(3) + //UNCONSCIOUS. NO-ONE IS HOME + if( (getOxyLoss() > 50) || (config.health_threshold_crit >= health) ) + Paralyse(3) - /* Done by handle_breath() - if( health <= 20 && prob(1) ) - spawn(0) - emote("gasp") - if(!reagents.has_reagent("inaprovaline")) - adjustOxyLoss(1)*/ + /* Done by handle_breath() + if( health <= 20 && prob(1) ) + spawn(0) + emote("gasp") + if(!reagents.has_reagent("inaprovaline")) + adjustOxyLoss(1)*/ - if(hallucination) - if(hallucination >= 20) - if(prob(3)) - fake_attack(src) - if(!handling_hal) - spawn handle_hallucinations() //The not boring kind! - - if(hallucination<=2) - hallucination = 0 - else - hallucination -= 2 + if(hallucination) + if(hallucination >= 20) + if(prob(3)) + fake_attack(src) + if(!handling_hal) + spawn handle_hallucinations() //The not boring kind! + if(hallucination<=2) + hallucination = 0 else - for(var/atom/a in hallucinations) - qdel(a) + hallucination -= 2 - if(paralysis) - AdjustParalysis(-1) - blinded = 1 - stat = UNCONSCIOUS - else if(sleeping) - handle_dreams() - adjustStaminaLoss(-10) - sleeping = max(sleeping-1, 0) - blinded = 1 - stat = UNCONSCIOUS - if( prob(10) && health && !hal_crit ) - spawn(0) - emote("snore") - //CONSCIOUS - else - stat = CONSCIOUS + else + for(var/atom/a in hallucinations) + qdel(a) - //Eyes - if(sdisabilities & BLIND) //disabled-blind, doesn't get better on its own - blinded = 1 - else if(eye_blind) //blindness, heals slowly over time - eye_blind = max(eye_blind-1,0) - blinded = 1 - else if(tinttotal >= TINT_BLIND) //covering your eyes heals blurry eyes faster - eye_blurry = max(eye_blurry-3, 0) - // blinded = 1 //now handled under /handle_regular_hud_updates() - else if(eye_blurry) //blurry eyes heal slowly - eye_blurry = max(eye_blurry-1, 0) + if(paralysis) + AdjustParalysis(-1) + blinded = 1 + stat = UNCONSCIOUS + else if(sleeping) + handle_dreams() + adjustStaminaLoss(-10) + sleeping = max(sleeping-1, 0) + blinded = 1 + stat = UNCONSCIOUS + if( prob(10) && health && !hal_crit ) + spawn(0) + emote("snore") + //CONSCIOUS + else + stat = CONSCIOUS - //Ears - if(sdisabilities & DEAF) //disabled-deaf, doesn't get better on its own - ear_deaf = max(ear_deaf, 1) - else if(istype(ears, /obj/item/clothing/ears/earmuffs)) //resting your ears with earmuffs heals ear damage faster, and slowly heals deafness - ear_damage = max(ear_damage-0.15, 0) - ear_deaf = max(ear_deaf-1, 1) - else if(ear_deaf) //deafness, heals slowly over time - ear_deaf = max(ear_deaf-1, 0) - else if(ear_damage < 25) //ear damage heals slowly under this threshold. otherwise you'll need earmuffs - ear_damage = max(ear_damage-0.05, 0) + //Eyes + if(sdisabilities & BLIND) //disabled-blind, doesn't get better on its own + blinded = 1 + else if(eye_blind) //blindness, heals slowly over time + eye_blind = max(eye_blind-1,0) + blinded = 1 + else if(tinttotal >= TINT_BLIND) //covering your eyes heals blurry eyes faster + eye_blurry = max(eye_blurry-3, 0) + // blinded = 1 //now handled under /handle_regular_hud_updates() + else if(eye_blurry) //blurry eyes heal slowly + eye_blurry = max(eye_blurry-1, 0) - //Dizziness - if(dizziness) - var/client/C = client - var/pixel_x_diff = 0 - var/pixel_y_diff = 0 - var/temp - var/saved_dizz = dizziness - dizziness = max(dizziness-1, 0) - if(C) - var/oldsrc = src - var/amplitude = dizziness*(sin(dizziness * 0.044 * world.time) + 1) / 70 // This shit is annoying at high strength - src = null - spawn(0) + //Ears + if(sdisabilities & DEAF) //disabled-deaf, doesn't get better on its own + ear_deaf = max(ear_deaf, 1) + else if(istype(ears, /obj/item/clothing/ears/earmuffs)) //resting your ears with earmuffs heals ear damage faster, and slowly heals deafness + ear_damage = max(ear_damage-0.15, 0) + ear_deaf = max(ear_deaf-1, 1) + else if(ear_deaf) //deafness, heals slowly over time + ear_deaf = max(ear_deaf-1, 0) + else if(ear_damage < 25) //ear damage heals slowly under this threshold. otherwise you'll need earmuffs + ear_damage = max(ear_damage-0.05, 0) + + //Dizziness + if(dizziness) + var/client/C = client + var/pixel_x_diff = 0 + var/pixel_y_diff = 0 + var/temp + var/saved_dizz = dizziness + dizziness = max(dizziness-1, 0) + if(C) + var/oldsrc = src + var/amplitude = dizziness*(sin(dizziness * 0.044 * world.time) + 1) / 70 // This shit is annoying at high strength + src = null + spawn(0) + if(C) + temp = amplitude * sin(0.008 * saved_dizz * world.time) + pixel_x_diff += temp + C.pixel_x += temp + temp = amplitude * cos(0.008 * saved_dizz * world.time) + pixel_y_diff += temp + C.pixel_y += temp + sleep(3) if(C) temp = amplitude * sin(0.008 * saved_dizz * world.time) pixel_x_diff += temp @@ -549,189 +555,181 @@ temp = amplitude * cos(0.008 * saved_dizz * world.time) pixel_y_diff += temp C.pixel_y += temp - sleep(3) - if(C) - temp = amplitude * sin(0.008 * saved_dizz * world.time) - pixel_x_diff += temp - C.pixel_x += temp - temp = amplitude * cos(0.008 * saved_dizz * world.time) - pixel_y_diff += temp - C.pixel_y += temp - sleep(3) - if(C) - C.pixel_x -= pixel_x_diff - C.pixel_y -= pixel_y_diff - src = oldsrc + sleep(3) + if(C) + C.pixel_x -= pixel_x_diff + C.pixel_y -= pixel_y_diff + src = oldsrc - //Jitteryness - if(jitteriness) - var/amplitude = min(4, (jitteriness/100) + 1) - var/pixel_x_diff = rand(-amplitude, amplitude) - var/pixel_y_diff = rand(-amplitude/3, amplitude/3) + //Jitteryness + if(jitteriness) + var/amplitude = min(4, (jitteriness/100) + 1) + var/pixel_x_diff = rand(-amplitude, amplitude) + var/pixel_y_diff = rand(-amplitude/3, amplitude/3) - animate(src, pixel_x = pixel_x + pixel_x_diff, pixel_y = pixel_y + pixel_y_diff , time = 2, loop = 6) - animate(pixel_x = pixel_x - pixel_x_diff, pixel_y = pixel_y - pixel_y_diff, time = 2) - jitteriness = max(jitteriness-1, 0) + animate(src, pixel_x = pixel_x + pixel_x_diff, pixel_y = pixel_y + pixel_y_diff , time = 2, loop = 6) + animate(pixel_x = pixel_x - pixel_x_diff, pixel_y = pixel_y - pixel_y_diff, time = 2) + jitteriness = max(jitteriness-1, 0) - //Other - if(stunned) - AdjustStunned(-1) + //Other + if(stunned) + AdjustStunned(-1) - if(weakened) - weakened = max(weakened-1,0) + if(weakened) + weakened = max(weakened-1,0) - if(stuttering) - stuttering = max(stuttering-1, 0) + if(stuttering) + stuttering = max(stuttering-1, 0) - if(silent) - silent = max(silent-1, 0) + if(silent) + silent = max(silent-1, 0) - if(druggy) - druggy = max(druggy-1, 0) + if(druggy) + druggy = max(druggy-1, 0) - CheckStamina() + CheckStamina() - return 1 + return 1 - proc/handle_regular_hud_updates() - if(!client) return 0 +/mob/living/carbon/human/proc/handle_regular_hud_updates() + if(!client) return 0 - for(var/image/hud in client.images) - if(copytext(hud.icon_state,1,4) == "hud") //ugly, but icon comparison is worse, I believe - client.images.Remove(hud) + for(var/image/hud in client.images) + if(copytext(hud.icon_state,1,4) == "hud") //ugly, but icon comparison is worse, I believe + client.images.Remove(hud) - client.screen.Remove(global_hud.blurry, global_hud.druggy, global_hud.vimpaired, global_hud.darkMask) + client.screen.Remove(global_hud.blurry, global_hud.druggy, global_hud.vimpaired, global_hud.darkMask) - update_action_buttons() + update_action_buttons() - if(damageoverlay.overlays) - damageoverlay.overlays = list() + if(damageoverlay.overlays) + damageoverlay.overlays = list() - if(stat == UNCONSCIOUS) - //Critical damage passage overlay - if(health <= config.health_threshold_crit) - var/image/I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "passage0") - I.blend_mode = BLEND_OVERLAY //damageoverlay is BLEND_MULTIPLY - switch(health) - if(-20 to -10) - I.icon_state = "passage1" - if(-30 to -20) - I.icon_state = "passage2" - if(-40 to -30) - I.icon_state = "passage3" - if(-50 to -40) - I.icon_state = "passage4" - if(-60 to -50) - I.icon_state = "passage5" - if(-70 to -60) - I.icon_state = "passage6" - if(-80 to -70) - I.icon_state = "passage7" - if(-90 to -80) - I.icon_state = "passage8" - if(-95 to -90) - I.icon_state = "passage9" - if(-INFINITY to -95) - I.icon_state = "passage10" - damageoverlay.overlays += I + if(stat == UNCONSCIOUS) + //Critical damage passage overlay + if(health <= config.health_threshold_crit) + var/image/I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "passage0") + I.blend_mode = BLEND_OVERLAY //damageoverlay is BLEND_MULTIPLY + switch(health) + if(-20 to -10) + I.icon_state = "passage1" + if(-30 to -20) + I.icon_state = "passage2" + if(-40 to -30) + I.icon_state = "passage3" + if(-50 to -40) + I.icon_state = "passage4" + if(-60 to -50) + I.icon_state = "passage5" + if(-70 to -60) + I.icon_state = "passage6" + if(-80 to -70) + I.icon_state = "passage7" + if(-90 to -80) + I.icon_state = "passage8" + if(-95 to -90) + I.icon_state = "passage9" + if(-INFINITY to -95) + I.icon_state = "passage10" + damageoverlay.overlays += I + else + //Oxygen damage overlay + if(oxyloss) + var/image/I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "oxydamageoverlay0") + switch(oxyloss) + if(10 to 20) + I.icon_state = "oxydamageoverlay1" + if(20 to 25) + I.icon_state = "oxydamageoverlay2" + if(25 to 30) + I.icon_state = "oxydamageoverlay3" + if(30 to 35) + I.icon_state = "oxydamageoverlay4" + if(35 to 40) + I.icon_state = "oxydamageoverlay5" + if(40 to 45) + I.icon_state = "oxydamageoverlay6" + if(45 to INFINITY) + I.icon_state = "oxydamageoverlay7" + damageoverlay.overlays += I + + //Fire and Brute damage overlay (BSSR) + var/hurtdamage = src.getBruteLoss() + src.getFireLoss() + damageoverlaytemp + damageoverlaytemp = 0 // We do this so we can detect if someone hits us or not. + if(hurtdamage) + var/image/I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "brutedamageoverlay0") + I.blend_mode = BLEND_ADD + switch(hurtdamage) + if(5 to 15) + I.icon_state = "brutedamageoverlay1" + if(15 to 30) + I.icon_state = "brutedamageoverlay2" + if(30 to 45) + I.icon_state = "brutedamageoverlay3" + if(45 to 70) + I.icon_state = "brutedamageoverlay4" + if(70 to 85) + I.icon_state = "brutedamageoverlay5" + if(85 to INFINITY) + I.icon_state = "brutedamageoverlay6" + var/image/black = image(I.icon, I.icon_state) //BLEND_ADD doesn't let us darken, so this is just to blacken the edge of the screen + black.color = "#170000" + damageoverlay.overlays += I + damageoverlay.overlays += black + + if(machine) + if(!machine.check_eye(src)) reset_view(null) else - //Oxygen damage overlay - if(oxyloss) - var/image/I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "oxydamageoverlay0") - switch(oxyloss) - if(10 to 20) - I.icon_state = "oxydamageoverlay1" - if(20 to 25) - I.icon_state = "oxydamageoverlay2" - if(25 to 30) - I.icon_state = "oxydamageoverlay3" - if(30 to 35) - I.icon_state = "oxydamageoverlay4" - if(35 to 40) - I.icon_state = "oxydamageoverlay5" - if(40 to 45) - I.icon_state = "oxydamageoverlay6" - if(45 to INFINITY) - I.icon_state = "oxydamageoverlay7" - damageoverlay.overlays += I + if(!client.adminobs) reset_view(null) - //Fire and Brute damage overlay (BSSR) - var/hurtdamage = src.getBruteLoss() + src.getFireLoss() + damageoverlaytemp - damageoverlaytemp = 0 // We do this so we can detect if someone hits us or not. - if(hurtdamage) - var/image/I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "brutedamageoverlay0") - I.blend_mode = BLEND_ADD - switch(hurtdamage) - if(5 to 15) - I.icon_state = "brutedamageoverlay1" - if(15 to 30) - I.icon_state = "brutedamageoverlay2" - if(30 to 45) - I.icon_state = "brutedamageoverlay3" - if(45 to 70) - I.icon_state = "brutedamageoverlay4" - if(70 to 85) - I.icon_state = "brutedamageoverlay5" - if(85 to INFINITY) - I.icon_state = "brutedamageoverlay6" - var/image/black = image(I.icon, I.icon_state) //BLEND_ADD doesn't let us darken, so this is just to blacken the edge of the screen - black.color = "#170000" - damageoverlay.overlays += I - damageoverlay.overlays += black + if(dna) + dna.species.handle_vision(src) + dna.species.handle_hud_icons(src) - if(machine) - if(!machine.check_eye(src)) reset_view(null) - else - if(!client.adminobs) reset_view(null) + return 1 - if(dna) - dna.species.handle_vision(src) - dna.species.handle_hud_icons(src) +/mob/living/carbon/human/proc/handle_random_events() + // Puke if toxloss is too high + if(!stat) + if (getToxLoss() >= 45 && nutrition > 20) + lastpuke ++ + if(lastpuke >= 25) // about 25 second delay I guess + Stun(5) - return 1 + for(var/mob/O in viewers(world.view, src)) + O.show_message(text("\red [] throws up!", src), 1) + playsound(loc, 'sound/effects/splat.ogg', 50, 1) - proc/handle_random_events() - // Puke if toxloss is too high - if(!stat) - if (getToxLoss() >= 45 && nutrition > 20) - lastpuke ++ - if(lastpuke >= 25) // about 25 second delay I guess - Stun(5) + var/turf/location = loc + if (istype(location, /turf/simulated)) + location.add_vomit_floor(src, 1) - for(var/mob/O in viewers(world.view, src)) - O.show_message(text("\red [] throws up!", src), 1) - playsound(loc, 'sound/effects/splat.ogg', 50, 1) + nutrition -= 20 + adjustToxLoss(-3) - var/turf/location = loc - if (istype(location, /turf/simulated)) - location.add_vomit_floor(src, 1) + // make it so you can only puke so fast + lastpuke = 0 - nutrition -= 20 - adjustToxLoss(-3) - - // make it so you can only puke so fast - lastpuke = 0 - - proc/handle_stomach() - spawn(0) - for(var/mob/living/M in stomach_contents) - if(M.loc != src) +/mob/living/carbon/human/proc/handle_stomach() + spawn(0) + for(var/mob/living/M in stomach_contents) + if(M.loc != src) + stomach_contents.Remove(M) + continue + if(istype(M, /mob/living/carbon) && stat != 2) + if(M.stat == 2) + M.death(1) stomach_contents.Remove(M) + qdel(M) continue - if(istype(M, /mob/living/carbon) && stat != 2) - if(M.stat == 2) - M.death(1) - stomach_contents.Remove(M) - qdel(M) - continue - if(air_master.current_cycle%3==1) - if(!(M.status_flags & GODMODE)) - M.adjustBruteLoss(5) - nutrition += 10 + if(air_master.current_cycle%3==1) + if(!(M.status_flags & GODMODE)) + M.adjustBruteLoss(5) + nutrition += 10 - proc/handle_changeling() - if(mind && mind.changeling) - mind.changeling.regenerate() +/mob/living/carbon/human/proc/handle_changeling() + if(mind && mind.changeling) + mind.changeling.regenerate() #undef HUMAN_MAX_OXYLOSS #undef HUMAN_CRIT_MAX_OXYLOSS diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index ee4865b6ca4..40ef5dc682e 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -67,1241 +67,1241 @@ // PROCS // /////////// - proc/update_base_icon_state(var/mob/living/carbon/human/H) - if(HUSK in H.mutations) - H.remove_overlay(SPECIES_LAYER) // races lose their color - return "husk" - else if(sexes) - if(use_skintones) - return "[H.skin_tone]_[(H.gender == FEMALE) ? "f" : "m"]" - else - return "[id]_[(H.gender == FEMALE) ? "f" : "m"]" +/datum/species/proc/update_base_icon_state(var/mob/living/carbon/human/H) + if(HUSK in H.mutations) + H.remove_overlay(SPECIES_LAYER) // races lose their color + return "husk" + else if(sexes) + if(use_skintones) + return "[H.skin_tone]_[(H.gender == FEMALE) ? "f" : "m"]" else - return "[id]" + return "[id]_[(H.gender == FEMALE) ? "f" : "m"]" + else + return "[id]" - proc/update_color(var/mob/living/carbon/human/H) - H.remove_overlay(SPECIES_LAYER) +/datum/species/proc/update_color(var/mob/living/carbon/human/H) + H.remove_overlay(SPECIES_LAYER) - var/image/standing + var/image/standing - var/g = (H.gender == FEMALE) ? "f" : "m" + var/g = (H.gender == FEMALE) ? "f" : "m" - if(MUTCOLORS in specflags) - var/image/spec_base - if(sexes) - spec_base = image("icon" = 'icons/mob/human.dmi', "icon_state" = "[id]_[g]_s", "layer" = -SPECIES_LAYER) + if(MUTCOLORS in specflags) + var/image/spec_base + if(sexes) + spec_base = image("icon" = 'icons/mob/human.dmi', "icon_state" = "[id]_[g]_s", "layer" = -SPECIES_LAYER) + else + spec_base = image("icon" = 'icons/mob/human.dmi', "icon_state" = "[id]_s", "layer" = -SPECIES_LAYER) + if(!config.mutant_colors) + H.dna.mutant_color = default_color + spec_base.color = "#[H.dna.mutant_color]" + standing = spec_base + + if(standing) + H.overlays_standing[SPECIES_LAYER] = standing + + H.apply_overlay(SPECIES_LAYER) + +/datum/species/proc/handle_hair(var/mob/living/carbon/human/H) + H.remove_overlay(HAIR_LAYER) + + var/datum/sprite_accessory/S + var/list/standing = list() + + if(H.facial_hair_style && FACEHAIR in specflags) + S = facial_hair_styles_list[H.facial_hair_style] + if(S) + var/image/img_facial_s + + img_facial_s = image("icon" = S.icon, "icon_state" = "[S.icon_state]_s", "layer" = -HAIR_LAYER) + + if(hair_color) + if(hair_color == "mutcolor") + if(!config.mutant_colors) + img_facial_s.color = "#" + default_color + else + img_facial_s.color = "#" + H.dna.mutant_color + else + img_facial_s.color = "#" + hair_color else - spec_base = image("icon" = 'icons/mob/human.dmi', "icon_state" = "[id]_s", "layer" = -SPECIES_LAYER) - if(!config.mutant_colors) - H.dna.mutant_color = default_color - spec_base.color = "#[H.dna.mutant_color]" - standing = spec_base + img_facial_s.color = "#" + H.facial_hair_color + img_facial_s.alpha = hair_alpha - if(standing) - H.overlays_standing[SPECIES_LAYER] = standing + standing += img_facial_s - H.apply_overlay(SPECIES_LAYER) + //Applies the debrained overlay if there is no brain + if(!H.getorgan(/obj/item/organ/brain)) + standing += image("icon"='icons/mob/human_face.dmi', "icon_state" = "debrained_s", "layer" = -HAIR_LAYER) - proc/handle_hair(var/mob/living/carbon/human/H) - H.remove_overlay(HAIR_LAYER) + else if(H.hair_style && HAIR in specflags) + S = hair_styles_list[H.hair_style] + if(S) + var/image/img_hair_s = image("icon" = S.icon, "icon_state" = "[S.icon_state]_s", "layer" = -HAIR_LAYER) - var/datum/sprite_accessory/S - var/list/standing = list() + img_hair_s = image("icon" = S.icon, "icon_state" = "[S.icon_state]_s", "layer" = -HAIR_LAYER) - if(H.facial_hair_style && FACEHAIR in specflags) - S = facial_hair_styles_list[H.facial_hair_style] - if(S) - var/image/img_facial_s - - img_facial_s = image("icon" = S.icon, "icon_state" = "[S.icon_state]_s", "layer" = -HAIR_LAYER) - - if(hair_color) - if(hair_color == "mutcolor") - if(!config.mutant_colors) - img_facial_s.color = "#" + default_color - else - img_facial_s.color = "#" + H.dna.mutant_color + if(hair_color) + if(hair_color == "mutcolor") + if(!config.mutant_colors) + img_hair_s.color = "#" + default_color else - img_facial_s.color = "#" + hair_color + img_hair_s.color = "#" + H.dna.mutant_color else - img_facial_s.color = "#" + H.facial_hair_color - img_facial_s.alpha = hair_alpha + img_hair_s.color = "#" + hair_color + else + img_hair_s.color = "#" + H.hair_color + img_hair_s.alpha = hair_alpha - standing += img_facial_s + standing += img_hair_s - //Applies the debrained overlay if there is no brain - if(!H.getorgan(/obj/item/organ/brain)) - standing += image("icon"='icons/mob/human_face.dmi', "icon_state" = "debrained_s", "layer" = -HAIR_LAYER) + if(standing.len) + H.overlays_standing[HAIR_LAYER] = standing - else if(H.hair_style && HAIR in specflags) - S = hair_styles_list[H.hair_style] - if(S) - var/image/img_hair_s = image("icon" = S.icon, "icon_state" = "[S.icon_state]_s", "layer" = -HAIR_LAYER) + H.apply_overlay(HAIR_LAYER) - img_hair_s = image("icon" = S.icon, "icon_state" = "[S.icon_state]_s", "layer" = -HAIR_LAYER) + return - if(hair_color) - if(hair_color == "mutcolor") - if(!config.mutant_colors) - img_hair_s.color = "#" + default_color - else - img_hair_s.color = "#" + H.dna.mutant_color - else - img_hair_s.color = "#" + hair_color - else - img_hair_s.color = "#" + H.hair_color - img_hair_s.alpha = hair_alpha +/datum/species/proc/handle_body(var/mob/living/carbon/human/H) + H.remove_overlay(BODY_LAYER) - standing += img_hair_s + var/list/standing = list() - if(standing.len) - H.overlays_standing[HAIR_LAYER] = standing + // lipstick + if(H.lip_style && LIPS in specflags) + standing += image("icon"='icons/mob/human_face.dmi', "icon_state"="lips_[H.lip_style]_s", "layer" = -BODY_LAYER) - H.apply_overlay(HAIR_LAYER) + // eyes + if(EYECOLOR in specflags) + var/image/img_eyes_s = image("icon" = 'icons/mob/human_face.dmi', "icon_state" = "[eyes]_s", "layer" = -BODY_LAYER) + img_eyes_s.color = "#" + H.eye_color + standing += img_eyes_s - return + //Underwear + if(H.underwear) + var/datum/sprite_accessory/underwear/U = underwear_all[H.underwear] + if(U) + standing += image("icon"=U.icon, "icon_state"="[U.icon_state]_s", "layer"=-BODY_LAYER) - proc/handle_body(var/mob/living/carbon/human/H) - H.remove_overlay(BODY_LAYER) + if(standing.len) + H.overlays_standing[BODY_LAYER] = standing - var/list/standing = list() + H.apply_overlay(BODY_LAYER) - // lipstick - if(H.lip_style && LIPS in specflags) - standing += image("icon"='icons/mob/human_face.dmi', "icon_state"="lips_[H.lip_style]_s", "layer" = -BODY_LAYER) + return - // eyes - if(EYECOLOR in specflags) - var/image/img_eyes_s = image("icon" = 'icons/mob/human_face.dmi', "icon_state" = "[eyes]_s", "layer" = -BODY_LAYER) - img_eyes_s.color = "#" + H.eye_color - standing += img_eyes_s +/datum/species/proc/spec_life(var/mob/living/carbon/human/H) + return - //Underwear - if(H.underwear) - var/datum/sprite_accessory/underwear/U = underwear_all[H.underwear] - if(U) - standing += image("icon"=U.icon, "icon_state"="[U.icon_state]_s", "layer"=-BODY_LAYER) +/datum/species/proc/spec_death(var/gibbed, var/mob/living/carbon/human/H) + return - if(standing.len) - H.overlays_standing[BODY_LAYER] = standing +/datum/species/proc/auto_equip(var/mob/living/carbon/human/H) + // handles the equipping of species-specific gear + return - H.apply_overlay(BODY_LAYER) +/datum/species/proc/can_equip(var/obj/item/I, var/slot, var/disable_warning, var/mob/living/carbon/human/H) + if(slot in no_equip) + if(!(type in I.species_exception)) + return 0 - return - - proc/spec_life(var/mob/living/carbon/human/H) - return - - proc/spec_death(var/gibbed, var/mob/living/carbon/human/H) - return - - proc/auto_equip(var/mob/living/carbon/human/H) - // handles the equipping of species-specific gear - return - - proc/can_equip(var/obj/item/I, var/slot, var/disable_warning, var/mob/living/carbon/human/H) - if(slot in no_equip) - if(!(type in I.species_exception)) + switch(slot) + if(slot_l_hand) + if(H.l_hand) return 0 - - switch(slot) - if(slot_l_hand) - if(H.l_hand) - return 0 + return 1 + if(slot_r_hand) + if(H.r_hand) + return 0 + return 1 + if(slot_wear_mask) + if(H.wear_mask) + return 0 + if( !(I.slot_flags & SLOT_MASK) ) + return 0 + return 1 + if(slot_back) + if(H.back) + return 0 + if( !(I.slot_flags & SLOT_BACK) ) + return 0 + return 1 + if(slot_wear_suit) + if(H.wear_suit) + return 0 + if( !(I.slot_flags & SLOT_OCLOTHING) ) + return 0 + return 1 + if(slot_gloves) + if(H.gloves) + return 0 + if( !(I.slot_flags & SLOT_GLOVES) ) + return 0 + return 1 + if(slot_shoes) + if(H.shoes) + return 0 + if( !(I.slot_flags & SLOT_FEET) ) + return 0 + return 1 + if(slot_belt) + if(H.belt) + return 0 + if(!H.w_uniform && !nojumpsuit) + if(!disable_warning) + H << "You need a jumpsuit before you can attach this [I.name]." + return 0 + if( !(I.slot_flags & SLOT_BELT) ) + return + return 1 + if(slot_glasses) + if(H.glasses) + return 0 + if( !(I.slot_flags & SLOT_EYES) ) + return 0 + return 1 + if(slot_head) + if(H.head) + return 0 + if( !(I.slot_flags & SLOT_HEAD) ) + return 0 + return 1 + if(slot_ears) + if(H.ears) + return 0 + if( !(I.slot_flags & SLOT_EARS) ) + return 0 + return 1 + if(slot_w_uniform) + if(H.w_uniform) + return 0 + if( !(I.slot_flags & SLOT_ICLOTHING) ) + return 0 + return 1 + if(slot_wear_id) + if(H.wear_id) + return 0 + if(!H.w_uniform && !nojumpsuit) + if(!disable_warning) + H << "You need a jumpsuit before you can attach this [I.name]." + return 0 + if( !(I.slot_flags & SLOT_ID) ) + return 0 + return 1 + if(slot_l_store) + if(I.flags & NODROP) //Pockets aren't visible, so you can't move NODROP items into them. + return 0 + if(H.l_store) + return 0 + if(!H.w_uniform && !nojumpsuit) + if(!disable_warning) + H << "You need a jumpsuit before you can attach this [I.name]." + return 0 + if(I.slot_flags & SLOT_DENYPOCKET) + return + if( I.w_class <= 2 || (I.slot_flags & SLOT_POCKET) ) return 1 - if(slot_r_hand) - if(H.r_hand) - return 0 + if(slot_r_store) + if(I.flags & NODROP) + return 0 + if(H.r_store) + return 0 + if(!H.w_uniform && !nojumpsuit) + if(!disable_warning) + H << "You need a jumpsuit before you can attach this [I.name]." + return 0 + if(I.slot_flags & SLOT_DENYPOCKET) + return 0 + if( I.w_class <= 2 || (I.slot_flags & SLOT_POCKET) ) return 1 - if(slot_wear_mask) - if(H.wear_mask) - return 0 - if( !(I.slot_flags & SLOT_MASK) ) - return 0 + return 0 + if(slot_s_store) + if(I.flags & NODROP) + return 0 + if(H.s_store) + return 0 + if(!H.wear_suit) + if(!disable_warning) + H << "You need a suit before you can attach this [I.name]." + return 0 + if(!H.wear_suit.allowed) + if(!disable_warning) + H << "You somehow have a suit with no defined allowed items for suit storage, stop that." + return 0 + if(I.w_class > 4) + if(!disable_warning) + H << "The [I.name] is too big to attach." //should be src? + return 0 + if( istype(I, /obj/item/device/pda) || istype(I, /obj/item/weapon/pen) || is_type_in_list(I, H.wear_suit.allowed) ) return 1 - if(slot_back) - if(H.back) - return 0 - if( !(I.slot_flags & SLOT_BACK) ) - return 0 - return 1 - if(slot_wear_suit) - if(H.wear_suit) - return 0 - if( !(I.slot_flags & SLOT_OCLOTHING) ) - return 0 - return 1 - if(slot_gloves) - if(H.gloves) - return 0 - if( !(I.slot_flags & SLOT_GLOVES) ) - return 0 - return 1 - if(slot_shoes) - if(H.shoes) - return 0 - if( !(I.slot_flags & SLOT_FEET) ) - return 0 - return 1 - if(slot_belt) - if(H.belt) - return 0 - if(!H.w_uniform && !nojumpsuit) - if(!disable_warning) - H << "You need a jumpsuit before you can attach this [I.name]." - return 0 - if( !(I.slot_flags & SLOT_BELT) ) - return - return 1 - if(slot_glasses) - if(H.glasses) - return 0 - if( !(I.slot_flags & SLOT_EYES) ) - return 0 - return 1 - if(slot_head) - if(H.head) - return 0 - if( !(I.slot_flags & SLOT_HEAD) ) - return 0 - return 1 - if(slot_ears) - if(H.ears) - return 0 - if( !(I.slot_flags & SLOT_EARS) ) - return 0 - return 1 - if(slot_w_uniform) - if(H.w_uniform) - return 0 - if( !(I.slot_flags & SLOT_ICLOTHING) ) - return 0 - return 1 - if(slot_wear_id) - if(H.wear_id) - return 0 - if(!H.w_uniform && !nojumpsuit) - if(!disable_warning) - H << "You need a jumpsuit before you can attach this [I.name]." - return 0 - if( !(I.slot_flags & SLOT_ID) ) - return 0 - return 1 - if(slot_l_store) - if(I.flags & NODROP) //Pockets aren't visible, so you can't move NODROP items into them. - return 0 - if(H.l_store) - return 0 - if(!H.w_uniform && !nojumpsuit) - if(!disable_warning) - H << "You need a jumpsuit before you can attach this [I.name]." - return 0 - if(I.slot_flags & SLOT_DENYPOCKET) - return - if( I.w_class <= 2 || (I.slot_flags & SLOT_POCKET) ) + return 0 + if(slot_handcuffed) + if(H.handcuffed) + return 0 + if(!istype(I, /obj/item/weapon/handcuffs)) + return 0 + return 1 + if(slot_legcuffed) + if(H.legcuffed) + return 0 + if(!istype(I, /obj/item/weapon/legcuffs)) + return 0 + return 1 + if(slot_in_backpack) + if (H.back && istype(H.back, /obj/item/weapon/storage/backpack)) + var/obj/item/weapon/storage/backpack/B = H.back + if(B.contents.len < B.storage_slots && I.w_class <= B.max_w_class) return 1 - if(slot_r_store) - if(I.flags & NODROP) - return 0 - if(H.r_store) - return 0 - if(!H.w_uniform && !nojumpsuit) - if(!disable_warning) - H << "You need a jumpsuit before you can attach this [I.name]." - return 0 - if(I.slot_flags & SLOT_DENYPOCKET) - return 0 - if( I.w_class <= 2 || (I.slot_flags & SLOT_POCKET) ) - return 1 - return 0 - if(slot_s_store) - if(I.flags & NODROP) - return 0 - if(H.s_store) - return 0 - if(!H.wear_suit) - if(!disable_warning) - H << "You need a suit before you can attach this [I.name]." - return 0 - if(!H.wear_suit.allowed) - if(!disable_warning) - H << "You somehow have a suit with no defined allowed items for suit storage, stop that." - return 0 - if(I.w_class > 4) - if(!disable_warning) - H << "The [I.name] is too big to attach." //should be src? - return 0 - if( istype(I, /obj/item/device/pda) || istype(I, /obj/item/weapon/pen) || is_type_in_list(I, H.wear_suit.allowed) ) - return 1 - return 0 - if(slot_handcuffed) - if(H.handcuffed) - return 0 - if(!istype(I, /obj/item/weapon/handcuffs)) - return 0 - return 1 - if(slot_legcuffed) - if(H.legcuffed) - return 0 - if(!istype(I, /obj/item/weapon/legcuffs)) - return 0 - return 1 - if(slot_in_backpack) - if (H.back && istype(H.back, /obj/item/weapon/storage/backpack)) - var/obj/item/weapon/storage/backpack/B = H.back - if(B.contents.len < B.storage_slots && I.w_class <= B.max_w_class) - return 1 - return 0 - return 0 //Unsupported slot + return 0 + return 0 //Unsupported slot - proc/before_equip_job(var/datum/job/J, var/mob/living/carbon/human/H) - return +/datum/species/proc/before_equip_job(var/datum/job/J, var/mob/living/carbon/human/H) + return - proc/after_equip_job(var/datum/job/J, var/mob/living/carbon/human/H) - return +/datum/species/proc/after_equip_job(var/datum/job/J, var/mob/living/carbon/human/H) + return - proc/handle_chemicals(var/datum/reagent/chem, var/mob/living/carbon/human/H) - return 0 +/datum/species/proc/handle_chemicals(var/datum/reagent/chem, var/mob/living/carbon/human/H) + return 0 - proc/handle_speech(var/message, var/mob/living/carbon/human/H) - return message +/datum/species/proc/handle_speech(var/message, var/mob/living/carbon/human/H) + return message - //////// +//////// //LIFE// //////// - proc/handle_chemicals_in_body(var/mob/living/carbon/human/H) - if(H.reagents) H.reagents.metabolize(H) +/datum/species/proc/handle_chemicals_in_body(var/mob/living/carbon/human/H) + if(H.reagents) H.reagents.metabolize(H) - //The fucking FAT mutation is the dumbest shit ever. It makes the code so difficult to work with - if(FAT in H.mutations) - if(H.overeatduration < 100) - H << "You feel fit again!" - H.mutations -= FAT - H.update_inv_w_uniform(0) - H.update_inv_wear_suit() - else - if(H.overeatduration > 500) - H << "You suddenly feel blubbery!" - H.mutations |= FAT - H.update_inv_w_uniform(0) - H.update_inv_wear_suit() + //The fucking FAT mutation is the dumbest shit ever. It makes the code so difficult to work with + if(FAT in H.mutations) + if(H.overeatduration < 100) + H << "You feel fit again!" + H.mutations -= FAT + H.update_inv_w_uniform(0) + H.update_inv_wear_suit() + else + if(H.overeatduration > 500) + H << "You suddenly feel blubbery!" + H.mutations |= FAT + H.update_inv_w_uniform(0) + H.update_inv_wear_suit() - // nutrition decrease - if (H.nutrition > 0 && H.stat != 2) - H.nutrition = max (0, H.nutrition - HUNGER_FACTOR) + // nutrition decrease + if (H.nutrition > 0 && H.stat != 2) + H.nutrition = max (0, H.nutrition - HUNGER_FACTOR) - if (H.nutrition > 450) - if(H.overeatduration < 600) //capped so people don't take forever to unfat - H.overeatduration++ - else - if(H.overeatduration > 1) - H.overeatduration -= 2 //doubled the unfat rate + if (H.nutrition > 450) + if(H.overeatduration < 600) //capped so people don't take forever to unfat + H.overeatduration++ + else + if(H.overeatduration > 1) + H.overeatduration -= 2 //doubled the unfat rate - if (H.drowsyness) - H.drowsyness-- - H.eye_blurry = max(2, H.eye_blurry) - if (prob(5)) - H.sleeping += 1 - H.Paralyse(5) + if (H.drowsyness) + H.drowsyness-- + H.eye_blurry = max(2, H.eye_blurry) + if (prob(5)) + H.sleeping += 1 + H.Paralyse(5) - H.confused = max(0, H.confused - 1) - // decrement dizziness counter, clamped to 0 - if(H.resting) - H.dizziness = max(0, H.dizziness - 15) - H.jitteriness = max(0, H.jitteriness - 15) - else - H.dizziness = max(0, H.dizziness - 3) - H.jitteriness = max(0, H.jitteriness - 3) + H.confused = max(0, H.confused - 1) + // decrement dizziness counter, clamped to 0 + if(H.resting) + H.dizziness = max(0, H.dizziness - 15) + H.jitteriness = max(0, H.jitteriness - 15) + else + H.dizziness = max(0, H.dizziness - 3) + H.jitteriness = max(0, H.jitteriness - 3) - H.updatehealth() + H.updatehealth() - return + return - proc/handle_vision(var/mob/living/carbon/human/H) - if( H.stat == DEAD ) - H.sight |= (SEE_TURFS|SEE_MOBS|SEE_OBJS) +/datum/species/proc/handle_vision(var/mob/living/carbon/human/H) + if( H.stat == DEAD ) + H.sight |= (SEE_TURFS|SEE_MOBS|SEE_OBJS) + H.see_in_dark = 8 + if(!H.druggy) H.see_invisible = SEE_INVISIBLE_LEVEL_TWO + else + H.sight &= ~(SEE_TURFS|SEE_MOBS|SEE_OBJS) + var/see_temp = H.see_invisible + H.see_invisible = invis_sight + H.see_in_dark = darksight + + if(XRAY in H.mutations) + H.sight |= SEE_TURFS|SEE_MOBS|SEE_OBJS H.see_in_dark = 8 - if(!H.druggy) H.see_invisible = SEE_INVISIBLE_LEVEL_TWO + H.see_invisible = SEE_INVISIBLE_LEVEL_TWO + + if(H.seer) + H.see_invisible = SEE_INVISIBLE_OBSERVER + + if(H.mind && H.mind.changeling) + H.hud_used.lingchemdisplay.invisibility = 0 + H.hud_used.lingchemdisplay.maptext = "
    [H.mind.changeling.chem_charges]
    " else - H.sight &= ~(SEE_TURFS|SEE_MOBS|SEE_OBJS) - var/see_temp = H.see_invisible - H.see_invisible = invis_sight - H.see_in_dark = darksight + H.hud_used.lingchemdisplay.invisibility = 101 - if(XRAY in H.mutations) - H.sight |= SEE_TURFS|SEE_MOBS|SEE_OBJS - H.see_in_dark = 8 - H.see_invisible = SEE_INVISIBLE_LEVEL_TWO + if(istype(H.wear_mask, /obj/item/clothing/mask/gas/voice/space_ninja)) + var/obj/item/clothing/mask/gas/voice/space_ninja/O = H.wear_mask + switch(O.mode) + if(0) + var/target_list[] = list() + for(var/mob/living/target in oview(H)) + if( target.mind&&(target.mind.special_role||issilicon(target)) )//They need to have a mind. + target_list += target + if(target_list.len)//Everything else is handled by the ninja mask proc. + O.assess_targets(target_list, H) + H.see_invisible = SEE_INVISIBLE_LIVING + if(1) + H.see_in_dark = 5 + H.see_invisible = SEE_INVISIBLE_LIVING + if(2) + H.sight |= SEE_MOBS + H.see_invisible = SEE_INVISIBLE_LEVEL_TWO + if(3) + H.sight |= SEE_TURFS + H.see_invisible = SEE_INVISIBLE_LIVING - if(H.seer) - H.see_invisible = SEE_INVISIBLE_OBSERVER + if(H.glasses) + if(istype(H.glasses, /obj/item/clothing/glasses)) + var/obj/item/clothing/glasses/G = H.glasses + H.sight |= G.vision_flags + H.see_in_dark = G.darkness_view + H.see_invisible = G.invis_view + if(G.hud) + G.process_hud(H) - if(H.mind && H.mind.changeling) - H.hud_used.lingchemdisplay.invisibility = 0 - H.hud_used.lingchemdisplay.maptext = "
    [H.mind.changeling.chem_charges]
    " - else - H.hud_used.lingchemdisplay.invisibility = 101 + if(H.druggy) //Override for druggy + H.see_invisible = see_temp - if(istype(H.wear_mask, /obj/item/clothing/mask/gas/voice/space_ninja)) - var/obj/item/clothing/mask/gas/voice/space_ninja/O = H.wear_mask - switch(O.mode) - if(0) - var/target_list[] = list() - for(var/mob/living/target in oview(H)) - if( target.mind&&(target.mind.special_role||issilicon(target)) )//They need to have a mind. - target_list += target - if(target_list.len)//Everything else is handled by the ninja mask proc. - O.assess_targets(target_list, H) - H.see_invisible = SEE_INVISIBLE_LIVING - if(1) - H.see_in_dark = 5 - H.see_invisible = SEE_INVISIBLE_LIVING - if(2) - H.sight |= SEE_MOBS - H.see_invisible = SEE_INVISIBLE_LEVEL_TWO - if(3) - H.sight |= SEE_TURFS - H.see_invisible = SEE_INVISIBLE_LIVING + if(H.see_override) //Override all + H.see_invisible = H.see_override - if(H.glasses) - if(istype(H.glasses, /obj/item/clothing/glasses)) - var/obj/item/clothing/glasses/G = H.glasses - H.sight |= G.vision_flags - H.see_in_dark = G.darkness_view - H.see_invisible = G.invis_view - if(G.hud) - G.process_hud(H) + // This checks how much the mob's eyewear impairs their vision + if(H.tinttotal >= TINT_IMPAIR) + if(tinted_weldhelh) + if(H.tinttotal >= TINT_BLIND) + H.blinded = 1 // You get the sudden urge to learn to play keyboard + H.client.screen += global_hud.darkMask + else + H.client.screen += global_hud.darkMask - if(H.druggy) //Override for druggy - H.see_invisible = see_temp + if(H.blind) + if(H.blinded) H.blind.layer = 18 + else H.blind.layer = 0 - if(H.see_override) //Override all - H.see_invisible = H.see_override - - // This checks how much the mob's eyewear impairs their vision - if(H.tinttotal >= TINT_IMPAIR) - if(tinted_weldhelh) - if(H.tinttotal >= TINT_BLIND) - H.blinded = 1 // You get the sudden urge to learn to play keyboard - H.client.screen += global_hud.darkMask - else - H.client.screen += global_hud.darkMask - - if(H.blind) - if(H.blinded) H.blind.layer = 18 - else H.blind.layer = 0 - - if( H.disabilities & NEARSIGHTED && !istype(H.glasses, /obj/item/clothing/glasses/regular) ) - H.client.screen += global_hud.vimpaired - if(H.eye_blurry) H.client.screen += global_hud.blurry - if(H.druggy) H.client.screen += global_hud.druggy + if( H.disabilities & NEARSIGHTED && !istype(H.glasses, /obj/item/clothing/glasses/regular) ) + H.client.screen += global_hud.vimpaired + if(H.eye_blurry) H.client.screen += global_hud.blurry + if(H.druggy) H.client.screen += global_hud.druggy - if(H.eye_stat > 20) - if(H.eye_stat > 30) H.client.screen += global_hud.darkMask - else H.client.screen += global_hud.vimpaired + if(H.eye_stat > 20) + if(H.eye_stat > 30) H.client.screen += global_hud.darkMask + else H.client.screen += global_hud.vimpaired - return 1 + return 1 - proc/handle_hud_icons(var/mob/living/carbon/human/H) - if(H.healths) - if(H.stat == DEAD) - H.healths.icon_state = "health7" - else - switch(H.hal_screwyhud) - if(1) H.healths.icon_state = "health6" - if(2) H.healths.icon_state = "health7" - else - switch(H.health - H.staminaloss) - if(100 to INFINITY) H.healths.icon_state = "health0" - if(80 to 100) H.healths.icon_state = "health1" - if(60 to 80) H.healths.icon_state = "health2" - if(40 to 60) H.healths.icon_state = "health3" - if(20 to 40) H.healths.icon_state = "health4" - if(0 to 20) H.healths.icon_state = "health5" - else H.healths.icon_state = "health6" +/datum/species/proc/handle_hud_icons(var/mob/living/carbon/human/H) + if(H.healths) + if(H.stat == DEAD) + H.healths.icon_state = "health7" + else + switch(H.hal_screwyhud) + if(1) H.healths.icon_state = "health6" + if(2) H.healths.icon_state = "health7" + else + switch(H.health - H.staminaloss) + if(100 to INFINITY) H.healths.icon_state = "health0" + if(80 to 100) H.healths.icon_state = "health1" + if(60 to 80) H.healths.icon_state = "health2" + if(40 to 60) H.healths.icon_state = "health3" + if(20 to 40) H.healths.icon_state = "health4" + if(0 to 20) H.healths.icon_state = "health5" + else H.healths.icon_state = "health6" - if(H.nutrition_icon) - switch(H.nutrition) - if(450 to INFINITY) H.nutrition_icon.icon_state = "nutrition0" - if(350 to 450) H.nutrition_icon.icon_state = "nutrition1" - if(250 to 350) H.nutrition_icon.icon_state = "nutrition2" - if(150 to 250) H.nutrition_icon.icon_state = "nutrition3" - else H.nutrition_icon.icon_state = "nutrition4" + if(H.nutrition_icon) + switch(H.nutrition) + if(450 to INFINITY) H.nutrition_icon.icon_state = "nutrition0" + if(350 to 450) H.nutrition_icon.icon_state = "nutrition1" + if(250 to 350) H.nutrition_icon.icon_state = "nutrition2" + if(150 to 250) H.nutrition_icon.icon_state = "nutrition3" + else H.nutrition_icon.icon_state = "nutrition4" - if(H.pressure) - H.pressure.icon_state = "pressure[H.pressure_alert]" + if(H.pressure) + H.pressure.icon_state = "pressure[H.pressure_alert]" - if(H.pullin) - if(H.pulling) H.pullin.icon_state = "pull" - else H.pullin.icon_state = "pull0" + if(H.pullin) + if(H.pulling) H.pullin.icon_state = "pull" + else H.pullin.icon_state = "pull0" // if(rest) //Not used with new UI // if(resting || lying || sleeping) rest.icon_state = "rest1" // else rest.icon_state = "rest0" - if(H.toxin) - if(H.hal_screwyhud == 4 || H.toxins_alert) H.toxin.icon_state = "tox1" - else H.toxin.icon_state = "tox0" - if(H.oxygen) - if(H.hal_screwyhud == 3 || H.oxygen_alert) H.oxygen.icon_state = "oxy1" - else H.oxygen.icon_state = "oxy0" - if(H.fire) - if(H.fire_alert) H.fire.icon_state = "fire[H.fire_alert]" //fire_alert is either 0 if no alert, 1 for cold and 2 for heat. - else H.fire.icon_state = "fire0" + if(H.toxin) + if(H.hal_screwyhud == 4 || H.toxins_alert) H.toxin.icon_state = "tox1" + else H.toxin.icon_state = "tox0" + if(H.oxygen) + if(H.hal_screwyhud == 3 || H.oxygen_alert) H.oxygen.icon_state = "oxy1" + else H.oxygen.icon_state = "oxy0" + if(H.fire) + if(H.fire_alert) H.fire.icon_state = "fire[H.fire_alert]" //fire_alert is either 0 if no alert, 1 for cold and 2 for heat. + else H.fire.icon_state = "fire0" - if(H.bodytemp) - if(!(HEATRES in specflags)) - switch(H.bodytemperature) //310.055 optimal body temp - if(370 to INFINITY) H.bodytemp.icon_state = "temp4" - if(350 to 370) H.bodytemp.icon_state = "temp3" - if(335 to 350) H.bodytemp.icon_state = "temp2" + if(H.bodytemp) + if(!(HEATRES in specflags)) + switch(H.bodytemperature) //310.055 optimal body temp + if(370 to INFINITY) H.bodytemp.icon_state = "temp4" + if(350 to 370) H.bodytemp.icon_state = "temp3" + if(335 to 350) H.bodytemp.icon_state = "temp2" + switch(H.bodytemperature) + if(320 to 335) H.bodytemp.icon_state = "temp1" + if(300 to 320) H.bodytemp.icon_state = "temp0" + if(295 to 300) H.bodytemp.icon_state = "temp-1" + if(!(COLDRES in specflags)) switch(H.bodytemperature) - if(320 to 335) H.bodytemp.icon_state = "temp1" - if(300 to 320) H.bodytemp.icon_state = "temp0" - if(295 to 300) H.bodytemp.icon_state = "temp-1" - if(!(COLDRES in specflags)) - switch(H.bodytemperature) - if(280 to 295) H.bodytemp.icon_state = "temp-2" - if(260 to 280) H.bodytemp.icon_state = "temp-3" - if(-INFINITY to 260) H.bodytemp.icon_state = "temp-4" + if(280 to 295) H.bodytemp.icon_state = "temp-2" + if(260 to 280) H.bodytemp.icon_state = "temp-3" + if(-INFINITY to 260) H.bodytemp.icon_state = "temp-4" - return 1 + return 1 - proc/handle_mutations_and_radiation(var/mob/living/carbon/human/H) - if(H.getFireLoss()) - if((COLD_RESISTANCE in H.mutations) || (prob(1))) - H.heal_organ_damage(0,1) +/datum/species/proc/handle_mutations_and_radiation(var/mob/living/carbon/human/H) + if(H.getFireLoss()) + if((COLD_RESISTANCE in H.mutations) || (prob(1))) + H.heal_organ_damage(0,1) - if ((HULK in H.mutations) && H.health <= 25) - H.mutations.Remove(HULK) - H.update_mutations() //update our mutation overlays - H << "You suddenly feel very weak." - H.Weaken(3) + if ((HULK in H.mutations) && H.health <= 25) + H.mutations.Remove(HULK) + H.update_mutations() //update our mutation overlays + H << "You suddenly feel very weak." + H.Weaken(3) + H.emote("collapse") + + if (H.radiation && !(RADIMMUNE in specflags)) + if (H.radiation > 100) + H.radiation = 100 + H.Weaken(10) + H << "You feel weak." H.emote("collapse") - if (H.radiation && !(RADIMMUNE in specflags)) - if (H.radiation > 100) - H.radiation = 100 - H.Weaken(10) - H << "You feel weak." - H.emote("collapse") + if (H.radiation < 0) + H.radiation = 0 - if (H.radiation < 0) - H.radiation = 0 - - else - switch(H.radiation) - if(1 to 49) - H.radiation-- - if(prob(25)) - H.adjustToxLoss(1) - H.updatehealth() - - if(50 to 74) - H.radiation -= 2 + else + switch(H.radiation) + if(1 to 49) + H.radiation-- + if(prob(25)) H.adjustToxLoss(1) - if(prob(5)) - H.radiation -= 5 - H.Weaken(3) - H << "You feel weak." - H.emote("collapse") - if(prob(15)) - if(!( H.hair_style == "Shaved") || !(H.hair_style == "Bald") || HAIR in specflags) - H << "Your hair starts to fall out in clumps..." - spawn(50) - H.facial_hair_style = "Shaved" - H.hair_style = "Bald" - H.update_hair() H.updatehealth() - if(75 to 100) - H.radiation -= 3 - H.adjustToxLoss(3) - if(prob(1)) - H << "You mutate!" - randmutb(H) - domutcheck(H,null) - H.emote("gasp") - H.updatehealth() + if(50 to 74) + H.radiation -= 2 + H.adjustToxLoss(1) + if(prob(5)) + H.radiation -= 5 + H.Weaken(3) + H << "You feel weak." + H.emote("collapse") + if(prob(15)) + if(!( H.hair_style == "Shaved") || !(H.hair_style == "Bald") || HAIR in specflags) + H << "Your hair starts to fall out in clumps..." + spawn(50) + H.facial_hair_style = "Shaved" + H.hair_style = "Bald" + H.update_hair() + H.updatehealth() - //////////////// - // MOVE SPEED // - //////////////// + if(75 to 100) + H.radiation -= 3 + H.adjustToxLoss(3) + if(prob(1)) + H << "You mutate!" + randmutb(H) + domutcheck(H,null) + H.emote("gasp") + H.updatehealth() - proc/movement_delay(var/mob/living/carbon/human/H) - var/mspeed = 0 +//////////////// +// MOVE SPEED // +//////////////// - if(!has_gravity(H)) - return -1 //It's hard to be slowed down in space by... anything - else if(H.status_flags & GOTTAGOFAST) - return -1 +/datum/species/proc/movement_delay(var/mob/living/carbon/human/H) + var/mspeed = 0 - mspeed = 0 - var/health_deficiency = (100 - H.health + H.staminaloss) - if(health_deficiency >= 40) - mspeed += (health_deficiency / 25) + if(!has_gravity(H)) + return -1 //It's hard to be slowed down in space by... anything + else if(H.status_flags & GOTTAGOFAST) + return -1 - var/hungry = (500 - H.nutrition) / 5 //So overeat would be 100 and default level would be 80 - if(hungry >= 70) - mspeed += hungry / 50 + mspeed = 0 + var/health_deficiency = (100 - H.health + H.staminaloss) + if(health_deficiency >= 40) + mspeed += (health_deficiency / 25) - if(H.wear_suit) - mspeed += H.wear_suit.slowdown - if(H.shoes) - mspeed += H.shoes.slowdown - if(H.back) - mspeed += H.back.slowdown + var/hungry = (500 - H.nutrition) / 5 //So overeat would be 100 and default level would be 80 + if(hungry >= 70) + mspeed += hungry / 50 - if(FAT in H.mutations) - mspeed += 1.5 - if(H.bodytemperature < 283.222) - mspeed += (283.222 - H.bodytemperature) / 10 * 1.75 + if(H.wear_suit) + mspeed += H.wear_suit.slowdown + if(H.shoes) + mspeed += H.shoes.slowdown + if(H.back) + mspeed += H.back.slowdown - mspeed += speedmod + if(FAT in H.mutations) + mspeed += 1.5 + if(H.bodytemperature < 283.222) + mspeed += (283.222 - H.bodytemperature) / 10 * 1.75 - return mspeed + mspeed += speedmod - ////////////////// - // ATTACK PROCS // - ////////////////// + return mspeed - proc/spec_attack_hand(var/mob/living/carbon/human/M, var/mob/living/carbon/human/H) - if((M != H) && H.check_shields(0, M.name)) - add_logs(M, H, "attempted to touch") - H.visible_message("[M] attempted to touch [H]!") - return 0 +////////////////// +// ATTACK PROCS // +////////////////// - switch(M.a_intent) - if("help") - if(H.health >= 0) - H.help_shake_act(M) - if(H != M) - add_logs(M, H, "shaked") - return 1 +/datum/species/proc/spec_attack_hand(var/mob/living/carbon/human/M, var/mob/living/carbon/human/H) + if((M != H) && H.check_shields(0, M.name)) + add_logs(M, H, "attempted to touch") + H.visible_message("[M] attempted to touch [H]!") + return 0 - //CPR - if((M.head && (M.head.flags & HEADCOVERSMOUTH)) || (M.wear_mask && (M.wear_mask.flags & MASKCOVERSMOUTH))) - M << "Remove your mask!" - return 0 - if((H.head && (H.head.flags & HEADCOVERSMOUTH)) || (H.wear_mask && (H.wear_mask.flags & MASKCOVERSMOUTH))) - M << "Remove their mask!" - return 0 - - if(H.cpr_time < world.time + 30) - add_logs(H, M, "CPRed") - H.visible_message("[M] is trying to perform CPR on [H]!") - if(!do_mob(M, H)) - return 0 - if((H.health >= -99 && H.health <= 0)) - H.cpr_time = world.time - var/suff = min(H.getOxyLoss(), 7) - H.adjustOxyLoss(-suff) - H.updatehealth() - M.visible_message("[M] performs CPR on [H]!") - H << "You feel a breath of fresh air enter your lungs. It feels good." - - if("grab") - if(M == H || H.anchored) - return 0 - - add_logs(M, H, "grabbed", addition="passively") - - if(H.w_uniform) - H.w_uniform.add_fingerprint(M) - - var/obj/item/weapon/grab/G = new /obj/item/weapon/grab(M, H) - if(H.buckled) - M << "You cannot grab [H], \he is buckled in!" - if(!G) //the grab will delete itself in New if affecting is anchored - return - M.put_in_active_hand(G) - G.synch() - H.LAssailant = M - - playsound(H.loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) - H.visible_message("[M] has grabbed [H] passively!") + switch(M.a_intent) + if("help") + if(H.health >= 0) + H.help_shake_act(M) + if(H != M) + add_logs(M, H, "shaked") return 1 - if("harm") - add_logs(M, H, "punched") + //CPR + if((M.head && (M.head.flags & HEADCOVERSMOUTH)) || (M.wear_mask && (M.wear_mask.flags & MASKCOVERSMOUTH))) + M << "Remove your mask!" + return 0 + if((H.head && (H.head.flags & HEADCOVERSMOUTH)) || (H.wear_mask && (H.wear_mask.flags & MASKCOVERSMOUTH))) + M << "Remove their mask!" + return 0 - var/atk_verb = "punch" - if(H.lying) - atk_verb = "kick" - else if(M.dna) - atk_verb = M.dna.species.attack_verb - - var/damage = rand(0, 9) - damage += punchmod - - if(!damage) - if(M.dna) - playsound(H.loc, M.dna.species.miss_sound, 25, 1, -1) - else - playsound(H.loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1) - - H.visible_message("[M] has attempted to [atk_verb] [H]!") + if(H.cpr_time < world.time + 30) + add_logs(H, M, "CPRed") + H.visible_message("[M] is trying to perform CPR on [H]!") + if(!do_mob(M, H)) return 0 + if((H.health >= -99 && H.health <= 0)) + H.cpr_time = world.time + var/suff = min(H.getOxyLoss(), 7) + H.adjustOxyLoss(-suff) + H.updatehealth() + M.visible_message("[M] performs CPR on [H]!") + H << "You feel a breath of fresh air enter your lungs. It feels good." + if("grab") + if(M == H || H.anchored) + return 0 - var/obj/item/organ/limb/affecting = H.get_organ(ran_zone(M.zone_sel.selecting)) - var/armor_block = H.run_armor_check(affecting, "melee") + add_logs(M, H, "grabbed", addition="passively") - if(HULK in M.mutations) - damage += 5 + if(H.w_uniform) + H.w_uniform.add_fingerprint(M) + var/obj/item/weapon/grab/G = new /obj/item/weapon/grab(M, H) + if(H.buckled) + M << "You cannot grab [H], \he is buckled in!" + if(!G) //the grab will delete itself in New if affecting is anchored + return + M.put_in_active_hand(G) + G.synch() + H.LAssailant = M + + playsound(H.loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) + H.visible_message("[M] has grabbed [H] passively!") + return 1 + + if("harm") + add_logs(M, H, "punched") + + var/atk_verb = "punch" + if(H.lying) + atk_verb = "kick" + else if(M.dna) + atk_verb = M.dna.species.attack_verb + + var/damage = rand(0, 9) + damage += punchmod + + if(!damage) if(M.dna) - playsound(H.loc, M.dna.species.attack_sound, 25, 1, -1) + playsound(H.loc, M.dna.species.miss_sound, 25, 1, -1) else - playsound(H.loc, 'sound/weapons/punch1.ogg', 25, 1, -1) + playsound(H.loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1) + + H.visible_message("[M] has attempted to [atk_verb] [H]!") + return 0 - H.visible_message("[M] has [atk_verb]ed [H]!", \ - "[M] has [atk_verb]ed [H]!") + var/obj/item/organ/limb/affecting = H.get_organ(ran_zone(M.zone_sel.selecting)) + var/armor_block = H.run_armor_check(affecting, "melee") - H.apply_damage(damage, BRUTE, affecting, armor_block) - if((H.stat != DEAD) && damage >= 9) - H.visible_message("[M] has weakened [H]!", \ - "[M] has weakened [H]!") - H.apply_effect(4, WEAKEN, armor_block) - H.forcesay(hit_appends) - else if(H.lying) - H.forcesay(hit_appends) + if(HULK in M.mutations) + damage += 5 - if("disarm") - add_logs(M, H, "disarmed") + if(M.dna) + playsound(H.loc, M.dna.species.attack_sound, 25, 1, -1) + else + playsound(H.loc, 'sound/weapons/punch1.ogg', 25, 1, -1) - if(H.w_uniform) - H.w_uniform.add_fingerprint(M) - var/obj/item/organ/limb/affecting = H.get_organ(ran_zone(M.zone_sel.selecting)) - var/randn = rand(1, 100) - if(randn <= 25) - H.apply_effect(2, WEAKEN, H.run_armor_check(affecting, "melee")) - playsound(H, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) - H.visible_message("[M] has pushed [H]!", - "[M] has pushed [H]!") - H.forcesay(hit_appends) - return - var/talked = 0 // BubbleWrap + H.visible_message("[M] has [atk_verb]ed [H]!", \ + "[M] has [atk_verb]ed [H]!") - if(randn <= 60) - //BubbleWrap: Disarming breaks a pull - if(H.pulling) - H.visible_message("[M] has broken [H]'s grip on [H.pulling]!") + H.apply_damage(damage, BRUTE, affecting, armor_block) + if((H.stat != DEAD) && damage >= 9) + H.visible_message("[M] has weakened [H]!", \ + "[M] has weakened [H]!") + H.apply_effect(4, WEAKEN, armor_block) + H.forcesay(hit_appends) + else if(H.lying) + H.forcesay(hit_appends) + + if("disarm") + add_logs(M, H, "disarmed") + + if(H.w_uniform) + H.w_uniform.add_fingerprint(M) + var/obj/item/organ/limb/affecting = H.get_organ(ran_zone(M.zone_sel.selecting)) + var/randn = rand(1, 100) + if(randn <= 25) + H.apply_effect(2, WEAKEN, H.run_armor_check(affecting, "melee")) + playsound(H, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) + H.visible_message("[M] has pushed [H]!", + "[M] has pushed [H]!") + H.forcesay(hit_appends) + return + + var/talked = 0 // BubbleWrap + + if(randn <= 60) + //BubbleWrap: Disarming breaks a pull + if(H.pulling) + H.visible_message("[M] has broken [H]'s grip on [H.pulling]!") + talked = 1 + H.stop_pulling() + + //BubbleWrap: Disarming also breaks a grab - this will also stop someone being choked, won't it? + if(istype(H.l_hand, /obj/item/weapon/grab)) + var/obj/item/weapon/grab/lgrab = H.l_hand + if(lgrab.affecting) + H.visible_message("[M] has broken [H]'s grip on [lgrab.affecting]!") talked = 1 - H.stop_pulling() + spawn(1) + qdel(lgrab) + if(istype(H.r_hand, /obj/item/weapon/grab)) + var/obj/item/weapon/grab/rgrab = H.r_hand + if(rgrab.affecting) + H.visible_message("[M] has broken [H]'s grip on [rgrab.affecting]!") + talked = 1 + spawn(1) + qdel(rgrab) + //End BubbleWrap - //BubbleWrap: Disarming also breaks a grab - this will also stop someone being choked, won't it? - if(istype(H.l_hand, /obj/item/weapon/grab)) - var/obj/item/weapon/grab/lgrab = H.l_hand - if(lgrab.affecting) - H.visible_message("[M] has broken [H]'s grip on [lgrab.affecting]!") - talked = 1 - spawn(1) - qdel(lgrab) - if(istype(H.r_hand, /obj/item/weapon/grab)) - var/obj/item/weapon/grab/rgrab = H.r_hand - if(rgrab.affecting) - H.visible_message("[M] has broken [H]'s grip on [rgrab.affecting]!") - talked = 1 - spawn(1) - qdel(rgrab) - //End BubbleWrap - - if(!talked) //BubbleWrap - if(H.drop_item()) - H.visible_message("[M] has disarmed [H]!", \ - "[M] has disarmed [H]!") - playsound(H, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) - return + if(!talked) //BubbleWrap + if(H.drop_item()) + H.visible_message("[M] has disarmed [H]!", \ + "[M] has disarmed [H]!") + playsound(H, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) + return - playsound(H, 'sound/weapons/punchmiss.ogg', 25, 1, -1) - H.visible_message("[M] attempted to disarm [H]!", \ - "[M] attemped to disarm [H]!") - return + playsound(H, 'sound/weapons/punchmiss.ogg', 25, 1, -1) + H.visible_message("[M] attempted to disarm [H]!", \ + "[M] attemped to disarm [H]!") + return - proc/spec_attacked_by(var/obj/item/I, var/mob/living/user, var/def_zone, var/obj/item/organ/limb/affecting, var/hit_area, var/intent, var/obj/item/organ/limb/target_limb, target_area, var/mob/living/carbon/human/H) - // Allows you to put in item-specific reactions based on species - if((user != H) && H.check_shields(I.force, "the [I.name]")) - return 0 +/datum/species/proc/spec_attacked_by(var/obj/item/I, var/mob/living/user, var/def_zone, var/obj/item/organ/limb/affecting, var/hit_area, var/intent, var/obj/item/organ/limb/target_limb, target_area, var/mob/living/carbon/human/H) + // Allows you to put in item-specific reactions based on species + if((user != H) && H.check_shields(I.force, "the [I.name]")) + return 0 - if(I.attack_verb && I.attack_verb.len) - H.visible_message("[H] has been [pick(I.attack_verb)] in the [hit_area] with [I] by [user]!", \ - "[H] has been [pick(I.attack_verb)] in the [hit_area] with [I] by [user]!") - else if(I.force) - H.visible_message("[H] has been attacked in the [hit_area] with [I] by [user]!", \ - "[H] has been attacked in the [hit_area] with [I] by [user]!") - else - return 0 + if(I.attack_verb && I.attack_verb.len) + H.visible_message("[H] has been [pick(I.attack_verb)] in the [hit_area] with [I] by [user]!", \ + "[H] has been [pick(I.attack_verb)] in the [hit_area] with [I] by [user]!") + else if(I.force) + H.visible_message("[H] has been attacked in the [hit_area] with [I] by [user]!", \ + "[H] has been attacked in the [hit_area] with [I] by [user]!") + else + return 0 - var/armor = H.run_armor_check(affecting, "melee", "Your armor has protected your [hit_area].", "Your armor has softened a hit to your [hit_area].") - if(armor >= 100) return 0 - var/Iforce = I.force //to avoid runtimes on the forcesay checks at the bottom. Some items might delete themselves if you drop them. (stunning yourself, ninja swords) + var/armor = H.run_armor_check(affecting, "melee", "Your armor has protected your [hit_area].", "Your armor has softened a hit to your [hit_area].") + if(armor >= 100) return 0 + var/Iforce = I.force //to avoid runtimes on the forcesay checks at the bottom. Some items might delete themselves if you drop them. (stunning yourself, ninja swords) - apply_damage(I.force, I.damtype, affecting, armor, H) + apply_damage(I.force, I.damtype, affecting, armor, H) - var/bloody = 0 - if(((I.damtype == BRUTE) && prob(25 + (I.force * 2)))) - if(affecting.status == ORGAN_ORGANIC) - I.add_blood(H) //Make the weapon bloody, not the person. - if(prob(I.force * 2)) //blood spatter! - bloody = 1 - var/turf/location = H.loc - if(istype(location, /turf/simulated)) - location.add_blood(H) - if(get_dist(H, H) <= 1) //people with TK won't get smeared with blood - if(H.wear_suit) - H.wear_suit.add_blood(H) - H.update_inv_wear_suit(0) //updates mob overlays to show the new blood (no refresh) - else if(H.w_uniform) - H.w_uniform.add_blood(H) - H.update_inv_w_uniform(0) //updates mob overlays to show the new blood (no refresh) - if (H.gloves) - var/obj/item/clothing/gloves/G = H.gloves - G.add_blood(H) - else - H.add_blood(H) - H.update_inv_gloves() //updates on-mob overlays for bloody hands and/or bloody gloves - - - switch(hit_area) - if("head") //Harder to score a stun but if you do it lasts a bit longer - if(H.stat == CONSCIOUS && prob(I.force) && armor < 50) - H.visible_message("[H] has been knocked unconscious!", \ - "[H] has been knocked unconscious!") - H.apply_effect(20, PARALYZE, armor) - if(H != user && I.damtype == BRUTE) - ticker.mode.remove_revolutionary(H.mind) - - if(bloody) //Apply blood - if(H.wear_mask) - H.wear_mask.add_blood(H) - H.update_inv_wear_mask(0) - if(H.head) - H.head.add_blood(H) - H.update_inv_head(0) - if(H.glasses && prob(33)) - H.glasses.add_blood(H) - H.update_inv_glasses(0) - - if("chest") //Easier to score a stun but lasts less time - if(H.stat == CONSCIOUS && prob(I.force + 10)) - H.visible_message("[H] has been knocked down!", \ - "[H] has been knocked down!") - H.apply_effect(5, WEAKEN, armor) - - if(bloody) - if(H.wear_suit) - H.wear_suit.add_blood(H) - H.update_inv_wear_suit(0) - if(H.w_uniform) - H.w_uniform.add_blood(H) - H.update_inv_w_uniform(0) - - if(Iforce > 10 || Iforce >= 5 && prob(33)) - H.forcesay(hit_appends) //forcesay checks stat already. - return - - proc/attacked_by(var/obj/item/I, var/mob/living/user, var/def_zone, var/mob/living/carbon/human/H) - H.apply_damage(I.force, I.damtype) - if(I.damtype == "brute") - if(prob(33) && I.force && !(NOBLOOD in specflags)) + var/bloody = 0 + if(((I.damtype == BRUTE) && prob(25 + (I.force * 2)))) + if(affecting.status == ORGAN_ORGANIC) + I.add_blood(H) //Make the weapon bloody, not the person. + if(prob(I.force * 2)) //blood spatter! + bloody = 1 var/turf/location = H.loc if(istype(location, /turf/simulated)) - location.add_blood_floor(H) + location.add_blood(H) + if(get_dist(H, H) <= 1) //people with TK won't get smeared with blood + if(H.wear_suit) + H.wear_suit.add_blood(H) + H.update_inv_wear_suit(0) //updates mob overlays to show the new blood (no refresh) + else if(H.w_uniform) + H.w_uniform.add_blood(H) + H.update_inv_w_uniform(0) //updates mob overlays to show the new blood (no refresh) + if (H.gloves) + var/obj/item/clothing/gloves/G = H.gloves + G.add_blood(H) + else + H.add_blood(H) + H.update_inv_gloves() //updates on-mob overlays for bloody hands and/or bloody gloves - var/showname = "." - if(user) - showname = " by [user]!" - if(!(user in viewers(I, null))) - showname = "." - if(I.attack_verb && I.attack_verb.len) - H.visible_message("[H] has been [pick(I.attack_verb)] with [I][showname]", - "[H] has been [pick(I.attack_verb)] with [I][showname]") - else if(I.force) - H.visible_message("[H] has been attacked with [I][showname]", - "[H] has been attacked with [I][showname]") - if(!showname && user) - if(user.client) - user << "You attack [H] with [I]. " + switch(hit_area) + if("head") //Harder to score a stun but if you do it lasts a bit longer + if(H.stat == CONSCIOUS && prob(I.force) && armor < 50) + H.visible_message("[H] has been knocked unconscious!", \ + "[H] has been knocked unconscious!") + H.apply_effect(20, PARALYZE, armor) + if(H != user && I.damtype == BRUTE) + ticker.mode.remove_revolutionary(H.mind) + if(bloody) //Apply blood + if(H.wear_mask) + H.wear_mask.add_blood(H) + H.update_inv_wear_mask(0) + if(H.head) + H.head.add_blood(H) + H.update_inv_head(0) + if(H.glasses && prob(33)) + H.glasses.add_blood(H) + H.update_inv_glasses(0) + + if("chest") //Easier to score a stun but lasts less time + if(H.stat == CONSCIOUS && prob(I.force + 10)) + H.visible_message("[H] has been knocked down!", \ + "[H] has been knocked down!") + H.apply_effect(5, WEAKEN, armor) + + if(bloody) + if(H.wear_suit) + H.wear_suit.add_blood(H) + H.update_inv_wear_suit(0) + if(H.w_uniform) + H.w_uniform.add_blood(H) + H.update_inv_w_uniform(0) + + if(Iforce > 10 || Iforce >= 5 && prob(33)) + H.forcesay(hit_appends) //forcesay checks stat already. return - proc/apply_damage(var/damage, var/damagetype = BRUTE, var/def_zone = null, var/blocked, var/mob/living/carbon/human/H) - blocked = (100-(blocked+armor))/100 - if(blocked <= 0) return 0 +/datum/species/proc/attacked_by(var/obj/item/I, var/mob/living/user, var/def_zone, var/mob/living/carbon/human/H) + H.apply_damage(I.force, I.damtype) + if(I.damtype == "brute") + if(prob(33) && I.force && !(NOBLOOD in specflags)) + var/turf/location = H.loc + if(istype(location, /turf/simulated)) + location.add_blood_floor(H) - var/obj/item/organ/limb/organ = null - if(isorgan(def_zone)) - organ = def_zone - else - if(!def_zone) def_zone = ran_zone(def_zone) - organ = H.get_organ(check_zone(def_zone)) - if(!organ) return 0 + var/showname = "." + if(user) + showname = " by [user]!" + if(!(user in viewers(I, null))) + showname = "." - damage = (damage * blocked) + if(I.attack_verb && I.attack_verb.len) + H.visible_message("[H] has been [pick(I.attack_verb)] with [I][showname]", + "[H] has been [pick(I.attack_verb)] with [I][showname]") + else if(I.force) + H.visible_message("[H] has been attacked with [I][showname]", + "[H] has been attacked with [I][showname]") + if(!showname && user) + if(user.client) + user << "You attack [H] with [I]. " - switch(damagetype) - if(BRUTE) - H.damageoverlaytemp = 20 - if(organ.take_damage(damage*brutemod, 0)) - H.update_damage_overlays(0) - if(BURN) - H.damageoverlaytemp = 20 - if(organ.take_damage(0, damage*burnmod)) - H.update_damage_overlays(0) - if(TOX) - H.adjustToxLoss(damage * blocked) - if(OXY) - H.adjustOxyLoss(damage * blocked) - if(CLONE) - H.adjustCloneLoss(damage * blocked) - if(STAMINA) - H.adjustStaminaLoss(damage * blocked) + return - proc/on_hit(var/obj/item/projectile/proj_type, var/mob/living/carbon/human/H) - // called when hit by a projectile - switch(proj_type) - if(/obj/item/projectile/energy/floramut) // overwritten by plants/pods - H.show_message("The radiation beam dissipates harmlessly through your body.") - if(/obj/item/projectile/energy/florayield) - H.show_message("The radiation beam dissipates harmlessly through your body.") - return +/datum/species/proc/apply_damage(var/damage, var/damagetype = BRUTE, var/def_zone = null, var/blocked, var/mob/living/carbon/human/H) + blocked = (100-(blocked+armor))/100 + if(blocked <= 0) return 0 - ///////////// - //BREATHING// - ///////////// + var/obj/item/organ/limb/organ = null + if(isorgan(def_zone)) + organ = def_zone + else + if(!def_zone) def_zone = ran_zone(def_zone) + organ = H.get_organ(check_zone(def_zone)) + if(!organ) return 0 - proc/breathe(var/mob/living/carbon/human/H) - if(H.reagents.has_reagent("lexorin")) return - if(istype(H.loc, /obj/machinery/atmospherics/unary/cryo_cell)) return + damage = (damage * blocked) - var/datum/gas_mixture/environment = H.loc.return_air() - var/datum/gas_mixture/breath - // HACK NEED CHANGING LATER - if(H.health <= config.health_threshold_crit) - H.losebreath++ + switch(damagetype) + if(BRUTE) + H.damageoverlaytemp = 20 + if(organ.take_damage(damage*brutemod, 0)) + H.update_damage_overlays(0) + if(BURN) + H.damageoverlaytemp = 20 + if(organ.take_damage(0, damage*burnmod)) + H.update_damage_overlays(0) + if(TOX) + H.adjustToxLoss(damage * blocked) + if(OXY) + H.adjustOxyLoss(damage * blocked) + if(CLONE) + H.adjustCloneLoss(damage * blocked) + if(STAMINA) + H.adjustStaminaLoss(damage * blocked) - if(H.losebreath>0) //Suffocating so do not take a breath - H.losebreath-- - if (prob(10)) //Gasp per 10 ticks? Sounds about right. - spawn H.emote("gasp") +/datum/species/proc/on_hit(var/obj/item/projectile/proj_type, var/mob/living/carbon/human/H) + // called when hit by a projectile + switch(proj_type) + if(/obj/item/projectile/energy/floramut) // overwritten by plants/pods + H.show_message("The radiation beam dissipates harmlessly through your body.") + if(/obj/item/projectile/energy/florayield) + H.show_message("The radiation beam dissipates harmlessly through your body.") + return + +///////////// +//BREATHING// +///////////// + +/datum/species/proc/breathe(var/mob/living/carbon/human/H) + if(H.reagents.has_reagent("lexorin")) return + if(istype(H.loc, /obj/machinery/atmospherics/unary/cryo_cell)) return + + var/datum/gas_mixture/environment = H.loc.return_air() + var/datum/gas_mixture/breath + // HACK NEED CHANGING LATER + if(H.health <= config.health_threshold_crit) + H.losebreath++ + + if(H.losebreath>0) //Suffocating so do not take a breath + H.losebreath-- + if (prob(10)) //Gasp per 10 ticks? Sounds about right. + spawn H.emote("gasp") + if(istype(H.loc, /obj/)) + var/obj/location_as_object = H.loc + location_as_object.handle_internal_lifeform(H, 0) + else + //First, check for air from internal atmosphere (using an air tank and mask generally) + breath = H.get_breath_from_internal(BREATH_VOLUME) // Super hacky -- TLE + //breath = get_breath_from_internal(0.5) // Manually setting to old BREATH_VOLUME amount -- TLE + + //No breath from internal atmosphere so get breath from location + if(!breath) + if(isobj(H.loc)) + var/obj/location_as_object = H.loc + breath = location_as_object.handle_internal_lifeform(H, BREATH_VOLUME) + else if(isturf(H.loc)) + var/breath_moles = 0 + /*if(environment.return_pressure() > ONE_ATMOSPHERE) + // Loads of air around (pressure effect will be handled elsewhere), so lets just take a enough to fill our lungs at normal atmos pressure (using n = Pv/RT) + breath_moles = (ONE_ATMOSPHERE*BREATH_VOLUME/R_IDEAL_GAS_EQUATION*environment.temperature) + else*/ + // Not enough air around, take a percentage of what's there to model this properly + breath_moles = environment.total_moles()*BREATH_PERCENTAGE + + breath = H.loc.remove_air(breath_moles) + // Handle chem smoke effect -- Doohl + var/block = 0 + if(H.wear_mask) + if(H.wear_mask.flags & BLOCK_GAS_SMOKE_EFFECT) + block = 1 + if(H.glasses) + if(H.glasses.flags & BLOCK_GAS_SMOKE_EFFECT) + block = 1 + if(H.head) + if(H.head.flags & BLOCK_GAS_SMOKE_EFFECT) + block = 1 + + if(!block) + + for(var/obj/effect/effect/chem_smoke/smoke in view(1, H)) + if(smoke.reagents.total_volume) + smoke.reagents.reaction(H, INGEST) + spawn(5) + if(smoke) + smoke.reagents.copy_to(H, 10) // I dunno, maybe the reagents enter the blood stream through the lungs? + break // If they breathe in the nasty stuff once, no need to continue checking + + else //Still give containing object the chance to interact if(istype(H.loc, /obj/)) var/obj/location_as_object = H.loc location_as_object.handle_internal_lifeform(H, 0) - else - //First, check for air from internal atmosphere (using an air tank and mask generally) - breath = H.get_breath_from_internal(BREATH_VOLUME) // Super hacky -- TLE - //breath = get_breath_from_internal(0.5) // Manually setting to old BREATH_VOLUME amount -- TLE - //No breath from internal atmosphere so get breath from location - if(!breath) - if(isobj(H.loc)) - var/obj/location_as_object = H.loc - breath = location_as_object.handle_internal_lifeform(H, BREATH_VOLUME) - else if(isturf(H.loc)) - var/breath_moles = 0 - /*if(environment.return_pressure() > ONE_ATMOSPHERE) - // Loads of air around (pressure effect will be handled elsewhere), so lets just take a enough to fill our lungs at normal atmos pressure (using n = Pv/RT) - breath_moles = (ONE_ATMOSPHERE*BREATH_VOLUME/R_IDEAL_GAS_EQUATION*environment.temperature) - else*/ - // Not enough air around, take a percentage of what's there to model this properly - breath_moles = environment.total_moles()*BREATH_PERCENTAGE + handle_breath(breath, H) - breath = H.loc.remove_air(breath_moles) - // Handle chem smoke effect -- Doohl - var/block = 0 - if(H.wear_mask) - if(H.wear_mask.flags & BLOCK_GAS_SMOKE_EFFECT) - block = 1 - if(H.glasses) - if(H.glasses.flags & BLOCK_GAS_SMOKE_EFFECT) - block = 1 - if(H.head) - if(H.head.flags & BLOCK_GAS_SMOKE_EFFECT) - block = 1 + if(breath) + H.loc.assume_air(breath) - if(!block) +/datum/species/proc/handle_breath(datum/gas_mixture/breath, var/mob/living/carbon/human/H) + if((H.status_flags & GODMODE)) + return - for(var/obj/effect/effect/chem_smoke/smoke in view(1, H)) - if(smoke.reagents.total_volume) - smoke.reagents.reaction(H, INGEST) - spawn(5) - if(smoke) - smoke.reagents.copy_to(H, 10) // I dunno, maybe the reagents enter the blood stream through the lungs? - break // If they breathe in the nasty stuff once, no need to continue checking - - else //Still give containing object the chance to interact - if(istype(H.loc, /obj/)) - var/obj/location_as_object = H.loc - location_as_object.handle_internal_lifeform(H, 0) - - handle_breath(breath, H) - - if(breath) - H.loc.assume_air(breath) - - proc/handle_breath(datum/gas_mixture/breath, var/mob/living/carbon/human/H) - if((H.status_flags & GODMODE)) + if(!breath || (breath.total_moles() == 0) || H.suiciding) + if(H.reagents.has_reagent("inaprovaline")) return + if(H.suiciding) + H.adjustOxyLoss(2)//If you are suiciding, you should die a little bit faster + H.failed_last_breath = 1 + H.oxygen_alert = max(H.oxygen_alert, 1) + return 0 + if(H.health >= config.health_threshold_crit) + if(NOBREATH in specflags) return 1 + H.adjustOxyLoss(HUMAN_MAX_OXYLOSS) + H.failed_last_breath = 1 + else + H.adjustOxyLoss(HUMAN_CRIT_MAX_OXYLOSS) + H.failed_last_breath = 1 - if(!breath || (breath.total_moles() == 0) || H.suiciding) - if(H.reagents.has_reagent("inaprovaline")) - return - if(H.suiciding) - H.adjustOxyLoss(2)//If you are suiciding, you should die a little bit faster + H.oxygen_alert = max(H.oxygen_alert, 1) + + return 0 + + var/safe_oxygen_min = 16 // Minimum safe partial pressure of O2, in kPa + //var/safe_oxygen_max = 140 // Maximum safe partial pressure of O2, in kPa (Not used for now) + var/safe_co2_max = 10 // Yes it's an arbitrary value who cares? + var/safe_toxins_max = 0.005 + 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 + + //Partial pressure of the O2 in our breath + var/O2_pp = (breath.oxygen/breath.total_moles())*breath_pressure + // Same, but for the toxins + var/Toxins_pp = (breath.toxins/breath.total_moles())*breath_pressure + // And CO2, lets say a PP of more than 10 will be bad (It's a little less really, but eh, being passed out all round aint no fun) + var/CO2_pp = (breath.carbon_dioxide/breath.total_moles())*breath_pressure // Tweaking to fit the hacky bullshit I've done with atmo -- TLE + //var/CO2_pp = (breath.carbon_dioxide/breath.total_moles())*0.5 // The default pressure value + + if(O2_pp < safe_oxygen_min) // Too little oxygen + if(!(NOBREATH in specflags) || (H.health <= config.health_threshold_crit)) + if(prob(20)) + spawn(0) H.emote("gasp") + if(O2_pp > 0) + var/ratio = safe_oxygen_min/O2_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 = 1 - H.oxygen_alert = max(H.oxygen_alert, 1) - return 0 - if(H.health >= config.health_threshold_crit) - if(NOBREATH in specflags) return 1 + oxygen_used = breath.oxygen*ratio/6 + else H.adjustOxyLoss(HUMAN_MAX_OXYLOSS) H.failed_last_breath = 1 - else - H.adjustOxyLoss(HUMAN_CRIT_MAX_OXYLOSS) - H.failed_last_breath = 1 - H.oxygen_alert = max(H.oxygen_alert, 1) + /*else if (O2_pp > safe_oxygen_max) // Too much oxygen (commented this out for now, I'll deal with pressure damage elsewhere I suppose) + spawn(0) emote("cough") + var/ratio = O2_pp/safe_oxygen_max + oxyloss += 5*ratio + oxygen_used = breath.oxygen*ratio/6 + oxygen_alert = max(oxygen_alert, 1)*/ + else // We're in safe limits + H.failed_last_breath = 0 + H.adjustOxyLoss(-5) + oxygen_used = breath.oxygen/6 + H.oxygen_alert = 0 - return 0 + breath.oxygen -= oxygen_used + breath.carbon_dioxide += oxygen_used - var/safe_oxygen_min = 16 // Minimum safe partial pressure of O2, in kPa - //var/safe_oxygen_max = 140 // Maximum safe partial pressure of O2, in kPa (Not used for now) - var/safe_co2_max = 10 // Yes it's an arbitrary value who cares? - var/safe_toxins_max = 0.005 - 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 + //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(CO2_pp > safe_co2_max && !(NOBREATH in specflags)) + 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.Paralyse(3) + H.adjustOxyLoss(3) // 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.adjustOxyLoss(8) + if(prob(20)) // Lets give them some chance to know somethings not right though I guess. + spawn(0) H.emote("cough") - //Partial pressure of the O2 in our breath - var/O2_pp = (breath.oxygen/breath.total_moles())*breath_pressure - // Same, but for the toxins - var/Toxins_pp = (breath.toxins/breath.total_moles())*breath_pressure - // And CO2, lets say a PP of more than 10 will be bad (It's a little less really, but eh, being passed out all round aint no fun) - var/CO2_pp = (breath.carbon_dioxide/breath.total_moles())*breath_pressure // Tweaking to fit the hacky bullshit I've done with atmo -- TLE - //var/CO2_pp = (breath.carbon_dioxide/breath.total_moles())*0.5 // The default pressure value + else + H.co2overloadtime = 0 - if(O2_pp < safe_oxygen_min) // Too little oxygen - if(!(NOBREATH in specflags) || (H.health <= config.health_threshold_crit)) + if(Toxins_pp > safe_toxins_max && !(NOBREATH in specflags)) // Too much toxins + var/ratio = (breath.toxins/safe_toxins_max) * 10 + //adjustToxLoss(Clamp(ratio, MIN_PLASMA_DAMAGE, MAX_PLASMA_DAMAGE)) //Limit amount of damage toxin exposure can do per second + if(H.reagents) + H.reagents.add_reagent("plasma", Clamp(ratio, MIN_PLASMA_DAMAGE, MAX_PLASMA_DAMAGE)) + H.toxins_alert = max(H.toxins_alert, 1) + else + H.toxins_alert = 0 + + if(breath.trace_gases.len && !(NOBREATH in specflags)) // If there's some other shit in the air lets deal with it here. + for(var/datum/gas/sleeping_agent/SA in breath.trace_gases) + var/SA_pp = (SA.moles/breath.total_moles())*breath_pressure + if(SA_pp > SA_para_min) // Enough to make us paralysed for a bit + H.Paralyse(3) // 3 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.sleeping+2, 10) + 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)) - spawn(0) H.emote("gasp") - if(O2_pp > 0) - var/ratio = safe_oxygen_min/O2_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 = 1 - oxygen_used = breath.oxygen*ratio/6 - else - H.adjustOxyLoss(HUMAN_MAX_OXYLOSS) - H.failed_last_breath = 1 - H.oxygen_alert = max(H.oxygen_alert, 1) - /*else if (O2_pp > safe_oxygen_max) // Too much oxygen (commented this out for now, I'll deal with pressure damage elsewhere I suppose) - spawn(0) emote("cough") - var/ratio = O2_pp/safe_oxygen_max - oxyloss += 5*ratio - oxygen_used = breath.oxygen*ratio/6 - oxygen_alert = max(oxygen_alert, 1)*/ - else // We're in safe limits - H.failed_last_breath = 0 - H.adjustOxyLoss(-5) - oxygen_used = breath.oxygen/6 - H.oxygen_alert = 0 + spawn(0) H.emote(pick("giggle", "laugh")) - breath.oxygen -= oxygen_used - breath.carbon_dioxide += oxygen_used + handle_temperature(breath, H) - //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(CO2_pp > safe_co2_max && !(NOBREATH in specflags)) - 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.Paralyse(3) - H.adjustOxyLoss(3) // 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.adjustOxyLoss(8) - if(prob(20)) // Lets give them some chance to know somethings not right though I guess. - spawn(0) H.emote("cough") + return 1 - else - H.co2overloadtime = 0 +/datum/species/proc/handle_temperature(datum/gas_mixture/breath, var/mob/living/carbon/human/H) // called by human/life, handles temperatures + if( (abs(310.15 - breath.temperature) > 50) && !(COLD_RESISTANCE in H.mutations) && !(COLDRES in specflags)) // Hot air hurts :( + if(breath.temperature < 260.15) + if(prob(20)) + H << "You feel your face freezing and an icicle forming in your lungs!" + else if(breath.temperature > 360.15 && !(HEATRES in specflags)) + if(prob(20)) + H << "You feel your face burning and a searing heat in your lungs!" - if(Toxins_pp > safe_toxins_max && !(NOBREATH in specflags)) // Too much toxins - var/ratio = (breath.toxins/safe_toxins_max) * 10 - //adjustToxLoss(Clamp(ratio, MIN_PLASMA_DAMAGE, MAX_PLASMA_DAMAGE)) //Limit amount of damage toxin exposure can do per second - if(H.reagents) - H.reagents.add_reagent("plasma", Clamp(ratio, MIN_PLASMA_DAMAGE, MAX_PLASMA_DAMAGE)) - H.toxins_alert = max(H.toxins_alert, 1) - else - H.toxins_alert = 0 + if(!(COLDRES in specflags)) // COLD DAMAGE + switch(breath.temperature) + if(-INFINITY to 120) + H.apply_damage(COLD_GAS_DAMAGE_LEVEL_3, BURN, "head") + H.fire_alert = max(H.fire_alert, 1) + if(120 to 200) + H.apply_damage(COLD_GAS_DAMAGE_LEVEL_2, BURN, "head") + H.fire_alert = max(H.fire_alert, 1) + if(200 to 260) + H.apply_damage(COLD_GAS_DAMAGE_LEVEL_1, BURN, "head") + H.fire_alert = max(H.fire_alert, 1) - if(breath.trace_gases.len && !(NOBREATH in specflags)) // If there's some other shit in the air lets deal with it here. - for(var/datum/gas/sleeping_agent/SA in breath.trace_gases) - var/SA_pp = (SA.moles/breath.total_moles())*breath_pressure - if(SA_pp > SA_para_min) // Enough to make us paralysed for a bit - H.Paralyse(3) // 3 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.sleeping+2, 10) - 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)) - spawn(0) H.emote(pick("giggle", "laugh")) + if(!(HEATRES in specflags)) // HEAT DAMAGE + switch(breath.temperature) + if(360 to 400) + H.apply_damage(HEAT_GAS_DAMAGE_LEVEL_1, BURN, "head") + H.fire_alert = max(H.fire_alert, 2) + if(400 to 1000) + H.apply_damage(HEAT_GAS_DAMAGE_LEVEL_2, BURN, "head") + H.fire_alert = max(H.fire_alert, 2) + if(1000 to INFINITY) + H.apply_damage(HEAT_GAS_DAMAGE_LEVEL_3, BURN, "head") + H.fire_alert = max(H.fire_alert, 2) - handle_temperature(breath, H) - - return 1 - - proc/handle_temperature(datum/gas_mixture/breath, var/mob/living/carbon/human/H) // called by human/life, handles temperatures - if( (abs(310.15 - breath.temperature) > 50) && !(COLD_RESISTANCE in H.mutations) && !(COLDRES in specflags)) // Hot air hurts :( - if(breath.temperature < 260.15) - if(prob(20)) - H << "You feel your face freezing and an icicle forming in your lungs!" - else if(breath.temperature > 360.15 && !(HEATRES in specflags)) - if(prob(20)) - H << "You feel your face burning and a searing heat in your lungs!" - - if(!(COLDRES in specflags)) // COLD DAMAGE - switch(breath.temperature) - if(-INFINITY to 120) - H.apply_damage(COLD_GAS_DAMAGE_LEVEL_3, BURN, "head") - H.fire_alert = max(H.fire_alert, 1) - if(120 to 200) - H.apply_damage(COLD_GAS_DAMAGE_LEVEL_2, BURN, "head") - H.fire_alert = max(H.fire_alert, 1) - if(200 to 260) - H.apply_damage(COLD_GAS_DAMAGE_LEVEL_1, BURN, "head") - H.fire_alert = max(H.fire_alert, 1) - - if(!(HEATRES in specflags)) // HEAT DAMAGE - switch(breath.temperature) - if(360 to 400) - H.apply_damage(HEAT_GAS_DAMAGE_LEVEL_1, BURN, "head") - H.fire_alert = max(H.fire_alert, 2) - if(400 to 1000) - H.apply_damage(HEAT_GAS_DAMAGE_LEVEL_2, BURN, "head") - H.fire_alert = max(H.fire_alert, 2) - if(1000 to INFINITY) - H.apply_damage(HEAT_GAS_DAMAGE_LEVEL_3, BURN, "head") - H.fire_alert = max(H.fire_alert, 2) + return +/datum/species/proc/handle_environment(datum/gas_mixture/environment, var/mob/living/carbon/human/H) + if(!environment) return - proc/handle_environment(datum/gas_mixture/environment, var/mob/living/carbon/human/H) - if(!environment) - return + var/loc_temp = H.get_temperature(environment) + //world << "Loc temp: [loc_temp] - Body temp: [bodytemperature] - Fireloss: [getFireLoss()] - Thermal protection: [get_thermal_protection()] - Fire protection: [thermal_protection + add_fire_protection(loc_temp)] - Heat capacity: [environment_heat_capacity] - Location: [loc] - src: [src]" - var/loc_temp = H.get_temperature(environment) - //world << "Loc temp: [loc_temp] - Body temp: [bodytemperature] - Fireloss: [getFireLoss()] - Thermal protection: [get_thermal_protection()] - Fire protection: [thermal_protection + add_fire_protection(loc_temp)] - Heat capacity: [environment_heat_capacity] - Location: [loc] - src: [src]" + //Body temperature is adjusted in two steps. Firstly your body tries to stabilize itself a bit. + if(H.stat != 2) + H.stabilize_temperature_from_calories() - //Body temperature is adjusted in two steps. Firstly your body tries to stabilize itself a bit. - if(H.stat != 2) - H.stabilize_temperature_from_calories() + //After then, it reacts to the surrounding atmosphere based on your thermal protection + if(!H.on_fire) //If you're on fire, you do not heat up or cool down based on surrounding gases + if(loc_temp < H.bodytemperature) + //Place is colder than we are + var/thermal_protection = H.get_cold_protection(loc_temp) //This returns a 0 - 1 value, which corresponds to the percentage of protection based on what you're wearing and what you're exposed to. + if(thermal_protection < 1) + H.bodytemperature += min((1-thermal_protection) * ((loc_temp - H.bodytemperature) / BODYTEMP_COLD_DIVISOR), BODYTEMP_COOLING_MAX) + else + //Place is hotter than we are + var/thermal_protection = H.get_heat_protection(loc_temp) //This returns a 0 - 1 value, which corresponds to the percentage of protection based on what you're wearing and what you're exposed to. + if(thermal_protection < 1) + H.bodytemperature += min((1-thermal_protection) * ((loc_temp - H.bodytemperature) / BODYTEMP_HEAT_DIVISOR), BODYTEMP_HEATING_MAX) - //After then, it reacts to the surrounding atmosphere based on your thermal protection - if(!H.on_fire) //If you're on fire, you do not heat up or cool down based on surrounding gases - if(loc_temp < H.bodytemperature) - //Place is colder than we are - var/thermal_protection = H.get_cold_protection(loc_temp) //This returns a 0 - 1 value, which corresponds to the percentage of protection based on what you're wearing and what you're exposed to. - if(thermal_protection < 1) - H.bodytemperature += min((1-thermal_protection) * ((loc_temp - H.bodytemperature) / BODYTEMP_COLD_DIVISOR), BODYTEMP_COOLING_MAX) - else - //Place is hotter than we are - var/thermal_protection = H.get_heat_protection(loc_temp) //This returns a 0 - 1 value, which corresponds to the percentage of protection based on what you're wearing and what you're exposed to. - if(thermal_protection < 1) - H.bodytemperature += min((1-thermal_protection) * ((loc_temp - H.bodytemperature) / BODYTEMP_HEAT_DIVISOR), BODYTEMP_HEATING_MAX) - - // +/- 50 degrees from 310.15K is the 'safe' zone, where no damage is dealt. - if(H.bodytemperature > BODYTEMP_HEAT_DAMAGE_LIMIT && !(HEATRES in specflags)) - //Body temperature is too hot. - H.fire_alert = max(H.fire_alert, 1) - switch(H.bodytemperature) - if(360 to 400) - H.apply_damage(HEAT_DAMAGE_LEVEL_1*heatmod, BURN) + // +/- 50 degrees from 310.15K is the 'safe' zone, where no damage is dealt. + if(H.bodytemperature > BODYTEMP_HEAT_DAMAGE_LIMIT && !(HEATRES in specflags)) + //Body temperature is too hot. + H.fire_alert = max(H.fire_alert, 1) + switch(H.bodytemperature) + if(360 to 400) + H.apply_damage(HEAT_DAMAGE_LEVEL_1*heatmod, BURN) + H.fire_alert = max(H.fire_alert, 2) + if(400 to 460) + H.apply_damage(HEAT_DAMAGE_LEVEL_2*heatmod, BURN) + H.fire_alert = max(H.fire_alert, 2) + if(460 to INFINITY) + if(H.on_fire) + H.apply_damage(HEAT_DAMAGE_LEVEL_3*heatmod, BURN) H.fire_alert = max(H.fire_alert, 2) - if(400 to 460) + else H.apply_damage(HEAT_DAMAGE_LEVEL_2*heatmod, BURN) H.fire_alert = max(H.fire_alert, 2) - if(460 to INFINITY) - if(H.on_fire) - H.apply_damage(HEAT_DAMAGE_LEVEL_3*heatmod, BURN) - H.fire_alert = max(H.fire_alert, 2) - else - H.apply_damage(HEAT_DAMAGE_LEVEL_2*heatmod, BURN) - H.fire_alert = max(H.fire_alert, 2) - else if(H.bodytemperature < BODYTEMP_COLD_DAMAGE_LIMIT && !(COLDRES in specflags)) - H.fire_alert = max(H.fire_alert, 1) - if(!istype(H.loc, /obj/machinery/atmospherics/unary/cryo_cell)) - switch(H.bodytemperature) - if(200 to 260) - H.apply_damage(COLD_DAMAGE_LEVEL_1*coldmod, BURN) - H.fire_alert = max(H.fire_alert, 1) - if(120 to 200) - H.apply_damage(COLD_DAMAGE_LEVEL_2*coldmod, BURN) - H.fire_alert = max(H.fire_alert, 1) - if(-INFINITY to 120) - H.apply_damage(COLD_DAMAGE_LEVEL_3*coldmod, BURN) - H.fire_alert = max(H.fire_alert, 1) + else if(H.bodytemperature < BODYTEMP_COLD_DAMAGE_LIMIT && !(COLDRES in specflags)) + H.fire_alert = max(H.fire_alert, 1) + if(!istype(H.loc, /obj/machinery/atmospherics/unary/cryo_cell)) + switch(H.bodytemperature) + if(200 to 260) + H.apply_damage(COLD_DAMAGE_LEVEL_1*coldmod, BURN) + H.fire_alert = max(H.fire_alert, 1) + if(120 to 200) + H.apply_damage(COLD_DAMAGE_LEVEL_2*coldmod, BURN) + H.fire_alert = max(H.fire_alert, 1) + if(-INFINITY to 120) + H.apply_damage(COLD_DAMAGE_LEVEL_3*coldmod, BURN) + H.fire_alert = max(H.fire_alert, 1) - // Account for massive pressure differences. Done by Polymorph - // Made it possible to actually have something that can protect against high pressure... Done by Errorage. Polymorph now has an axe sticking from his head for his previous hardcoded nonsense! + // Account for massive pressure differences. Done by Polymorph + // Made it possible to actually have something that can protect against high pressure... Done by Errorage. Polymorph now has an axe sticking from his head for his previous hardcoded nonsense! - var/pressure = environment.return_pressure() - var/adjusted_pressure = H.calculate_affecting_pressure(pressure) //Returns how much pressure actually affects the mob. - switch(adjusted_pressure) - if(HAZARD_HIGH_PRESSURE to INFINITY) - if(!(HEATRES in specflags)) - H.adjustBruteLoss( min( ( (adjusted_pressure / HAZARD_HIGH_PRESSURE) -1 )*PRESSURE_DAMAGE_COEFFICIENT , MAX_HIGH_PRESSURE_DAMAGE) ) - H.pressure_alert = 2 - else - H.pressure_alert = 1 - if(WARNING_HIGH_PRESSURE to HAZARD_HIGH_PRESSURE) + var/pressure = environment.return_pressure() + var/adjusted_pressure = H.calculate_affecting_pressure(pressure) //Returns how much pressure actually affects the mob. + switch(adjusted_pressure) + if(HAZARD_HIGH_PRESSURE to INFINITY) + if(!(HEATRES in specflags)) + H.adjustBruteLoss( min( ( (adjusted_pressure / HAZARD_HIGH_PRESSURE) -1 )*PRESSURE_DAMAGE_COEFFICIENT , MAX_HIGH_PRESSURE_DAMAGE) ) + H.pressure_alert = 2 + else H.pressure_alert = 1 - if(WARNING_LOW_PRESSURE to WARNING_HIGH_PRESSURE) - H.pressure_alert = 0 - if(HAZARD_LOW_PRESSURE to WARNING_LOW_PRESSURE) + if(WARNING_HIGH_PRESSURE to HAZARD_HIGH_PRESSURE) + H.pressure_alert = 1 + if(WARNING_LOW_PRESSURE to WARNING_HIGH_PRESSURE) + H.pressure_alert = 0 + if(HAZARD_LOW_PRESSURE to WARNING_LOW_PRESSURE) + H.pressure_alert = -1 + else + if((COLD_RESISTANCE in H.mutations) || (COLDRES in specflags)) H.pressure_alert = -1 else - if((COLD_RESISTANCE in H.mutations) || (COLDRES in specflags)) - H.pressure_alert = -1 - else - H.adjustBruteLoss( LOW_PRESSURE_DAMAGE ) - H.pressure_alert = -2 + H.adjustBruteLoss( LOW_PRESSURE_DAMAGE ) + H.pressure_alert = -2 + return + +////////// +// FIRE // +////////// + +/datum/species/proc/handle_fire(var/mob/living/carbon/human/H) + if((HEATRES in specflags) || (NOFIRE in specflags)) return + if(H.fire_stacks < 0) + H.fire_stacks++ //If we've doused ourselves in water to avoid fire, dry off slowly + H.fire_stacks = min(0, H.fire_stacks)//So we dry ourselves back to default, nonflammable. + if(!H.on_fire) + return + var/datum/gas_mixture/G = H.loc.return_air() // Check if we're standing in an oxygenless environment + if(G.oxygen < 1) + ExtinguishMob() //If there's no oxygen in the tile we're on, put out the fire + return + var/turf/location = get_turf(H) + location.hotspot_expose(700, 50, 1) - ////////// - // FIRE // - ////////// +/datum/species/proc/IgniteMob(var/mob/living/carbon/human/H) + if(H.fire_stacks > 0 && !H.on_fire && !(HEATRES in specflags) && !(NOFIRE in specflags)) + H.on_fire = 1 + H.AddLuminosity(3) + H.update_fire() - proc/handle_fire(var/mob/living/carbon/human/H) - if((HEATRES in specflags) || (NOFIRE in specflags)) - return - if(H.fire_stacks < 0) - H.fire_stacks++ //If we've doused ourselves in water to avoid fire, dry off slowly - H.fire_stacks = min(0, H.fire_stacks)//So we dry ourselves back to default, nonflammable. - if(!H.on_fire) - return - var/datum/gas_mixture/G = H.loc.return_air() // Check if we're standing in an oxygenless environment - if(G.oxygen < 1) - ExtinguishMob() //If there's no oxygen in the tile we're on, put out the fire - return - var/turf/location = get_turf(H) - location.hotspot_expose(700, 50, 1) - - proc/IgniteMob(var/mob/living/carbon/human/H) - if(H.fire_stacks > 0 && !H.on_fire && !(HEATRES in specflags) && !(NOFIRE in specflags)) - H.on_fire = 1 - H.AddLuminosity(3) - H.update_fire() - - proc/ExtinguishMob(var/mob/living/carbon/human/H) - if(H.on_fire) - H.on_fire = 0 - H.fire_stacks = 0 - H.AddLuminosity(-3) - H.update_fire() +/datum/species/proc/ExtinguishMob(var/mob/living/carbon/human/H) + if(H.on_fire) + H.on_fire = 0 + H.fire_stacks = 0 + H.AddLuminosity(-3) + H.update_fire() #undef SPECIES_LAYER #undef BODY_LAYER @@ -1327,4 +1327,4 @@ #undef COLD_GAS_DAMAGE_LEVEL_3 #undef TINT_IMPAIR -#undef TINT_BLIND \ No newline at end of file +#undef TINT_BLIND diff --git a/code/modules/mob/living/carbon/monkey/life.dm b/code/modules/mob/living/carbon/monkey/life.dm index 220b99380f6..b66aed96736 100644 --- a/code/modules/mob/living/carbon/monkey/life.dm +++ b/code/modules/mob/living/carbon/monkey/life.dm @@ -76,519 +76,517 @@ ..() return pressure -/mob/living/carbon/monkey +/mob/living/carbon/monkey/proc/handle_disabilities() - proc/handle_disabilities() + if (disabilities & EPILEPSY) + if ((prob(1) && paralysis < 10)) + src << "\red You have a seizure!" + Paralyse(10) + if (disabilities & COUGHING) + if ((prob(5) && paralysis <= 1)) + drop_item() + spawn( 0 ) + emote("cough") + return + if (disabilities & TOURETTES) + if ((prob(10) && paralysis <= 1)) + Stun(10) + spawn( 0 ) + emote("twitch") + return + if (disabilities & NERVOUS) + if (prob(10)) + stuttering = max(10, stuttering) - if (disabilities & EPILEPSY) - if ((prob(1) && paralysis < 10)) - src << "\red You have a seizure!" - Paralyse(10) - if (disabilities & COUGHING) - if ((prob(5) && paralysis <= 1)) - drop_item() - spawn( 0 ) - emote("cough") - return - if (disabilities & TOURETTES) - if ((prob(10) && paralysis <= 1)) - Stun(10) - spawn( 0 ) - emote("twitch") - return - if (disabilities & NERVOUS) - if (prob(10)) - stuttering = max(10, stuttering) +/mob/living/carbon/monkey/proc/handle_mutations_and_radiation() - proc/handle_mutations_and_radiation() + if(getFireLoss()) + if((COLD_RESISTANCE in mutations) && prob(50)) + switch(getFireLoss()) + if(1 to 50) + adjustFireLoss(-1) + if(51 to 100) + adjustFireLoss(-5) - if(getFireLoss()) - if((COLD_RESISTANCE in mutations) && prob(50)) - switch(getFireLoss()) - if(1 to 50) - adjustFireLoss(-1) - if(51 to 100) - adjustFireLoss(-5) + if ((HULK in mutations) && health <= 25) + mutations.Remove(HULK) + src << "\red You suddenly feel very weak." + Weaken(3) + emote("collapse") - if ((HULK in mutations) && health <= 25) - mutations.Remove(HULK) - src << "\red You suddenly feel very weak." - Weaken(3) + if (radiation) + if (radiation > 100) + radiation = 100 + Weaken(10) + src << "\red You feel weak." emote("collapse") - if (radiation) - if (radiation > 100) - radiation = 100 - Weaken(10) - src << "\red You feel weak." - emote("collapse") - - switch(radiation) - if(1 to 49) - radiation-- - if(prob(25)) - adjustToxLoss(1) - updatehealth() - - if(50 to 74) - radiation -= 2 + switch(radiation) + if(1 to 49) + radiation-- + if(prob(25)) adjustToxLoss(1) - if(prob(5)) - radiation -= 5 - Weaken(3) - src << "\red You feel weak." - emote("collapse") updatehealth() - if(75 to 100) - radiation -= 3 - adjustToxLoss(3) - if(prob(1)) - src << "\red You mutate!" - randmutb(src) - domutcheck(src,null) - emote("gasp") - updatehealth() + if(50 to 74) + radiation -= 2 + adjustToxLoss(1) + if(prob(5)) + radiation -= 5 + Weaken(3) + src << "\red You feel weak." + emote("collapse") + updatehealth() + + if(75 to 100) + radiation -= 3 + adjustToxLoss(3) + if(prob(1)) + src << "\red You mutate!" + randmutb(src) + domutcheck(src,null) + emote("gasp") + updatehealth() - proc/breathe() - if(reagents) +/mob/living/carbon/monkey/proc/breathe() + if(reagents) - if(reagents.has_reagent("lexorin")) return + if(reagents.has_reagent("lexorin")) return - if(!loc) return //probably ought to make a proper fix for this, but :effort: --NeoFite + if(!loc) return //probably ought to make a proper fix for this, but :effort: --NeoFite - var/datum/gas_mixture/environment = loc.return_air() - var/datum/gas_mixture/breath - if(health <= config.health_threshold_crit) - losebreath++ - if(losebreath>0) //Suffocating so do not take a breath - losebreath-- - if (prob(75)) //High chance of gasping for air - spawn emote("gasp") + var/datum/gas_mixture/environment = loc.return_air() + var/datum/gas_mixture/breath + if(health <= config.health_threshold_crit) + losebreath++ + if(losebreath>0) //Suffocating so do not take a breath + losebreath-- + if (prob(75)) //High chance of gasping for air + spawn emote("gasp") + if(istype(loc, /obj/)) + var/obj/location_as_object = loc + location_as_object.handle_internal_lifeform(src, 0) + else + //First, check for air from internal atmosphere (using an air tank and mask generally) + breath = get_breath_from_internal(BREATH_VOLUME) + + //No breath from internal atmosphere so get breath from location + if(!breath) + if(istype(loc, /obj/)) + var/obj/location_as_object = loc + breath = location_as_object.handle_internal_lifeform(src, BREATH_VOLUME) + else if(istype(loc, /turf/)) + var/breath_moles = environment.total_moles()*BREATH_PERCENTAGE + breath = loc.remove_air(breath_moles) + + // Handle chem smoke effect -- Doohl + var/block = 0 + if(wear_mask) + if(istype(wear_mask, /obj/item/clothing/mask/gas)) + block = 1 + + if(!block) + + for(var/obj/effect/effect/chem_smoke/smoke in view(1, src)) + if(smoke.reagents.total_volume) + smoke.reagents.reaction(src, INGEST) + spawn(5) + if(smoke) + smoke.reagents.copy_to(src, 10) // I dunno, maybe the reagents enter the blood stream through the lungs? + break // If they breathe in the nasty stuff once, no need to continue checking + + + else //Still give containing object the chance to interact if(istype(loc, /obj/)) var/obj/location_as_object = loc location_as_object.handle_internal_lifeform(src, 0) - else - //First, check for air from internal atmosphere (using an air tank and mask generally) - breath = get_breath_from_internal(BREATH_VOLUME) - //No breath from internal atmosphere so get breath from location - if(!breath) - if(istype(loc, /obj/)) - var/obj/location_as_object = loc - breath = location_as_object.handle_internal_lifeform(src, BREATH_VOLUME) - else if(istype(loc, /turf/)) - var/breath_moles = environment.total_moles()*BREATH_PERCENTAGE - breath = loc.remove_air(breath_moles) + handle_breath(breath) - // Handle chem smoke effect -- Doohl - var/block = 0 - if(wear_mask) - if(istype(wear_mask, /obj/item/clothing/mask/gas)) - block = 1 - - if(!block) - - for(var/obj/effect/effect/chem_smoke/smoke in view(1, src)) - if(smoke.reagents.total_volume) - smoke.reagents.reaction(src, INGEST) - spawn(5) - if(smoke) - smoke.reagents.copy_to(src, 10) // I dunno, maybe the reagents enter the blood stream through the lungs? - break // If they breathe in the nasty stuff once, no need to continue checking + if(breath) + loc.assume_air(breath) - else //Still give containing object the chance to interact - if(istype(loc, /obj/)) - var/obj/location_as_object = loc - location_as_object.handle_internal_lifeform(src, 0) - - handle_breath(breath) - - if(breath) - loc.assume_air(breath) - - - proc/get_breath_from_internal(volume_needed) +/mob/living/carbon/monkey/proc/get_breath_from_internal(volume_needed) + if(internal) + if (!contents.Find(internal)) + internal = null + if (!wear_mask || !(wear_mask.flags|MASKINTERNALS) ) + internal = null if(internal) - if (!contents.Find(internal)) - internal = null - if (!wear_mask || !(wear_mask.flags|MASKINTERNALS) ) - internal = null - if(internal) - if (internals) - internals.icon_state = "internal1" - return internal.remove_air_volume(volume_needed) - else - if (internals) - internals.icon_state = "internal0" - return null - - proc/handle_breath(datum/gas_mixture/breath) - if(status_flags & GODMODE) - return - - if(!breath || (breath.total_moles() == 0)) - adjustOxyLoss(7) - - oxygen_alert = max(oxygen_alert, 1) - - return 0 - - var/safe_oxygen_min = 16 // Minimum safe partial pressure of O2, in kPa - //var/safe_oxygen_max = 140 // Maximum safe partial pressure of O2, in kPa (Not used for now) - var/safe_co2_max = 10 // Yes it's an arbitrary value who cares? - var/safe_toxins_max = 0.5 - var/SA_para_min = 0.5 - var/SA_sleep_min = 5 - var/oxygen_used = 0 - var/breath_pressure = (breath.total_moles()*R_IDEAL_GAS_EQUATION*breath.temperature)/BREATH_VOLUME - - //Partial pressure of the O2 in our breath - var/O2_pp = (breath.oxygen/breath.total_moles())*breath_pressure - // Same, but for the toxins - var/Toxins_pp = (breath.toxins/breath.total_moles())*breath_pressure - // And CO2, lets say a PP of more than 10 will be bad (It's a little less really, but eh, being passed out all round aint no fun) - var/CO2_pp = (breath.carbon_dioxide/breath.total_moles())*breath_pressure - - if(O2_pp < safe_oxygen_min) // Too little oxygen - if(prob(20)) - spawn(0) emote("gasp") - if (O2_pp == 0) - O2_pp = 0.01 - var/ratio = safe_oxygen_min/O2_pp - adjustOxyLoss(min(5*ratio, 7)) // Don't fuck them up too fast (space only does 7 after all!) - oxygen_used = breath.oxygen*ratio/6 - oxygen_alert = max(oxygen_alert, 1) - /*else if (O2_pp > safe_oxygen_max) // Too much oxygen (commented this out for now, I'll deal with pressure damage elsewhere I suppose) - spawn(0) emote("cough") - var/ratio = O2_pp/safe_oxygen_max - oxyloss += 5*ratio - oxygen_used = breath.oxygen*ratio/6 - oxygen_alert = max(oxygen_alert, 1)*/ - else // We're in safe limits - adjustOxyLoss(-5) - oxygen_used = breath.oxygen/6 - oxygen_alert = 0 - - breath.oxygen -= oxygen_used - breath.carbon_dioxide += oxygen_used - - if(CO2_pp > safe_co2_max) - if(!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. - co2overloadtime = world.time - else if(world.time - co2overloadtime > 120) - Paralyse(3) - adjustOxyLoss(3) // Lets hurt em a little, let them know we mean business - if(world.time - co2overloadtime > 300) // They've been in here 30s now, lets start to kill them for their own good! - adjustOxyLoss(8) - if(prob(20)) // Lets give them some chance to know somethings not right though I guess. - spawn(0) emote("cough") - + if (internals) + internals.icon_state = "internal1" + return internal.remove_air_volume(volume_needed) else - co2overloadtime = 0 - - if(Toxins_pp > safe_toxins_max) // Too much toxins - var/ratio = (breath.toxins/safe_toxins_max) * 10 - //adjustToxLoss(Clamp(ratio, MIN_PLASMA_DAMAGE, MAX_PLASMA_DAMAGE)) //Limit amount of damage toxin exposure can do per second - if(reagents) - reagents.add_reagent("plasma", Clamp(ratio, MIN_PLASMA_DAMAGE, MAX_PLASMA_DAMAGE)) - toxins_alert = max(toxins_alert, 1) - else - toxins_alert = 0 - - if(breath.trace_gases.len) // If there's some other shit in the air lets deal with it here. - for(var/datum/gas/sleeping_agent/SA in breath.trace_gases) - var/SA_pp = (SA.moles/breath.total_moles())*breath_pressure - if(SA_pp > SA_para_min) // Enough to make us paralysed for a bit - Paralyse(3) // 3 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 - sleeping = max(sleeping+2, 10) - 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)) - spawn(0) emote(pick("giggle", "laugh")) - - - if(breath.temperature > (T0C+66)) // Hot air hurts :( - if(prob(20)) - src << "\red You feel a searing heat in your lungs!" - fire_alert = max(fire_alert, 2) - else - fire_alert = 0 - - - //Temporary fixes to the alerts. - - return 1 - - proc/handle_environment(datum/gas_mixture/environment) - if(!environment) - return - var/environment_heat_capacity = environment.heat_capacity() - if(istype(get_turf(src), /turf/space)) - var/turf/heat_turf = get_turf(src) - environment_heat_capacity = heat_turf.heat_capacity - - if(!on_fire) - if((environment.temperature > (T0C + 50)) || (environment.temperature < (T0C + 10))) - var/transfer_coefficient = 1 - - handle_temperature_damage(HEAD, environment.temperature, environment_heat_capacity*transfer_coefficient) - - if(stat != 2) - bodytemperature += 0.1*(environment.temperature - bodytemperature)*environment_heat_capacity/(environment_heat_capacity + 270000) - - //Account for massive pressure differences - - var/pressure = environment.return_pressure() - var/adjusted_pressure = calculate_affecting_pressure(pressure) //Returns how much pressure actually affects the mob. - switch(adjusted_pressure) - if(HAZARD_HIGH_PRESSURE to INFINITY) - adjustBruteLoss( min( ( (adjusted_pressure / HAZARD_HIGH_PRESSURE) -1 )*PRESSURE_DAMAGE_COEFFICIENT , MAX_HIGH_PRESSURE_DAMAGE) ) - pressure_alert = 2 - if(WARNING_HIGH_PRESSURE to HAZARD_HIGH_PRESSURE) - pressure_alert = 1 - if(WARNING_LOW_PRESSURE to WARNING_HIGH_PRESSURE) - pressure_alert = 0 - if(HAZARD_LOW_PRESSURE to WARNING_LOW_PRESSURE) - pressure_alert = -1 - else - if( !(COLD_RESISTANCE in mutations) ) - adjustBruteLoss( LOW_PRESSURE_DAMAGE ) - pressure_alert = -2 - else - pressure_alert = -1 + if (internals) + internals.icon_state = "internal0" + return null +/mob/living/carbon/monkey/proc/handle_breath(datum/gas_mixture/breath) + if(status_flags & GODMODE) return - proc/handle_temperature_damage(body_part, exposed_temperature, exposed_intensity) - if(status_flags & GODMODE) return - var/discomfort = min( abs(exposed_temperature - bodytemperature)*(exposed_intensity)/2000000, 1.0) - //adjustFireLoss(2.5*discomfort) + if(!breath || (breath.total_moles() == 0)) + adjustOxyLoss(7) - if(exposed_temperature > bodytemperature) - adjustFireLoss(20.0*discomfort) + oxygen_alert = max(oxygen_alert, 1) + return 0 + + var/safe_oxygen_min = 16 // Minimum safe partial pressure of O2, in kPa + //var/safe_oxygen_max = 140 // Maximum safe partial pressure of O2, in kPa (Not used for now) + var/safe_co2_max = 10 // Yes it's an arbitrary value who cares? + var/safe_toxins_max = 0.5 + var/SA_para_min = 0.5 + var/SA_sleep_min = 5 + var/oxygen_used = 0 + var/breath_pressure = (breath.total_moles()*R_IDEAL_GAS_EQUATION*breath.temperature)/BREATH_VOLUME + + //Partial pressure of the O2 in our breath + var/O2_pp = (breath.oxygen/breath.total_moles())*breath_pressure + // Same, but for the toxins + var/Toxins_pp = (breath.toxins/breath.total_moles())*breath_pressure + // And CO2, lets say a PP of more than 10 will be bad (It's a little less really, but eh, being passed out all round aint no fun) + var/CO2_pp = (breath.carbon_dioxide/breath.total_moles())*breath_pressure + + if(O2_pp < safe_oxygen_min) // Too little oxygen + if(prob(20)) + spawn(0) emote("gasp") + if (O2_pp == 0) + O2_pp = 0.01 + var/ratio = safe_oxygen_min/O2_pp + adjustOxyLoss(min(5*ratio, 7)) // Don't fuck them up too fast (space only does 7 after all!) + oxygen_used = breath.oxygen*ratio/6 + oxygen_alert = max(oxygen_alert, 1) + /*else if (O2_pp > safe_oxygen_max) // Too much oxygen (commented this out for now, I'll deal with pressure damage elsewhere I suppose) + spawn(0) emote("cough") + var/ratio = O2_pp/safe_oxygen_max + oxyloss += 5*ratio + oxygen_used = breath.oxygen*ratio/6 + oxygen_alert = max(oxygen_alert, 1)*/ + else // We're in safe limits + adjustOxyLoss(-5) + oxygen_used = breath.oxygen/6 + oxygen_alert = 0 + + breath.oxygen -= oxygen_used + breath.carbon_dioxide += oxygen_used + + if(CO2_pp > safe_co2_max) + if(!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. + co2overloadtime = world.time + else if(world.time - co2overloadtime > 120) + Paralyse(3) + adjustOxyLoss(3) // Lets hurt em a little, let them know we mean business + if(world.time - co2overloadtime > 300) // They've been in here 30s now, lets start to kill them for their own good! + adjustOxyLoss(8) + if(prob(20)) // Lets give them some chance to know somethings not right though I guess. + spawn(0) emote("cough") + + else + co2overloadtime = 0 + + if(Toxins_pp > safe_toxins_max) // Too much toxins + var/ratio = (breath.toxins/safe_toxins_max) * 10 + //adjustToxLoss(Clamp(ratio, MIN_PLASMA_DAMAGE, MAX_PLASMA_DAMAGE)) //Limit amount of damage toxin exposure can do per second + if(reagents) + reagents.add_reagent("plasma", Clamp(ratio, MIN_PLASMA_DAMAGE, MAX_PLASMA_DAMAGE)) + toxins_alert = max(toxins_alert, 1) + else + toxins_alert = 0 + + if(breath.trace_gases.len) // If there's some other shit in the air lets deal with it here. + for(var/datum/gas/sleeping_agent/SA in breath.trace_gases) + var/SA_pp = (SA.moles/breath.total_moles())*breath_pressure + if(SA_pp > SA_para_min) // Enough to make us paralysed for a bit + Paralyse(3) // 3 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 + sleeping = max(sleeping+2, 10) + 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)) + spawn(0) emote(pick("giggle", "laugh")) + + + if(breath.temperature > (T0C+66)) // Hot air hurts :( + if(prob(20)) + src << "\red You feel a searing heat in your lungs!" + fire_alert = max(fire_alert, 2) + else + fire_alert = 0 + + + //Temporary fixes to the alerts. + + return 1 + +/mob/living/carbon/monkey/proc/handle_environment(datum/gas_mixture/environment) + if(!environment) + return + var/environment_heat_capacity = environment.heat_capacity() + if(istype(get_turf(src), /turf/space)) + var/turf/heat_turf = get_turf(src) + environment_heat_capacity = heat_turf.heat_capacity + + if(!on_fire) + if((environment.temperature > (T0C + 50)) || (environment.temperature < (T0C + 10))) + var/transfer_coefficient = 1 + + handle_temperature_damage(HEAD, environment.temperature, environment_heat_capacity*transfer_coefficient) + + if(stat != 2) + bodytemperature += 0.1*(environment.temperature - bodytemperature)*environment_heat_capacity/(environment_heat_capacity + 270000) + + //Account for massive pressure differences + + var/pressure = environment.return_pressure() + var/adjusted_pressure = calculate_affecting_pressure(pressure) //Returns how much pressure actually affects the mob. + switch(adjusted_pressure) + if(HAZARD_HIGH_PRESSURE to INFINITY) + adjustBruteLoss( min( ( (adjusted_pressure / HAZARD_HIGH_PRESSURE) -1 )*PRESSURE_DAMAGE_COEFFICIENT , MAX_HIGH_PRESSURE_DAMAGE) ) + pressure_alert = 2 + if(WARNING_HIGH_PRESSURE to HAZARD_HIGH_PRESSURE) + pressure_alert = 1 + if(WARNING_LOW_PRESSURE to WARNING_HIGH_PRESSURE) + pressure_alert = 0 + if(HAZARD_LOW_PRESSURE to WARNING_LOW_PRESSURE) + pressure_alert = -1 else - adjustFireLoss(5.0*discomfort) - - proc/handle_chemicals_in_body() - - if(reagents) reagents.metabolize(src) - - if (drowsyness) - drowsyness-- - eye_blurry = max(2, eye_blurry) - if (prob(5)) - sleeping += 1 - Paralyse(5) - - confused = max(0, confused - 1) - // decrement dizziness counter, clamped to 0 - if(resting) - dizziness = max(0, dizziness - 5) - else - dizziness = max(0, dizziness - 1) - - updatehealth() - - return //TODO: DEFERRED - - proc/handle_regular_status_updates() - updatehealth() - - if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP - blinded = 1 - silent = 0 - else //ALIVE. LIGHTS ARE ON - if(health < config.health_threshold_dead || !getorgan(/obj/item/organ/brain)) - death() - blinded = 1 - stat = DEAD - silent = 0 - return 1 - - //UNCONSCIOUS. NO-ONE IS HOME - if( (getOxyLoss() > 25) || (config.health_threshold_crit >= health) ) - if( health <= 20 && prob(1) ) - spawn(0) - emote("gasp") - if(!reagents.has_reagent("inaprovaline")) - adjustOxyLoss(1) - Paralyse(3) - - if(paralysis) - AdjustParalysis(-1) - blinded = 1 - stat = UNCONSCIOUS - else if(sleeping) - sleeping = max(sleeping-1, 0) - blinded = 1 - stat = UNCONSCIOUS - if( prob(10) && health ) - spawn(0) - emote("snore") - //CONSCIOUS + if( !(COLD_RESISTANCE in mutations) ) + adjustBruteLoss( LOW_PRESSURE_DAMAGE ) + pressure_alert = -2 else - stat = CONSCIOUS + pressure_alert = -1 - //Eyes - if(sdisabilities & BLIND) //disabled-blind, doesn't get better on its own - blinded = 1 - else if(eye_blind) //blindness, heals slowly over time - eye_blind = max(eye_blind-1,0) - blinded = 1 - else if(eye_blurry) //blurry eyes heal slowly - eye_blurry = max(eye_blurry-1, 0) + return - //Ears - if(sdisabilities & DEAF) //disabled-deaf, doesn't get better on its own - ear_deaf = max(ear_deaf, 1) - else if(ear_deaf) //deafness, heals slowly over time - ear_deaf = max(ear_deaf-1, 0) - else if(ear_damage < 25) //ear damage heals slowly under this threshold. otherwise you'll need earmuffs - ear_damage = max(ear_damage-0.05, 0) +/mob/living/carbon/monkey/proc/handle_temperature_damage(body_part, exposed_temperature, exposed_intensity) + if(status_flags & GODMODE) return + var/discomfort = min( abs(exposed_temperature - bodytemperature)*(exposed_intensity)/2000000, 1.0) + //adjustFireLoss(2.5*discomfort) - //Other - if(stunned) - AdjustStunned(-1) + if(exposed_temperature > bodytemperature) + adjustFireLoss(20.0*discomfort) - if(weakened) - weakened = max(weakened-1,0) + else + adjustFireLoss(5.0*discomfort) - if(stuttering) - stuttering = max(stuttering-1, 0) +/mob/living/carbon/monkey/proc/handle_chemicals_in_body() - if(silent) - silent = max(silent-1, 0) + if(reagents) reagents.metabolize(src) + + if (drowsyness) + drowsyness-- + eye_blurry = max(2, eye_blurry) + if (prob(5)) + sleeping += 1 + Paralyse(5) + + confused = max(0, confused - 1) + // decrement dizziness counter, clamped to 0 + if(resting) + dizziness = max(0, dizziness - 5) + else + dizziness = max(0, dizziness - 1) + + updatehealth() + + return //TODO: DEFERRED + +/mob/living/carbon/monkey/proc/handle_regular_status_updates() + updatehealth() + + if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP + blinded = 1 + silent = 0 + else //ALIVE. LIGHTS ARE ON + if(health < config.health_threshold_dead || !getorgan(/obj/item/organ/brain)) + death() + blinded = 1 + stat = DEAD + silent = 0 + return 1 + + //UNCONSCIOUS. NO-ONE IS HOME + if( (getOxyLoss() > 25) || (config.health_threshold_crit >= health) ) + if( health <= 20 && prob(1) ) + spawn(0) + emote("gasp") + if(!reagents.has_reagent("inaprovaline")) + adjustOxyLoss(1) + Paralyse(3) + + if(paralysis) + AdjustParalysis(-1) + blinded = 1 + stat = UNCONSCIOUS + else if(sleeping) + sleeping = max(sleeping-1, 0) + blinded = 1 + stat = UNCONSCIOUS + if( prob(10) && health ) + spawn(0) + emote("snore") + //CONSCIOUS + else + stat = CONSCIOUS + + //Eyes + if(sdisabilities & BLIND) //disabled-blind, doesn't get better on its own + blinded = 1 + else if(eye_blind) //blindness, heals slowly over time + eye_blind = max(eye_blind-1,0) + blinded = 1 + else if(eye_blurry) //blurry eyes heal slowly + eye_blurry = max(eye_blurry-1, 0) + + //Ears + if(sdisabilities & DEAF) //disabled-deaf, doesn't get better on its own + ear_deaf = max(ear_deaf, 1) + else if(ear_deaf) //deafness, heals slowly over time + ear_deaf = max(ear_deaf-1, 0) + else if(ear_damage < 25) //ear damage heals slowly under this threshold. otherwise you'll need earmuffs + ear_damage = max(ear_damage-0.05, 0) + + //Other + if(stunned) + AdjustStunned(-1) + + if(weakened) + weakened = max(weakened-1,0) + + if(stuttering) + stuttering = max(stuttering-1, 0) + + if(silent) + silent = max(silent-1, 0) + + if(druggy) + druggy = max(druggy-1, 0) + + CheckStamina() + return 1 + + +/mob/living/carbon/monkey/proc/handle_regular_hud_updates() + + if (stat == 2 || (XRAY in mutations)) + sight |= SEE_TURFS + sight |= SEE_MOBS + sight |= SEE_OBJS + see_in_dark = 8 + see_invisible = SEE_INVISIBLE_LEVEL_TWO + else if (stat != 2) + sight &= ~SEE_TURFS + sight &= ~SEE_MOBS + sight &= ~SEE_OBJS + see_in_dark = 2 + see_invisible = SEE_INVISIBLE_LIVING + if(see_override) + see_invisible = see_override + + if (healths) + if (stat != 2) + switch(health) + if(100 to INFINITY) + healths.icon_state = "health0" + if(80 to 100) + healths.icon_state = "health1" + if(60 to 80) + healths.icon_state = "health2" + if(40 to 60) + healths.icon_state = "health3" + if(20 to 40) + healths.icon_state = "health4" + if(0 to 20) + healths.icon_state = "health5" + else + healths.icon_state = "health6" + else + healths.icon_state = "health7" + + + if(pressure) + pressure.icon_state = "pressure[pressure_alert]" + + if(pullin) + if(pulling) + pullin.icon_state = "pull" + else + pullin.icon_state = "pull0" + + if (toxin) toxin.icon_state = "tox[toxins_alert ? 1 : 0]" + if (oxygen) oxygen.icon_state = "oxy[oxygen_alert ? 1 : 0]" + if (fire) fire.icon_state = "fire[fire_alert ? 2 : 0]" + //NOTE: the alerts dont reset when youre out of danger. dont blame me, + //blame the person who coded them. Temporary fix added. + + if(bodytemp) + switch(bodytemperature) //310.055 optimal body temp + if(345 to INFINITY) + bodytemp.icon_state = "temp4" + if(335 to 345) + bodytemp.icon_state = "temp3" + if(327 to 335) + bodytemp.icon_state = "temp2" + if(316 to 327) + bodytemp.icon_state = "temp1" + if(300 to 316) + bodytemp.icon_state = "temp0" + if(295 to 300) + bodytemp.icon_state = "temp-1" + if(280 to 295) + bodytemp.icon_state = "temp-2" + if(260 to 280) + bodytemp.icon_state = "temp-3" + else + bodytemp.icon_state = "temp-4" + + client.screen.Remove(global_hud.blurry,global_hud.druggy,global_hud.vimpaired) + + if(blind && stat != DEAD) + if(blinded) + blind.layer = 18 + else + blind.layer = 0 + + if(disabilities & NEARSIGHTED) + client.screen += global_hud.vimpaired + + if(eye_blurry) + client.screen += global_hud.blurry if(druggy) - druggy = max(druggy-1, 0) + client.screen += global_hud.druggy - CheckStamina() - return 1 + if (stat != 2) + if (machine) + if (!( machine.check_eye(src) )) + reset_view(null) + else + if(!client.adminobs) + reset_view(null) + + return 1 + +/mob/living/carbon/monkey/proc/handle_random_events() + if (prob(1) && prob(2)) + spawn(0) + emote("scratch") + return - proc/handle_regular_hud_updates() - - if (stat == 2 || (XRAY in mutations)) - sight |= SEE_TURFS - sight |= SEE_MOBS - sight |= SEE_OBJS - see_in_dark = 8 - see_invisible = SEE_INVISIBLE_LEVEL_TWO - else if (stat != 2) - sight &= ~SEE_TURFS - sight &= ~SEE_MOBS - sight &= ~SEE_OBJS - see_in_dark = 2 - see_invisible = SEE_INVISIBLE_LIVING - if(see_override) - see_invisible = see_override - - if (healths) - if (stat != 2) - switch(health) - if(100 to INFINITY) - healths.icon_state = "health0" - if(80 to 100) - healths.icon_state = "health1" - if(60 to 80) - healths.icon_state = "health2" - if(40 to 60) - healths.icon_state = "health3" - if(20 to 40) - healths.icon_state = "health4" - if(0 to 20) - healths.icon_state = "health5" - else - healths.icon_state = "health6" - else - healths.icon_state = "health7" - - - if(pressure) - pressure.icon_state = "pressure[pressure_alert]" - - if(pullin) - if(pulling) - pullin.icon_state = "pull" - else - pullin.icon_state = "pull0" - - if (toxin) toxin.icon_state = "tox[toxins_alert ? 1 : 0]" - if (oxygen) oxygen.icon_state = "oxy[oxygen_alert ? 1 : 0]" - if (fire) fire.icon_state = "fire[fire_alert ? 2 : 0]" - //NOTE: the alerts dont reset when youre out of danger. dont blame me, - //blame the person who coded them. Temporary fix added. - - if(bodytemp) - switch(bodytemperature) //310.055 optimal body temp - if(345 to INFINITY) - bodytemp.icon_state = "temp4" - if(335 to 345) - bodytemp.icon_state = "temp3" - if(327 to 335) - bodytemp.icon_state = "temp2" - if(316 to 327) - bodytemp.icon_state = "temp1" - if(300 to 316) - bodytemp.icon_state = "temp0" - if(295 to 300) - bodytemp.icon_state = "temp-1" - if(280 to 295) - bodytemp.icon_state = "temp-2" - if(260 to 280) - bodytemp.icon_state = "temp-3" - else - bodytemp.icon_state = "temp-4" - - client.screen.Remove(global_hud.blurry,global_hud.druggy,global_hud.vimpaired) - - if(blind && stat != DEAD) - if(blinded) - blind.layer = 18 - else - blind.layer = 0 - - if(disabilities & NEARSIGHTED) - client.screen += global_hud.vimpaired - - if(eye_blurry) - client.screen += global_hud.blurry - - if(druggy) - client.screen += global_hud.druggy - - if (stat != 2) - if (machine) - if (!( machine.check_eye(src) )) - reset_view(null) - else - if(!client.adminobs) - reset_view(null) - - return 1 - - proc/handle_random_events() - if (prob(1) && prob(2)) - spawn(0) - emote("scratch") - return - - - proc/handle_changeling() - if(mind && mind.changeling) - mind.changeling.regenerate() - hud_used.lingchemdisplay.invisibility = 0 - hud_used.lingchemdisplay.maptext = "
    [src.mind.changeling.chem_charges]
    " +/mob/living/carbon/monkey/proc/handle_changeling() + if(mind && mind.changeling) + mind.changeling.regenerate() + hud_used.lingchemdisplay.invisibility = 0 + hud_used.lingchemdisplay.maptext = "
    [src.mind.changeling.chem_charges]
    " ///FIRE CODE - handle_fire() - if(..()) - return - adjustFireLoss(6) +/mob/living/carbon/monkey/handle_fire() + if(..()) return -//END FIRE CODE \ No newline at end of file + adjustFireLoss(6) + return +//END FIRE CODE diff --git a/code/modules/mob/living/carbon/slime/life.dm b/code/modules/mob/living/carbon/slime/life.dm index 1c22fe9cf65..bdb63e28c37 100644 --- a/code/modules/mob/living/carbon/slime/life.dm +++ b/code/modules/mob/living/carbon/slime/life.dm @@ -253,7 +253,7 @@ /mob/living/carbon/slime/proc/handle_nutrition() - if (prob(15)) + if(prob(15)) nutrition -= 1 + is_adult if(nutrition <= 0) @@ -271,6 +271,18 @@ else Evolve() +/mob/living/carbon/slime/proc/add_nutrition(var/nutrition_to_add = 0, var/lastnut = 0) + nutrition = min((nutrition + nutrition_to_add), get_max_nutrition()) + if(nutrition >= (lastnut + 50)) + if(prob(80)) + lastnut = nutrition + powerlevel++ + if(powerlevel > 10) + powerlevel = 10 + adjustToxLoss(-10) + + + /mob/living/carbon/slime/proc/handle_targets() if(Tempstun) if(!Victim) // not while they're eating! diff --git a/code/modules/mob/living/carbon/slime/powers.dm b/code/modules/mob/living/carbon/slime/powers.dm index 31eff88033a..471de014f81 100644 --- a/code/modules/mob/living/carbon/slime/powers.dm +++ b/code/modules/mob/living/carbon/slime/powers.dm @@ -3,11 +3,11 @@ set desc = "This will let you feed on any valid creature in the surrounding area. This should also be used to halt the feeding process." if(Victim) Feedstop() - return + return 0 if(stat) src << "I must be conscious to do this..." - return + return 0 var/list/choices = list() for(var/mob/living/C in view(1,src)) @@ -15,31 +15,31 @@ choices += C var/mob/living/M = input(src,"Who do you wish to feed on?") in null|choices - if(!M) return + if(!M) return 0 if(Adjacent(M)) - if(!istype(src, /mob/living/carbon/brain)) - if(!istype(M, /mob/living/carbon/slime)) - if(stat != 2) - if(health > -70) - - for(var/mob/living/carbon/slime/met in view()) - if(met.Victim == M && met != src) - src << "The [met.name] is already feeding on this subject..." - return - src << "\blue I have latched onto the subject and begun feeding..." - M << "\red The [src.name] has latched onto your head!" - Feedon(M) - - else - src << "This subject does not have a strong enough life energy..." - else - src << "This subject does not have an edible life energy..." - else - src << "I must not feed on my brothers..." - else + if(istype(M, /mob/living/carbon/brain)) src << "This subject does not have an edible life energy..." + return 0 + if(istype(M, /mob/living/carbon) && (M.health < -70)) + src << "This subject does not have a strong enough life energy..." + return 0 + + if(istype(M, /mob/living/simple_animal) && (M.health < 1))//animals don't go into crit, stupid; fixes infinite energy exploit + src << "This subject does not have a strong enough life energy..." + return 0 + + for(var/mob/living/carbon/slime/met in view()) + if(met.Victim == M && met != src) + src << "The [met.name] is already feeding on this subject..." + return 0 + + src << "\blue I have latched onto the subject and begun feeding..." + M << "\red The [src.name] has latched onto your head!" + + Feedon(M) + return 1 /mob/living/carbon/slime/proc/Feedon(var/mob/living/M) @@ -49,62 +49,59 @@ anchored = 1 var/lastnut = nutrition var/fed_succesfully = 0 + var/health_minimum = -70 + if(is_adult) icon_state = "[colour] adult slime eat" else icon_state = "[colour] baby slime eat" - while(Victim && M.health > -70 && stat != 2) + + if(istype(Victim, /mob/living/simple_animal)) + health_minimum = 0 + + while(Victim && Victim.health > health_minimum && stat != 2) canmove = 0 - if(Adjacent(M)) + if(Adjacent(Victim)) loc = M.loc - if(prob(15) && M.client && istype(M, /mob/living/carbon)) - M << "[pick("You can feel your body becoming weak!", \ - "You feel like you're about to die!", \ - "You feel every part of your body screaming in agony!", \ - "A low, rolling pain passes through your body!", \ - "Your body feels as if it's falling apart!", \ - "You feel extremely weak!", \ - "A sharp, deep pain bathes every inch of your body!")]" - - if(istype(M, /mob/living/carbon)) + if(istype(Victim, /mob/living/carbon)) Victim.adjustCloneLoss(rand(5,6)) Victim.adjustToxLoss(rand(1,2)) if(Victim.health <= 0) Victim.adjustToxLoss(rand(2,4)) + if(prob(15) && Victim.client) + Victim << "[pick("You can feel your body becoming weak!", \ + "You feel like you're about to die!", \ + "You feel every part of your body screaming in agony!", \ + "A low, rolling pain passes through your body!", \ + "Your body feels as if it's falling apart!", \ + "You feel extremely weak!", \ + "A sharp, deep pain bathes every inch of your body!")]" + fed_succesfully = 1 - else if(istype(M, /mob/living/simple_animal)) + else if(health_minimum == 0) //we already know it's a simple_animal from above Victim.adjustBruteLoss(is_adult ? rand(7, 15) : rand(4, 12)) fed_succesfully = 1 else - if(prob(25)) - src << "[pick("This subject is incompatable", \ - "This subject does not have a life energy", "This subject is empty", \ - "I am not satisified", "I can not feed from this subject", \ - "I do not feel nourished", "This subject is not food")]..." + src << "[pick("This subject is incompatable", \ + "This subject does not have a life energy", "This subject is empty", \ + "I am not satisified", "I can not feed from this subject", \ + "I do not feel nourished", "This subject is not food")]..." if(fed_succesfully) - //I have no idea why this is not in handle_nutrition() - nutrition += rand(15,30) - if(nutrition >= lastnut + 50) - if(prob(80)) - lastnut = nutrition - powerlevel++ - if(powerlevel > 10) - powerlevel = 10 - adjustToxLoss(-10) + add_nutrition(rand(15,30), lastnut) //Heal yourself. adjustOxyLoss(-10) adjustBruteLoss(-10) adjustFireLoss(-10) adjustCloneLoss(-10) - + updatehealth() if(Victim) Victim.updatehealth() @@ -114,7 +111,7 @@ else break - if(stat == 2) + if(stat == 2) //why the fuck are you doing icon updating here if(!is_adult) icon_state = "[colour] baby slime dead" @@ -128,7 +125,7 @@ anchored = 0 if(M) - if(M.health <= -70) + if(M.health < health_minimum) M.canmove = 0 if(!client) if(Victim && !rabid && !attacked) @@ -145,13 +142,16 @@ if(prob(85)) rabid = 1 // UUUNNBGHHHH GONNA EAT JUUUUUU - if(client) src << "This subject does not have a strong enough life energy anymore..." + if(client) + src << "This subject does not have a strong enough life energy anymore..." else M.canmove = 1 - if(client) src << "I have stopped feeding..." + if(client) + src << "I have stopped feeding..." else - if(client) src << "I have stopped feeding..." + if(client) + src << "I have stopped feeding..." Victim = null diff --git a/code/modules/mob/living/carbon/slime/slime.dm b/code/modules/mob/living/carbon/slime/slime.dm index 5d4f4fa4067..e038ddc8bfe 100644 --- a/code/modules/mob/living/carbon/slime/slime.dm +++ b/code/modules/mob/living/carbon/slime/slime.dm @@ -3,7 +3,7 @@ icon = 'icons/mob/slimes.dmi' icon_state = "grey baby slime" pass_flags = PASSTABLE - voice_message = "skree!" + voice_message = "bleb!" say_message = "hums" ventcrawler = 2 var/is_adult = 0 diff --git a/code/modules/mob/living/carbon/update_icons.dm b/code/modules/mob/living/carbon/update_icons.dm index c58542f7b6a..ec32f437b12 100644 --- a/code/modules/mob/living/carbon/update_icons.dm +++ b/code/modules/mob/living/carbon/update_icons.dm @@ -16,9 +16,9 @@ else //if(lying != 0) if(lying_prev == 0) //Standing to lying final_pixel_y -= 6 + if(dir & (EAST|WEST)) //Facing east or west + final_dir = pick(NORTH, SOUTH) //So you fall on your side rather than your face or ass - if(dir & (EAST|WEST)) //Facing east or west - final_dir = pick(NORTH, SOUTH) //So you fall on your side rather than your face or ass lying_prev = lying //so we don't try to animate until there's been another change. if(changed) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index a7acd1cdf83..f76998bda0c 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -543,9 +543,11 @@ var/mob/living/carbon/CM = L if(CM.on_fire && CM.canmove) CM.fire_stacks -= 5 - CM.weakened = 5 + CM.Weaken(3) + CM.spin(32,2) CM.visible_message("[CM] rolls on the floor, trying to put themselves out!", \ "You stop, drop, and roll!") + sleep(30) if(fire_stacks <= 0) CM.visible_message("[CM] has successfully extinguished themselves!", \ "You extinguish yourself.") @@ -560,6 +562,23 @@ else cuff_resist(CM.legcuffed, CM) +/mob/living/carbon/proc/spin(spintime, speed) + spawn() + var/D = dir + while(spintime >= speed) + sleep(speed) + switch(D) + if(NORTH) + D = EAST + if(SOUTH) + D = WEST + if(EAST) + D = SOUTH + if(WEST) + D = NORTH + dir = D + spintime -= speed + return /mob/living/proc/get_visible_name() return name diff --git a/code/modules/mob/living/silicon/pai/recruit.dm b/code/modules/mob/living/silicon/pai/recruit.dm index eb6384f17fa..b5a4f0ee025 100644 --- a/code/modules/mob/living/silicon/pai/recruit.dm +++ b/code/modules/mob/living/silicon/pai/recruit.dm @@ -20,198 +20,198 @@ var/datum/paiController/paiController // Global handler for pAI candidates var/askDelay = 10 * 60 * 1 // One minute [ms * sec * min] - Topic(href, href_list[]) - if(href_list["download"]) - var/datum/paiCandidate/candidate = locate(href_list["candidate"]) - var/obj/item/device/paicard/card = locate(href_list["device"]) - if(card.pai) +/datum/paiController/Topic(href, href_list[]) + if(href_list["download"]) + var/datum/paiCandidate/candidate = locate(href_list["candidate"]) + var/obj/item/device/paicard/card = locate(href_list["device"]) + if(card.pai) + return + if(istype(card,/obj/item/device/paicard) && istype(candidate,/datum/paiCandidate)) + var/mob/living/silicon/pai/pai = new(card) + if(!candidate.name) + pai.name = pick(ninja_names) + else + pai.name = candidate.name + pai.real_name = pai.name + pai.key = candidate.key + + card.setPersonality(pai) + card.looking_for_personality = 0 + + ticker.mode.update_cult_icons_removed(card.pai.mind) + ticker.mode.update_rev_icons_removed(card.pai.mind) + + pai_candidates -= candidate + usr << browse(null, "window=findPai") + + if(href_list["new"]) + var/datum/paiCandidate/candidate = locate(href_list["candidate"]) + var/option = href_list["option"] + var/t = "" + + switch(option) + if("name") + t = input("Enter a name for your pAI", "pAI Name", candidate.name) as text + if(t) + candidate.name = copytext(sanitize(t),1,MAX_NAME_LEN) + if("desc") + t = input("Enter a description for your pAI", "pAI Description", candidate.description) as message + if(t) + candidate.description = copytext(sanitize(t),1,MAX_MESSAGE_LEN) + if("role") + t = input("Enter a role for your pAI", "pAI Role", candidate.role) as text + if(t) + candidate.role = copytext(sanitize(t),1,MAX_MESSAGE_LEN) + if("ooc") + t = input("Enter any OOC comments", "pAI OOC Comments", candidate.comments) as message + if(t) + candidate.comments = copytext(sanitize(t),1,MAX_MESSAGE_LEN) + if("save") + candidate.savefile_save(usr) + if("load") + candidate.savefile_load(usr) + //In case people have saved unsanitized stuff. + if(candidate.name) + candidate.name = copytext(sanitize(candidate.name),1,MAX_NAME_LEN) + if(candidate.description) + candidate.description = copytext(sanitize(candidate.description),1,MAX_MESSAGE_LEN) + if(candidate.role) + candidate.role = copytext(sanitize(candidate.role),1,MAX_MESSAGE_LEN) + if(candidate.comments) + candidate.comments = copytext(sanitize(candidate.comments),1,MAX_MESSAGE_LEN) + + if("submit") + if(candidate) + candidate.ready = 1 + for(var/obj/item/device/paicard/p in world) + if(p.looking_for_personality == 1) + p.alertUpdate() + usr << browse(null, "window=paiRecruit") return - if(istype(card,/obj/item/device/paicard) && istype(candidate,/datum/paiCandidate)) - var/mob/living/silicon/pai/pai = new(card) - if(!candidate.name) - pai.name = pick(ninja_names) - else - pai.name = candidate.name - pai.real_name = pai.name - pai.key = candidate.key + recruitWindow(usr) - card.setPersonality(pai) - card.looking_for_personality = 0 - - ticker.mode.update_cult_icons_removed(card.pai.mind) - ticker.mode.update_rev_icons_removed(card.pai.mind) - - pai_candidates -= candidate - usr << browse(null, "window=findPai") - - if(href_list["new"]) - var/datum/paiCandidate/candidate = locate(href_list["candidate"]) - var/option = href_list["option"] - var/t = "" - - switch(option) - if("name") - t = input("Enter a name for your pAI", "pAI Name", candidate.name) as text - if(t) - candidate.name = copytext(sanitize(t),1,MAX_NAME_LEN) - if("desc") - t = input("Enter a description for your pAI", "pAI Description", candidate.description) as message - if(t) - candidate.description = copytext(sanitize(t),1,MAX_MESSAGE_LEN) - if("role") - t = input("Enter a role for your pAI", "pAI Role", candidate.role) as text - if(t) - candidate.role = copytext(sanitize(t),1,MAX_MESSAGE_LEN) - if("ooc") - t = input("Enter any OOC comments", "pAI OOC Comments", candidate.comments) as message - if(t) - candidate.comments = copytext(sanitize(t),1,MAX_MESSAGE_LEN) - if("save") - candidate.savefile_save(usr) - if("load") - candidate.savefile_load(usr) - //In case people have saved unsanitized stuff. - if(candidate.name) - candidate.name = copytext(sanitize(candidate.name),1,MAX_NAME_LEN) - if(candidate.description) - candidate.description = copytext(sanitize(candidate.description),1,MAX_MESSAGE_LEN) - if(candidate.role) - candidate.role = copytext(sanitize(candidate.role),1,MAX_MESSAGE_LEN) - if(candidate.comments) - candidate.comments = copytext(sanitize(candidate.comments),1,MAX_MESSAGE_LEN) - - if("submit") - if(candidate) - candidate.ready = 1 - for(var/obj/item/device/paicard/p in world) - if(p.looking_for_personality == 1) - p.alertUpdate() - usr << browse(null, "window=paiRecruit") - return - recruitWindow(usr) - - proc/recruitWindow(var/mob/M as mob) - var/datum/paiCandidate/candidate - for(var/datum/paiCandidate/c in pai_candidates) - if(c.key == M.key) - candidate = c - if(!candidate) - candidate = new /datum/paiCandidate() - candidate.key = M.key - pai_candidates.Add(candidate) +/datum/paiController/proc/recruitWindow(var/mob/M as mob) + var/datum/paiCandidate/candidate + for(var/datum/paiCandidate/c in pai_candidates) + if(c.key == M.key) + candidate = c + if(!candidate) + candidate = new /datum/paiCandidate() + candidate.key = M.key + pai_candidates.Add(candidate) - var/dat = "" - dat += {" - - "} + tr.d0 td { + background-color: #CC9999; color: black; + } + tr.d1 td { + background-color: #9999CC; color: black; + } + + "} - dat += "

    Please configure your pAI personality's options. Remember, what you enter here could determine whether or not the user requesting a personality chooses you!

    " - dat += "" - dat += "" - dat += "" + dat += "

    Please configure your pAI personality's options. Remember, what you enter here could determine whether or not the user requesting a personality chooses you!

    " + dat += "
    Name:[candidate.name]
    \[Edit\]What you plan to call yourself. Suggestions: Any character name you would choose for a station character OR an AI.
    " + dat += "" + dat += "" - dat += "" - dat += "" + dat += "" + dat += "" - dat += "" - dat += "" + dat += "" + dat += "" - dat += "" - dat += "" + dat += "" + dat += "" - dat += "
    Name:[candidate.name]
    \[Edit\]What you plan to call yourself. Suggestions: Any character name you would choose for a station character OR an AI.
    Description:[candidate.description]
    \[Edit\]What sort of pAI you typically play; your mannerisms, your quirks, etc. This can be as sparse or as detailed as you like.
    Description:[candidate.description]
    \[Edit\]What sort of pAI you typically play; your mannerisms, your quirks, etc. This can be as sparse or as detailed as you like.
    Preferred Role:[candidate.role]
    \[Edit\]Do you like to partner with sneaky social ninjas? Like to help security hunt down thugs? Enjoy watching an engineer's back while he saves the station yet again? This doesn't have to be limited to just station jobs. Pretty much any general descriptor for what you'd like to be doing works here.
    Preferred Role:[candidate.role]
    \[Edit\]Do you like to partner with sneaky social ninjas? Like to help security hunt down thugs? Enjoy watching an engineer's back while he saves the station yet again? This doesn't have to be limited to just station jobs. Pretty much any general descriptor for what you'd like to be doing works here.
    OOC Comments:[candidate.comments]
    \[Edit\]Anything you'd like to address specifically to the player reading this in an OOC manner. \"I prefer more serious RP.\", \"I'm still learning the interface!\", etc. Feel free to leave this blank if you want.
    OOC Comments:[candidate.comments]
    \[Edit\]Anything you'd like to address specifically to the player reading this in an OOC manner. \"I prefer more serious RP.\", \"I'm still learning the interface!\", etc. Feel free to leave this blank if you want.
    " + dat += "" - dat += "
    " - dat += "

    Submit Personality


    " - dat += "Save Personality
    " - dat += "Load Personality
    " + dat += "
    " + dat += "

    Submit Personality


    " + dat += "Save Personality
    " + dat += "Load Personality
    " - M << browse(dat, "window=paiRecruit") + M << browse(dat, "window=paiRecruit") - proc/findPAI(var/obj/item/device/paicard/p, var/mob/user) - requestRecruits() - var/list/available = list() - for(var/datum/paiCandidate/c in paiController.pai_candidates) - if(c.ready) - var/found = 0 - for(var/mob/dead/observer/o in player_list) - if(o.key == c.key) - found = 1 - if(found) - available.Add(c) - var/dat = "" +/datum/paiController/proc/findPAI(var/obj/item/device/paicard/p, var/mob/user) + requestRecruits() + var/list/available = list() + for(var/datum/paiCandidate/c in paiController.pai_candidates) + if(c.ready) + var/found = 0 + for(var/mob/dead/observer/o in player_list) + if(o.key == c.key) + found = 1 + if(found) + available.Add(c) + var/dat = "" - dat += {" - - "} - dat += "

    Requesting AI personalities from central database... If there are no entries, or if a suitable entry is not listed, check again later as more personalities may be added.

    " + tr.d0 td { + background-color: #CC9999; color: black; + } + tr.d1 td { + background-color: #9999CC; color: black; + } + tr.d2 td { + background-color: #99CC99; color: black; + } + + "} + dat += "

    Requesting AI personalities from central database... If there are no entries, or if a suitable entry is not listed, check again later as more personalities may be added.

    " - dat += "" + dat += "
    " - for(var/datum/paiCandidate/c in available) - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" + for(var/datum/paiCandidate/c in available) + dat += "" + dat += "" + dat += "" + dat += "" + dat += "" - dat += "
    Name:[c.name]
    Description:[c.description]
    Preferred Role:[c.role]
    OOC Comments:[c.comments]
    \[Download [c.name]\]
    Name:[c.name]
    Description:[c.description]
    Preferred Role:[c.role]
    OOC Comments:[c.comments]
    \[Download [c.name]\]
    " + dat += "" - user << browse(dat, "window=findPai") + user << browse(dat, "window=findPai") - proc/requestRecruits() - for(var/mob/dead/observer/O in player_list) - if(jobban_isbanned(O, "pAI")) +/datum/paiController/proc/requestRecruits() + for(var/mob/dead/observer/O in player_list) + if(jobban_isbanned(O, "pAI")) + continue + if(asked.Find(O.key)) + if(world.time < asked[O.key] + askDelay) continue - if(asked.Find(O.key)) - if(world.time < asked[O.key] + askDelay) - continue - else - asked.Remove(O.key) - if(O.client) - var/hasSubmitted = 0 - for(var/datum/paiCandidate/c in paiController.pai_candidates) - if(c.key == O.key) - hasSubmitted = 1 - if(!hasSubmitted && (O.client.prefs.be_special & BE_PAI)) - question(O.client) + else + asked.Remove(O.key) + if(O.client) + var/hasSubmitted = 0 + for(var/datum/paiCandidate/c in paiController.pai_candidates) + if(c.key == O.key) + hasSubmitted = 1 + if(!hasSubmitted && (O.client.prefs.be_special & BE_PAI)) + question(O.client) - proc/question(var/client/C) - spawn(0) - if(!C) return - asked.Add(C.key) - asked[C.key] = world.time - var/response = alert(C, "Someone is requesting a pAI personality. Would you like to play as a personal AI?", "pAI Request", "Yes", "No", "Never for this round") - if(!C) return //handle logouts that happen whilst the alert is waiting for a response. - if(response == "Yes") - recruitWindow(C.mob) - else if (response == "Never for this round") - asked[C.key] = INFINITY +/datum/paiController/proc/question(var/client/C) + spawn(0) + if(!C) return + asked.Add(C.key) + asked[C.key] = world.time + var/response = alert(C, "Someone is requesting a pAI personality. Would you like to play as a personal AI?", "pAI Request", "Yes", "No", "Never for this round") + if(!C) return //handle logouts that happen whilst the alert is waiting for a response. + if(response == "Yes") + recruitWindow(C.mob) + else if (response == "Never for this round") + asked[C.key] = INFINITY diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 819101c1a70..e9faf2b07f2 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -61,176 +61,177 @@ /obj/item/weapon/robot_module/standard name = "standard robot module" - New() - ..() - modules += new /obj/item/weapon/melee/baton/loaded(src) - modules += new /obj/item/weapon/extinguisher(src) - modules += new /obj/item/weapon/wrench(src) - modules += new /obj/item/weapon/crowbar(src) - modules += new /obj/item/device/healthanalyzer(src) - emag = new /obj/item/weapon/melee/energy/sword(src) +/obj/item/weapon/robot_module/standard/New() + ..() + modules += new /obj/item/weapon/melee/baton/loaded(src) + modules += new /obj/item/weapon/extinguisher(src) + modules += new /obj/item/weapon/wrench(src) + modules += new /obj/item/weapon/crowbar(src) + modules += new /obj/item/device/healthanalyzer(src) + emag = new /obj/item/weapon/melee/energy/sword(src) /obj/item/weapon/robot_module/medical name = "medical robot module" - New() - ..() - modules += new /obj/item/borg/sight/hud/med(src) - modules += new /obj/item/device/healthanalyzer(src) - modules += new /obj/item/weapon/reagent_containers/borghypo(src) - modules += new /obj/item/weapon/reagent_containers/glass/beaker/large(src) - modules += new /obj/item/weapon/reagent_containers/dropper(src) - modules += new /obj/item/weapon/reagent_containers/syringe(src) - modules += new /obj/item/weapon/extinguisher/mini(src) - emag = new /obj/item/weapon/reagent_containers/spray(src) +/obj/item/weapon/robot_module/medical/New() + ..() + modules += new /obj/item/borg/sight/hud/med(src) + modules += new /obj/item/device/healthanalyzer(src) + modules += new /obj/item/weapon/reagent_containers/borghypo(src) + modules += new /obj/item/weapon/reagent_containers/glass/beaker/large(src) + modules += new /obj/item/weapon/reagent_containers/dropper(src) + modules += new /obj/item/weapon/reagent_containers/syringe(src) + modules += new /obj/item/weapon/extinguisher/mini(src) + emag = new /obj/item/weapon/reagent_containers/spray(src) - emag.reagents.add_reagent("pacid", 250) - emag.name = "polyacid spray" + emag.reagents.add_reagent("pacid", 250) + emag.name = "polyacid spray" /obj/item/weapon/robot_module/engineering name = "engineering robot module" - New() - ..() - modules += new /obj/item/borg/sight/meson(src) - emag = new /obj/item/borg/stun(src) - modules += new /obj/item/weapon/rcd/borg(src) - modules += new /obj/item/weapon/extinguisher(src) - modules += new /obj/item/weapon/weldingtool/largetank/cyborg(src) - modules += new /obj/item/weapon/screwdriver(src) - modules += new /obj/item/weapon/wrench(src) - modules += new /obj/item/weapon/crowbar(src) - modules += new /obj/item/weapon/wirecutters(src) - modules += new /obj/item/device/multitool(src) - modules += new /obj/item/device/t_scanner(src) - modules += new /obj/item/device/analyzer(src) +/obj/item/weapon/robot_module/engineering/New() + ..() + modules += new /obj/item/borg/sight/meson(src) + emag = new /obj/item/borg/stun(src) + modules += new /obj/item/weapon/rcd/borg(src) + modules += new /obj/item/weapon/extinguisher(src) + modules += new /obj/item/weapon/weldingtool/largetank/cyborg(src) + modules += new /obj/item/weapon/screwdriver(src) + modules += new /obj/item/weapon/wrench(src) + modules += new /obj/item/weapon/crowbar(src) + modules += new /obj/item/weapon/wirecutters(src) + modules += new /obj/item/device/multitool(src) + modules += new /obj/item/device/t_scanner(src) + modules += new /obj/item/device/analyzer(src) - var/datum/robot_energy_storage/metal/metstore = new /datum/robot_energy_storage/metal(src) - var/datum/robot_energy_storage/glass/glastore = new /datum/robot_energy_storage/glass(src) - var/datum/robot_energy_storage/wire/wirestore = new /datum/robot_energy_storage/wire(src) + var/datum/robot_energy_storage/metal/metstore = new /datum/robot_energy_storage/metal(src) + var/datum/robot_energy_storage/glass/glastore = new /datum/robot_energy_storage/glass(src) + var/datum/robot_energy_storage/wire/wirestore = new /datum/robot_energy_storage/wire(src) - var/obj/item/stack/sheet/metal/cyborg/M = new /obj/item/stack/sheet/metal/cyborg(src) - M.source = metstore - modules += M + var/obj/item/stack/sheet/metal/cyborg/M = new /obj/item/stack/sheet/metal/cyborg(src) + M.source = metstore + modules += M - var/obj/item/stack/sheet/glass/cyborg/Q = new /obj/item/stack/sheet/glass/cyborg(src) - Q.source = glastore - modules += Q + var/obj/item/stack/sheet/glass/cyborg/Q = new /obj/item/stack/sheet/glass/cyborg(src) + Q.source = glastore + modules += Q - var/obj/item/stack/sheet/rglass/cyborg/G = new /obj/item/stack/sheet/rglass/cyborg(src) - G.metsource = metstore - G.glasource = glastore - modules += G + var/obj/item/stack/sheet/rglass/cyborg/G = new /obj/item/stack/sheet/rglass/cyborg(src) + G.metsource = metstore + G.glasource = glastore + modules += G - var/obj/item/stack/rods/cyborg/R = new /obj/item/stack/rods/cyborg(src) - R.source = metstore - modules += R + var/obj/item/stack/rods/cyborg/R = new /obj/item/stack/rods/cyborg(src) + R.source = metstore + modules += R - var/obj/item/stack/cable_coil/cyborg/W = new /obj/item/stack/cable_coil/cyborg(src) - W.source = wirestore - modules += W + var/obj/item/stack/cable_coil/cyborg/W = new /obj/item/stack/cable_coil/cyborg(src) + W.source = wirestore + modules += W - var/obj/item/stack/tile/plasteel/cyborg/F = new /obj/item/stack/tile/plasteel/cyborg(src) //"Plasteel" is the normal metal floor tile, Don't be confused - RR - F.source = metstore - modules += F //'F' for floor tile - RR(src) + var/obj/item/stack/tile/plasteel/cyborg/F = new /obj/item/stack/tile/plasteel/cyborg(src) //"Plasteel" is the normal metal floor tile, Don't be confused - RR + F.source = metstore + modules += F //'F' for floor tile - RR(src) - storages += metstore - storages += glastore - storages += wirestore + storages += metstore + storages += glastore + storages += wirestore /obj/item/weapon/robot_module/security name = "security robot module" - New() - ..() - modules += new /obj/item/borg/sight/hud/sec(src) - modules += new /obj/item/weapon/handcuffs/cyborg(src) - modules += new /obj/item/weapon/melee/baton/loaded(src) - modules += new /obj/item/weapon/gun/energy/taser/cyborg(src) - modules += new /obj/item/clothing/mask/gas/sechailer/cyborg(src) - emag = new /obj/item/weapon/gun/energy/laser/cyborg(src) +/obj/item/weapon/robot_module/security/New() + ..() + modules += new /obj/item/borg/sight/hud/sec(src) + modules += new /obj/item/weapon/handcuffs/cyborg(src) + modules += new /obj/item/weapon/melee/baton/loaded(src) + modules += new /obj/item/weapon/gun/energy/taser/cyborg(src) + modules += new /obj/item/clothing/mask/gas/sechailer/cyborg(src) + emag = new /obj/item/weapon/gun/energy/laser/cyborg(src) /obj/item/weapon/robot_module/janitor name = "janitorial robot module" - New() - ..() - modules += new /obj/item/weapon/soap/nanotrasen(src) - modules += new /obj/item/weapon/storage/bag/trash/cyborg(src) - modules += new /obj/item/weapon/mop/cyborg(src) - modules += new /obj/item/device/lightreplacer/cyborg(src) - emag = new /obj/item/weapon/reagent_containers/spray(src) +/obj/item/weapon/robot_module/janitor/New() + ..() + modules += new /obj/item/weapon/soap/nanotrasen(src) + modules += new /obj/item/weapon/storage/bag/trash/cyborg(src) + modules += new /obj/item/weapon/mop/cyborg(src) + modules += new /obj/item/device/lightreplacer/cyborg(src) + emag = new /obj/item/weapon/reagent_containers/spray(src) - emag.reagents.add_reagent("lube", 250) - emag.name = "lube spray" + emag.reagents.add_reagent("lube", 250) + emag.name = "lube spray" /obj/item/weapon/robot_module/butler name = "service robot module" - New() - ..() - modules += new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass(src) - modules += new /obj/item/weapon/reagent_containers/food/condiment/enzyme(src) - modules += new /obj/item/weapon/pen(src) - modules += new /obj/item/weapon/razor(src) - modules += new /obj/item/device/violin(src) +/obj/item/weapon/robot_module/butler/New() + ..() + modules += new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass(src) + modules += new /obj/item/weapon/reagent_containers/food/condiment/enzyme(src) + modules += new /obj/item/weapon/pen(src) + modules += new /obj/item/weapon/razor(src) + modules += new /obj/item/device/violin(src) - var/obj/item/weapon/rsf/M = new /obj/item/weapon/rsf(src) - M.matter = 30 - modules += M + var/obj/item/weapon/rsf/M = new /obj/item/weapon/rsf(src) + M.matter = 30 + modules += M - modules += new /obj/item/weapon/reagent_containers/dropper(src) + modules += new /obj/item/weapon/reagent_containers/dropper(src) - var/obj/item/weapon/lighter/zippo/L = new /obj/item/weapon/lighter/zippo(src) - L.lit = 1 - modules += L + var/obj/item/weapon/lighter/zippo/L = new /obj/item/weapon/lighter/zippo(src) + L.lit = 1 + modules += L - modules += new /obj/item/weapon/storage/bag/tray(src) - modules += new /obj/item/weapon/reagent_containers/borghypo/borgshaker(src) - emag = new /obj/item/weapon/reagent_containers/borghypo/borgshaker/hacked(src) + modules += new /obj/item/weapon/storage/bag/tray(src) + modules += new /obj/item/weapon/reagent_containers/borghypo/borgshaker(src) + emag = new /obj/item/weapon/reagent_containers/borghypo/borgshaker/hacked(src) /obj/item/weapon/robot_module/miner name = "miner robot module" - New() - ..() - var/mob/living/silicon/robot/R = loc - modules += new /obj/item/borg/sight/meson(src) - emag = new /obj/item/borg/stun(src) - modules += new /obj/item/weapon/storage/bag/ore(src) - if(R.emagged) - modules += new /obj/item/weapon/pickaxe/diamonddrill(src) - else - modules += new /obj/item/weapon/pickaxe/borgdrill(src) - modules += new /obj/item/weapon/storage/bag/sheetsnatcher/borg(src) - modules += new /obj/item/device/mining_scanner(src) - modules += new /obj/item/weapon/gun/energy/kinetic_accelerator(src) - on_emag() - ..() - for(var/obj/item/weapon/pickaxe/borgdrill/D in modules) - qdel(D) +/obj/item/weapon/robot_module/miner/New() + ..() + var/mob/living/silicon/robot/R = loc + modules += new /obj/item/borg/sight/meson(src) + emag = new /obj/item/borg/stun(src) + modules += new /obj/item/weapon/storage/bag/ore(src) + if(R.emagged) modules += new /obj/item/weapon/pickaxe/diamonddrill(src) - rebuild() + else + modules += new /obj/item/weapon/pickaxe/borgdrill(src) + modules += new /obj/item/weapon/storage/bag/sheetsnatcher/borg(src) + modules += new /obj/item/device/mining_scanner(src) + modules += new /obj/item/weapon/gun/energy/kinetic_accelerator(src) + +/obj/item/weapon/robot_module/miner/on_emag() + ..() + for(var/obj/item/weapon/pickaxe/borgdrill/D in modules) + qdel(D) + modules += new /obj/item/weapon/pickaxe/diamonddrill(src) + rebuild() /obj/item/weapon/robot_module/syndicate name = "syndicate robot module" - New() - ..() - modules += new /obj/item/weapon/melee/energy/sword/cyborg(src) - modules += new /obj/item/weapon/gun/energy/crossbow/cyborg(src) - modules += new /obj/item/weapon/card/emag(src) - modules += new /obj/item/weapon/gun/energy/laser/cyborg(src) - modules += new /obj/item/weapon/tank/jetpack/carbondioxide(src) - modules += new /obj/item/weapon/crowbar(src) - emag = null +/obj/item/weapon/robot_module/syndicate/New() + ..() + modules += new /obj/item/weapon/melee/energy/sword/cyborg(src) + modules += new /obj/item/weapon/gun/energy/crossbow/cyborg(src) + modules += new /obj/item/weapon/card/emag(src) + modules += new /obj/item/weapon/gun/energy/laser/cyborg(src) + modules += new /obj/item/weapon/tank/jetpack/carbondioxide(src) + modules += new /obj/item/weapon/crowbar(src) + emag = null /datum/robot_energy_storage var/name = "Generic energy storage" diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm index 8535f93c7ce..d71c435fa94 100644 --- a/code/modules/mob/living/simple_animal/hostile/mimic.dm +++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm @@ -196,7 +196,7 @@ var/global/list/protected_objects = list(/obj/structure/table, /obj/structure/ca maxHealth = health if(creator) src.creator = creator - faction = list("\ref[creator]") // very unique + faction += "\ref[creator]" // very unique if(destroy_original) qdel(O) return 1 diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 5dc726708c5..f244a464ea6 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -485,7 +485,7 @@ var/list/slot_equipment_priority = list( \ if(machine && in_range(src, usr)) show_inv(machine) - if(!usr.stat && usr.canmove && !usr.restrained() && Adjacent(usr)) + if(canUseTopic(src, BE_CLOSE, NO_DEXTERY)) if(href_list["item"]) var/slot = text2num(href_list["item"]) var/obj/item/what = get_item_by_slot(slot) diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index a4bf9852443..40eb8d8364f 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -453,3 +453,10 @@ proc/is_special_character(mob/M) // returns 1 for special characters and 2 for h return else return + +/proc/broadcast_hud_message(var/message, var/broadcast_source) + var/turf/sourceturf = get_turf(broadcast_source) + for(var/mob/living/carbon/human/human in mob_list) + var/turf/humanturf = get_turf(human) + if((humanturf.z == sourceturf.z) && istype(human.glasses, /obj/item/clothing/glasses/hud/security)) + human.show_message("\icon[human.glasses] [message]", 1) \ No newline at end of file diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 0ebc94fedd1..8d5326e2dd3 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -14,353 +14,353 @@ anchored = 1 // don't get pushed around - New() - tag = "mob_[next_mob_id++]" - mob_list += src +/mob/new_player/New() + tag = "mob_[next_mob_id++]" + mob_list += src - proc/new_player_panel() +/mob/new_player/proc/new_player_panel() - var/output = "

    Setup Character

    " + var/output = "

    Setup Character

    " - if(!ticker || ticker.current_state <= GAME_STATE_PREGAME) - if(!ready) output += "

    Declare Ready

    " - else output += "

    You are ready Cancel

    " + if(!ticker || ticker.current_state <= GAME_STATE_PREGAME) + if(!ready) output += "

    Declare Ready

    " + else output += "

    You are ready Cancel

    " - else - output += "

    Join Game!

    " + else + output += "

    Join Game!

    " - output += "

    Observe

    " + output += "

    Observe

    " - if(!IsGuestKey(src.key)) - establish_db_connection() + if(!IsGuestKey(src.key)) + establish_db_connection() - if(dbcon.IsConnected()) - var/isadmin = 0 - if(src.client && src.client.holder) - isadmin = 1 - var/DBQuery/query = dbcon.NewQuery("SELECT id FROM erro_poll_question WHERE [(isadmin ? "" : "adminonly = false AND")] Now() BETWEEN starttime AND endtime AND id NOT IN (SELECT pollid FROM erro_poll_vote WHERE ckey = \"[ckey]\") AND id NOT IN (SELECT pollid FROM erro_poll_textreply WHERE ckey = \"[ckey]\")") - query.Execute() - var/newpoll = 0 - while(query.NextRow()) - newpoll = 1 - break - - if(newpoll) - output += "

    Show Player Polls (NEW!)

    " - else - output += "

    Show Player Polls

    " - - output += "
    " - - //src << browse(output,"window=playersetup;size=210x240;can_close=0") - var/datum/browser/popup = new(src, "playersetup", "
    New Player Options
    ", 210, 240) - popup.set_window_options("can_close=0") - popup.set_content(output) - popup.open(0) - return - - Stat() - ..() - - statpanel("Lobby") - if(client.statpanel == "Lobby" && ticker) - if(ticker.hide_mode) - stat("Game Mode:", "Secret") - else - stat("Game Mode:", "[master_mode]") - - if((ticker.current_state == GAME_STATE_PREGAME) && going) - stat("Time To Start:", ticker.pregame_timeleft) - if((ticker.current_state == GAME_STATE_PREGAME) && !going) - stat("Time To Start:", "DELAYED") - - if(ticker.current_state == GAME_STATE_PREGAME) - stat("Players: [totalPlayers]", "Players Ready: [totalPlayersReady]") - totalPlayers = 0 - totalPlayersReady = 0 - for(var/mob/new_player/player in player_list) - stat("[player.key]", (player.ready)?("(Playing)"):(null)) - totalPlayers++ - if(player.ready)totalPlayersReady++ - - Topic(href, href_list[]) - if(src != usr) - return 0 - - if(!client) return 0 - - if(href_list["show_preferences"]) - client.prefs.ShowChoices(src) - return 1 - - if(href_list["ready"]) - ready = text2num(href_list["ready"]) - - if(href_list["refresh"]) - src << browse(null, "window=playersetup") //closes the player setup window - new_player_panel() - - if(href_list["observe"]) - - if(alert(src,"Are you sure you wish to observe? You will not be able to play this round!","Player Setup","Yes","No") == "Yes") - if(!client) return 1 - var/mob/dead/observer/observer = new() - - spawning = 1 - src << sound(null, repeat = 0, wait = 0, volume = 85, channel = 1) // MAD JAMS cant last forever yo - - observer.started_as_observer = 1 - close_spawn_windows() - var/obj/O = locate("landmark*Observer-Start") - src << "\blue Now teleporting." - observer.loc = O.loc - if(client.prefs.be_random_name) - client.prefs.real_name = random_name(gender) - observer.real_name = client.prefs.real_name - observer.name = observer.real_name - observer.key = key - qdel(mind) - - qdel(src) - return 1 - - if(href_list["late_join"]) - if(!ticker || ticker.current_state != GAME_STATE_PLAYING) - usr << "\red The round is either not ready, or has already finished..." - return - LateChoices() - - if(href_list["SelectedJob"]) - - if(!enter_allowed) - usr << "\blue There is an administrative lock on entering the game!" - return - - AttemptLateSpawn(href_list["SelectedJob"]) - return - - if(href_list["privacy_poll"]) - establish_db_connection() - if(!dbcon.IsConnected()) - return - var/voted = 0 - - //First check if the person has not voted yet. - var/DBQuery/query = dbcon.NewQuery("SELECT * FROM erro_privacy WHERE ckey='[src.ckey]'") + if(dbcon.IsConnected()) + var/isadmin = 0 + if(src.client && src.client.holder) + isadmin = 1 + var/DBQuery/query = dbcon.NewQuery("SELECT id FROM erro_poll_question WHERE [(isadmin ? "" : "adminonly = false AND")] Now() BETWEEN starttime AND endtime AND id NOT IN (SELECT pollid FROM erro_poll_vote WHERE ckey = \"[ckey]\") AND id NOT IN (SELECT pollid FROM erro_poll_textreply WHERE ckey = \"[ckey]\")") query.Execute() + var/newpoll = 0 while(query.NextRow()) - voted = 1 + newpoll = 1 break - //This is a safety switch, so only valid options pass through - var/option = "UNKNOWN" - switch(href_list["privacy_poll"]) - if("signed") - option = "SIGNED" - if("anonymous") - option = "ANONYMOUS" - if("nostats") - option = "NOSTATS" - if("later") - usr << browse(null,"window=privacypoll") - return - if("abstain") - option = "ABSTAIN" + if(newpoll) + output += "

    Show Player Polls (NEW!)

    " + else + output += "

    Show Player Polls

    " - if(option == "UNKNOWN") - return + output += "
    " - if(!voted) - var/sql = "INSERT INTO erro_privacy VALUES (null, Now(), '[src.ckey]', '[option]')" - var/DBQuery/query_insert = dbcon.NewQuery(sql) - query_insert.Execute() - usr << "Thank you for your vote!" - usr << browse(null,"window=privacypoll") + //src << browse(output,"window=playersetup;size=210x240;can_close=0") + var/datum/browser/popup = new(src, "playersetup", "
    New Player Options
    ", 210, 240) + popup.set_window_options("can_close=0") + popup.set_content(output) + popup.open(0) + return - if(!ready && href_list["preference"]) - if(client) - client.prefs.process_link(src, href_list) - else if(!href_list["late_join"]) - new_player_panel() +/mob/new_player/Stat() + ..() - if(href_list["showpoll"]) - handle_player_polling() - return - - if(href_list["pollid"]) - var/pollid = href_list["pollid"] - if(istext(pollid)) - pollid = text2num(pollid) - if(isnum(pollid)) - src.poll_player(pollid) - return - - if(href_list["votepollid"] && href_list["votetype"]) - var/pollid = text2num(href_list["votepollid"]) - var/votetype = href_list["votetype"] - switch(votetype) - if("OPTION") - var/optionid = text2num(href_list["voteoptionid"]) - vote_on_poll(pollid, optionid) - if("TEXT") - var/replytext = href_list["replytext"] - log_text_poll_reply(pollid, replytext) - if("NUMVAL") - var/id_min = text2num(href_list["minid"]) - var/id_max = text2num(href_list["maxid"]) - - if( (id_max - id_min) > 100 ) //Basic exploit prevention - usr << "The option ID difference is too big. Please contact administration or the database admin." - return - - for(var/optionid = id_min; optionid <= id_max; optionid++) - if(!isnull(href_list["o[optionid]"])) //Test if this optionid was replied to - var/rating - if(href_list["o[optionid]"] == "abstain") - rating = null - else - rating = text2num(href_list["o[optionid]"]) - if(!isnum(rating)) - return - - vote_on_numval_poll(pollid, optionid, rating) - if("MULTICHOICE") - var/id_min = text2num(href_list["minoptionid"]) - var/id_max = text2num(href_list["maxoptionid"]) - - if( (id_max - id_min) > 100 ) //Basic exploit prevention - usr << "The option ID difference is too big. Please contact administration or the database admin." - return - - for(var/optionid = id_min; optionid <= id_max; optionid++) - if(!isnull(href_list["option_[optionid]"])) //Test if this optionid was selected - vote_on_poll(pollid, optionid, 1) - - proc/IsJobAvailable(rank) - var/datum/job/job = job_master.GetJob(rank) - if(!job) return 0 - if((job.current_positions >= job.total_positions) && job.total_positions != -1) return 0 - if(jobban_isbanned(src,rank)) return 0 - if(!job.player_old_enough(src.client)) return 0 - return 1 - - - proc/AttemptLateSpawn(rank) - if(!IsJobAvailable(rank)) - src << alert("[rank] is not available. Please try another.") - return 0 - - job_master.AssignRole(src, rank, 1) - - var/mob/living/carbon/human/character = create_character() //creates the human and transfers vars and mind - job_master.EquipRank(character, rank, 1) //equips the human - character.loc = pick(latejoin) - character.lastarea = get_area(loc) - - if(character.mind.assigned_role != "Cyborg") - data_core.manifest_inject(character) - ticker.minds += character.mind//Cyborgs and AIs handle this in the transform proc. //TODO!!!!! ~Carn - AnnounceArrival(character, rank) + statpanel("Lobby") + if(client.statpanel == "Lobby" && ticker) + if(ticker.hide_mode) + stat("Game Mode:", "Secret") else - character.Robotize() + stat("Game Mode:", "[master_mode]") - joined_player_list += character.ckey + if((ticker.current_state == GAME_STATE_PREGAME) && going) + stat("Time To Start:", ticker.pregame_timeleft) + if((ticker.current_state == GAME_STATE_PREGAME) && !going) + stat("Time To Start:", "DELAYED") - if(config.allow_latejoin_antagonists && emergency_shuttle.timeleft() > 300) //Don't make them antags if the station is evacuating - ticker.mode.make_antag_chance(character) - qdel(src) + if(ticker.current_state == GAME_STATE_PREGAME) + stat("Players: [totalPlayers]", "Players Ready: [totalPlayersReady]") + totalPlayers = 0 + totalPlayersReady = 0 + for(var/mob/new_player/player in player_list) + stat("[player.key]", (player.ready)?("(Playing)"):(null)) + totalPlayers++ + if(player.ready)totalPlayersReady++ - proc/AnnounceArrival(var/mob/living/carbon/human/character, var/rank) - if (ticker.current_state == GAME_STATE_PLAYING) - var/ailist[] = list() - for (var/mob/living/silicon/ai/A in living_mob_list) - ailist += A - if (ailist.len) - var/mob/living/silicon/ai/announcer = pick(ailist) - if(character.mind) - if((character.mind.assigned_role != "Cyborg") && (character.mind.special_role != "MODE")) - announcer.say("[character.real_name] has signed up as [rank].") - - proc/LateChoices() - var/mills = world.time // 1/10 of a second, not real milliseconds but whatever - //var/secs = ((mills % 36000) % 600) / 10 //Not really needed, but I'll leave it here for refrence.. or something - var/mins = (mills % 36000) / 600 - var/hours = mills / 36000 - - var/dat = "
    Round Duration: [round(hours)]h [round(mins)]m
    " - - if(emergency_shuttle) //In case Nanotrasen decides reposess Centcom's shuttles. - if(emergency_shuttle.direction == 2) //Shuttle is going to centcom, not recalled - dat += "
    The station has been evacuated.

    " - if(emergency_shuttle.direction == 1 && emergency_shuttle.timeleft() < 300) //Shuttle is past the point of no recall - dat += "
    The station is currently undergoing evacuation procedures.

    " - - var/available_job_count = 0 - for(var/datum/job/job in job_master.occupations) - if(job && IsJobAvailable(job.title)) - available_job_count++; - - dat += "
    Choose from the following open positions:

    " - dat += "
    " - var/job_count = 0 - for(var/datum/job/job in job_master.occupations) - if(job && IsJobAvailable(job.title)) - job_count++; - if (job_count > round(available_job_count / 2)) - dat += "
    " - var/position_class = "otherPosition" - if (job.title in command_positions) - position_class = "commandPosition" - dat += "[job.title] ([job.current_positions])
    " - dat += "
    " - - // Removing the old window method but leaving it here for reference - //src << browse(dat, "window=latechoices;size=300x640;can_close=1") - - // Added the new browser window method - var/datum/browser/popup = new(src, "latechoices", "Choose Profession", 440, 500) - popup.add_stylesheet("playeroptions", 'html/browser/playeroptions.css') - popup.set_content(dat) - popup.open(0) // 0 is passed to open so that it doesn't use the onclose() proc - - - proc/create_character() - spawning = 1 - close_spawn_windows() - - var/mob/living/carbon/human/new_character = new(loc) - new_character.lastarea = get_area(loc) - - create_dna(new_character) - - if(config.force_random_names || appearance_isbanned(src)) - client.prefs.random_character() - client.prefs.real_name = random_name(gender) - client.prefs.copy_to(new_character) - - src << sound(null, repeat = 0, wait = 0, volume = 85, channel = 1) // MAD JAMS cant last forever yo - - if(mind) - mind.active = 0 //we wish to transfer the key manually - mind.transfer_to(new_character) //won't transfer key since the mind is not active - - new_character.name = real_name - - ready_dna(new_character, client.prefs.blood_type) - - new_character.key = key //Manually transfer the key to log them in - - return new_character - - - Move() +/mob/new_player/Topic(href, href_list[]) + if(src != usr) return 0 + if(!client) return 0 - proc/close_spawn_windows() + if(href_list["show_preferences"]) + client.prefs.ShowChoices(src) + return 1 - src << browse(null, "window=latechoices") //closes late choices window + if(href_list["ready"]) + ready = text2num(href_list["ready"]) + + if(href_list["refresh"]) src << browse(null, "window=playersetup") //closes the player setup window - src << browse(null, "window=preferences") //closes job selection - src << browse(null, "window=mob_occupation") - src << browse(null, "window=latechoices") //closes late job selection + new_player_panel() + + if(href_list["observe"]) + + if(alert(src,"Are you sure you wish to observe? You will not be able to play this round!","Player Setup","Yes","No") == "Yes") + if(!client) return 1 + var/mob/dead/observer/observer = new() + + spawning = 1 + src << sound(null, repeat = 0, wait = 0, volume = 85, channel = 1) // MAD JAMS cant last forever yo + + observer.started_as_observer = 1 + close_spawn_windows() + var/obj/O = locate("landmark*Observer-Start") + src << "\blue Now teleporting." + observer.loc = O.loc + if(client.prefs.be_random_name) + client.prefs.real_name = random_name(gender) + observer.real_name = client.prefs.real_name + observer.name = observer.real_name + observer.key = key + qdel(mind) + + qdel(src) + return 1 + + if(href_list["late_join"]) + if(!ticker || ticker.current_state != GAME_STATE_PLAYING) + usr << "\red The round is either not ready, or has already finished..." + return + LateChoices() + + if(href_list["SelectedJob"]) + + if(!enter_allowed) + usr << "\blue There is an administrative lock on entering the game!" + return + + AttemptLateSpawn(href_list["SelectedJob"]) + return + + if(href_list["privacy_poll"]) + establish_db_connection() + if(!dbcon.IsConnected()) + return + var/voted = 0 + + //First check if the person has not voted yet. + var/DBQuery/query = dbcon.NewQuery("SELECT * FROM erro_privacy WHERE ckey='[src.ckey]'") + query.Execute() + while(query.NextRow()) + voted = 1 + break + + //This is a safety switch, so only valid options pass through + var/option = "UNKNOWN" + switch(href_list["privacy_poll"]) + if("signed") + option = "SIGNED" + if("anonymous") + option = "ANONYMOUS" + if("nostats") + option = "NOSTATS" + if("later") + usr << browse(null,"window=privacypoll") + return + if("abstain") + option = "ABSTAIN" + + if(option == "UNKNOWN") + return + + if(!voted) + var/sql = "INSERT INTO erro_privacy VALUES (null, Now(), '[src.ckey]', '[option]')" + var/DBQuery/query_insert = dbcon.NewQuery(sql) + query_insert.Execute() + usr << "Thank you for your vote!" + usr << browse(null,"window=privacypoll") + + if(!ready && href_list["preference"]) + if(client) + client.prefs.process_link(src, href_list) + else if(!href_list["late_join"]) + new_player_panel() + + if(href_list["showpoll"]) + handle_player_polling() + return + + if(href_list["pollid"]) + var/pollid = href_list["pollid"] + if(istext(pollid)) + pollid = text2num(pollid) + if(isnum(pollid)) + src.poll_player(pollid) + return + + if(href_list["votepollid"] && href_list["votetype"]) + var/pollid = text2num(href_list["votepollid"]) + var/votetype = href_list["votetype"] + switch(votetype) + if("OPTION") + var/optionid = text2num(href_list["voteoptionid"]) + vote_on_poll(pollid, optionid) + if("TEXT") + var/replytext = href_list["replytext"] + log_text_poll_reply(pollid, replytext) + if("NUMVAL") + var/id_min = text2num(href_list["minid"]) + var/id_max = text2num(href_list["maxid"]) + + if( (id_max - id_min) > 100 ) //Basic exploit prevention + usr << "The option ID difference is too big. Please contact administration or the database admin." + return + + for(var/optionid = id_min; optionid <= id_max; optionid++) + if(!isnull(href_list["o[optionid]"])) //Test if this optionid was replied to + var/rating + if(href_list["o[optionid]"] == "abstain") + rating = null + else + rating = text2num(href_list["o[optionid]"]) + if(!isnum(rating)) + return + + vote_on_numval_poll(pollid, optionid, rating) + if("MULTICHOICE") + var/id_min = text2num(href_list["minoptionid"]) + var/id_max = text2num(href_list["maxoptionid"]) + + if( (id_max - id_min) > 100 ) //Basic exploit prevention + usr << "The option ID difference is too big. Please contact administration or the database admin." + return + + for(var/optionid = id_min; optionid <= id_max; optionid++) + if(!isnull(href_list["option_[optionid]"])) //Test if this optionid was selected + vote_on_poll(pollid, optionid, 1) + +/mob/new_player/proc/IsJobAvailable(rank) + var/datum/job/job = job_master.GetJob(rank) + if(!job) return 0 + if((job.current_positions >= job.total_positions) && job.total_positions != -1) return 0 + if(jobban_isbanned(src,rank)) return 0 + if(!job.player_old_enough(src.client)) return 0 + return 1 + + +/mob/new_player/proc/AttemptLateSpawn(rank) + if(!IsJobAvailable(rank)) + src << alert("[rank] is not available. Please try another.") + return 0 + + job_master.AssignRole(src, rank, 1) + + var/mob/living/carbon/human/character = create_character() //creates the human and transfers vars and mind + job_master.EquipRank(character, rank, 1) //equips the human + character.loc = pick(latejoin) + character.lastarea = get_area(loc) + + if(character.mind.assigned_role != "Cyborg") + data_core.manifest_inject(character) + ticker.minds += character.mind//Cyborgs and AIs handle this in the transform proc. //TODO!!!!! ~Carn + AnnounceArrival(character, rank) + else + character.Robotize() + + joined_player_list += character.ckey + + if(config.allow_latejoin_antagonists && emergency_shuttle.timeleft() > 300) //Don't make them antags if the station is evacuating + ticker.mode.make_antag_chance(character) + qdel(src) + +/mob/new_player/proc/AnnounceArrival(var/mob/living/carbon/human/character, var/rank) + if (ticker.current_state == GAME_STATE_PLAYING) + var/ailist[] = list() + for (var/mob/living/silicon/ai/A in living_mob_list) + ailist += A + if (ailist.len) + var/mob/living/silicon/ai/announcer = pick(ailist) + if(character.mind) + if((character.mind.assigned_role != "Cyborg") && (character.mind.special_role != "MODE")) + announcer.say("[character.real_name] has signed up as [rank].") + +/mob/new_player/proc/LateChoices() + var/mills = world.time // 1/10 of a second, not real milliseconds but whatever + //var/secs = ((mills % 36000) % 600) / 10 //Not really needed, but I'll leave it here for refrence.. or something + var/mins = (mills % 36000) / 600 + var/hours = mills / 36000 + + var/dat = "
    Round Duration: [round(hours)]h [round(mins)]m
    " + + if(emergency_shuttle) //In case Nanotrasen decides reposess Centcom's shuttles. + if(emergency_shuttle.direction == 2) //Shuttle is going to centcom, not recalled + dat += "
    The station has been evacuated.

    " + if(emergency_shuttle.direction == 1 && emergency_shuttle.timeleft() < 300) //Shuttle is past the point of no recall + dat += "
    The station is currently undergoing evacuation procedures.

    " + + var/available_job_count = 0 + for(var/datum/job/job in job_master.occupations) + if(job && IsJobAvailable(job.title)) + available_job_count++; + + dat += "
    Choose from the following open positions:

    " + dat += "
    " + var/job_count = 0 + for(var/datum/job/job in job_master.occupations) + if(job && IsJobAvailable(job.title)) + job_count++; + if (job_count > round(available_job_count / 2)) + dat += "
    " + var/position_class = "otherPosition" + if (job.title in command_positions) + position_class = "commandPosition" + dat += "[job.title] ([job.current_positions])
    " + dat += "
    " + + // Removing the old window method but leaving it here for reference + //src << browse(dat, "window=latechoices;size=300x640;can_close=1") + + // Added the new browser window method + var/datum/browser/popup = new(src, "latechoices", "Choose Profession", 440, 500) + popup.add_stylesheet("playeroptions", 'html/browser/playeroptions.css') + popup.set_content(dat) + popup.open(0) // 0 is passed to open so that it doesn't use the onclose() proc + + +/mob/new_player/proc/create_character() + spawning = 1 + close_spawn_windows() + + var/mob/living/carbon/human/new_character = new(loc) + new_character.lastarea = get_area(loc) + + create_dna(new_character) + + if(config.force_random_names || appearance_isbanned(src)) + client.prefs.random_character() + client.prefs.real_name = random_name(gender) + client.prefs.copy_to(new_character) + + src << sound(null, repeat = 0, wait = 0, volume = 85, channel = 1) // MAD JAMS cant last forever yo + + if(mind) + mind.active = 0 //we wish to transfer the key manually + mind.transfer_to(new_character) //won't transfer key since the mind is not active + + new_character.name = real_name + + ready_dna(new_character, client.prefs.blood_type) + + new_character.key = key //Manually transfer the key to log them in + + return new_character + + +/mob/new_player/Move() + return 0 + + +/mob/new_player/proc/close_spawn_windows() + + src << browse(null, "window=latechoices") //closes late choices window + src << browse(null, "window=playersetup") //closes the player setup window + src << browse(null, "window=preferences") //closes job selection + src << browse(null, "window=mob_occupation") + src << browse(null, "window=latechoices") //closes late job selection diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm index d91da2be50f..01e73989d95 100644 --- a/code/modules/mob/new_player/preferences_setup.dm +++ b/code/modules/mob/new_player/preferences_setup.dm @@ -1,351 +1,351 @@ -datum/preferences + //The mob should have a gender you want before running this proc. Will run fine without H - proc/random_character(gender_override) - if(gender_override) - gender = gender_override - else - gender = pick(MALE,FEMALE) - underwear = random_underwear(gender) - skin_tone = random_skin_tone() - hair_style = random_hair_style(gender) - facial_hair_style = random_facial_hair_style(gender) - hair_color = random_short_color() - facial_hair_color = hair_color - eye_color = random_eye_color() - pref_species = new /datum/species/human() - backbag = 2 - age = rand(AGE_MIN,AGE_MAX) +/datum/preferences/proc/random_character(gender_override) + if(gender_override) + gender = gender_override + else + gender = pick(MALE,FEMALE) + underwear = random_underwear(gender) + skin_tone = random_skin_tone() + hair_style = random_hair_style(gender) + facial_hair_style = random_facial_hair_style(gender) + hair_color = random_short_color() + facial_hair_color = hair_color + eye_color = random_eye_color() + pref_species = new /datum/species/human() + backbag = 2 + age = rand(AGE_MIN,AGE_MAX) - proc/update_preview_icon() //seriously. This is horrendous. - del(preview_icon_front) - del(preview_icon_side) - var/icon/preview_icon = null +/datum/preferences/proc/update_preview_icon() //seriously. This is horrendous. + del(preview_icon_front) + del(preview_icon_side) + var/icon/preview_icon = null - var/g = "m" - if(gender == FEMALE) g = "f" + var/g = "m" + if(gender == FEMALE) g = "f" - if(pref_species.id == "human" || !config.mutant_races) - preview_icon = new /icon('icons/mob/human.dmi', "[skin_tone]_[g]_s") - else - preview_icon = new /icon('icons/mob/human.dmi', "[pref_species.id]_[g]_s") - preview_icon.Blend("#[mutant_color]", ICON_MULTIPLY) + if(pref_species.id == "human" || !config.mutant_races) + preview_icon = new /icon('icons/mob/human.dmi', "[skin_tone]_[g]_s") + else + preview_icon = new /icon('icons/mob/human.dmi', "[pref_species.id]_[g]_s") + preview_icon.Blend("#[mutant_color]", ICON_MULTIPLY) - var/datum/sprite_accessory/S - if(underwear) - S = underwear_all[underwear] - if(S) - preview_icon.Blend(new /icon(S.icon, "[S.icon_state]_s"), ICON_OVERLAY) + var/datum/sprite_accessory/S + if(underwear) + S = underwear_all[underwear] + if(S) + preview_icon.Blend(new /icon(S.icon, "[S.icon_state]_s"), ICON_OVERLAY) - var/icon/eyes_s = new/icon() - if(EYECOLOR in pref_species.specflags) - eyes_s = new/icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = "[pref_species.eyes]_s") - eyes_s.Blend("#[eye_color]", ICON_MULTIPLY) + var/icon/eyes_s = new/icon() + if(EYECOLOR in pref_species.specflags) + eyes_s = new/icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = "[pref_species.eyes]_s") + eyes_s.Blend("#[eye_color]", ICON_MULTIPLY) - S = hair_styles_list[hair_style] - if(S && (HAIR in pref_species.specflags)) - var/icon/hair_s = new/icon("icon" = S.icon, "icon_state" = "[S.icon_state]_s") - hair_s.Blend("#[hair_color]", ICON_MULTIPLY) - eyes_s.Blend(hair_s, ICON_OVERLAY) + S = hair_styles_list[hair_style] + if(S && (HAIR in pref_species.specflags)) + var/icon/hair_s = new/icon("icon" = S.icon, "icon_state" = "[S.icon_state]_s") + hair_s.Blend("#[hair_color]", ICON_MULTIPLY) + eyes_s.Blend(hair_s, ICON_OVERLAY) - S = facial_hair_styles_list[facial_hair_style] - if(S && (FACEHAIR in pref_species.specflags)) - var/icon/facial_s = new/icon("icon" = S.icon, "icon_state" = "[S.icon_state]_s") - facial_s.Blend("#[facial_hair_color]", ICON_MULTIPLY) - eyes_s.Blend(facial_s, ICON_OVERLAY) + S = facial_hair_styles_list[facial_hair_style] + if(S && (FACEHAIR in pref_species.specflags)) + var/icon/facial_s = new/icon("icon" = S.icon, "icon_state" = "[S.icon_state]_s") + facial_s.Blend("#[facial_hair_color]", ICON_MULTIPLY) + eyes_s.Blend(facial_s, ICON_OVERLAY) - var/icon/clothes_s = null - if(job_civilian_low & ASSISTANT)//This gives the preview icon clothes depending on which job(if any) is set to 'high' - clothes_s = new /icon('icons/mob/uniform.dmi', "grey_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) - if(backbag == 2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - else if(backbag == 3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) + var/icon/clothes_s = null + if(job_civilian_low & ASSISTANT)//This gives the preview icon clothes depending on which job(if any) is set to 'high' + clothes_s = new /icon('icons/mob/uniform.dmi', "grey_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) + if(backbag == 2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) + else if(backbag == 3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - else if(job_civilian_high)//I hate how this looks, but there's no reason to go through this switch if it's empty - switch(job_civilian_high) - if(HOP) - clothes_s = new /icon('icons/mob/uniform.dmi', "hop_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/head.dmi', "hopcap"), ICON_OVERLAY) - if(backbag == 2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - else if(backbag == 3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) - if(BARTENDER) - clothes_s = new /icon('icons/mob/uniform.dmi', "ba_suit_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "armor"), ICON_OVERLAY) - if(backbag == 2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - else if(backbag == 3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) - if(BOTANIST) - clothes_s = new /icon('icons/mob/uniform.dmi', "hydroponics_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/hands.dmi', "ggloves"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "apron"), ICON_OVERLAY) - if(backbag == 2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - else if(backbag == 3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-hyd"), ICON_OVERLAY) - if(CHEF) - clothes_s = new /icon('icons/mob/uniform.dmi', "chef_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/head.dmi', "chef"), ICON_OVERLAY) - if(backbag == 2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(backbag == 3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) - if(JANITOR) - clothes_s = new /icon('icons/mob/uniform.dmi', "janitor_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) - if(backbag == 2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(backbag == 3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) - if(LIBRARIAN) - clothes_s = new /icon('icons/mob/uniform.dmi', "red_suit_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) - if(backbag == 2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(backbag == 3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) - if(QUARTERMASTER) - clothes_s = new /icon('icons/mob/uniform.dmi', "qm_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/eyes.dmi', "sun"), ICON_OVERLAY) - clothes_s.Blend(new /icon('icons/mob/items_righthand.dmi', "clipboard"), ICON_UNDERLAY) - if(backbag == 2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(backbag == 3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) - if(CARGOTECH) - clothes_s = new /icon('icons/mob/uniform.dmi', "cargotech_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY) - if(backbag == 2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(backbag == 3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) - if(MINER) - clothes_s = new /icon('icons/mob/uniform.dmi', "miner_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY) - if(backbag == 2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "engiepack"), ICON_OVERLAY) - if(backbag == 3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-eng"), ICON_OVERLAY) - if(LAWYER) - clothes_s = new /icon('icons/mob/uniform.dmi', "lawyer_blue_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/items_righthand.dmi', "briefcase"), ICON_UNDERLAY) - if(backbag == 2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(backbag == 3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) - if(CHAPLAIN) - clothes_s = new /icon('icons/mob/uniform.dmi', "chapblack_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) - if(backbag == 2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(backbag == 3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) - if(CLOWN) - clothes_s = new /icon('icons/mob/uniform.dmi', "clown_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "clown"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/mask.dmi', "clown"), ICON_OVERLAY) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "clownpack"), ICON_OVERLAY) - if(MIME) - clothes_s = new /icon('icons/mob/uniform.dmi', "mime_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/hands.dmi', "lgloves"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/mask.dmi', "mime"), ICON_OVERLAY) - clothes_s.Blend(new /icon('icons/mob/head.dmi', "beret"), ICON_OVERLAY) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "suspenders"), ICON_OVERLAY) - if(backbag == 2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "mimepack"), ICON_OVERLAY) - if(backbag == 3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) + else if(job_civilian_high)//I hate how this looks, but there's no reason to go through this switch if it's empty + switch(job_civilian_high) + if(HOP) + clothes_s = new /icon('icons/mob/uniform.dmi', "hop_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/head.dmi', "hopcap"), ICON_OVERLAY) + if(backbag == 2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) + else if(backbag == 3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) + if(BARTENDER) + clothes_s = new /icon('icons/mob/uniform.dmi', "ba_suit_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "armor"), ICON_OVERLAY) + if(backbag == 2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) + else if(backbag == 3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) + if(BOTANIST) + clothes_s = new /icon('icons/mob/uniform.dmi', "hydroponics_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/hands.dmi', "ggloves"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "apron"), ICON_OVERLAY) + if(backbag == 2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) + else if(backbag == 3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-hyd"), ICON_OVERLAY) + if(CHEF) + clothes_s = new /icon('icons/mob/uniform.dmi', "chef_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/head.dmi', "chef"), ICON_OVERLAY) + if(backbag == 2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) + if(backbag == 3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) + if(JANITOR) + clothes_s = new /icon('icons/mob/uniform.dmi', "janitor_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) + if(backbag == 2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) + if(backbag == 3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) + if(LIBRARIAN) + clothes_s = new /icon('icons/mob/uniform.dmi', "red_suit_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) + if(backbag == 2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) + if(backbag == 3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) + if(QUARTERMASTER) + clothes_s = new /icon('icons/mob/uniform.dmi', "qm_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/eyes.dmi', "sun"), ICON_OVERLAY) + clothes_s.Blend(new /icon('icons/mob/items_righthand.dmi', "clipboard"), ICON_UNDERLAY) + if(backbag == 2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) + if(backbag == 3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) + if(CARGOTECH) + clothes_s = new /icon('icons/mob/uniform.dmi', "cargotech_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY) + if(backbag == 2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) + if(backbag == 3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) + if(MINER) + clothes_s = new /icon('icons/mob/uniform.dmi', "miner_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY) + if(backbag == 2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "engiepack"), ICON_OVERLAY) + if(backbag == 3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-eng"), ICON_OVERLAY) + if(LAWYER) + clothes_s = new /icon('icons/mob/uniform.dmi', "lawyer_blue_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/items_righthand.dmi', "briefcase"), ICON_UNDERLAY) + if(backbag == 2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) + if(backbag == 3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) + if(CHAPLAIN) + clothes_s = new /icon('icons/mob/uniform.dmi', "chapblack_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) + if(backbag == 2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) + if(backbag == 3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) + if(CLOWN) + clothes_s = new /icon('icons/mob/uniform.dmi', "clown_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "clown"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/mask.dmi', "clown"), ICON_OVERLAY) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "clownpack"), ICON_OVERLAY) + if(MIME) + clothes_s = new /icon('icons/mob/uniform.dmi', "mime_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/hands.dmi', "lgloves"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/mask.dmi', "mime"), ICON_OVERLAY) + clothes_s.Blend(new /icon('icons/mob/head.dmi', "beret"), ICON_OVERLAY) + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "suspenders"), ICON_OVERLAY) + if(backbag == 2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "mimepack"), ICON_OVERLAY) + if(backbag == 3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) - else if(job_medsci_high) - switch(job_medsci_high) - if(RD) - clothes_s = new /icon('icons/mob/uniform.dmi', "director_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/items_righthand.dmi', "clipboard"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_open"), ICON_OVERLAY) - if(backbag == 2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(backbag == 3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-tox"), ICON_OVERLAY) - if(SCIENTIST) - clothes_s = new /icon('icons/mob/uniform.dmi', "toxinswhite_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_tox_open"), ICON_OVERLAY) - if(backbag == 2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(backbag == 3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-tox"), ICON_OVERLAY) - if(CHEMIST) - clothes_s = new /icon('icons/mob/uniform.dmi', "chemistrywhite_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_chem_open"), ICON_OVERLAY) - if(backbag == 2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(backbag == 3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-chem"), ICON_OVERLAY) - if(CMO) - clothes_s = new /icon('icons/mob/uniform.dmi', "cmo_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/items_lefthand.dmi', "firstaid"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_cmo_open"), ICON_OVERLAY) - if(backbag == 2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "medicalpack"), ICON_OVERLAY) - if(backbag == 3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-med"), ICON_OVERLAY) - if(DOCTOR) - clothes_s = new /icon('icons/mob/uniform.dmi', "medical_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/items_lefthand.dmi', "firstaid"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_open"), ICON_OVERLAY) - if(backbag == 2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "medicalpack"), ICON_OVERLAY) - if(backbag == 3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-med"), ICON_OVERLAY) - if(GENETICIST) - clothes_s = new /icon('icons/mob/uniform.dmi', "geneticswhite_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_gen_open"), ICON_OVERLAY) - if(backbag == 2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(backbag == 3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-gen"), ICON_OVERLAY) - if(VIROLOGIST) - clothes_s = new /icon('icons/mob/uniform.dmi', "virologywhite_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/mask.dmi', "sterile"), ICON_OVERLAY) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_vir_open"), ICON_OVERLAY) - if(backbag == 2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "medicalpack"), ICON_OVERLAY) - if(backbag == 3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-vir"), ICON_OVERLAY) - if(ROBOTICIST) - clothes_s = new /icon('icons/mob/uniform.dmi', "robotics_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/items_righthand.dmi', "toolbox_blue"), ICON_OVERLAY) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_open"), ICON_OVERLAY) - if(backbag == 2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(backbag == 3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) + else if(job_medsci_high) + switch(job_medsci_high) + if(RD) + clothes_s = new /icon('icons/mob/uniform.dmi', "director_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/items_righthand.dmi', "clipboard"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_open"), ICON_OVERLAY) + if(backbag == 2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) + if(backbag == 3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-tox"), ICON_OVERLAY) + if(SCIENTIST) + clothes_s = new /icon('icons/mob/uniform.dmi', "toxinswhite_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_tox_open"), ICON_OVERLAY) + if(backbag == 2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) + if(backbag == 3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-tox"), ICON_OVERLAY) + if(CHEMIST) + clothes_s = new /icon('icons/mob/uniform.dmi', "chemistrywhite_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_chem_open"), ICON_OVERLAY) + if(backbag == 2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) + if(backbag == 3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-chem"), ICON_OVERLAY) + if(CMO) + clothes_s = new /icon('icons/mob/uniform.dmi', "cmo_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/items_lefthand.dmi', "firstaid"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_cmo_open"), ICON_OVERLAY) + if(backbag == 2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "medicalpack"), ICON_OVERLAY) + if(backbag == 3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-med"), ICON_OVERLAY) + if(DOCTOR) + clothes_s = new /icon('icons/mob/uniform.dmi', "medical_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/items_lefthand.dmi', "firstaid"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_open"), ICON_OVERLAY) + if(backbag == 2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "medicalpack"), ICON_OVERLAY) + if(backbag == 3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-med"), ICON_OVERLAY) + if(GENETICIST) + clothes_s = new /icon('icons/mob/uniform.dmi', "geneticswhite_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_gen_open"), ICON_OVERLAY) + if(backbag == 2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) + if(backbag == 3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-gen"), ICON_OVERLAY) + if(VIROLOGIST) + clothes_s = new /icon('icons/mob/uniform.dmi', "virologywhite_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/mask.dmi', "sterile"), ICON_OVERLAY) + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_vir_open"), ICON_OVERLAY) + if(backbag == 2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "medicalpack"), ICON_OVERLAY) + if(backbag == 3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-vir"), ICON_OVERLAY) + if(ROBOTICIST) + clothes_s = new /icon('icons/mob/uniform.dmi', "robotics_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/items_righthand.dmi', "toolbox_blue"), ICON_OVERLAY) + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_open"), ICON_OVERLAY) + if(backbag == 2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) + if(backbag == 3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) - else if(job_engsec_high) - switch(job_engsec_high) - if(CAPTAIN) - clothes_s = new /icon('icons/mob/uniform.dmi', "captain_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/head.dmi', "captain"), ICON_OVERLAY) - clothes_s.Blend(new /icon('icons/mob/eyes.dmi', "sun"), ICON_OVERLAY) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "capcarapace"), ICON_OVERLAY) - if(backbag == 2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(backbag == 3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) - if(HOS) - clothes_s = new /icon('icons/mob/uniform.dmi', "hosred_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/head.dmi', "hoscap"), ICON_OVERLAY) - clothes_s.Blend(new /icon('icons/mob/eyes.dmi', "sunhud"), ICON_OVERLAY) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "hos"), ICON_OVERLAY) - if(backbag == 2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "securitypack"), ICON_OVERLAY) - if(backbag == 3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-sec"), ICON_OVERLAY) - if(WARDEN) - clothes_s = new /icon('icons/mob/uniform.dmi', "warden_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/head.dmi', "policehelm"), ICON_OVERLAY) - clothes_s.Blend(new /icon('icons/mob/eyes.dmi', "sunhud"), ICON_OVERLAY) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "warden_jacket"), ICON_OVERLAY) - if(backbag == 2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "securitypack"), ICON_OVERLAY) - if(backbag == 3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-sec"), ICON_OVERLAY) - if(DETECTIVE) - clothes_s = new /icon('icons/mob/uniform.dmi', "detective_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/mask.dmi', "cigaron"), ICON_OVERLAY) - clothes_s.Blend(new /icon('icons/mob/head.dmi', "detective"), ICON_OVERLAY) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "detective"), ICON_OVERLAY) - if(backbag == 2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(backbag == 3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) - if(OFFICER) - clothes_s = new /icon('icons/mob/uniform.dmi', "secred_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/head.dmi', "helmet"), ICON_OVERLAY) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "armor"), ICON_OVERLAY) - if(backbag == 2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "securitypack"), ICON_OVERLAY) - if(backbag == 3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-sec"), ICON_OVERLAY) - if(CHIEF) - clothes_s = new /icon('icons/mob/uniform.dmi', "chief_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY) - clothes_s.Blend(new /icon('icons/mob/mask.dmi', "cigaron"), ICON_OVERLAY) - clothes_s.Blend(new /icon('icons/mob/head.dmi', "hardhat0_white"), ICON_OVERLAY) - if(backbag == 2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "engiepack"), ICON_OVERLAY) - if(backbag == 3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-eng"), ICON_OVERLAY) - if(ENGINEER) - clothes_s = new /icon('icons/mob/uniform.dmi', "engine_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "orange"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY) - clothes_s.Blend(new /icon('icons/mob/head.dmi', "hardhat0_yellow"), ICON_OVERLAY) - if(backbag == 2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "engiepack"), ICON_OVERLAY) - if(backbag == 3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-eng"), ICON_OVERLAY) - if(ATMOSTECH) - clothes_s = new /icon('icons/mob/uniform.dmi', "atmos_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY) - if(backbag == 2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(backbag == 3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) - if(AI)//Gives AI and borgs assistant-wear, so they can still customize their character - clothes_s = new /icon('icons/mob/uniform.dmi', "grey_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) - if(backbag == 2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - else if(backbag == 3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - if(CYBORG) - clothes_s = new /icon('icons/mob/uniform.dmi', "grey_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) - if(backbag == 2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - else if(backbag == 3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) + else if(job_engsec_high) + switch(job_engsec_high) + if(CAPTAIN) + clothes_s = new /icon('icons/mob/uniform.dmi', "captain_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/head.dmi', "captain"), ICON_OVERLAY) + clothes_s.Blend(new /icon('icons/mob/eyes.dmi', "sun"), ICON_OVERLAY) + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "capcarapace"), ICON_OVERLAY) + if(backbag == 2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) + if(backbag == 3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) + if(HOS) + clothes_s = new /icon('icons/mob/uniform.dmi', "hosred_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/head.dmi', "hoscap"), ICON_OVERLAY) + clothes_s.Blend(new /icon('icons/mob/eyes.dmi', "sunhud"), ICON_OVERLAY) + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "hos"), ICON_OVERLAY) + if(backbag == 2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "securitypack"), ICON_OVERLAY) + if(backbag == 3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-sec"), ICON_OVERLAY) + if(WARDEN) + clothes_s = new /icon('icons/mob/uniform.dmi', "warden_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/head.dmi', "policehelm"), ICON_OVERLAY) + clothes_s.Blend(new /icon('icons/mob/eyes.dmi', "sunhud"), ICON_OVERLAY) + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "warden_jacket"), ICON_OVERLAY) + if(backbag == 2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "securitypack"), ICON_OVERLAY) + if(backbag == 3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-sec"), ICON_OVERLAY) + if(DETECTIVE) + clothes_s = new /icon('icons/mob/uniform.dmi', "detective_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/mask.dmi', "cigaron"), ICON_OVERLAY) + clothes_s.Blend(new /icon('icons/mob/head.dmi', "detective"), ICON_OVERLAY) + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "detective"), ICON_OVERLAY) + if(backbag == 2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) + if(backbag == 3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) + if(OFFICER) + clothes_s = new /icon('icons/mob/uniform.dmi', "secred_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/head.dmi', "helmet"), ICON_OVERLAY) + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "armor"), ICON_OVERLAY) + if(backbag == 2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "securitypack"), ICON_OVERLAY) + if(backbag == 3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-sec"), ICON_OVERLAY) + if(CHIEF) + clothes_s = new /icon('icons/mob/uniform.dmi', "chief_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY) + clothes_s.Blend(new /icon('icons/mob/mask.dmi', "cigaron"), ICON_OVERLAY) + clothes_s.Blend(new /icon('icons/mob/head.dmi', "hardhat0_white"), ICON_OVERLAY) + if(backbag == 2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "engiepack"), ICON_OVERLAY) + if(backbag == 3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-eng"), ICON_OVERLAY) + if(ENGINEER) + clothes_s = new /icon('icons/mob/uniform.dmi', "engine_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "orange"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY) + clothes_s.Blend(new /icon('icons/mob/head.dmi', "hardhat0_yellow"), ICON_OVERLAY) + if(backbag == 2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "engiepack"), ICON_OVERLAY) + if(backbag == 3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-eng"), ICON_OVERLAY) + if(ATMOSTECH) + clothes_s = new /icon('icons/mob/uniform.dmi', "atmos_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY) + if(backbag == 2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) + if(backbag == 3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) + if(AI)//Gives AI and borgs assistant-wear, so they can still customize their character + clothes_s = new /icon('icons/mob/uniform.dmi', "grey_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) + if(backbag == 2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) + else if(backbag == 3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) + if(CYBORG) + clothes_s = new /icon('icons/mob/uniform.dmi', "grey_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) + if(backbag == 2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) + else if(backbag == 3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - preview_icon.Blend(eyes_s, ICON_OVERLAY) - if(clothes_s) - preview_icon.Blend(clothes_s, ICON_OVERLAY) - preview_icon_front = new(preview_icon, dir = SOUTH) - preview_icon_side = new(preview_icon, dir = WEST) + preview_icon.Blend(eyes_s, ICON_OVERLAY) + if(clothes_s) + preview_icon.Blend(clothes_s, ICON_OVERLAY) + preview_icon_front = new(preview_icon, dir = SOUTH) + preview_icon_side = new(preview_icon, dir = WEST) - del(preview_icon) - del(eyes_s) - del(clothes_s) \ No newline at end of file + del(preview_icon) + del(eyes_s) + del(clothes_s) \ No newline at end of file diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm index cd96649604b..73580fc648e 100644 --- a/code/modules/mob/new_player/sprite_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories.dm @@ -48,285 +48,385 @@ /datum/sprite_accessory/hair icon = 'icons/mob/human_face.dmi' // default icon for all hairs - short - name = "Short Hair" // try to capatilize the names please~ - icon_state = "hair_a" // you do not need to define _s or _l sub-states, game automatically does this for you +/datum/sprite_accessory/hair/short + name = "Short Hair" // try to capatilize the names please~ + icon_state = "hair_a" // you do not need to define _s or _l sub-states, game automatically does this for you - shorthair2 - name = "Short Hair 2" - icon_state = "hair_shorthair2" +/datum/sprite_accessory/hair/shorthair2 + name = "Short Hair 2" + icon_state = "hair_shorthair2" - cut - name = "Cut Hair" - icon_state = "hair_c" +/datum/sprite_accessory/hair/cut + name = "Cut Hair" + icon_state = "hair_c" - long - name = "Shoulder-length Hair" - icon_state = "hair_b" +/datum/sprite_accessory/hair/long + name = "Shoulder-length Hair" + icon_state = "hair_b" - longer - name = "Long Hair" - icon_state = "hair_vlong" +/datum/sprite_accessory/hair/longer + name = "Long Hair" + icon_state = "hair_vlong" - long_over_eye - name = "Over eye" - icon_state = "hair_longovereye" +/datum/sprite_accessory/hair/long_over_eye + name = "Over eye" + icon_state = "hair_longovereye" - longest - name = "Very Long Hair" - icon_state = "hair_longest" +/datum/sprite_accessory/hair/longest + name = "Very Long Hair" + icon_state = "hair_longest" - longest2 - name = "Very Long Over Eye" - icon_state = "hair_longest2" +/datum/sprite_accessory/hair/longest2 + name = "Very Long Over Eye" + icon_state = "hair_longest2" - longfringe - name = "Long Fringe" - icon_state = "hair_longfringe" +/datum/sprite_accessory/hair/longfringe + name = "Long Fringe" + icon_state = "hair_longfringe" - longestalt - name = "Longer Fringe" - icon_state = "hair_vlongfringe" +/datum/sprite_accessory/hair/longestalt + name = "Longer Fringe" + icon_state = "hair_vlongfringe" - gentle - name = "Gentle" - icon_state = "hair_gentle" +/datum/sprite_accessory/hair/gentle + name = "Gentle" + icon_state = "hair_gentle" - halfbang - name = "Half-banged Hair" - icon_state = "hair_halfbang" +/datum/sprite_accessory/hair/halfbang + name = "Half-banged Hair" + icon_state = "hair_halfbang" - halfbangalt - name = "Half-banged Hair Alt" - icon_state = "hair_halfbang_alt" +/datum/sprite_accessory/hair/halfbangalt + name = "Half-banged Hair Alt" + icon_state = "hair_halfbang_alt" - ponytail1 - name = "Ponytail 1" - icon_state = "hair_ponytail" +/datum/sprite_accessory/hair/ponytail1 + name = "Ponytail 1" + icon_state = "hair_ponytail" - ponytail2 - name = "Ponytail 2" - icon_state = "hair_pa" +/datum/sprite_accessory/hair/ponytail2 + name = "Ponytail 2" + icon_state = "hair_pa" - ponytail3 - name = "Ponytail 3" - icon_state = "hair_ponytail3" +/datum/sprite_accessory/hair/ponytail3 + name = "Ponytail 3" + icon_state = "hair_ponytail3" - side_tail - name = "Side Pony" - icon_state = "hair_sidetail" +/datum/sprite_accessory/hair/side_tail + name = "Side Pony" + icon_state = "hair_sidetail" - side_tail2 - name = "Side Pony 2" - icon_state = "hair_sidetail2" +/datum/sprite_accessory/hair/side_tail2 + name = "Side Pony 2" + icon_state = "hair_sidetail2" - side_tail3 - name = "Side Pony 3" - icon_state = "hair_stail" +/datum/sprite_accessory/hair/side_tail3 + name = "Side Pony 3" + icon_state = "hair_stail" - oneshoulder - name = "One Shoulder" - icon_state = "hair_oneshoulder" +/datum/sprite_accessory/hair/oneshoulder + name = "One Shoulder" + icon_state = "hair_oneshoulder" - tressshoulder - name = "Tress Shoulder" - icon_state = "hair_tressshoulder" +/datum/sprite_accessory/hair/tressshoulder + name = "Tress Shoulder" + icon_state = "hair_tressshoulder" - parted - name = "Parted" - icon_state = "hair_parted" +/datum/sprite_accessory/hair/parted + name = "Parted" + icon_state = "hair_parted" - pompadour - name = "Pompadour" - icon_state = "hair_pompadour" +/datum/sprite_accessory/hair/pompadour + name = "Pompadour" + icon_state = "hair_pompadour" - quiff - name = "Quiff" - icon_state = "hair_quiff" +/datum/sprite_accessory/hair/quiff + name = "Quiff" + icon_state = "hair_quiff" - bedhead - name = "Bedhead" - icon_state = "hair_bedhead" +/datum/sprite_accessory/hair/bedhead + name = "Bedhead" + icon_state = "hair_bedhead" - bedhead2 - name = "Bedhead 2" - icon_state = "hair_bedheadv2" +/datum/sprite_accessory/hair/bedhead2 + name = "Bedhead 2" + icon_state = "hair_bedheadv2" - bedhead3 - name = "Bedhead 3" - icon_state = "hair_bedheadv3" +/datum/sprite_accessory/hair/bedhead3 + name = "Bedhead 3" + icon_state = "hair_bedheadv3" - messy - name = "Messy" - icon_state = "hair_messy" +/datum/sprite_accessory/hair/messy + name = "Messy" + icon_state = "hair_messy" - beehive - name = "Beehive" - icon_state = "hair_beehive" +/datum/sprite_accessory/hair/beehive + name = "Beehive" + icon_state = "hair_beehive" - bobcurl - name = "Bobcurl" - icon_state = "hair_bobcurl" +/datum/sprite_accessory/hair/bobcurl + name = "Bobcurl" + icon_state = "hair_bobcurl" - bob - name = "Bob" - icon_state = "hair_bobcut" +/datum/sprite_accessory/hair/bob + name = "Bob" + icon_state = "hair_bobcut" - bowl - name = "Bowl" - icon_state = "hair_bowlcut" +/datum/sprite_accessory/hair/bowl + name = "Bowl" + icon_state = "hair_bowlcut" - buzz - name = "Buzzcut" - icon_state = "hair_buzzcut" +/datum/sprite_accessory/hair/buzz + name = "Buzzcut" + icon_state = "hair_buzzcut" - crew - name = "Crewcut" - icon_state = "hair_crewcut" +/datum/sprite_accessory/hair/crew + name = "Crewcut" + icon_state = "hair_crewcut" - combover - name = "Combover" - icon_state = "hair_combover" +/datum/sprite_accessory/hair/combover + name = "Combover" + icon_state = "hair_combover" - devillock - name = "Devil Lock" - icon_state = "hair_devilock" +/datum/sprite_accessory/hair/devillock + name = "Devil Lock" + icon_state = "hair_devilock" - dreadlocks - name = "Dreadlocks" - icon_state = "hair_dreads" +/datum/sprite_accessory/hair/dreadlocks + name = "Dreadlocks" + icon_state = "hair_dreads" - curls - name = "Curls" - icon_state = "hair_curls" +/datum/sprite_accessory/hair/curls + name = "Curls" + icon_state = "hair_curls" - afro - name = "Afro" - icon_state = "hair_afro" +/datum/sprite_accessory/hair/afro + name = "Afro" + icon_state = "hair_afro" - afro2 - name = "Afro 2" - icon_state = "hair_afro2" +/datum/sprite_accessory/hair/afro2 + name = "Afro 2" + icon_state = "hair_afro2" - afro_large - name = "Big Afro" - icon_state = "hair_bigafro" +/datum/sprite_accessory/hair/afro_large + name = "Big Afro" + icon_state = "hair_bigafro" - sargeant - name = "Flat Top" - icon_state = "hair_sargeant" +/datum/sprite_accessory/hair/sargeant + name = "Flat Top" + icon_state = "hair_sargeant" - emo - name = "Emo" - icon_state = "hair_emo" +/datum/sprite_accessory/hair/emo + name = "Emo" + icon_state = "hair_emo" - fag - name = "Flow Hair" - icon_state = "hair_f" +/datum/sprite_accessory/hair/fag + name = "Flow Hair" + icon_state = "hair_f" - feather - name = "Feather" - icon_state = "hair_feather" +/datum/sprite_accessory/hair/feather + name = "Feather" + icon_state = "hair_feather" - hitop - name = "Hitop" - icon_state = "hair_hitop" +/datum/sprite_accessory/hair/hitop + name = "Hitop" + icon_state = "hair_hitop" - mohawk - name = "Mohawk" - icon_state = "hair_d" +/datum/sprite_accessory/hair/mohawk + name = "Mohawk" + icon_state = "hair_d" - jensen - name = "Adam Jensen Hair" - icon_state = "hair_jensen" +/datum/sprite_accessory/hair/jensen + name = "Adam Jensen Hair" + icon_state = "hair_jensen" - gelled - name = "Gelled Back" - icon_state = "hair_gelled" +/datum/sprite_accessory/hair/gelled + name = "Gelled Back" + icon_state = "hair_gelled" - spiky - name = "Spiky" - icon_state = "hair_spikey" +/datum/sprite_accessory/hair/spiky + name = "Spiky" + icon_state = "hair_spikey" - protagonist - name = "Slightly long" - icon_state = "hair_protagonist" +/datum/sprite_accessory/hair/protagonist + name = "Slightly long" + icon_state = "hair_protagonist" - kusangi - name = "Kusanagi Hair" - icon_state = "hair_kusanagi" +/datum/sprite_accessory/hair/kusangi + name = "Kusanagi Hair" + icon_state = "hair_kusanagi" - kagami - name = "Pigtails" - icon_state = "hair_kagami" +/datum/sprite_accessory/hair/kagami + name = "Pigtails" + icon_state = "hair_kagami" - himecut - name = "Hime Cut" - icon_state = "hair_himecut" +/datum/sprite_accessory/hair/himecut + name = "Hime Cut" + icon_state = "hair_himecut" - antenna - name = "Ahoge" - icon_state = "hair_antenna" +/datum/sprite_accessory/hair/antenna + name = "Ahoge" + icon_state = "hair_antenna" - pigtail - name = "Pig tails" - icon_state = "hair_pigtails" +/datum/sprite_accessory/hair/pigtail + name = "Pig tails" + icon_state = "hair_pigtails" - front_braid - name = "Braided front" - icon_state = "hair_braidfront" +/datum/sprite_accessory/hair/front_braid + name = "Braided front" + icon_state = "hair_braidfront" - lowbraid - name = "Low Braid" - icon_state = "hair_hbraid" +/datum/sprite_accessory/hair/lowbraid + name = "Low Braid" + icon_state = "hair_hbraid" - not_floorlength_braid - name = "High Braid" - icon_state = "hair_braid2" +/datum/sprite_accessory/hair/not_floorlength_braid + name = "High Braid" + icon_state = "hair_braid2" - braid - name = "Floorlength Braid" - icon_state = "hair_braid" +/datum/sprite_accessory/hair/braid + name = "Floorlength Braid" + icon_state = "hair_braid" - odango - name = "Odango" - icon_state = "hair_odango" +/datum/sprite_accessory/hair/odango + name = "Odango" + icon_state = "hair_odango" - ombre - name = "Ombre" - icon_state = "hair_ombre" +/datum/sprite_accessory/hair/ombre + name = "Ombre" + icon_state = "hair_ombre" - updo - name = "Updo" - icon_state = "hair_updo" +/datum/sprite_accessory/hair/updo + name = "Updo" + icon_state = "hair_updo" - skinhead - name = "Skinhead" - icon_state = "hair_skinhead" +/datum/sprite_accessory/hair/skinhead + name = "Skinhead" + icon_state = "hair_skinhead" - longbangs - name = "Long Bangs" - icon_state = "hair_lbangs" +/datum/sprite_accessory/hair/longbangs + name = "Long Bangs" + icon_state = "hair_lbangs" - balding - name = "Balding Hair" - icon_state = "hair_e" +/datum/sprite_accessory/hair/balding + name = "Balding Hair" + icon_state = "hair_e" - bald - name = "Bald" - icon_state = null +/datum/sprite_accessory/hair/bald + name = "Bald" + icon_state = null - parted - name = "Side Part" - icon_state = "hair_part" +/datum/sprite_accessory/hair/parted + name = "Side Part" + icon_state = "hair_part" - braided - name = "Braided" - icon_state = "hair_braided" +/datum/sprite_accessory/hair/braided + name = "Braided" + icon_state = "hair_braided" - bun - name = "Bun Head" - icon_state = "hair_bun" +/datum/sprite_accessory/hair/bun + name = "Bun Head" + icon_state = "hair_bun" + +/datum/sprite_accessory/hair/braidtail + name = "Braided Tail" + icon_state = "hair_braidtail" + +/datum/sprite_accessory/hair/familyman + name = "Big Flat Top" + icon_state = "hair_thefamilyman" + +/datum/sprite_accessory/hair/drillruru + name = "Drill Hair" + icon_state = "hair_drillruru" + +/datum/sprite_accessory/hair/dandypomp + name = "Big Pompadour" + icon_state = "hair_dandypompadour" + +/datum/sprite_accessory/hair/poofy + name = "Side Ponytail" + icon_state = "hair_poofy" + +/datum/sprite_accessory/hair/crono + name = "Big Spiky Hair" + icon_state = "hair_toriyama1" + +/datum/sprite_accessory/hair/vegeta + name = "Big Spiky Hair 2" + icon_state = "hair_toriyama2" + +/datum/sprite_accessory/hair/cia + name = "Business Hair 3" + icon_state = "hair_cia" + +/datum/sprite_accessory/hair/mulder + name = "Business Hair 4" + icon_state = "hair_mulder" + +/datum/sprite_accessory/hair/scully + name = "Bob Hair 2" + icon_state = "hair_scully" + +/datum/sprite_accessory/hair/nitori + name = "Pigtail Hair" + icon_state = "hair_nitori" + +/datum/sprite_accessory/hair/joestar + name = "Swept Back Hair 2" + icon_state = "hair_joestar" + +/datum/sprite_accessory/hair/edgeworth + name = "Keanu Hair" + icon_state = "hair_edgeworth" + +/datum/sprite_accessory/hair/objection + name = "Swept Back Hair" + icon_state = "hair_objection!" + +/datum/sprite_accessory/hair/dubsman + name = "Business Hair 2" + icon_state = "hair_dubsman" + +/datum/sprite_accessory/hair/blackswordsman + name = "Hedgehog Hair" + icon_state = "hair_blackswordsman" + +/datum/sprite_accessory/hair/mentalist + name = "Business Hair 1" + icon_state = "hair_mentalist" + +/datum/sprite_accessory/hair/fujisaki + name = "Short Hair 3" + icon_state = "hair_fujisaki" + +/datum/sprite_accessory/hair/schierke + name = "Bob Hair" + icon_state = "hair_schierke" + +/datum/sprite_accessory/hair/akari + name = "Twin Buns" + icon_state = "hair_akari" + +/datum/sprite_accessory/hair/fujiyabashi + name = "Ponytail 4" + icon_state = "hair_fujiyabashi" + +/datum/sprite_accessory/hair/nia + name = "Long Hair 1" + icon_state = "hair_nia" + +/datum/sprite_accessory/hair/shinobu + name = "Long Hair 2" + icon_state = "hair_shinobu" + +/datum/sprite_accessory/hair/ramona + name = "Ramona" + icon_state = "hair_ramona" + +/datum/sprite_accessory/hair/megaeyebrows + name = "Mega Eyebrows" + icon_state = "hair_megaeyebrow" ///////////////////////////// // Facial Hair Definitions // @@ -335,82 +435,82 @@ icon = 'icons/mob/human_face.dmi' gender = MALE // barf (unless you're a dorf, dorfs dig chix w/ beards :P) - shaved - name = "Shaved" - icon_state = null - gender = NEUTER +/datum/sprite_accessory/facial_hair/shaved + name = "Shaved" + icon_state = null + gender = NEUTER - watson - name = "Watson Mustache" - icon_state = "facial_watson" +/datum/sprite_accessory/facial_hair/watson + name = "Watson Mustache" + icon_state = "facial_watson" - hogan - name = "Hulk Hogan Mustache" - icon_state = "facial_hogan" //-Neek +/datum/sprite_accessory/facial_hair/hogan + name = "Hulk Hogan Mustache" + icon_state = "facial_hogan" //-Neek - vandyke - name = "Van Dyke Mustache" - icon_state = "facial_vandyke" +/datum/sprite_accessory/facial_hair/vandyke + name = "Van Dyke Mustache" + icon_state = "facial_vandyke" - chaplin - name = "Square Mustache" - icon_state = "facial_chaplin" +/datum/sprite_accessory/facial_hair/chaplin + name = "Square Mustache" + icon_state = "facial_chaplin" - selleck - name = "Selleck Mustache" - icon_state = "facial_selleck" +/datum/sprite_accessory/facial_hair/selleck + name = "Selleck Mustache" + icon_state = "facial_selleck" - neckbeard - name = "Neckbeard" - icon_state = "facial_neckbeard" +/datum/sprite_accessory/facial_hair/neckbeard + name = "Neckbeard" + icon_state = "facial_neckbeard" - fullbeard - name = "Full Beard" - icon_state = "facial_fullbeard" +/datum/sprite_accessory/facial_hair/fullbeard + name = "Full Beard" + icon_state = "facial_fullbeard" - longbeard - name = "Long Beard" - icon_state = "facial_longbeard" +/datum/sprite_accessory/facial_hair/longbeard + name = "Long Beard" + icon_state = "facial_longbeard" - vlongbeard - name = "Very Long Beard" - icon_state = "facial_wise" +/datum/sprite_accessory/facial_hair/vlongbeard + name = "Very Long Beard" + icon_state = "facial_wise" - elvis - name = "Elvis Sideburns" - icon_state = "facial_elvis" +/datum/sprite_accessory/facial_hair/elvis + name = "Elvis Sideburns" + icon_state = "facial_elvis" - abe - name = "Abraham Lincoln Beard" - icon_state = "facial_abe" +/datum/sprite_accessory/facial_hair/abe + name = "Abraham Lincoln Beard" + icon_state = "facial_abe" - chinstrap - name = "Chinstrap" - icon_state = "facial_chin" +/datum/sprite_accessory/facial_hair/chinstrap + name = "Chinstrap" + icon_state = "facial_chin" - hip - name = "Hipster Beard" - icon_state = "facial_hip" +/datum/sprite_accessory/facial_hair/hip + name = "Hipster Beard" + icon_state = "facial_hip" - gt - name = "Goatee" - icon_state = "facial_gt" +/datum/sprite_accessory/facial_hair/gt + name = "Goatee" + icon_state = "facial_gt" - jensen - name = "Adam Jensen Beard" - icon_state = "facial_jensen" +/datum/sprite_accessory/facial_hair/jensen + name = "Adam Jensen Beard" + icon_state = "facial_jensen" - dwarf - name = "Dwarf Beard" - icon_state = "facial_dwarf" +/datum/sprite_accessory/facial_hair/dwarf + name = "Dwarf Beard" + icon_state = "facial_dwarf" - fiveoclock - name = "Five o Clock Shadow" - icon_state = "facial_fiveoclock" +/datum/sprite_accessory/facial_hair/fiveoclock + name = "Five o Clock Shadow" + icon_state = "facial_fiveoclock" - fu - name = "Fu Manchu" - icon_state = "facial_fumanchu" +/datum/sprite_accessory/facial_hair/fu + name = "Fu Manchu" + icon_state = "facial_fumanchu" /////////////////////////// // Underwear Definitions // @@ -418,127 +518,127 @@ /datum/sprite_accessory/underwear icon = 'icons/mob/underwear.dmi' - nude - name = "Nude" - icon_state = null - gender = NEUTER +/datum/sprite_accessory/underwear/nude + name = "Nude" + icon_state = null + gender = NEUTER - male_white - name = "Mens White" - icon_state = "male_white" - gender = MALE +/datum/sprite_accessory/underwear/male_white + name = "Mens White" + icon_state = "male_white" + gender = MALE - male_grey - name = "Mens Grey" - icon_state = "male_grey" - gender = MALE +/datum/sprite_accessory/underwear/male_grey + name = "Mens Grey" + icon_state = "male_grey" + gender = MALE - male_green - name = "Mens Green" - icon_state = "male_green" - gender = MALE +/datum/sprite_accessory/underwear/male_green + name = "Mens Green" + icon_state = "male_green" + gender = MALE - male_blue - name = "Mens Blue" - icon_state = "male_blue" - gender = MALE +/datum/sprite_accessory/underwear/male_blue + name = "Mens Blue" + icon_state = "male_blue" + gender = MALE - male_black - name = "Mens Black" - icon_state = "male_black" - gender = MALE +/datum/sprite_accessory/underwear/male_black + name = "Mens Black" + icon_state = "male_black" + gender = MALE - male_mankini - name = "Mankini" - icon_state = "male_mankini" - gender = MALE +/datum/sprite_accessory/underwear/male_mankini + name = "Mankini" + icon_state = "male_mankini" + gender = MALE - male_hearts - name = "Mens Hearts Boxer" - icon_state = "male_hearts" - gender = MALE +/datum/sprite_accessory/underwear/male_hearts + name = "Mens Hearts Boxer" + icon_state = "male_hearts" + gender = MALE - male_blackalt - name = "Mens Black Boxer" - icon_state = "male_blackalt" - gender = MALE +/datum/sprite_accessory/underwear/male_blackalt + name = "Mens Black Boxer" + icon_state = "male_blackalt" + gender = MALE - male_greyalt - name = "Mens Grey Boxer" - icon_state = "male_greyalt" - gender = MALE +/datum/sprite_accessory/underwear/male_greyalt + name = "Mens Grey Boxer" + icon_state = "male_greyalt" + gender = MALE - male_stripe - name = "Mens Striped Boxer" - icon_state = "male_stripe" - gender = MALE +/datum/sprite_accessory/underwear/male_stripe + name = "Mens Striped Boxer" + icon_state = "male_stripe" + gender = MALE - male_kinky - name = "Mens Kinky" - icon_state = "male_kinky" - gender = MALE +/datum/sprite_accessory/underwear/male_kinky + name = "Mens Kinky" + icon_state = "male_kinky" + gender = MALE - male_red - name = "Mens Red" - icon_state = "male_red" - gender = MALE +/datum/sprite_accessory/underwear/male_red + name = "Mens Red" + icon_state = "male_red" + gender = MALE - female_red - name = "Ladies Red" - icon_state = "female_red" - gender = FEMALE +/datum/sprite_accessory/underwear/female_red + name = "Ladies Red" + icon_state = "female_red" + gender = FEMALE - female_white - name = "Ladies White" - icon_state = "female_white" - gender = FEMALE +/datum/sprite_accessory/underwear/female_white + name = "Ladies White" + icon_state = "female_white" + gender = FEMALE - female_yellow - name = "Ladies Yellow" - icon_state = "female_yellow" - gender = FEMALE +/datum/sprite_accessory/underwear/female_yellow + name = "Ladies Yellow" + icon_state = "female_yellow" + gender = FEMALE - female_blue - name = "Ladies Blue" - icon_state = "female_blue" - gender = FEMALE +/datum/sprite_accessory/underwear/female_blue + name = "Ladies Blue" + icon_state = "female_blue" + gender = FEMALE - female_black - name = "Ladies Black" - icon_state = "female_black" - gender = FEMALE +/datum/sprite_accessory/underwear/female_black + name = "Ladies Black" + icon_state = "female_black" + gender = FEMALE - female_thong - name = "Ladies Thong" - icon_state = "female_thong" - gender = FEMALE +/datum/sprite_accessory/underwear/female_thong + name = "Ladies Thong" + icon_state = "female_thong" + gender = FEMALE - female_babydoll - name = "Babydoll" - icon_state = "female_babydoll" - gender = FEMALE +/datum/sprite_accessory/underwear/female_babydoll + name = "Babydoll" + icon_state = "female_babydoll" + gender = FEMALE - female_babyblue - name = "Ladies Baby-Blue" - icon_state = "female_babyblue" - gender = FEMALE +/datum/sprite_accessory/underwear/female_babyblue + name = "Ladies Baby-Blue" + icon_state = "female_babyblue" + gender = FEMALE - female_green - name = "Ladies Green" - icon_state = "female_green" - gender = FEMALE +/datum/sprite_accessory/underwear/female_green + name = "Ladies Green" + icon_state = "female_green" + gender = FEMALE - female_pink - name = "Ladies Pink" - icon_state = "female_pink" - gender = FEMALE +/datum/sprite_accessory/underwear/female_pink + name = "Ladies Pink" + icon_state = "female_pink" + gender = FEMALE - female_kinky - name = "Ladies Kinky" - icon_state = "female_kinky" - gender = FEMALE +/datum/sprite_accessory/underwear/female_kinky + name = "Ladies Kinky" + icon_state = "female_kinky" + gender = FEMALE - female_tankini - name = "Tankini" - icon_state = "female_tankini" - gender = FEMALE +/datum/sprite_accessory/underwear/female_tankini + name = "Tankini" + icon_state = "female_tankini" + gender = FEMALE diff --git a/code/modules/projectiles/ammunition/bullets.dm b/code/modules/projectiles/ammunition/ammo_casings.dm similarity index 68% rename from code/modules/projectiles/ammunition/bullets.dm rename to code/modules/projectiles/ammunition/ammo_casings.dm index c39b9e35c45..205ab164360 100644 --- a/code/modules/projectiles/ammunition/bullets.dm +++ b/code/modules/projectiles/ammunition/ammo_casings.dm @@ -1,124 +1,151 @@ -/obj/item/ammo_casing/a357 - desc = "A .357 bullet casing." - caliber = "357" - projectile_type = /obj/item/projectile/bullet - -/obj/item/ammo_casing/a50 - desc = "A .50AE bullet casing." - caliber = ".50" - projectile_type = /obj/item/projectile/bullet - -/obj/item/ammo_casing/a418 - desc = "A .418 bullet casing." - caliber = "357" - projectile_type = /obj/item/projectile/bullet/suffocationbullet - - -/obj/item/ammo_casing/a666 - desc = "A .666 bullet casing." - caliber = "357" - projectile_type = /obj/item/projectile/bullet/cyanideround - - -/obj/item/ammo_casing/c38 - desc = "A .38 bullet casing." - caliber = "38" - projectile_type = /obj/item/projectile/bullet/weakbullet2 - - -/obj/item/ammo_casing/c10mm - desc = "A 10mm bullet casing." - caliber = "10mm" - projectile_type = /obj/item/projectile/bullet/midbullet3 - - -/obj/item/ammo_casing/c9mm - desc = "A 9mm bullet casing." - caliber = "9mm" - projectile_type = /obj/item/projectile/bullet/midbullet2 - - -/obj/item/ammo_casing/c45 - desc = "A .45 bullet casing." - caliber = ".45" - projectile_type = /obj/item/projectile/bullet/midbullet - - -/obj/item/ammo_casing/shotgun - name = "shotgun slug" - desc = "A 12 gauge slug." - icon_state = "blshell" - caliber = "shotgun" - projectile_type = /obj/item/projectile/bullet - m_amt = 4000 - - -/obj/item/ammo_casing/shotgun/buckshot - name = "shotgun shell" - desc = "A 12 gauge shell." - icon_state = "gshell" - projectile_type = /obj/item/projectile/bullet/pellet - pellets = 5 - variance = 0.8 - - -/obj/item/ammo_casing/shotgun/beanbag - name = "beanbag shell" - desc = "A weak beanbag shell." - icon_state = "bshell" - projectile_type = /obj/item/projectile/bullet/weakbullet - m_amt = 250 - - -/obj/item/ammo_casing/shotgun/stunshell - name = "stun shell" - desc = "A stunning shell." - icon_state = "stunshell" - projectile_type = /obj/item/projectile/bullet/stunshot - m_amt = 200 - - -/obj/item/ammo_casing/shotgun/incendiary - name = "incendiary shell" - desc = "An incendiary shell" - icon_state = "ishell" - projectile_type = /obj/item/projectile/bullet/incendiary/shell - - -/obj/item/ammo_casing/shotgun/dart - name = "shotgun dart" - desc = "A dart for use in shotguns. Can be injected with up to 30 units of any chemical." - icon_state = "cshell" - projectile_type = /obj/item/projectile/bullet/dart - -/obj/item/ammo_casing/shotgun/dart/New() - ..() - flags |= NOREACT - flags |= OPENCONTAINER - create_reagents(30) - -/obj/item/ammo_casing/shotgun/dart/attackby() - return - -/obj/item/ammo_casing/a762 - desc = "A 7.62mm bullet casing." - caliber = "a762" - projectile_type = /obj/item/projectile/bullet - - -/obj/item/ammo_casing/caseless - desc = "A caseless bullet casing." - - -/obj/item/ammo_casing/caseless/fire(atom/target as mob|obj|turf, mob/living/user as mob|obj, params, var/distro, var/quiet) - if (..()) - loc = null - return 1 - else - return 0 - - -/obj/item/ammo_casing/caseless/a75 - desc = "A .75 bullet casing." - caliber = "75" - projectile_type = /obj/item/projectile/bullet/gyro +/obj/item/ammo_casing/a357 + desc = "A .357 bullet casing." + caliber = "357" + projectile_type = /obj/item/projectile/bullet + +/obj/item/ammo_casing/a50 + desc = "A .50AE bullet casing." + caliber = ".50" + projectile_type = /obj/item/projectile/bullet + +/obj/item/ammo_casing/a418 + desc = "A .418 bullet casing." + caliber = "357" + projectile_type = /obj/item/projectile/bullet/suffocationbullet + + +/obj/item/ammo_casing/a666 + desc = "A .666 bullet casing." + caliber = "357" + projectile_type = /obj/item/projectile/bullet/cyanideround + + +/obj/item/ammo_casing/c38 + desc = "A .38 bullet casing." + caliber = "38" + projectile_type = /obj/item/projectile/bullet/weakbullet2 + + +/obj/item/ammo_casing/c10mm + desc = "A 10mm bullet casing." + caliber = "10mm" + projectile_type = /obj/item/projectile/bullet/midbullet3 + + +/obj/item/ammo_casing/c9mm + desc = "A 9mm bullet casing." + caliber = "9mm" + projectile_type = /obj/item/projectile/bullet/midbullet2 + + +/obj/item/ammo_casing/c45 + desc = "A .45 bullet casing." + caliber = ".45" + projectile_type = /obj/item/projectile/bullet/midbullet + + +/obj/item/ammo_casing/shotgun + name = "shotgun slug" + desc = "A 12 gauge slug." + icon_state = "blshell" + caliber = "shotgun" + projectile_type = /obj/item/projectile/bullet + m_amt = 4000 + + +/obj/item/ammo_casing/shotgun/buckshot + name = "shotgun shell" + desc = "A 12 gauge shell." + icon_state = "gshell" + projectile_type = /obj/item/projectile/bullet/pellet + pellets = 5 + variance = 0.8 + + +/obj/item/ammo_casing/shotgun/beanbag + name = "beanbag shell" + desc = "A weak beanbag shell." + icon_state = "bshell" + projectile_type = /obj/item/projectile/bullet/weakbullet + m_amt = 250 + + +/obj/item/ammo_casing/shotgun/stunshell + name = "stun shell" + desc = "A stunning shell." + icon_state = "stunshell" + projectile_type = /obj/item/projectile/bullet/stunshot + m_amt = 200 + + +/obj/item/ammo_casing/shotgun/meteorshot + name = "meteorshot shell" + desc = "A shotgun shell rigged with CMC technology, which launches a massive slug when fired." + icon_state = "mshell" + projectile_type = /obj/item/projectile/bullet/meteorshot + +/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/item/projectile/beam/pulse/shot + +/obj/item/ammo_casing/shotgun/incendiary + name = "incendiary slug" + desc = "An incendiary shell which fires a single slug of incendiary ammo." + icon_state = "ishell" + projectile_type = /obj/item/projectile/bullet/incendiary/shell + +/obj/item/ammo_casing/shotgun/incendiary/dragonsbreath + name = "dragonsbreath shell" + desc = "An incendiary shell which fires a spread of incendiary ammo." + icon_state = "ishell2" + projectile_type = /obj/item/projectile/bullet/incendiary/shell/dragonsbreath + pellets = 4 + variance = 0.9 + +/obj/item/ammo_casing/shotgun/techshell + name = "unloaded technological shell" + desc = "A high-tech shotgun shell which can be loaded with materials to produce unique effects." + icon_state = "cshell" + projectile_type = null + +/obj/item/ammo_casing/shotgun/dart + name = "shotgun dart" + desc = "A dart for use in shotguns. Can be injected with up to 30 units of any chemical." + icon_state = "cshell" + projectile_type = /obj/item/projectile/bullet/dart + +/obj/item/ammo_casing/shotgun/dart/New() + ..() + flags |= NOREACT + flags |= OPENCONTAINER + create_reagents(30) + +/obj/item/ammo_casing/shotgun/dart/attackby() + return + +/obj/item/ammo_casing/a762 + desc = "A 7.62mm bullet casing." + caliber = "a762" + projectile_type = /obj/item/projectile/bullet + + +/obj/item/ammo_casing/caseless + desc = "A caseless bullet casing." + + +/obj/item/ammo_casing/caseless/fire(atom/target as mob|obj|turf, mob/living/user as mob|obj, params, var/distro, var/quiet) + if (..()) + loc = null + return 1 + else + return 0 + + +/obj/item/ammo_casing/caseless/a75 + desc = "A .75 bullet casing." + caliber = "75" + projectile_type = /obj/item/projectile/bullet/gyro diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 5f65f777dd8..d65400913b7 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -29,7 +29,8 @@ return 1 /obj/item/weapon/gun/proc/shoot_with_empty_chamber(mob/living/user as mob|obj) - user << "*click*" + user.visible_message("*click*", "*click*") + playsound(user, 'sound/weapons/empty.ogg', 100, 1) return /obj/item/weapon/gun/proc/shoot_live_shot(mob/living/user as mob|obj, var/pointblank = 0, var/mob/pbtarget = null) diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index fb6c41d2216..020ff0351c0 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -78,6 +78,10 @@ obj/item/weapon/gun/energy/laser/retro desc = "With the L.A.S.E.R. cannon, the lasing medium is enclosed in a tube lined with uranium-235 and subjected to high neutron flux in a nuclear reactor core. This incredible technology may help YOU achieve high excitation rates with small laser volumes!" icon_state = "lasercannon" item_state = "laser" + w_class = 4.0 + force = 10 + flags = CONDUCT + slot_flags = SLOT_BACK origin_tech = "combat=4;materials=3;powerstorage=3" ammo_type = list(/obj/item/ammo_casing/energy/laser/heavy) @@ -163,4 +167,4 @@ obj/item/weapon/gun/energy/laser/retro if(!power_supply) return 0 power_supply.give(100) update_icon() - return 1 + return 1 diff --git a/code/modules/projectiles/guns/energy/pulse.dm b/code/modules/projectiles/guns/energy/pulse.dm index deb5e4e2999..a4a1cfe7a20 100644 --- a/code/modules/projectiles/guns/energy/pulse.dm +++ b/code/modules/projectiles/guns/energy/pulse.dm @@ -2,8 +2,11 @@ name = "pulse rifle" desc = "A heavy-duty, multifaceted energy rifle with three modes. Preferred by front-line combat personnel." icon_state = "pulse" - item_state = null //so the human update icon uses the icon_state instead. + item_state = "pulse" + w_class = 4.0 force = 10 + flags = CONDUCT + slot_flags = SLOT_BACK ammo_type = list(/obj/item/ammo_casing/energy/laser/pulse, /obj/item/ammo_casing/energy/electrode, /obj/item/ammo_casing/energy/laser) cell_type = "/obj/item/weapon/stock_parts/cell/super" diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index 276a3b8d0de..a64c3291f23 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -40,16 +40,14 @@ name = "pulse" icon_state = "u_laser" damage = 50 - on_hit(var/atom/target, var/blocked = 0) - if(istype(target,/turf/)||istype(target,/obj/structure/)) - target.ex_act(2) - ..() +/obj/item/projectile/beam/pulse/on_hit(var/atom/target, var/blocked = 0) + if(istype(target,/turf/)||istype(target,/obj/structure/)) + target.ex_act(2) + ..() -/obj/item/projectile/beam/deathlaser - name = "death laser" - icon_state = "heavylaser" - damage = 60 +/obj/item/projectile/beam/pulse/shot + damage = 40 /obj/item/projectile/beam/emitter name = "emitter beam" diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index 918800c32e0..f56e641c8e2 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -50,11 +50,6 @@ damage_type = TOX -/obj/item/projectile/bullet/burstbullet//I think this one needs something for the on hit - name = "exploding bullet" - damage = 20 - - /obj/item/projectile/bullet/stunshot name = "stunshot" damage = 5 @@ -70,25 +65,56 @@ /obj/item/projectile/bullet/incendiary /obj/item/projectile/bullet/incendiary/on_hit(var/atom/target, var/blocked = 0) - if(istype(target, /mob/living/carbon)) - var/mob/living/carbon/M = target - M.adjust_fire_stacks(1) - M.IgniteMob() + ..() + if(istype(target, /mob/living/carbon)) + var/mob/living/carbon/M = target + M.adjust_fire_stacks(1) + M.IgniteMob() + /obj/item/projectile/bullet/incendiary/shell + name = "incendiary slug" damage = 20 -/obj/item/projectile/bullet/incendiary/mech +/obj/item/projectile/bullet/incendiary/shell/Move() + ..() + var/turf/location = get_turf(src) + new/obj/effect/hotspot(location) + location.hotspot_expose(700, 50, 1) + +/obj/item/projectile/bullet/incendiary/shell/dragonsbreath + name = "dragonsbreath round" damage = 5 +/obj/item/projectile/bullet/meteorshot + name = "meteor" + icon = 'icons/obj/meteor.dmi' + icon_state = "dust" + damage = 30 + weaken = 8 + stun = 8 + hitsound = 'sound/effects/meteorimpact.ogg' + +/obj/item/projectile/bullet/meteorshot/on_hit(var/atom/target, var/blocked = 0) + ..() + if(istype(target, /atom/movable)) + var/atom/movable/M = target + var/atom/throw_target = get_edge_target_turf(M, get_dir(src, get_step_away(M, src))) + M.throw_at(throw_target, 3, 2) + +/obj/item/projectile/bullet/meteorshot/New() + ..() + SpinAnimation() + + /obj/item/projectile/bullet/mime damage = 20 /obj/item/projectile/bullet/mime/on_hit(var/atom/target, var/blocked = 0) - if(istype(target, /mob/living/carbon)) - var/mob/living/carbon/M = target - M.silent = max(M.silent, 10) + if(istype(target, /mob/living/carbon)) + var/mob/living/carbon/M = target + M.silent = max(M.silent, 10) /obj/item/projectile/bullet/dart diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index 653b87fa3dd..cce34d2f244 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -1922,7 +1922,7 @@ datum/reagent/condensedcapsaicin/reaction_mob(var/mob/living/M, var/method=TOUCH victim.eye_blind = max(M.eye_blind, 1) victim.confused = max(M.confused, 3) victim.damageoverlaytemp = 60 - victim.Weaken(1) + victim.Weaken(3) victim.drop_item() return else if ( eyes_covered ) // Eye cover is better than mouth cover @@ -1936,7 +1936,7 @@ datum/reagent/condensedcapsaicin/reaction_mob(var/mob/living/M, var/method=TOUCH victim.eye_blind = max(M.eye_blind, 2) victim.confused = max(M.confused, 6) victim.damageoverlaytemp = 75 - victim.Weaken(3) + victim.Weaken(5) victim.drop_item() datum/reagent/condensedcapsaicin/on_mob_life(var/mob/living/M as mob) diff --git a/code/modules/recycling/disposal-construction.dm b/code/modules/recycling/disposal-construction.dm index e472b1bb659..21cb505e3df 100644 --- a/code/modules/recycling/disposal-construction.dm +++ b/code/modules/recycling/disposal-construction.dm @@ -19,245 +19,245 @@ var/base_state = "pipe-s" // update iconstate and dpdir due to dir and type - proc/update() - var/flip = turn(dir, 180) - var/left = turn(dir, 90) - var/right = turn(dir, -90) +/obj/structure/disposalconstruct/proc/update() + var/flip = turn(dir, 180) + var/left = turn(dir, 90) + var/right = turn(dir, -90) - switch(ptype) - if(0) - base_state = "pipe-s" - dpdir = dir | flip - if(1) - base_state = "pipe-c" - dpdir = dir | right - if(2) - base_state = "pipe-j1" - dpdir = dir | right | flip - if(3) - base_state = "pipe-j2" - dpdir = dir | left | flip - if(4) - base_state = "pipe-y" - dpdir = dir | left | right - if(5) - base_state = "pipe-t" - dpdir = dir - // disposal bin has only one dir, thus we don't need to care about setting it - if(6) - if(anchored) - base_state = "disposal" - else - base_state = "condisposal" + switch(ptype) + if(0) + base_state = "pipe-s" + dpdir = dir | flip + if(1) + base_state = "pipe-c" + dpdir = dir | right + if(2) + base_state = "pipe-j1" + dpdir = dir | right | flip + if(3) + base_state = "pipe-j2" + dpdir = dir | left | flip + if(4) + base_state = "pipe-y" + dpdir = dir | left | right + if(5) + base_state = "pipe-t" + dpdir = dir + // disposal bin has only one dir, thus we don't need to care about setting it + if(6) + if(anchored) + base_state = "disposal" + else + base_state = "condisposal" - if(7) - base_state = "outlet" - dpdir = dir + if(7) + base_state = "outlet" + dpdir = dir - if(8) - base_state = "intake" - dpdir = dir + if(8) + base_state = "intake" + dpdir = dir - if(9) - base_state = "pipe-j1s" - dpdir = dir | right | flip + if(9) + base_state = "pipe-j1s" + dpdir = dir | right | flip - if(10) - base_state = "pipe-j2s" - dpdir = dir | left | flip + if(10) + base_state = "pipe-j2s" + dpdir = dir | left | flip - if(ptype<6 || ptype>8) - icon_state = "con[base_state]" - else - icon_state = base_state + if(ptype<6 || ptype>8) + icon_state = "con[base_state]" + else + icon_state = base_state - // if invisible, fade icon - alpha = (invisibility ? 0 : 255) + // if invisible, fade icon + alpha = (invisibility ? 0 : 255) - // hide called by levelupdate if turf intact status changes - // change visibility status and force update of icon - hide(var/intact) - invisibility = (intact && level==1) ? 101: 0 // hide if floor is intact - update() +// hide called by levelupdate if turf intact status changes +// change visibility status and force update of icon +/obj/structure/disposalconstruct/hide(var/intact) + invisibility = (intact && level==1) ? 101: 0 // hide if floor is intact + update() - // flip and rotate verbs - verb/rotate() - set name = "Rotate Pipe" - set category = "Object" - set src in view(1) +// flip and rotate verbs +/obj/structure/disposalconstruct/verb/rotate() + set name = "Rotate Pipe" + set category = "Object" + set src in view(1) - if(usr.stat) - return - - if(anchored) - usr << "You must unfasten the pipe before rotating it." - return - - dir = turn(dir, -90) - update() - - verb/flip() - set name = "Flip Pipe" - set category = "Object" - set src in view(1) - if(usr.stat) - return - - if(anchored) - usr << "You must unfasten the pipe before flipping it." - return - - dir = turn(dir, 180) - switch(ptype) - if(2) - ptype = 3 - if(3) - ptype = 2 - if(9) - ptype = 10 - if(10) - ptype = 9 - - update() - - // returns the type path of disposalpipe corresponding to this item dtype - proc/dpipetype() - switch(ptype) - if(0,1) - return /obj/structure/disposalpipe/segment - if(2,3,4) - return /obj/structure/disposalpipe/junction - if(5) - return /obj/structure/disposalpipe/trunk - if(6) - return /obj/machinery/disposal - if(7) - return /obj/structure/disposaloutlet - if(8) - return /obj/machinery/disposal/deliveryChute - if(9,10) - return /obj/structure/disposalpipe/sortjunction + if(usr.stat) return + if(anchored) + usr << "You must unfasten the pipe before rotating it." + return + + dir = turn(dir, -90) + update() + +/obj/structure/disposalconstruct/verb/flip() + set name = "Flip Pipe" + set category = "Object" + set src in view(1) + if(usr.stat) + return + + if(anchored) + usr << "You must unfasten the pipe before flipping it." + return + + dir = turn(dir, 180) + switch(ptype) + if(2) + ptype = 3 + if(3) + ptype = 2 + if(9) + ptype = 10 + if(10) + ptype = 9 + + update() + +// returns the type path of disposalpipe corresponding to this item dtype +/obj/structure/disposalconstruct/proc/dpipetype() + switch(ptype) + if(0,1) + return /obj/structure/disposalpipe/segment + if(2,3,4) + return /obj/structure/disposalpipe/junction + if(5) + return /obj/structure/disposalpipe/trunk + if(6) + return /obj/machinery/disposal + if(7) + return /obj/structure/disposaloutlet + if(8) + return /obj/machinery/disposal/deliveryChute + if(9,10) + return /obj/structure/disposalpipe/sortjunction + return - // attackby item - // wrench: (un)anchor - // weldingtool: convert to real pipe - attackby(var/obj/item/I, var/mob/user) - var/nicetype = "pipe" - var/ispipe = 0 // Indicates if we should change the level of this pipe - src.add_fingerprint(user) - switch(ptype) - if(6) - nicetype = "disposal bin" - if(7) - nicetype = "disposal outlet" - if(8) - nicetype = "delivery chute" - if(9, 10) - nicetype = "sorting pipe" - ispipe = 1 +// attackby item +// wrench: (un)anchor +// weldingtool: convert to real pipe + +/obj/structure/disposalconstruct/attackby(var/obj/item/I, var/mob/user) + var/nicetype = "pipe" + var/ispipe = 0 // Indicates if we should change the level of this pipe + src.add_fingerprint(user) + switch(ptype) + if(6) + nicetype = "disposal bin" + if(7) + nicetype = "disposal outlet" + if(8) + nicetype = "delivery chute" + if(9, 10) + nicetype = "sorting pipe" + ispipe = 1 + else + nicetype = "pipe" + ispipe = 1 + + var/turf/T = src.loc + if(T.intact) + user << "You can only attach the [nicetype] if the floor plating is removed." + return + + var/obj/structure/disposalpipe/CP = locate() in T + + if(istype(I, /obj/item/weapon/wrench)) + if(anchored) + anchored = 0 + if(ispipe) + level = 2 + density = 0 else - nicetype = "pipe" - ispipe = 1 - - var/turf/T = src.loc - if(T.intact) - user << "You can only attach the [nicetype] if the floor plating is removed." - return - - var/obj/structure/disposalpipe/CP = locate() in T - - if(istype(I, /obj/item/weapon/wrench)) - if(anchored) - anchored = 0 - if(ispipe) - level = 2 - density = 0 - else - density = 1 - user << "You detach the [nicetype] from the underfloor." - else - if(ptype>=6 && ptype <= 8) // Disposal or outlet - if(CP) // There's something there - if(!istype(CP,/obj/structure/disposalpipe/trunk)) - user << "The [nicetype] requires a trunk underneath it in order to work." - return - else // Nothing under, fuck. + density = 1 + user << "You detach the [nicetype] from the underfloor." + else + if(ptype>=6 && ptype <= 8) // Disposal or outlet + if(CP) // There's something there + if(!istype(CP,/obj/structure/disposalpipe/trunk)) user << "The [nicetype] requires a trunk underneath it in order to work." return - else - if(CP) - update() - var/pdir = CP.dpdir - if(istype(CP, /obj/structure/disposalpipe/broken)) - pdir = CP.dir - if(pdir & dpdir) - user << "There is already a [nicetype] at that location." - return - anchored = 1 - if(ispipe) - level = 1 // We don't want disposal bins to disappear under the floors - density = 0 - else - density = 1 // We don't want disposal bins or outlets to go density 0 - user << "You attach the [nicetype] to the underfloor." - playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1) - update() - - else if(istype(I, /obj/item/weapon/weldingtool)) - if(anchored) - var/obj/item/weapon/weldingtool/W = I - if(W.remove_fuel(0,user)) - playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1) - user << "Welding the [nicetype] in place." - if(do_after(user, 20)) - if(!src || !W.isOn()) return - user << "The [nicetype] has been welded in place!" - update() // TODO: Make this neat - if(ispipe) // Pipe - - var/pipetype = dpipetype() - var/obj/structure/disposalpipe/P = new pipetype(src.loc) - src.transfer_fingerprints_to(P) - P.base_icon_state = base_state - P.dir = dir - P.dpdir = dpdir - P.updateicon() - - //Needs some special treatment ;) - if(ptype==9 || ptype==10) - var/obj/structure/disposalpipe/sortjunction/SortP = P - SortP.updatedir() - - else if(ptype==6) // Disposal bin - var/obj/machinery/disposal/P = new /obj/machinery/disposal(src.loc) - src.transfer_fingerprints_to(P) - P.mode = 0 // start with pump off - - else if(ptype==7) // Disposal outlet - - var/obj/structure/disposaloutlet/P = new /obj/structure/disposaloutlet(src.loc) - src.transfer_fingerprints_to(P) - P.dir = dir - var/obj/structure/disposalpipe/trunk/Trunk = CP - Trunk.linked = P - - else if(ptype==8) // Disposal outlet - - var/obj/machinery/disposal/deliveryChute/P = new /obj/machinery/disposal/deliveryChute(src.loc) - src.transfer_fingerprints_to(P) - P.dir = dir - - qdel(src) - return - else - user << "You need more welding fuel to complete this task." + else // Nothing under, fuck. + user << "The [nicetype] requires a trunk underneath it in order to work." return else - user << "You need to attach it to the plating first!" + if(CP) + update() + var/pdir = CP.dpdir + if(istype(CP, /obj/structure/disposalpipe/broken)) + pdir = CP.dir + if(pdir & dpdir) + user << "There is already a [nicetype] at that location." + return + anchored = 1 + if(ispipe) + level = 1 // We don't want disposal bins to disappear under the floors + density = 0 + else + density = 1 // We don't want disposal bins or outlets to go density 0 + user << "You attach the [nicetype] to the underfloor." + playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1) + update() + + else if(istype(I, /obj/item/weapon/weldingtool)) + if(anchored) + var/obj/item/weapon/weldingtool/W = I + if(W.remove_fuel(0,user)) + playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1) + user << "Welding the [nicetype] in place." + if(do_after(user, 20)) + if(!src || !W.isOn()) return + user << "The [nicetype] has been welded in place!" + update() // TODO: Make this neat + if(ispipe) // Pipe + + var/pipetype = dpipetype() + var/obj/structure/disposalpipe/P = new pipetype(src.loc) + src.transfer_fingerprints_to(P) + P.base_icon_state = base_state + P.dir = dir + P.dpdir = dpdir + P.updateicon() + + //Needs some special treatment ;) + if(ptype==9 || ptype==10) + var/obj/structure/disposalpipe/sortjunction/SortP = P + SortP.updatedir() + + else if(ptype==6) // Disposal bin + var/obj/machinery/disposal/P = new /obj/machinery/disposal(src.loc) + src.transfer_fingerprints_to(P) + P.mode = 0 // start with pump off + + else if(ptype==7) // Disposal outlet + + var/obj/structure/disposaloutlet/P = new /obj/structure/disposaloutlet(src.loc) + src.transfer_fingerprints_to(P) + P.dir = dir + var/obj/structure/disposalpipe/trunk/Trunk = CP + Trunk.linked = P + + else if(ptype==8) // Disposal outlet + + var/obj/machinery/disposal/deliveryChute/P = new /obj/machinery/disposal/deliveryChute(src.loc) + src.transfer_fingerprints_to(P) + P.dir = dir + + qdel(src) + return + else + user << "You need more welding fuel to complete this task." return + else + user << "You need to attach it to the plating first!" + return diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index 88e88dc3e6d..bc1586e2733 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -479,120 +479,119 @@ active = 0 ..() -/obj/structure/disposalholder // initialize a holder from the contents of a disposal unit - proc/init(var/obj/machinery/disposal/D) - gas = D.air_contents// transfer gas resv. into holder object +/obj/structure/disposalholder/proc/init(var/obj/machinery/disposal/D) + gas = D.air_contents// transfer gas resv. into holder object - //Check for any living mobs trigger hasmob. - //hasmob effects whether the package goes to cargo or its tagged destination. - for(var/mob/living/M in D) - if(M && M.stat != 2) - hasmob = 1 + //Check for any living mobs trigger hasmob. + //hasmob effects whether the package goes to cargo or its tagged destination. + for(var/mob/living/M in D) + if(M && M.stat != 2) + hasmob = 1 - //Checks 1 contents level deep. This means that players can be sent through disposals... - //...but it should require a second person to open the package. (i.e. person inside a wrapped locker) - for(var/obj/O in D) - if(O.contents) - for(var/mob/living/M in O.contents) - if(M && M.stat != 2) - hasmob = 1 + //Checks 1 contents level deep. This means that players can be sent through disposals... + //...but it should require a second person to open the package. (i.e. person inside a wrapped locker) + for(var/obj/O in D) + if(O.contents) + for(var/mob/living/M in O.contents) + if(M && M.stat != 2) + hasmob = 1 - // now everything inside the disposal gets put into the holder - // note AM since can contain mobs or objs - for(var/atom/movable/AM in D) - AM.loc = src - if(istype(AM, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = AM - if(FAT in H.mutations) // is a human and fat? - has_fat_guy = 1 // set flag on holder - if(istype(AM, /obj/structure/bigDelivery) && !hasmob) - var/obj/structure/bigDelivery/T = AM - src.destinationTag = T.sortTag - if(istype(AM, /obj/item/smallDelivery) && !hasmob) - var/obj/item/smallDelivery/T = AM - src.destinationTag = T.sortTag + // now everything inside the disposal gets put into the holder + // note AM since can contain mobs or objs + for(var/atom/movable/AM in D) + AM.loc = src + if(istype(AM, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = AM + if(FAT in H.mutations) // is a human and fat? + has_fat_guy = 1 // set flag on holder + if(istype(AM, /obj/structure/bigDelivery) && !hasmob) + var/obj/structure/bigDelivery/T = AM + src.destinationTag = T.sortTag + if(istype(AM, /obj/item/smallDelivery) && !hasmob) + var/obj/item/smallDelivery/T = AM + src.destinationTag = T.sortTag - // start the movement process - // argument is the disposal unit the holder started in - proc/start(var/obj/machinery/disposal/D) - if(!D.trunk) - D.expel(src) // no trunk connected, so expel immediately - return - - loc = D.trunk - active = 1 - dir = DOWN - spawn(1) - move() // spawn off the movement process - +// start the movement process +// argument is the disposal unit the holder started in +/obj/structure/disposalholder/proc/start(var/obj/machinery/disposal/D) + if(!D.trunk) + D.expel(src) // no trunk connected, so expel immediately return - // movement process, persists while holder is moving through pipes - proc/move() - var/obj/structure/disposalpipe/last - while(active) - var/obj/structure/disposalpipe/curr = loc - last = curr - curr = curr.transfer(src) - if(!curr && active) - last.expel(src, loc, dir) + loc = D.trunk + active = 1 + dir = DOWN + spawn(1) + move() // spawn off the movement process - sleep(1) - if(!(count--)) - active = 0 - return + return + +// movement process, persists while holder is moving through pipes +/obj/structure/disposalholder/proc/move() + var/obj/structure/disposalpipe/last + while(active) + var/obj/structure/disposalpipe/curr = loc + last = curr + curr = curr.transfer(src) + if(!curr && active) + last.expel(src, loc, dir) + + sleep(1) + if(!(count--)) + active = 0 + return - // find the turf which should contain the next pipe - proc/nextloc() - return get_step(loc,dir) +// find the turf which should contain the next pipe +/obj/structure/disposalholder/proc/nextloc() + return get_step(loc,dir) - // find a matching pipe on a turf - proc/findpipe(var/turf/T) +// find a matching pipe on a turf +/obj/structure/disposalholder/proc/findpipe(var/turf/T) - if(!T) - return null - - var/fdir = turn(dir, 180) // flip the movement direction - for(var/obj/structure/disposalpipe/P in T) - if(fdir & P.dpdir) // find pipe direction mask that matches flipped dir - return P - // if no matching pipe, return null + if(!T) return null - // merge two holder objects - // used when a a holder meets a stuck holder - proc/merge(var/obj/structure/disposalholder/other) - for(var/atom/movable/AM in other) - AM.loc = src // move everything in other holder to this one - if(ismob(AM)) - var/mob/M = AM - if(M.client) // if a client mob, update eye to follow this holder - M.client.eye = src + var/fdir = turn(dir, 180) // flip the movement direction + for(var/obj/structure/disposalpipe/P in T) + if(fdir & P.dpdir) // find pipe direction mask that matches flipped dir + return P + // if no matching pipe, return null + return null - if(other.has_fat_guy) - has_fat_guy = 1 - qdel(other) +// merge two holder objects +// used when a a holder meets a stuck holder +/obj/structure/disposalholder/proc/merge(var/obj/structure/disposalholder/other) + for(var/atom/movable/AM in other) + AM.loc = src // move everything in other holder to this one + if(ismob(AM)) + var/mob/M = AM + if(M.client) // if a client mob, update eye to follow this holder + M.client.eye = src + + if(other.has_fat_guy) + has_fat_guy = 1 + qdel(other) - // called when player tries to move while in a pipe - relaymove(mob/user as mob) - if (user.stat) - return - if (src.loc) - for (var/mob/M in hearers(src.loc.loc)) - M << "CLONG, clong!" - - playsound(src.loc, 'sound/effects/clang.ogg', 50, 0, 0) - - // called to vent all gas in holder to a location - proc/vent_gas(var/atom/location) - location.assume_air(gas) // vent all gas to turf - air_update_turf() +// called when player tries to move while in a pipe +/obj/structure/disposalholder/relaymove(mob/user as mob) + if (user.stat) return + if (src.loc) + for (var/mob/M in hearers(src.loc.loc)) + M << "CLONG, clong!" + + playsound(src.loc, 'sound/effects/clang.ogg', 50, 0, 0) + +// called to vent all gas in holder to a location +/obj/structure/disposalholder/proc/vent_gas(var/atom/location) + location.assume_air(gas) // vent all gas to turf + air_update_turf() + return // Disposal pipes @@ -611,252 +610,252 @@ var/base_icon_state // initial icon state on map // new pipe, set the icon_state as on map - New() - ..() - base_icon_state = icon_state - return +/obj/structure/disposalpipe/New() + ..() + base_icon_state = icon_state + return // pipe is deleted // ensure if holder is present, it is expelled - Destroy() - var/obj/structure/disposalholder/H = locate() in src - if(H) - // holder was present - H.active = 0 - var/turf/T = src.loc - if(T.density) - // deleting pipe is inside a dense turf (wall) - // this is unlikely, but just dump out everything into the turf in case - - for(var/atom/movable/AM in H) - AM.loc = T - AM.pipe_eject(0) - qdel(H) - ..() - return - - // otherwise, do normal expel from turf - if(H) - expel(H, T, 0) - ..() - - // returns the direction of the next pipe object, given the entrance dir - // by default, returns the bitmask of remaining directions - proc/nextdir(var/fromdir) - return dpdir & (~turn(fromdir, 180)) - - // transfer the holder through this pipe segment - // overriden for special behaviour - // - proc/transfer(var/obj/structure/disposalholder/H) - var/nextdir = nextdir(H.dir) - H.dir = nextdir - var/turf/T = H.nextloc() - var/obj/structure/disposalpipe/P = H.findpipe(T) - - if(P) - // find other holder in next loc, if inactive merge it with current - var/obj/structure/disposalholder/H2 = locate() in P - if(H2 && !H2.active) - H.merge(H2) - - H.loc = P - else // if wasn't a pipe, then set loc to turf - H.loc = T - return null - - return P - - - // update the icon_state to reflect hidden status - proc/update() +/obj/structure/disposalpipe/Destroy() + var/obj/structure/disposalholder/H = locate() in src + if(H) + // holder was present + H.active = 0 var/turf/T = src.loc - hide(T.intact && !istype(T,/turf/space)) // space never hides pipes + if(T.density) + // deleting pipe is inside a dense turf (wall) + // this is unlikely, but just dump out everything into the turf in case - // hide called by levelupdate if turf intact status changes - // change visibility status and force update of icon - hide(var/intact) - invisibility = intact ? 101: 0 // hide if floor is intact - updateicon() + for(var/atom/movable/AM in H) + AM.loc = T + AM.pipe_eject(0) + qdel(H) + ..() + return - // update actual icon_state depending on visibility - // if invisible, append "f" to icon_state to show faded version - // this will be revealed if a T-scanner is used - // if visible, use regular icon_state - proc/updateicon() - if(invisibility) - icon_state = "[base_icon_state]f" - else - icon_state = base_icon_state - return - - - // expel the held objects into a turf - // called when there is a break in the pipe - // - - proc/expel(var/obj/structure/disposalholder/H, var/turf/T, var/direction) - - var/turf/target - - if(istype(T, /turf/simulated/floor)) //intact floor, pop the tile - var/turf/simulated/floor/F = T - if(F.floor_tile) - F.floor_tile.loc = H //It took me a day to figure out this was the right way to do it. - F.floor_tile = null //So it doesn't get deleted in make_plating() - F.make_plating() - - if(direction) // direction is specified - if(istype(T, /turf/space)) // if ended in space, then range is unlimited - target = get_edge_target_turf(T, direction) - else // otherwise limit to 10 tiles - target = get_ranged_target_turf(T, direction, 10) - - playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0) - if(H) - for(var/atom/movable/AM in H) - AM.loc = T - AM.pipe_eject(direction) - spawn(1) - if(AM) - AM.throw_at(target, 100, 1) - - else // no specified direction, so throw in random direction - - playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0) - if(H) - for(var/atom/movable/AM in H) - target = get_offset_target_turf(T, rand(5)-rand(5), rand(5)-rand(5)) - - AM.loc = T - AM.pipe_eject(0) - spawn(1) - if(AM) - AM.throw_at(target, 5, 1) - H.vent_gas(T) - qdel(H) - return - - // call to break the pipe - // will expel any holder inside at the time - // then delete the pipe - // remains : set to leave broken pipe pieces in place - proc/broken(var/remains = 0) - if(remains) - for(var/D in cardinal) - if(D & dpdir) - var/obj/structure/disposalpipe/broken/P = new(src.loc) - P.dir = D - - src.invisibility = 101 // make invisible (since we won't delete the pipe immediately) - var/obj/structure/disposalholder/H = locate() in src + // otherwise, do normal expel from turf if(H) - // holder was present - H.active = 0 - var/turf/T = src.loc - if(T.density) - // broken pipe is inside a dense turf (wall) - // this is unlikely, but just dump out everything into the turf in case + expel(H, T, 0) + ..() - for(var/atom/movable/AM in H) - AM.loc = T - AM.pipe_eject(0) - qdel(H) - return +// returns the direction of the next pipe object, given the entrance dir +// by default, returns the bitmask of remaining directions +/obj/structure/disposalpipe/proc/nextdir(var/fromdir) + return dpdir & (~turn(fromdir, 180)) - // otherwise, do normal expel from turf - if(H) - expel(H, T, 0) +// transfer the holder through this pipe segment +// overriden for special behaviour +// +/obj/structure/disposalpipe/proc/transfer(var/obj/structure/disposalholder/H) + var/nextdir = nextdir(H.dir) + H.dir = nextdir + var/turf/T = H.nextloc() + var/obj/structure/disposalpipe/P = H.findpipe(T) - spawn(2) // delete pipe after 2 ticks to ensure expel proc finished - qdel(src) + if(P) + // find other holder in next loc, if inactive merge it with current + var/obj/structure/disposalholder/H2 = locate() in P + if(H2 && !H2.active) + H.merge(H2) + + H.loc = P + else // if wasn't a pipe, then set loc to turf + H.loc = T + return null + + return P - // pipe affected by explosion - ex_act(severity) +// update the icon_state to reflect hidden status +/obj/structure/disposalpipe/proc/update() + var/turf/T = src.loc + hide(T.intact && !istype(T,/turf/space)) // space never hides pipes - //pass on ex_act to our contents before calling it on ourself - var/obj/structure/disposalholder/H = locate() in src +// hide called by levelupdate if turf intact status changes +// change visibility status and force update of icon +/obj/structure/disposalpipe/hide(var/intact) + invisibility = intact ? 101: 0 // hide if floor is intact + updateicon() + +// update actual icon_state depending on visibility +// if invisible, append "f" to icon_state to show faded version +// this will be revealed if a T-scanner is used +// if visible, use regular icon_state +/obj/structure/disposalpipe/proc/updateicon() + if(invisibility) + icon_state = "[base_icon_state]f" + else + icon_state = base_icon_state + return + + +// expel the held objects into a turf +// called when there is a break in the pipe +// + +/obj/structure/disposalpipe/proc/expel(var/obj/structure/disposalholder/H, var/turf/T, var/direction) + + var/turf/target + + if(istype(T, /turf/simulated/floor)) //intact floor, pop the tile + var/turf/simulated/floor/F = T + if(F.floor_tile) + F.floor_tile.loc = H //It took me a day to figure out this was the right way to do it. + F.floor_tile = null //So it doesn't get deleted in make_plating() + F.make_plating() + + if(direction) // direction is specified + if(istype(T, /turf/space)) // if ended in space, then range is unlimited + target = get_edge_target_turf(T, direction) + else // otherwise limit to 10 tiles + target = get_ranged_target_turf(T, direction, 10) + + playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0) if(H) for(var/atom/movable/AM in H) - AM.ex_act(severity) + AM.loc = T + AM.pipe_eject(direction) + spawn(1) + if(AM) + AM.throw_at(target, 100, 1) - switch(severity) - if(1.0) - broken(0) - return - if(2.0) - health -= rand(5,15) - healthcheck() - return - if(3.0) - health -= rand(0,15) - healthcheck() - return + else // no specified direction, so throw in random direction + playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0) + if(H) + for(var/atom/movable/AM in H) + target = get_offset_target_turf(T, rand(5)-rand(5), rand(5)-rand(5)) - // test health for brokenness - proc/healthcheck() - if(health < -2) - broken(0) - else if(health<1) - broken(1) - return + AM.loc = T + AM.pipe_eject(0) + spawn(1) + if(AM) + AM.throw_at(target, 5, 1) + H.vent_gas(T) + qdel(H) + return - //attack by item - //weldingtool: unfasten and convert to obj/disposalconstruct - - attackby(var/obj/item/I, var/mob/user) +// call to break the pipe +// will expel any holder inside at the time +// then delete the pipe +// remains : set to leave broken pipe pieces in place +/obj/structure/disposalpipe/proc/broken(var/remains = 0) + if(remains) + for(var/D in cardinal) + if(D & dpdir) + var/obj/structure/disposalpipe/broken/P = new(src.loc) + P.dir = D + src.invisibility = 101 // make invisible (since we won't delete the pipe immediately) + var/obj/structure/disposalholder/H = locate() in src + if(H) + // holder was present + H.active = 0 var/turf/T = src.loc - if(T.intact) - return // prevent interaction with T-scanner revealed pipes - src.add_fingerprint(user) - if(istype(I, /obj/item/weapon/weldingtool)) - var/obj/item/weapon/weldingtool/W = I + if(T.density) + // broken pipe is inside a dense turf (wall) + // this is unlikely, but just dump out everything into the turf in case - if(W.remove_fuel(0,user)) - playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1) - user << "You start slicing the disposal pipe." - // check if anything changed over 2 seconds - if(do_after(user,30)) - if(!src || !W.isOn()) return - welded() - user << "You've sliced the disposal pipe." - else - user << "You need more welding fuel to cut the pipe." - return + for(var/atom/movable/AM in H) + AM.loc = T + AM.pipe_eject(0) + qdel(H) + return - // called when pipe is cut with welder - proc/welded() - - var/obj/structure/disposalconstruct/C = new (src.loc) - switch(base_icon_state) - if("pipe-s") - C.ptype = 0 - if("pipe-c") - C.ptype = 1 - if("pipe-j1") - C.ptype = 2 - if("pipe-j2") - C.ptype = 3 - if("pipe-y") - C.ptype = 4 - if("pipe-t") - C.ptype = 5 - if("pipe-j1s") - C.ptype = 9 - if("pipe-j2s") - C.ptype = 10 - src.transfer_fingerprints_to(C) - C.dir = dir - C.density = 0 - C.anchored = 1 - C.update() + // otherwise, do normal expel from turf + if(H) + expel(H, T, 0) + spawn(2) // delete pipe after 2 ticks to ensure expel proc finished qdel(src) + +// pipe affected by explosion +/obj/structure/disposalpipe/ex_act(severity) + + //pass on ex_act to our contents before calling it on ourself + var/obj/structure/disposalholder/H = locate() in src + if(H) + for(var/atom/movable/AM in H) + AM.ex_act(severity) + + switch(severity) + if(1.0) + broken(0) + return + if(2.0) + health -= rand(5,15) + healthcheck() + return + if(3.0) + health -= rand(0,15) + healthcheck() + return + + +// test health for brokenness +/obj/structure/disposalpipe/proc/healthcheck() + if(health < -2) + broken(0) + else if(health<1) + broken(1) + return + +//attack by item +//weldingtool: unfasten and convert to obj/disposalconstruct + +/obj/structure/disposalpipe/attackby(var/obj/item/I, var/mob/user) + + var/turf/T = src.loc + if(T.intact) + return // prevent interaction with T-scanner revealed pipes + src.add_fingerprint(user) + if(istype(I, /obj/item/weapon/weldingtool)) + var/obj/item/weapon/weldingtool/W = I + + if(W.remove_fuel(0,user)) + playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1) + user << "You start slicing the disposal pipe." + // check if anything changed over 2 seconds + if(do_after(user,30)) + if(!src || !W.isOn()) return + welded() + user << "You've sliced the disposal pipe." + else + user << "You need more welding fuel to cut the pipe." + return + +// called when pipe is cut with welder +/obj/structure/disposalpipe/proc/welded() + + var/obj/structure/disposalconstruct/C = new (src.loc) + switch(base_icon_state) + if("pipe-s") + C.ptype = 0 + if("pipe-c") + C.ptype = 1 + if("pipe-j1") + C.ptype = 2 + if("pipe-j2") + C.ptype = 3 + if("pipe-y") + C.ptype = 4 + if("pipe-t") + C.ptype = 5 + if("pipe-j1s") + C.ptype = 9 + if("pipe-j2s") + C.ptype = 10 + src.transfer_fingerprints_to(C) + C.dir = dir + C.density = 0 + C.anchored = 1 + C.update() + + qdel(src) + // *** TEST verb //client/verb/dispstop() // for(var/obj/structure/disposalholder/H in world) @@ -866,15 +865,15 @@ /obj/structure/disposalpipe/segment icon_state = "pipe-s" - New() - ..() - if(icon_state == "pipe-s") - dpdir = dir | turn(dir, 180) - else - dpdir = dir | turn(dir, -90) +/obj/structure/disposalpipe/segment/New() + ..() + if(icon_state == "pipe-s") + dpdir = dir | turn(dir, 180) + else + dpdir = dir | turn(dir, -90) - update() - return + update() + return @@ -883,45 +882,45 @@ /obj/structure/disposalpipe/junction icon_state = "pipe-j1" - New() - ..() - if(icon_state == "pipe-j1") - dpdir = dir | turn(dir, -90) | turn(dir,180) - else if(icon_state == "pipe-j2") - dpdir = dir | turn(dir, 90) | turn(dir,180) - else // pipe-y - dpdir = dir | turn(dir,90) | turn(dir, -90) - update() - return +/obj/structure/disposalpipe/junction/New() + ..() + if(icon_state == "pipe-j1") + dpdir = dir | turn(dir, -90) | turn(dir,180) + else if(icon_state == "pipe-j2") + dpdir = dir | turn(dir, 90) | turn(dir,180) + else // pipe-y + dpdir = dir | turn(dir,90) | turn(dir, -90) + update() + return - // next direction to move - // if coming in from secondary dirs, then next is primary dir - // if coming in from primary dir, then next is equal chance of other dirs +// next direction to move +// if coming in from secondary dirs, then next is primary dir +// if coming in from primary dir, then next is equal chance of other dirs - nextdir(var/fromdir) - var/flipdir = turn(fromdir, 180) - if(flipdir != dir) // came from secondary dir - return dir // so exit through primary - else // came from primary - // so need to choose either secondary exit - var/mask = ..(fromdir) +/obj/structure/disposalpipe/junction/nextdir(var/fromdir) + var/flipdir = turn(fromdir, 180) + if(flipdir != dir) // came from secondary dir + return dir // so exit through primary + else // came from primary + // so need to choose either secondary exit + var/mask = ..(fromdir) - // find a bit which is set - var/setbit = 0 - if(mask & NORTH) - setbit = NORTH - else if(mask & SOUTH) - setbit = SOUTH - else if(mask & EAST) - setbit = EAST - else - setbit = WEST + // find a bit which is set + var/setbit = 0 + if(mask & NORTH) + setbit = NORTH + else if(mask & SOUTH) + setbit = SOUTH + else if(mask & EAST) + setbit = EAST + else + setbit = WEST - if(prob(50)) // 50% chance to choose the found bit or the other one - return setbit - else - return mask & (~setbit) + if(prob(50)) // 50% chance to choose the found bit or the other one + return setbit + else + return mask & (~setbit) //a three-way junction that sorts objects /obj/structure/disposalpipe/sortjunction @@ -932,81 +931,81 @@ var/negdir = 0 var/sortdir = 0 - proc/updatedesc() - desc = "An underfloor disposal pipe with a package sorting mechanism." - if(sortType>0) - var/tag = uppertext(TAGGERLOCATIONS[sortType]) - desc += "\nIt's tagged with [tag]" +/obj/structure/disposalpipe/sortjunction/proc/updatedesc() + desc = "An underfloor disposal pipe with a package sorting mechanism." + if(sortType>0) + var/tag = uppertext(TAGGERLOCATIONS[sortType]) + desc += "\nIt's tagged with [tag]" - proc/updatedir() - posdir = dir - negdir = turn(posdir, 180) +/obj/structure/disposalpipe/sortjunction/proc/updatedir() + posdir = dir + negdir = turn(posdir, 180) - if(icon_state == "pipe-j1s") - sortdir = turn(posdir, -90) - else - icon_state = "pipe-j2s" - sortdir = turn(posdir, 90) + if(icon_state == "pipe-j1s") + sortdir = turn(posdir, -90) + else + icon_state = "pipe-j2s" + sortdir = turn(posdir, 90) - dpdir = sortdir | posdir | negdir + dpdir = sortdir | posdir | negdir - New() - ..() - updatedir() - updatedesc() - update() +/obj/structure/disposalpipe/sortjunction/New() + ..() + updatedir() + updatedesc() + update() + return + +/obj/structure/disposalpipe/sortjunction/attackby(var/obj/item/I, var/mob/user) + if(..()) return - attackby(var/obj/item/I, var/mob/user) - if(..()) - return + if(istype(I, /obj/item/device/destTagger)) + var/obj/item/device/destTagger/O = I - if(istype(I, /obj/item/device/destTagger)) - var/obj/item/device/destTagger/O = I - - if(O.currTag > 0)// Tag set - sortType = O.currTag - playsound(src.loc, 'sound/machines/twobeep.ogg', 100, 1) - var/tag = uppertext(TAGGERLOCATIONS[O.currTag]) - user << " Changed filter to [tag]." - updatedesc() + if(O.currTag > 0)// Tag set + sortType = O.currTag + playsound(src.loc, 'sound/machines/twobeep.ogg', 100, 1) + var/tag = uppertext(TAGGERLOCATIONS[O.currTag]) + user << " Changed filter to [tag]." + updatedesc() - // next direction to move - // if coming in from negdir, then next is primary dir or sortdir - // if coming in from posdir, then flip around and go back to posdir - // if coming in from sortdir, go to posdir +// next direction to move +// if coming in from negdir, then next is primary dir or sortdir +// if coming in from posdir, then flip around and go back to posdir +// if coming in from sortdir, go to posdir - nextdir(var/fromdir, var/sortTag) - //var/flipdir = turn(fromdir, 180) - if(fromdir != sortdir) // probably came from the negdir +/obj/structure/disposalpipe/sortjunction/nextdir(var/fromdir, var/sortTag) + //var/flipdir = turn(fromdir, 180) + if(fromdir != sortdir) // probably came from the negdir - if(src.sortType == sortTag) //if destination matches filtered type... - return sortdir // exit through sortdirection - else - return posdir - else // came from sortdir - // so go with the flow to positive direction + if(src.sortType == sortTag) //if destination matches filtered type... + return sortdir // exit through sortdirection + else return posdir + else // came from sortdir + // so go with the flow to positive direction + return posdir - transfer(var/obj/structure/disposalholder/H) - var/nextdir = nextdir(H.dir, H.destinationTag) - H.dir = nextdir - var/turf/T = H.nextloc() - var/obj/structure/disposalpipe/P = H.findpipe(T) +/obj/structure/disposalpipe/sortjunction/transfer(var/obj/structure/disposalholder/H) + var/nextdir = nextdir(H.dir, H.destinationTag) + H.dir = nextdir + var/turf/T = H.nextloc() + var/obj/structure/disposalpipe/P = H.findpipe(T) - if(P) - // find other holder in next loc, if inactive merge it with current - var/obj/structure/disposalholder/H2 = locate() in P - if(H2 && !H2.active) - H.merge(H2) + if(P) + // find other holder in next loc, if inactive merge it with current + var/obj/structure/disposalholder/H2 = locate() in P + if(H2 && !H2.active) + H.merge(H2) - H.loc = P - else // if wasn't a pipe, then set loc to turf - H.loc = T - return null + H.loc = P + else // if wasn't a pipe, then set loc to turf + H.loc = T + return null - return P + return P //a three-way junction that sorts objects destined for the mail office mail table (tomail = 1) @@ -1018,56 +1017,56 @@ var/negdir = 0 var/sortdir = 0 - New() - ..() - posdir = dir - if(icon_state == "pipe-j1s") - sortdir = turn(posdir, -90) - negdir = turn(posdir, 180) +/obj/structure/disposalpipe/wrapsortjunction/New() + ..() + posdir = dir + if(icon_state == "pipe-j1s") + sortdir = turn(posdir, -90) + negdir = turn(posdir, 180) + else + icon_state = "pipe-j2s" + sortdir = turn(posdir, 90) + negdir = turn(posdir, 180) + dpdir = sortdir | posdir | negdir + + update() + return + +// next direction to move +// if coming in from negdir, then next is primary dir or sortdir +// if coming in from posdir, then flip around and go back to posdir +// if coming in from sortdir, go to posdir + +/obj/structure/disposalpipe/wrapsortjunction/nextdir(var/fromdir, var/istomail) + //var/flipdir = turn(fromdir, 180) + if(fromdir != sortdir) // probably came from the negdir + + if(istomail) //if destination matches filtered type... + return sortdir // exit through sortdirection else - icon_state = "pipe-j2s" - sortdir = turn(posdir, 90) - negdir = turn(posdir, 180) - dpdir = sortdir | posdir | negdir - - update() - return - - // next direction to move - // if coming in from negdir, then next is primary dir or sortdir - // if coming in from posdir, then flip around and go back to posdir - // if coming in from sortdir, go to posdir - - nextdir(var/fromdir, var/istomail) - //var/flipdir = turn(fromdir, 180) - if(fromdir != sortdir) // probably came from the negdir - - if(istomail) //if destination matches filtered type... - return sortdir // exit through sortdirection - else - return posdir - else // came from sortdir - // so go with the flow to positive direction return posdir + else // came from sortdir + // so go with the flow to positive direction + return posdir - transfer(var/obj/structure/disposalholder/H) - var/nextdir = nextdir(H.dir, H.tomail) - H.dir = nextdir - var/turf/T = H.nextloc() - var/obj/structure/disposalpipe/P = H.findpipe(T) +/obj/structure/disposalpipe/wrapsortjunction/transfer(var/obj/structure/disposalholder/H) + var/nextdir = nextdir(H.dir, H.tomail) + H.dir = nextdir + var/turf/T = H.nextloc() + var/obj/structure/disposalpipe/P = H.findpipe(T) - if(P) - // find other holder in next loc, if inactive merge it with current - var/obj/structure/disposalholder/H2 = locate() in P - if(H2 && !H2.active) - H.merge(H2) + if(P) + // find other holder in next loc, if inactive merge it with current + var/obj/structure/disposalholder/H2 = locate() in P + if(H2 && !H2.active) + H.merge(H2) - H.loc = P - else // if wasn't a pipe, then set loc to turf - H.loc = T - return null + H.loc = P + else // if wasn't a pipe, then set loc to turf + H.loc = T + return null - return P + return P @@ -1183,18 +1182,18 @@ // i.e. will be treated as an empty turf desc = "A broken piece of disposal pipe." - New() - ..() - update() - return +/obj/structure/disposalpipe/broken/New() + ..() + update() + return - // called when welded - // for broken pipe, remove and turn into scrap +// called when welded +// for broken pipe, remove and turn into scrap - welded() -// var/obj/item/scrap/S = new(src.loc) -// S.set_components(200,0,0) - qdel(src) +/obj/structure/disposalpipe/broken/welded() +// var/obj/item/scrap/S = new(src.loc) +// S.set_components(200,0,0) + qdel(src) // the disposal outlet machine @@ -1211,74 +1210,74 @@ var/start_eject = 0 var/eject_range = 2 - New() - ..() +/obj/structure/disposaloutlet/New() + ..() - spawn(1) - target = get_ranged_target_turf(src, dir, 10) + spawn(1) + target = get_ranged_target_turf(src, dir, 10) - var/obj/structure/disposalpipe/trunk/trunk = locate() in src.loc - if(trunk) - trunk.linked = src // link the pipe trunk to self + var/obj/structure/disposalpipe/trunk/trunk = locate() in src.loc + if(trunk) + trunk.linked = src // link the pipe trunk to self - // expel the contents of the holder object, then delete it - // called when the holder exits the outlet - proc/expel(var/obj/structure/disposalholder/H) +// expel the contents of the holder object, then delete it +// called when the holder exits the outlet +/obj/structure/disposaloutlet/proc/expel(var/obj/structure/disposalholder/H) - flick("outlet-open", src) - if((start_eject + 30) < world.time) - start_eject = world.time - playsound(src, 'sound/machines/warning-buzzer.ogg', 50, 0, 0) - sleep(20) - playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0) - else - sleep(20) - if(H) - for(var/atom/movable/AM in H) - AM.loc = src.loc - AM.pipe_eject(dir) - spawn(5) - if(AM) - AM.throw_at(target, eject_range, 1) - H.vent_gas(src.loc) - qdel(H) + flick("outlet-open", src) + if((start_eject + 30) < world.time) + start_eject = world.time + playsound(src, 'sound/machines/warning-buzzer.ogg', 50, 0, 0) + sleep(20) + playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0) + else + sleep(20) + if(H) + for(var/atom/movable/AM in H) + AM.loc = src.loc + AM.pipe_eject(dir) + spawn(5) + if(AM) + AM.throw_at(target, eject_range, 1) + H.vent_gas(src.loc) + qdel(H) + return + +/obj/structure/disposaloutlet/attackby(var/obj/item/I, var/mob/user) + if(!I || !user) return - - attackby(var/obj/item/I, var/mob/user) - if(!I || !user) + src.add_fingerprint(user) + if(istype(I, /obj/item/weapon/screwdriver)) + if(mode==0) + mode=1 + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + user << "You remove the screws around the power connection." + return + else if(mode==1) + mode=0 + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + user << "You attach the screws around the power connection." + return + else if(istype(I,/obj/item/weapon/weldingtool) && mode==1) + var/obj/item/weapon/weldingtool/W = I + if(W.remove_fuel(0,user)) + playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1) + user << "You start slicing the floorweld off \the [src]." + if(do_after(user,20)) + if(!src || !W.isOn()) return + user << "You've sliced the floorweld off \the [src]." + var/obj/structure/disposalconstruct/C = new (src.loc) + src.transfer_fingerprints_to(C) + C.ptype = 7 // 7 = outlet + C.update() + C.anchored = 1 + C.density = 1 + qdel(src) + return + else + user << "You need more welding fuel to complete this task." return - src.add_fingerprint(user) - if(istype(I, /obj/item/weapon/screwdriver)) - if(mode==0) - mode=1 - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - user << "You remove the screws around the power connection." - return - else if(mode==1) - mode=0 - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - user << "You attach the screws around the power connection." - return - else if(istype(I,/obj/item/weapon/weldingtool) && mode==1) - var/obj/item/weapon/weldingtool/W = I - if(W.remove_fuel(0,user)) - playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1) - user << "You start slicing the floorweld off \the [src]." - if(do_after(user,20)) - if(!src || !W.isOn()) return - user << "You've sliced the floorweld off \the [src]." - var/obj/structure/disposalconstruct/C = new (src.loc) - src.transfer_fingerprints_to(C) - C.ptype = 7 // 7 = outlet - C.update() - C.anchored = 1 - C.density = 1 - qdel(src) - return - else - user << "You need more welding fuel to complete this task." - return diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index 043116087bf..9971ca56c4b 100644 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -58,38 +58,38 @@ var/sortTag = 0 - attack_self(mob/user as mob) - if(wrapped) //sometimes items can disappear. For example, bombs. --rastaf0 - wrapped.loc = user.loc - if(ishuman(user)) - user.put_in_hands(wrapped) - else - wrapped.loc = get_turf(src) +/obj/item/smallDelivery/attack_self(mob/user as mob) + if(wrapped) //sometimes items can disappear. For example, bombs. --rastaf0 + wrapped.loc = user.loc + if(ishuman(user)) + user.put_in_hands(wrapped) + else + wrapped.loc = get_turf(src) - qdel(src) + qdel(src) - attackby(obj/item/W as obj, mob/user as mob) - if(istype(W, /obj/item/device/destTagger)) - var/obj/item/device/destTagger/O = W +/obj/item/smallDelivery/attackby(obj/item/W as obj, mob/user as mob) + if(istype(W, /obj/item/device/destTagger)) + var/obj/item/device/destTagger/O = W - if(sortTag != O.currTag) - var/tag = uppertext(TAGGERLOCATIONS[O.currTag]) - user << "\blue *[tag]*" - sortTag = O.currTag - playsound(loc, 'sound/machines/twobeep.ogg', 100, 1) + if(sortTag != O.currTag) + var/tag = uppertext(TAGGERLOCATIONS[O.currTag]) + user << "\blue *[tag]*" + sortTag = O.currTag + playsound(loc, 'sound/machines/twobeep.ogg', 100, 1) - else if(istype(W, /obj/item/weapon/pen)) - var/str = copytext(sanitize(input(user,"Label text?","Set label","")),1,MAX_NAME_LEN) - if(!str || !length(str)) - user << "Invalid text." - return - user.visible_message("[user] labels [src] as [str].") - name = "[name] ([str])" + else if(istype(W, /obj/item/weapon/pen)) + var/str = copytext(sanitize(input(user,"Label text?","Set label","")),1,MAX_NAME_LEN) + if(!str || !length(str)) + user << "Invalid text." + return + user.visible_message("[user] labels [src] as [str].") + name = "[name] ([str])" - else if(istype(W, /obj/item/weapon/wrapping_paper)) - icon_state = "giftcrate[wrapped.w_class]" - user.visible_message("[user] wraps the package in festive paper!") + else if(istype(W, /obj/item/weapon/wrapping_paper)) + icon_state = "giftcrate[wrapped.w_class]" + user.visible_message("[user] wraps the package in festive paper!") /obj/item/weapon/packageWrap @@ -101,71 +101,71 @@ var/amount = 25.0 - afterattack(var/obj/target as obj, mob/user as mob, proximity) - if(!proximity) return - if(!istype(target)) //this really shouldn't be necessary (but it is). -Pete - return - if(istype(target, /obj/item/smallDelivery) || istype(target,/obj/structure/bigDelivery) \ - || istype(target, /obj/item/weapon/evidencebag) || istype(target, /obj/structure/closet/body_bag)) - return - if(target.anchored) - return - if(target in user) - return - - user.attack_log += text("\[[time_stamp()]\] Has used [name] on \ref[target]") - - if(istype(target, /obj/item) && !(istype(target, /obj/item/weapon/storage) && !istype(target,/obj/item/weapon/storage/box))) - var/obj/item/O = target - if(amount > 1) - var/obj/item/smallDelivery/P = new /obj/item/smallDelivery(get_turf(O.loc)) //Aaannd wrap it up! - if(!istype(O.loc, /turf)) - if(user.client) - user.client.screen -= O - P.wrapped = O - O.loc = P - var/i = round(O.w_class) - if(i in list(1,2,3,4,5)) - P.icon_state = "deliverycrate[i]" - P.w_class = i - P.add_fingerprint(usr) - O.add_fingerprint(usr) - add_fingerprint(usr) - amount -= 1 - else if(istype(target, /obj/structure/closet/crate)) - var/obj/structure/closet/crate/O = target - if(amount > 3 && !O.opened) - var/obj/structure/bigDelivery/P = new /obj/structure/bigDelivery(get_turf(O.loc)) - P.icon_state = "deliverycrate" - P.wrapped = O - O.loc = P - amount -= 3 - else if(amount < 3) - user << "You need more paper." - else if(istype (target, /obj/structure/closet)) - var/obj/structure/closet/O = target - if(amount > 3 && !O.opened) - var/obj/structure/bigDelivery/P = new /obj/structure/bigDelivery(get_turf(O.loc)) - P.wrapped = O - O.welded = 1 - O.loc = P - amount -= 3 - else if(amount < 3) - user << "You need more paper." - else - user << "The object you are trying to wrap is unsuitable for the sorting machinery." - if(amount <= 0) - new /obj/item/weapon/c_tube( loc ) - qdel(src) - return +/obj/item/weapon/packageWrap/afterattack(var/obj/target as obj, mob/user as mob, proximity) + if(!proximity) return + if(!istype(target)) //this really shouldn't be necessary (but it is). -Pete + return + if(istype(target, /obj/item/smallDelivery) || istype(target,/obj/structure/bigDelivery) \ + || istype(target, /obj/item/weapon/evidencebag) || istype(target, /obj/structure/closet/body_bag)) + return + if(target.anchored) + return + if(target in user) return + user.attack_log += text("\[[time_stamp()]\] Has used [name] on \ref[target]") - examine() - if(src in usr) - usr << "There are [amount] units of package wrap left." - ..() + if(istype(target, /obj/item) && !(istype(target, /obj/item/weapon/storage) && !istype(target,/obj/item/weapon/storage/box))) + var/obj/item/O = target + if(amount > 1) + var/obj/item/smallDelivery/P = new /obj/item/smallDelivery(get_turf(O.loc)) //Aaannd wrap it up! + if(!istype(O.loc, /turf)) + if(user.client) + user.client.screen -= O + P.wrapped = O + O.loc = P + var/i = round(O.w_class) + if(i in list(1,2,3,4,5)) + P.icon_state = "deliverycrate[i]" + P.w_class = i + P.add_fingerprint(usr) + O.add_fingerprint(usr) + add_fingerprint(usr) + amount -= 1 + else if(istype(target, /obj/structure/closet/crate)) + var/obj/structure/closet/crate/O = target + if(amount > 3 && !O.opened) + var/obj/structure/bigDelivery/P = new /obj/structure/bigDelivery(get_turf(O.loc)) + P.icon_state = "deliverycrate" + P.wrapped = O + O.loc = P + amount -= 3 + else if(amount < 3) + user << "You need more paper." + else if(istype (target, /obj/structure/closet)) + var/obj/structure/closet/O = target + if(amount > 3 && !O.opened) + var/obj/structure/bigDelivery/P = new /obj/structure/bigDelivery(get_turf(O.loc)) + P.wrapped = O + O.welded = 1 + O.loc = P + amount -= 3 + else if(amount < 3) + user << "You need more paper." + else + user << "The object you are trying to wrap is unsuitable for the sorting machinery." + if(amount <= 0) + new /obj/item/weapon/c_tube( loc ) + qdel(src) return + return + + +/obj/item/weapon/packageWrap/examine() + if(src in usr) + usr << "There are [amount] units of package wrap left." + ..() + return /obj/item/device/destTagger @@ -184,31 +184,31 @@ flags = CONDUCT slot_flags = SLOT_BELT - proc/openwindow(mob/user as mob) - var/dat = "

    TagMaster 2.2

    " +/obj/item/device/destTagger/proc/openwindow(mob/user as mob) + var/dat = "

    TagMaster 2.2

    " - dat += "" - for (var/i = 1, i <= TAGGERLOCATIONS.len, i++) - dat += "" + dat += "
    [TAGGERLOCATIONS[i]]
    " + for (var/i = 1, i <= TAGGERLOCATIONS.len, i++) + dat += "" - if(i%4==0) - dat += "" + if(i%4==0) + dat += "" - dat += "
    [TAGGERLOCATIONS[i]]

    Current Selection: [currTag ? TAGGERLOCATIONS[currTag] : "None"]
    " + dat += "
    Current Selection: [currTag ? TAGGERLOCATIONS[currTag] : "None"]
    " - user << browse(dat, "window=destTagScreen;size=450x350") - onclose(user, "destTagScreen") + user << browse(dat, "window=destTagScreen;size=450x350") + onclose(user, "destTagScreen") - attack_self(mob/user as mob) - openwindow(user) - return +/obj/item/device/destTagger/attack_self(mob/user as mob) + openwindow(user) + return - Topic(href, href_list) - add_fingerprint(usr) - if(href_list["nextTag"]) - var/n = text2num(href_list["nextTag"]) - currTag = n - openwindow(usr) +/obj/item/device/destTagger/Topic(href, href_list) + add_fingerprint(usr) + if(href_list["nextTag"]) + var/n = text2num(href_list["nextTag"]) + currTag = n + openwindow(usr) /obj/machinery/disposal/deliveryChute name = "delivery chute" diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index 518c716c35a..dca8737f26c 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -1,5 +1,3 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33 - /*************************************************************** ** Design Datums ** ** All the data for building stuff and tracking reliability. ** @@ -64,546 +62,6 @@ datum/design/proc/CalcReliability(var/list/temp_techs) return -///////////////////Computer Boards/////////////////////////////////// - -datum/design/seccamera - name = "Computer Design (Security)" - desc = "Allows for the construction of circuit boards used to build security camera computers." - id = "seccamera" - req_tech = list("programming" = 2) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/security - -datum/design/aicore - name = "AI Design (AI Core)" - desc = "Allows for the construction of circuit boards used to build new AI cores." - id = "aicore" - req_tech = list("programming" = 4, "biotech" = 3) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/aicore - -datum/design/aiupload - name = "Computer Design (AI Upload)" - desc = "Allows for the construction of circuit boards used to build an AI Upload Console." - id = "aiupload" - req_tech = list("programming" = 4) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/aiupload - -datum/design/borgupload - name = "Computer Design (Cyborg Upload)" - desc = "Allows for the construction of circuit boards used to build a Cyborg Upload Console." - id = "borgupload" - req_tech = list("programming" = 4) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/borgupload - -datum/design/med_data - name = "Computer Design (Medical Records)" - desc = "Allows for the construction of circuit boards used to build a medical records console." - id = "med_data" - req_tech = list("programming" = 2) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/med_data - -datum/design/operating - name = "Computer Design (Operating Computer)" - desc = "Allows for the construction of circuit boards used to build an operating computer console." - id = "operating" - req_tech = list("programming" = 2, "biotech" = 2) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/operating - -datum/design/pandemic - name = "Computer Design (PanD.E.M.I.C. 2200)" - desc = "Allows for the construction of circuit boards used to build a PanD.E.M.I.C. 2200 console." - id = "pandemic" - req_tech = list("programming" = 2, "biotech" = 2) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/pandemic - -datum/design/scan_console - name = "Computer Design (DNA Machine)" - desc = "Allows for the construction of circuit boards used to build a new DNA scanning console." - id = "scan_console" - req_tech = list("programming" = 2, "biotech" = 3) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/scan_consolenew - -datum/design/comconsole - name = "Computer Design (Communications)" - desc = "Allows for the construction of circuit boards used to build a communications console." - id = "comconsole" - req_tech = list("programming" = 2, "magnets" = 2) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/communications - -datum/design/idcardconsole - name = "Computer Design (ID Console)" - desc = "Allows for the construction of circuit boards used to build an ID computer." - id = "idcardconsole" - req_tech = list("programming" = 2) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/card - -datum/design/crewconsole - name = "Computer Design (Crew monitoring computer)" - desc = "Allows for the construction of circuit boards used to build a Crew monitoring computer." - id = "crewconsole" - req_tech = list("programming" = 3, "magnets" = 2, "biotech" = 2) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/crew - -datum/design/teleconsole - name = "Computer Design (Teleporter Console)" - desc = "Allows for the construction of circuit boards used to build a teleporter control console." - id = "teleconsole" - req_tech = list("programming" = 3, "bluespace" = 2) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/teleporter - -datum/design/secdata - name = "Computer Design (Security Records Console)" - desc = "Allows for the construction of circuit boards used to build a security records console." - id = "secdata" - req_tech = list("programming" = 2) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/secure_data - -datum/design/atmosalerts - name = "Computer Design (Atmosphere Alert)" - desc = "Allows for the construction of circuit boards used to build an atmosphere alert console.." - id = "atmosalerts" - req_tech = list("programming" = 2) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/atmos_alert - -datum/design/air_management - name = "Computer Design (Atmospheric Monitor)" - desc = "Allows for the construction of circuit boards used to build an Atmospheric Monitor." - id = "air_management" - req_tech = list("programming" = 2) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/air_management - -datum/design/robocontrol - name = "Computer Design (Robotics Control Console)" - desc = "Allows for the construction of circuit boards used to build a Robotics Control console." - id = "robocontrol" - req_tech = list("programming" = 4) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/robotics - -datum/design/clonecontrol - name = "Computer Design (Cloning Machine Console)" - desc = "Allows for the construction of circuit boards used to build a new Cloning Machine console." - id = "clonecontrol" - req_tech = list("programming" = 3, "biotech" = 3) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/cloning - -datum/design/clonepod - name = "Machine Design (Clone Pod)" - desc = "Allows for the construction of circuit boards used to build a Cloning Pod." - id = "clonepod" - req_tech = list("programming" = 3, "biotech" = 3) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/clonepod - -datum/design/clonescanner - name = "Machine Design (Cloning Scanner)" - desc = "Allows for the construction of circuit boards used to build a Cloning Scanner." - id = "clonescanner" - req_tech = list("programming" = 3, "biotech" = 3) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/clonescanner - -datum/design/arcadebattle - name = "Computer Design (Battle Arcade Machine)" - desc = "Allows for the construction of circuit boards used to build a new arcade machine." - id = "arcademachine" - req_tech = list("programming" = 1) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/arcade/battle - -datum/design/orion_trail - name = "Computer Design (Orion Trail Arcade Machine)" - desc = "Allows for the construction of circuit boards used to build a new Orion Trail machine." - id = "arcademachine" - req_tech = list("programming" = 2) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/arcade/orion_trail - -datum/design/orion_trail - name = "Computer Design (Slot Machine)" - desc = "Allows for the construction of circuit boards used to build a new slot machine." - id = "slotmachine" - req_tech = list("programming" = 2) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/slot_machine - -datum/design/powermonitor - name = "Computer Design (Power Monitor)" - desc = "Allows for the construction of circuit boards used to build a new power monitor." - id = "powermonitor" - req_tech = list("programming" = 2) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/powermonitor - -datum/design/solarcontrol - name = "Computer Design (Solar Control)" - desc = "Allows for the construction of circuit boards used to build a solar control console." - id = "solarcontrol" - req_tech = list("programming" = 2, "powerstorage" = 2) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/solar_control - -datum/design/prisonmanage - name = "Computer Design (Prisoner Management Console)" - desc = "Allows for the construction of circuit boards used to build a prisoner management console." - id = "prisonmanage" - req_tech = list("programming" = 2) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/prisoner - -datum/design/mechacontrol - name = "Computer Design (Exosuit Control Console)" - desc = "Allows for the construction of circuit boards used to build an exosuit control console." - id = "mechacontrol" - req_tech = list("programming" = 3) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/mecha_control - -datum/design/mechapower - name = "Computer Design (Mech Bay Power Control Console)" - desc = "Allows for the construction of circuit boards used to build a mech bay power control console." - id = "mechapower" - req_tech = list("programming" = 2, "powerstorage" = 3) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/mech_bay_power_console - -datum/design/rdconsole - name = "Computer Design (R&D Console)" - desc = "Allows for the construction of circuit boards used to build a new R&D console." - id = "rdconsole" - req_tech = list("programming" = 4) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/rdconsole - -datum/design/ordercomp - name = "Computer Design (Supply ordering console)" - desc = "Allows for the construction of circuit boards used to build a Supply ordering console." - id = "ordercomp" - req_tech = list("programming" = 2) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/ordercomp - -datum/design/supplycomp - name = "Computer Design (Supply shuttle console)" - desc = "Allows for the construction of circuit boards used to build a Supply shuttle console." - id = "supplycomp" - req_tech = list("programming" = 3) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/supplycomp - -datum/design/mining - name = "Computer Design (Outpost Status Display)" - desc = "Allows for the construction of circuit boards used to build an outpost status display console." - id = "mining" - req_tech = list("programming" = 2) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/mining - -datum/design/comm_monitor - name = "Computer Design (Telecommunications Monitoring Console)" - desc = "Allows for the construction of circuit boards used to build a telecommunications monitor." - id = "comm_monitor" - req_tech = list("programming" = 3) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/comm_monitor - -datum/design/comm_server - name = "Computer Design (Telecommunications Server Monitoring Console)" - desc = "Allows for the construction of circuit boards used to build a telecommunication server browser and monitor." - id = "comm_server" - req_tech = list("programming" = 3) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/comm_server - -datum/design/message_monitor - name = "Computer Design (Messaging Monitor Console)" - desc = "Allows for the construction of circuit boards used to build a messaging monitor console." - id = "message_monitor" - req_tech = list("programming" = 5) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/message_monitor - -datum/design/comm_traffic - name = "Computer Design (Telecommunications Traffic Control Console)" - desc = "Allows for the construction of circuit boards used to build a telecommunications traffic control console." - id = "comm_traffic" - req_tech = list("programming" = 3) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/comm_traffic - -datum/design/telesci_console - name = "Computer Design (Telepad Control Console Board)" - desc = "Allows for the construction of circuit boards used to build a telescience console." - id = "telesci_console" - req_tech = list("programming" = 3, "bluespace" = 2) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/telesci_console - -datum/design/aifixer - name = "Computer Design (AI Integrity Restorer)" - desc = "Allows for the construction of circuit boards used to build an AI Integrity Restorer." - id = "aifixer" - req_tech = list("programming" = 3, "biotech" = 2) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/aifixer - -/////////////////////////////////// -//////////AI Module Disks////////// -/////////////////////////////////// -datum/design/safeguard_module - name = "Module Design (Safeguard)" - desc = "Allows for the construction of a Safeguard AI Module." - id = "safeguard_module" - req_tech = list("programming" = 3, "materials" = 4) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20, "$gold" = 100) - build_path = /obj/item/weapon/aiModule/supplied/safeguard - -datum/design/onehuman_module - name = "Module Design (OneHuman)" - desc = "Allows for the construction of a OneHuman AI Module." - id = "onehuman_module" - req_tech = list("programming" = 4, "materials" = 6) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20, "$diamond" = 100) - build_path = /obj/item/weapon/aiModule/zeroth/oneHuman - -datum/design/protectstation_module - name = "Module Design (ProtectStation)" - desc = "Allows for the construction of a ProtectStation AI Module." - id = "protectstation_module" - req_tech = list("programming" = 3, "materials" = 6) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20, "$gold" = 100) - build_path = /obj/item/weapon/aiModule/supplied/protectStation - -/*datum/design/notele_module - name = "Module Design (TeleporterOffline Module)" - desc = "Allows for the construction of a TeleporterOffline AI Module." - id = "notele_module" - req_tech = list("programming" = 3) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20, "$gold" = 100) - build_path = /obj/item/weapon/aiModule/teleporterOffline"*/ - -datum/design/quarantine_module - name = "Module Design (Quarantine)" - desc = "Allows for the construction of a Quarantine AI Module." - id = "quarantine_module" - req_tech = list("programming" = 3, "biotech" = 2, "materials" = 4) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20, "$gold" = 100) - build_path = /obj/item/weapon/aiModule/supplied/quarantine - -datum/design/oxygen_module - name = "Module Design (OxygenIsToxicToHumans)" - desc = "Allows for the construction of a Safeguard AI Module." - id = "oxygen_module" - req_tech = list("programming" = 3, "biotech" = 2, "materials" = 4) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20, "$gold" = 100) - build_path = /obj/item/weapon/aiModule/supplied/oxygen - -datum/design/freeform_module - name = "Module Design (Freeform)" - desc = "Allows for the construction of a Freeform AI Module." - id = "freeform_module" - req_tech = list("programming" = 4, "materials" = 4) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20, "$gold" = 100) - build_path = /obj/item/weapon/aiModule/supplied/freeform - -datum/design/reset_module - name = "Module Design (Reset)" - desc = "Allows for the construction of a Reset AI Module." - id = "reset_module" - req_tech = list("programming" = 3, "materials" = 6) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20, "$gold" = 100) - build_path = /obj/item/weapon/aiModule/reset - -datum/design/purge_module - name = "Module Design (Purge)" - desc = "Allows for the construction of a Purge AI Module." - id = "purge_module" - req_tech = list("programming" = 4, "materials" = 6) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20, "$diamond" = 100) - build_path = /obj/item/weapon/aiModule/reset/purge - -datum/design/freeformcore_module - name = "Core Module Design (Freeform)" - desc = "Allows for the construction of a Freeform AI Core Module." - id = "freeformcore_module" - req_tech = list("programming" = 4, "materials" = 6) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20, "$diamond" = 100) - build_path = /obj/item/weapon/aiModule/core/freeformcore - -datum/design/asimov - name = "Core Module Design (Asimov)" - desc = "Allows for the construction of a Asimov AI Core Module." - id = "asimov_module" - req_tech = list("programming" = 3, "materials" = 6) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20, "$diamond" = 100) - build_path = /obj/item/weapon/aiModule/core/full/asimov - -datum/design/paladin_module - name = "Core Module Design (P.A.L.A.D.I.N.)" - desc = "Allows for the construction of a P.A.L.A.D.I.N. AI Core Module." - id = "paladin_module" - req_tech = list("programming" = 4, "materials" = 6) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20, "$diamond" = 100) - build_path = /obj/item/weapon/aiModule/core/full/paladin - -datum/design/tyrant_module - name = "Core Module Design (T.Y.R.A.N.T.)" - desc = "Allows for the construction of a T.Y.R.A.N.T. AI Module." - id = "tyrant_module" - req_tech = list("programming" = 4, "syndicate" = 2, "materials" = 6) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20, "$diamond" = 100) - build_path = /obj/item/weapon/aiModule/core/full/tyrant - -datum/design/corporate_module - name = "Core Module Design (Corporate)" - desc = "Allows for the construction of a Corporate AI Core Module." - id = "corporate_module" - req_tech = list("programming" = 4, "materials" = 6) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20, "$diamond" = 100) - build_path = /obj/item/weapon/aiModule/core/full/corp - -datum/design/custom_module - name = "Core Module Design (Custom)" - desc = "Allows for the construction of a Custom AI Core Module." - id = "custom_module" - req_tech = list("programming" = 4, "materials" = 6) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20, "$diamond" = 100) - build_path = /obj/item/weapon/aiModule/core/full/custom - - -/////////////////////////////////// -/////Subspace Telecomms//////////// -/////////////////////////////////// -datum/design/subspace_receiver - name = "Machine Design (Subspace Receiver)" - desc = "Allows for the construction of Subspace Receiver equipment." - id = "s-receiver" - req_tech = list("programming" = 2, "engineering" = 2, "bluespace" = 1) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/telecomms/receiver - -datum/design/telecomms_bus - name = "Machine Design (Bus Mainframe)" - desc = "Allows for the construction of Telecommunications Bus Mainframes." - id = "s-bus" - req_tech = list("programming" = 2, "engineering" = 2) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/telecomms/bus - -datum/design/telecomms_hub - name = "Machine Design (Hub Mainframe)" - desc = "Allows for the construction of Telecommunications Hub Mainframes." - id = "s-hub" - req_tech = list("programming" = 2, "engineering" = 2) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/telecomms/hub - -datum/design/telecomms_relay - name = "Machine Design (Relay Mainframe)" - desc = "Allows for the construction of Telecommunications Relay Mainframes." - id = "s-relay" - req_tech = list("programming" = 2, "engineering" = 2, "bluespace" = 2) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/telecomms/relay - -datum/design/telecomms_processor - name = "Machine Design (Processor Unit)" - desc = "Allows for the construction of Telecommunications Processor equipment." - id = "s-processor" - req_tech = list("programming" = 2, "engineering" = 2) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/telecomms/processor - -datum/design/telecomms_server - name = "Machine Design (Server Mainframe)" - desc = "Allows for the construction of Telecommunications Servers." - id = "s-server" - req_tech = list("programming" = 2, "engineering" = 2) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/telecomms/server - -datum/design/subspace_broadcaster - name = "Machine Design (Subspace Broadcaster)" - desc = "Allows for the construction of Subspace Broadcasting equipment." - id = "s-broadcaster" - req_tech = list("programming" = 2, "engineering" = 2, "bluespace" = 1) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/telecomms/broadcaster - /////////////////////////////////// /////Non-Board Computer Stuff////// /////////////////////////////////// @@ -626,302 +84,6 @@ datum/design/paicard materials = list("$glass" = 500, "$metal" = 500) build_path = /obj/item/device/paicard -/////////////////////////////////// -//////////Mecha Module Disks/////// -/////////////////////////////////// - -datum/design/ripley_main - name = "Exosuit Design (APLU \"Ripley\" Central Control module)" - desc = "Allows for the construction of a \"Ripley\" Central Control module." - id = "ripley_main" - req_tech = list("programming" = 3) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/mecha/ripley/main - -datum/design/ripley_peri - name = "Exosuit Design (APLU \"Ripley\" Peripherals Control module)" - desc = "Allows for the construction of a \"Ripley\" Peripheral Control module." - id = "ripley_peri" - req_tech = list("programming" = 3) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/mecha/ripley/peripherals - -datum/design/odysseus_main - name = "Exosuit Design (\"Odysseus\" Central Control module)" - desc = "Allows for the construction of a \"Odysseus\" Central Control module." - id = "odysseus_main" - req_tech = list("programming" = 3,"biotech" = 2) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/mecha/odysseus/main - -datum/design/odysseus_peri - name = "Exosuit Design (\"Odysseus\" Peripherals Control module)" - desc = "Allows for the construction of a \"Odysseus\" Peripheral Control module." - id = "odysseus_peri" - req_tech = list("programming" = 3,"biotech" = 2) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/mecha/odysseus/peripherals - -datum/design/gygax_main - name = "Exosuit Design (\"Gygax\" Central Control module)" - desc = "Allows for the construction of a \"Gygax\" Central Control module." - id = "gygax_main" - req_tech = list("programming" = 4) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/mecha/gygax/main - -datum/design/gygax_peri - name = "Exosuit Design (\"Gygax\" Peripherals Control module)" - desc = "Allows for the construction of a \"Gygax\" Peripheral Control module." - id = "gygax_peri" - req_tech = list("programming" = 4) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/mecha/gygax/peripherals - -datum/design/gygax_targ - name = "Exosuit Design (\"Gygax\" Weapons & Targeting Control module)" - desc = "Allows for the construction of a \"Gygax\" Weapons & Targeting Control module." - id = "gygax_targ" - req_tech = list("programming" = 4, "combat" = 2) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/mecha/gygax/targeting - -datum/design/durand_main - name = "Exosuit Design (\"Durand\" Central Control module)" - desc = "Allows for the construction of a \"Durand\" Central Control module." - id = "durand_main" - req_tech = list("programming" = 4) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/mecha/durand/main - -datum/design/durand_peri - name = "Exosuit Design (\"Durand\" Peripherals Control module)" - desc = "Allows for the construction of a \"Durand\" Peripheral Control module." - id = "durand_peri" - req_tech = list("programming" = 4) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/mecha/durand/peripherals - -datum/design/durand_targ - name = "Exosuit Design (\"Durand\" Weapons & Targeting Control module)" - desc = "Allows for the construction of a \"Durand\" Weapons & Targeting Control module." - id = "durand_targ" - req_tech = list("programming" = 4, "combat" = 2) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/mecha/durand/targeting - -datum/design/honker_main - name = "Exosuit Design (\"H.O.N.K\" Central Control module)" - desc = "Allows for the construction of a \"H.O.N.K\" Central Control module." - id = "honker_main" - req_tech = list("programming" = 3) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/mecha/honker/main - -datum/design/honker_peri - name = "Exosuit Design (\"H.O.N.K\" Peripherals Control module)" - desc = "Allows for the construction of a \"H.O.N.K\" Peripheral Control module." - id = "honker_peri" - req_tech = list("programming" = 3) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/mecha/honker/peripherals - -datum/design/honker_targ - name = "Exosuit Design (\"H.O.N.K\" Weapons & Targeting Control module)" - desc = "Allows for the construction of a \"H.O.N.K\" Weapons & Targeting Control module." - id = "honker_targ" - req_tech = list("programming" = 3) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/mecha/honker/targeting - -//////////////////////////////////////// -/////////// Mecha Equpment ///////////// -//////////////////////////////////////// - -datum/design/mech_scattershot - name = "Exosuit Weapon Design (LBX AC 10 \"Scattershot\")" - desc = "Allows for the construction of LBX AC 10." - id = "mech_scattershot" - build_type = MECHFAB - req_tech = list("combat" = 4) - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot - category = "Exosuit Equipment" - -datum/design/mech_carbine - name = "Exosuit Weapon Design (FNX-99 \"Hades\" Carbine)" - desc = "Allows for the construction of FNX-99 \"Hades\" Carbine." - id = "mech_carbine" - build_type = MECHFAB - req_tech = list("combat" = 5, "materials" = 4) - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/carbine - category = "Exosuit Equipment" - -datum/design/mech_ion - name = "Exosuit Weapon Design (MKIV Ion Heavy Cannon)" - desc = "Allows for the construction of MKIV Ion Heavy Cannon." - id = "mech_ion" - build_type = MECHFAB - req_tech = list("combat" = 6, "magnets" = 5, "materials" = 5) - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/ion - category = "Exosuit Equipment" - -datum/design/mech_laser - name = "Exosuit Weapon Design (CH-PS \"Immolator\" Laser)" - desc = "Allows for the construction of CH-PS Laser." - id = "mech_laser" - build_type = MECHFAB - req_tech = list("combat" = 3, "magnets" = 3) - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser - category = "Exosuit Equipment" - -datum/design/mech_laser_heavy - name = "Exosuit Weapon Design (CH-LC \"Solaris\" Laser Cannon)" - desc = "Allows for the construction of CH-LC Laser Cannon." - id = "mech_laser_heavy" - build_type = MECHFAB - req_tech = list("combat" = 4, "magnets" = 4) - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy - category = "Exosuit Equipment" - -datum/design/mech_grenade_launcher - name = "Exosuit Weapon Design (SGL-6 Grenade Launcher)" - desc = "Allows for the construction of SGL-6 Grenade Launcher." - id = "mech_grenade_launcher" - build_type = MECHFAB - req_tech = list("combat" = 3) - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang - category = "Exosuit Equipment" - -datum/design/mech_missile_rack - name = "Exosuit Weapon Design (SRM-8 Missile Rack)" - desc = "Allows for the construction of SRM-8 Missile Rack." - id = "mech_missile_rack" - build_type = MECHFAB - req_tech = list("combat" = 6, "materials" = 6) - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack - category = "Exosuit Equipment" - -datum/design/clusterbang_launcher - name = "Exosuit Module Design (SOB-3 Clusterbang Launcher)" - desc = "A weapon that violates the Geneva Convention at 3 rounds per minute" - id = "clusterbang_launcher" - build_type = MECHFAB - req_tech = list("combat"= 5, "materials" = 5, "syndicate" = 3) - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/clusterbang - category = "Exosuit Equipment" - -datum/design/mech_wormhole_gen - name = "Exosuit Module Design (Localized Wormhole Generator)" - desc = "An exosuit module that allows generating of small quasi-stable wormholes." - id = "mech_wormhole_gen" - build_type = MECHFAB - req_tech = list("bluespace" = 3, "magnets" = 2) - build_path = /obj/item/mecha_parts/mecha_equipment/wormhole_generator - category = "Exosuit Equipment" - -datum/design/mech_teleporter - name = "Exosuit Module Design (Teleporter Module)" - desc = "An exosuit module that allows exosuits to teleport to any position in view." - id = "mech_teleporter" - build_type = MECHFAB - req_tech = list("bluespace" = 10, "magnets" = 5) - build_path = /obj/item/mecha_parts/mecha_equipment/teleporter - category = "Exosuit Equipment" - -datum/design/mech_rcd - name = "Exosuit Module Design (RCD Module)" - desc = "An exosuit-mounted Rapid Construction Device." - id = "mech_rcd" - build_type = MECHFAB - req_tech = list("materials" = 4, "bluespace" = 3, "magnets" = 4, "powerstorage"=4, "engineering" = 4) - build_path = /obj/item/mecha_parts/mecha_equipment/tool/rcd - category = "Exosuit Equipment" - -datum/design/mech_gravcatapult - name = "Exosuit Module Design (Gravitational Catapult Module)" - desc = "An exosuit mounted Gravitational Catapult." - id = "mech_gravcatapult" - build_type = MECHFAB - req_tech = list("bluespace" = 2, "magnets" = 3, "engineering" = 3) - build_path = /obj/item/mecha_parts/mecha_equipment/gravcatapult - category = "Exosuit Equipment" - -datum/design/mech_repair_droid - name = "Exosuit Module Design (Repair Droid Module)" - desc = "Automated Repair Droid. BEEP BOOP" - id = "mech_repair_droid" - build_type = MECHFAB - req_tech = list("magnets" = 3, "programming" = 3, "engineering" = 3) - build_path = /obj/item/mecha_parts/mecha_equipment/repair_droid - category = "Exosuit Equipment" - -datum/design/mech_energy_relay - name = "Exosuit Module Design (Tesla Energy Relay)" - desc = "Tesla Energy Relay" - id = "mech_energy_relay" - build_type = MECHFAB - req_tech = list("magnets" = 4, "powerstorage" = 3) - build_path = /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay - category = "Exosuit Equipment" - -datum/design/mech_ccw_armor - name = "Exosuit Module Design(Reactive Armor Booster Module)" - desc = "Exosuit-mounted armor booster." - id = "mech_ccw_armor" - build_type = MECHFAB - req_tech = list("materials" = 5, "combat" = 4) - build_path = /obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster - category = "Exosuit Equipment" - -datum/design/mech_proj_armor - name = "Exosuit Module Design(Reflective Armor Booster Module)" - desc = "Exosuit-mounted armor booster." - id = "mech_proj_armor" - build_type = MECHFAB - req_tech = list("materials" = 5, "combat" = 5, "engineering"=3) - build_path = /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster - category = "Exosuit Equipment" - -datum/design/mech_syringe_gun - name = "Exosuit Module Design(Syringe Gun)" - desc = "Exosuit-mounted syringe gun and chemical synthesizer." - id = "mech_syringe_gun" - build_type = MECHFAB - req_tech = list("materials" = 3, "biotech"=4, "magnets"=4, "programming"=3) - build_path = /obj/item/mecha_parts/mecha_equipment/tool/syringe_gun - category = "Exosuit Equipment" - -datum/design/mech_diamond_drill - name = "Exosuit Module Design (Diamond Mining Drill)" - desc = "An upgraded version of the standard drill." - id = "mech_diamond_drill" - build_type = MECHFAB - req_tech = list("materials" = 4, "engineering" = 3) - build_path = /obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill - category = "Exosuit Equipment" - -datum/design/mech_generator_nuclear - name = "Exosuit Module Design (ExoNuclear Reactor)" - desc = "Compact nuclear reactor module." - id = "mech_generator_nuclear" - build_type = MECHFAB - req_tech = list("powerstorage"= 3, "engineering" = 3, "materials" = 3) - build_path = /obj/item/mecha_parts/mecha_equipment/generator/nuclear - category = "Exosuit Equipment" - //////////////////////////////////////// //////////Disk Construction Disks/////// @@ -944,801 +106,6 @@ datum/design/tech_disk materials = list("$metal" = 30, "$glass" = 10) build_path = /obj/item/weapon/disk/tech_disk -//////////////////////////////////////// -/////////////Stock Parts//////////////// -//////////////////////////////////////// - -datum/design/RPED - name = "Rapid Part Exchange Device" - desc = "Special mechanical module made to store, sort, and apply standard machine parts." - id = "rped" - req_tech = list("engineering" = 3, - "materials" = 3) - build_type = PROTOLATHE - materials = list("$metal" = 15000, "$glass" = 5000) //hardcore - build_path = /obj/item/weapon/storage/part_replacer - -datum/design/basic_capacitor - name = "Basic Capacitor" - desc = "A stock part used in the construction of various devices." - id = "basic_capacitor" - req_tech = list("powerstorage" = 1) - build_type = PROTOLATHE | AUTOLATHE - materials = list("$metal" = 50, "$glass" = 50) - build_path = /obj/item/weapon/stock_parts/capacitor - -datum/design/basic_scanning - name = "Basic Scanning Module" - desc = "A stock part used in the construction of various devices." - id = "basic_scanning" - req_tech = list("magnets" = 1) - build_type = PROTOLATHE | AUTOLATHE - materials = list("$metal" = 50, "$glass" = 20) - build_path = /obj/item/weapon/stock_parts/scanning_module - -datum/design/micro_mani - name = "Micro Manipulator" - desc = "A stock part used in the construction of various devices." - id = "micro_mani" - req_tech = list("materials" = 1, "programming" = 1) - build_type = PROTOLATHE | AUTOLATHE - materials = list("$metal" = 30) - build_path = /obj/item/weapon/stock_parts/manipulator - -datum/design/basic_micro_laser - name = "Basic Micro-Laser" - desc = "A stock part used in the construction of various devices." - id = "basic_micro_laser" - req_tech = list("magnets" = 1) - build_type = PROTOLATHE | AUTOLATHE - materials = list("$metal" = 10, "$glass" = 20) - build_path = /obj/item/weapon/stock_parts/micro_laser - -datum/design/basic_matter_bin - name = "Basic Matter Bin" - desc = "A stock part used in the construction of various devices." - id = "basic_matter_bin" - req_tech = list("materials" = 1) - build_type = PROTOLATHE | AUTOLATHE - materials = list("$metal" = 80) - build_path = /obj/item/weapon/stock_parts/matter_bin - -datum/design/adv_capacitor - name = "Advanced Capacitor" - desc = "A stock part used in the construction of various devices." - id = "adv_capacitor" - req_tech = list("powerstorage" = 3) - build_type = PROTOLATHE - materials = list("$metal" = 50, "$glass" = 50) - build_path = /obj/item/weapon/stock_parts/capacitor/adv - -datum/design/adv_scanning - name = "Advanced Scanning Module" - desc = "A stock part used in the construction of various devices." - id = "adv_scanning" - req_tech = list("magnets" = 3) - build_type = PROTOLATHE - materials = list("$metal" = 50, "$glass" = 20) - build_path = /obj/item/weapon/stock_parts/scanning_module/adv - -datum/design/nano_mani - name = "Nano Manipulator" - desc = "A stock part used in the construction of various devices." - id = "nano_mani" - req_tech = list("materials" = 3, "programming" = 2) - build_type = PROTOLATHE - materials = list("$metal" = 30) - build_path = /obj/item/weapon/stock_parts/manipulator/nano - -datum/design/high_micro_laser - name = "High-Power Micro-Laser" - desc = "A stock part used in the construction of various devices." - id = "high_micro_laser" - req_tech = list("magnets" = 3) - build_type = PROTOLATHE - materials = list("$metal" = 10, "$glass" = 20) - build_path = /obj/item/weapon/stock_parts/micro_laser/high - -datum/design/adv_matter_bin - name = "Advanced Matter Bin" - desc = "A stock part used in the construction of various devices." - id = "adv_matter_bin" - req_tech = list("materials" = 3) - build_type = PROTOLATHE - materials = list("$metal" = 80) - build_path = /obj/item/weapon/stock_parts/matter_bin/adv - -datum/design/super_capacitor - name = "Super Capacitor" - desc = "A stock part used in the construction of various devices." - id = "super_capacitor" - req_tech = list("powerstorage" = 5, "materials" = 4) - build_type = PROTOLATHE - reliability = 71 - materials = list("$metal" = 50, "$glass" = 50, "$gold" = 20) - build_path = /obj/item/weapon/stock_parts/capacitor/super - -datum/design/phasic_scanning - name = "Phasic Scanning Module" - desc = "A stock part used in the construction of various devices." - id = "phasic_scanning" - req_tech = list("magnets" = 5, "materials" = 3) - build_type = PROTOLATHE - materials = list("$metal" = 50, "$glass" = 20, "$silver" = 10) - reliability = 72 - build_path = /obj/item/weapon/stock_parts/scanning_module/phasic - -datum/design/pico_mani - name = "Pico Manipulator" - desc = "A stock part used in the construction of various devices." - id = "pico_mani" - req_tech = list("materials" = 5, "programming" = 2) - build_type = PROTOLATHE - materials = list("$metal" = 30) - reliability = 73 - build_path = /obj/item/weapon/stock_parts/manipulator/pico - -datum/design/ultra_micro_laser - name = "Ultra-High-Power Micro-Laser" - desc = "A stock part used in the construction of various devices." - id = "ultra_micro_laser" - req_tech = list("magnets" = 5, "materials" = 5) - build_type = PROTOLATHE - materials = list("$metal" = 10, "$glass" = 20, "$uranium" = 10) - reliability = 70 - build_path = /obj/item/weapon/stock_parts/micro_laser/ultra - -datum/design/super_matter_bin - name = "Super Matter Bin" - desc = "A stock part used in the construction of various devices." - id = "super_matter_bin" - req_tech = list("materials" = 5) - build_type = PROTOLATHE - materials = list("$metal" = 80) - reliability = 75 - build_path = /obj/item/weapon/stock_parts/matter_bin/super - - - -datum/design/telesci_gps - name = "GPS Device" - desc = "Little thingie that can track its position at all times." - id = "telesci_gps" - req_tech = list("materials" = 2, "magnets" = 3, "bluespace" = 3) - build_type = PROTOLATHE - materials = list("$metal" = 500, "$glass" = 1000) - build_path = /obj/item/device/gps - -datum/design/subspace_ansible - name = "Subspace Ansible" - desc = "A compact module capable of sensing extradimensional activity." - id = "s-ansible" - req_tech = list("programming" = 2, "magnets" = 2, "materials" = 2, "bluespace" = 1) - build_type = PROTOLATHE - materials = list("$metal" = 80, "$silver" = 20) - build_path = /obj/item/weapon/stock_parts/subspace/ansible - -datum/design/hyperwave_filter - name = "Hyperwave Filter" - desc = "A tiny device capable of filtering and converting super-intense radiowaves." - id = "s-filter" - req_tech = list("programming" = 2, "magnets" = 2) - build_type = PROTOLATHE - materials = list("$metal" = 40, "$silver" = 10) - build_path = /obj/item/weapon/stock_parts/subspace/filter - -datum/design/subspace_amplifier - name = "Subspace Amplifier" - desc = "A compact micro-machine capable of amplifying weak subspace transmissions." - id = "s-amplifier" - req_tech = list("programming" = 2, "magnets" = 2, "materials" = 2, "bluespace" = 1) - build_type = PROTOLATHE - materials = list("$metal" = 10, "$gold" = 30, "$uranium" = 15) - build_path = /obj/item/weapon/stock_parts/subspace/amplifier - -datum/design/subspace_treatment - name = "Subspace Treatment Disk" - desc = "A compact micro-machine capable of stretching out hyper-compressed radio waves." - id = "s-treatment" - req_tech = list("programming" = 2, "magnets" = 1, "materials" = 2, "bluespace" = 1) - build_type = PROTOLATHE - materials = list("$metal" = 10, "$silver" = 20) - build_path = /obj/item/weapon/stock_parts/subspace/treatment - -datum/design/subspace_analyzer - name = "Subspace Analyzer" - desc = "A sophisticated analyzer capable of analyzing cryptic subspace wavelengths." - id = "s-analyzer" - req_tech = list("programming" = 2, "magnets" = 2, "materials" = 2, "bluespace" = 1) - build_type = PROTOLATHE - materials = list("$metal" = 10, "$gold" = 15) - build_path = /obj/item/weapon/stock_parts/subspace/analyzer - -datum/design/subspace_crystal - name = "Ansible Crystal" - desc = "A sophisticated analyzer capable of analyzing cryptic subspace wavelengths." - id = "s-crystal" - req_tech = list("magnets" = 2, "materials" = 2, "bluespace" = 1) - build_type = PROTOLATHE - materials = list("$glass" = 1000, "$silver" = 20, "$gold" = 20) - build_path = /obj/item/weapon/stock_parts/subspace/crystal - -datum/design/subspace_transmitter - name = "Subspace Transmitter" - desc = "A large piece of equipment used to open a window into the subspace dimension." - id = "s-transmitter" - req_tech = list("magnets" = 3, "materials" = 3, "bluespace" = 2) - build_type = PROTOLATHE - materials = list("$glass" = 100, "$silver" = 10, "$uranium" = 15) - build_path = /obj/item/weapon/stock_parts/subspace/transmitter - -//////////////////////////////////////// -//////////////////Power///////////////// -//////////////////////////////////////// - -datum/design/basic_cell - name = "Basic Power Cell" - desc = "A basic power cell that holds 1000 units of energy." - id = "basic_cell" - req_tech = list("powerstorage" = 1) - build_type = PROTOLATHE | AUTOLATHE |MECHFAB - materials = list("$metal" = 700, "$glass" = 50) - build_path = /obj/item/weapon/stock_parts/cell - category = "Misc" - -datum/design/high_cell - name = "High-Capacity Power Cell" - desc = "A power cell that holds 10000 units of energy." - id = "high_cell" - req_tech = list("powerstorage" = 2) - build_type = PROTOLATHE | AUTOLATHE | MECHFAB - materials = list("$metal" = 700, "$glass" = 60) - build_path = /obj/item/weapon/stock_parts/cell/high - category = "Misc" - -datum/design/super_cell - name = "Super-Capacity Power Cell" - desc = "A power cell that holds 20000 units of energy." - id = "super_cell" - req_tech = list("powerstorage" = 3, "materials" = 2) - reliability = 75 - build_type = PROTOLATHE | MECHFAB - materials = list("$metal" = 700, "$glass" = 70) - build_path = /obj/item/weapon/stock_parts/cell/super - category = "Misc" - -datum/design/hyper_cell - name = "Hyper-Capacity Power Cell" - desc = "A power cell that holds 30000 units of energy." - id = "hyper_cell" - req_tech = list("powerstorage" = 5, "materials" = 4) - reliability = 70 - build_type = PROTOLATHE | MECHFAB - materials = list("$metal" = 400, "$gold" = 150, "$silver" = 150, "$glass" = 70) - build_path = /obj/item/weapon/stock_parts/cell/hyper - category = "Misc" - -datum/design/light_replacer - name = "Light Replacer" - desc = "A device to automatically replace lights. Refill with working lightbulbs." - id = "light_replacer" - req_tech = list("magnets" = 3, "materials" = 4) - build_type = PROTOLATHE - materials = list("$metal" = 1500, "$silver" = 150, "$glass" = 3000) - build_path = /obj/item/device/lightreplacer - -//////////////////////////////////////// -//////////////MISC Boards/////////////// -//////////////////////////////////////// - -datum/design/smes - name = "Machine Design (SMES Board)" - desc = "The circuit board for a SMES." - id = "smes" - req_tech = list("programming" = 4, "power" = 5, "engineering" = 4) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/smes - -datum/design/turbine_computer - name = "Computer Design (Power Turbine Console Board)" - desc = "The circuit board for a power turbine console." - id = "power_turbine_console" - req_tech = list("programming" = 4, "power" = 4, "engineering" = 4) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/turbine_computer - -datum/design/power_compressor - name = "Machine Design (Power Compressor Board)" - desc = "The circuit board for a power compressor." - id = "power_compressor" - req_tech = list("programming" = 4, "power" = 5, "engineering" = 4) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/power_compressor - -datum/design/power_turbine - name = "Machine Design (Power Turbine Board)" - desc = "The circuit board for a power turbine." - id = "power_turbine" - req_tech = list("programming" = 4, "power" = 4, "engineering" = 5) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/power_turbine - -datum/design/teleport_station - name = "Machine Design (Teleportation Station Board)" - desc = "The circuit board for a teleportation station." - id = "tele_station" - req_tech = list("programming" = 4, "bluespace" = 4, "engineering" = 4) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/teleporter_station - -datum/design/teleport_hub - name = "Machine Design (Teleportation Hub Board)" - desc = "The circuit board for a teleportation hub." - id = "tele_hub" - req_tech = list("programming" = 3, "bluespace" = 5, "materials" = 4, "engineering" = 5) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/teleporter_hub - -datum/design/telepad - name = "Machine Design (Telepad Board)" - desc = "The circuit board for a telescience telepad." - id = "telepad" - req_tech = list("programming" = 4, "bluespace" = 4, "materials" = 3, "engineering" = 3) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/telesci_pad - -datum/design/sleeper - name = "Machine Design (Sleeper Board)" - desc = "The circuit board for a sleeper." - id = "sleeper" - req_tech = list("programming" = 3, "biotech" = 2, "materials" = 3, "engineering" = 3) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/sleeper - -datum/design/cryotube - name = "Machine Design (Cryotube Board)" - desc = "The circuit board for a cryotube." - id = "cryotube" - req_tech = list("programming" = 4, "biotech" = 3, "engineering" = 4) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/cryo_tube - -datum/design/thermomachine - name = "Machine Design (Freezer/Heater Board)" - desc = "The circuit board for a freezer/heater." - id = "thermomachine" - req_tech = list("programming" = 3, "plasmatech" = 3) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/thermomachine - -datum/design/biogenerator - name = "Machine Design (Biogenerator Board)" - desc = "The circuit board for a biogenerator." - id = "biogenerator" - req_tech = list("programming" = 3, "biotech" = 2, "materials" = 3) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/biogenerator - -datum/design/hydroponics - name = "Machine Design (Hydroponics Tray Board)" - desc = "The circuit board for a hydroponics tray." - id = "hydro_tray" - req_tech = list("programming" = 1, "biotech" = 1) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/hydroponics - -datum/design/microwave - name = "Machine Design (Microwave Board)" - desc = "The circuit board for a microwave." - id = "microwave" - req_tech = list("programming" = 1) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/microwave - -datum/design/chem_dispenser - name = "Machine Design (Portable Chem Dispenser Board)" - desc = "The circuit board for a portable chem dispenser." - id = "chem_dispenser" - req_tech = list("programming" = 4, "biotech" = 3, "engineering" = 4, "materials" = 4, "plasmatech" = 3) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/chem_dispenser - -datum/design/destructive_analyzer - name = "Machine Design (Destructive Analyzer Board)" - desc = "The circuit board for a destructive analyzer." - id = "destructive_analyzer" - req_tech = list("programming" = 2, "magnets" = 2, "engineering" = 2) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/destructive_analyzer - -datum/design/protolathe - name = "Machine Design (Protolathe Board)" - desc = "The circuit board for a protolathe." - id = "protolathe" - req_tech = list("programming" = 2, "engineering" = 2) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/protolathe - -datum/design/circuit_imprinter - name = "Machine Design (Circuit Imprinter Board)" - desc = "The circuit board for a circuit imprinter." - id = "circuit_imprinter" - req_tech = list("programming" = 2, "engineering" = 2) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/circuit_imprinter - -datum/design/autolathe - name = "Machine Design (Autolathe Board)" - desc = "The circuit board for an autolathe." - id = "autolathe" - req_tech = list("programming" = 2, "engineering" = 2) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/autolathe - -datum/design/rdservercontrol - name = "Computer Design (R&D Server Control Console Board)" - desc = "The circuit board for an R&D Server Control Console." - id = "rdservercontrol" - req_tech = list("programming" = 3) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/rdservercontrol - -datum/design/rdserver - name = "Machine Design (R&D Server Board)" - desc = "The circuit board for an R&D Server." - id = "rdserver" - req_tech = list("programming" = 3) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/rdserver - -datum/design/mechfab - name = "Machine Design (Exosuit Fabricator Board)" - desc = "The circuit board for an Exosuit Fabricator." - id = "mechfab" - req_tech = list("programming" = 3, "engineering" = 3) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/mechfab - - -datum/design/cyborgrecharger - name = "Machine Design (Cyborg Recharger Board)" - desc = "The circuit board for a Cyborg Recharger." - id = "cyborgrecharger" - req_tech = list("powerstorage" = 3, "engineering" = 3) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/cyborgrecharger - -datum/design/mech_recharger - name = "Machine Design (Mechbay Recharger Board)" - desc = "The circuit board for a Mechbay Recharger." - id = "mech_recharger" - req_tech = list("programming" = 3, "powerstorage" = 4, "engineering" = 4) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/mech_recharger - -datum/design/vendor - name = "Machine Design (Vendor Board)" - desc = "The circuit board for a Vendor." - id = "vendor" - req_tech = list("programming" = 1) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/vendor - -datum/design/ore_redemption - name = "Machine Design (Ore Redemption Board)" - desc = "The circuit board for an Ore Redemption machine." - id = "ore_redemption" - req_tech = list("programming" = 1, "engineering" = 2) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/ore_redemption - - -datum/design/mining_equipment_vendor - name = "Machine Design (Mining Rewards Vender Board)" - desc = "The circuit board for a Mining Rewards Vender." - id = "mining_equipment_vendor" - req_tech = list("programming" = 1, "engineering" = 2) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/mining_equipment_vendor - -///////////////////////////////////////// -////////////Power Stuff////////////////// -///////////////////////////////////////// - -datum/design/pacman - name = "Machine Design (PACMAN-type Generator Board)" - desc = "The circuit board that for a PACMAN-type portable generator." - id = "pacman" - req_tech = list("programming" = 3, "plasmatech" = 3, "powerstorage" = 3, "engineering" = 3) - build_type = IMPRINTER - reliability = 79 - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/pacman - -datum/design/superpacman - name = "Machine Design (SUPERPACMAN-type Generator Board)" - desc = "The circuit board that for a SUPERPACMAN-type portable generator." - id = "superpacman" - req_tech = list("programming" = 3, "powerstorage" = 4, "engineering" = 4) - build_type = IMPRINTER - reliability = 76 - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/pacman/super - -datum/design/mrspacman - name = "Machine Design (MRSPACMAN-type Generator Board)" - desc = "The circuit board that for a MRSPACMAN-type portable generator." - id = "mrspacman" - req_tech = list("programming" = 3, "powerstorage" = 5, "engineering" = 5) - build_type = IMPRINTER - reliability = 74 - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/pacman/mrs - - -///////////////////////////////////////// -////////////Medical Tools//////////////// -///////////////////////////////////////// - -datum/design/mass_spectrometer - name = "Mass-Spectrometer" - desc = "A device for analyzing chemicals in the blood." - id = "mass_spectrometer" - req_tech = list("biotech" = 2, "magnets" = 2) - build_type = PROTOLATHE - materials = list("$metal" = 30, "$glass" = 20) - reliability = 76 - build_path = /obj/item/device/mass_spectrometer - -datum/design/adv_mass_spectrometer - name = "Advanced Mass-Spectrometer" - desc = "A device for analyzing chemicals in the blood and their quantities." - id = "adv_mass_spectrometer" - req_tech = list("biotech" = 2, "magnets" = 4) - build_type = PROTOLATHE - materials = list("$metal" = 30, "$glass" = 20) - reliability = 74 - build_path = /obj/item/device/mass_spectrometer/adv - -datum/design/mmi - name = "Man-Machine Interface" - desc = "The Warrior's bland acronym, MMI, obscures the true horror of this monstrosity." - id = "mmi" - req_tech = list("programming" = 2, "biotech" = 3) - build_type = PROTOLATHE | MECHFAB - materials = list("$metal" = 1000, "$glass" = 500) - reliability = 76 - build_path = /obj/item/device/mmi - category = "Misc" - -datum/design/mmi_radio - name = "Radio-enabled Man-Machine Interface" - desc = "The Warrior's bland acronym, MMI, obscures the true horror of this monstrosity. This one comes with a built-in radio." - id = "mmi_radio" - req_tech = list("programming" = 2, "biotech" = 4) - build_type = PROTOLATHE | MECHFAB - materials = list("$metal" = 1200, "$glass" = 500) - reliability = 74 - build_path = /obj/item/device/mmi/radio_enabled - category = "Misc" - -datum/design/synthetic_flash - name = "Synthetic Flash" - desc = "When a problem arises, SCIENCE is the solution." - id = "sflash" - req_tech = list("magnets" = 3, "combat" = 2) - build_type = MECHFAB - materials = list("$metal" = 750, "$glass" = 750) - reliability = 76 - build_path = /obj/item/device/flash/synthetic - category = "Misc" - -datum/design/bluespacebeaker - 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." - id = "bluespacebeaker" - req_tech = list("bluespace" = 2, "materials" = 6) - build_type = PROTOLATHE - materials = list("$metal" = 3000, "$plasma" = 3000, "$diamond" = 500) - reliability = 76 - build_path = /obj/item/weapon/reagent_containers/glass/beaker/bluespace - category = "Misc" - -datum/design/noreactbeaker - name = "Cryostasis Beaker" - desc = "A cryostasis beaker that allows for chemical storage without reactions. Can hold up to 50 units." - id = "splitbeaker" - req_tech = list("materials" = 2) - build_type = PROTOLATHE - materials = list("$metal" = 3000) - reliability = 76 - build_path = /obj/item/weapon/reagent_containers/glass/beaker/noreact - category = "Misc" - -///////////////////////////////////////// -/////////////////Weapons///////////////// -///////////////////////////////////////// - -datum/design/nuclear_gun - name = "Advanced Energy Gun" - desc = "An energy gun with an experimental miniaturized reactor." - id = "nuclear_gun" - req_tech = list("combat" = 3, "materials" = 5, "powerstorage" = 3) - build_type = PROTOLATHE - materials = list("$metal" = 5000, "$glass" = 1000, "$uranium" = 2000) - reliability = 76 - build_path = /obj/item/weapon/gun/energy/gun/nuclear - locked = 1 - -datum/design/stunrevolver - name = "Stun Revolver" - desc = "The prize of the Head of Security." - id = "stunrevolver" - req_tech = list("combat" = 3, "materials" = 3, "powerstorage" = 2) - build_type = PROTOLATHE - materials = list("$metal" = 4000) - build_path = /obj/item/weapon/gun/energy/stunrevolver - locked = 1 - -datum/design/lasercannon - name = "Laser Cannon" - desc = "A heavy duty laser cannon." - id = "lasercannon" - req_tech = list("combat" = 4, "materials" = 3, "powerstorage" = 3) - build_type = PROTOLATHE - materials = list("$metal" = 10000, "$glass" = 2000, "$diamond" = 2000) - build_path = /obj/item/weapon/gun/energy/lasercannon - locked = 1 - -datum/design/decloner - name = "Decloner" - desc = "Your opponent will bubble into a messy pile of goop." - id = "decloner" - req_tech = list("combat" = 8, "materials" = 7, "biotech" = 5, "powerstorage" = 6) - build_type = PROTOLATHE - materials = list("$gold" = 5000,"$uranium" = 10000, "mutagen" = 40) - build_path = /obj/item/weapon/gun/energy/decloner - locked = 1 -/* -datum/design/chemsprayer - name = "Chem Sprayer" - desc = "An advanced chem spraying device." - id = "chemsprayer" - req_tech = list("combat" = 3, "materials" = 3, "engineering" = 3, "biotech" = 2) - build_type = PROTOLATHE - materials = list("$metal" = 5000, "$glass" = 1000) - reliability = 100 - build_path = /obj/item/weapon/chemsprayer" -*/ -datum/design/rapidsyringe - name = "Rapid Syringe Gun" - desc = "A gun that fires many syringes." - id = "rapidsyringe" - req_tech = list("combat" = 3, "materials" = 3, "engineering" = 3, "biotech" = 2) - build_type = PROTOLATHE - materials = list("$metal" = 5000, "$glass" = 1000) - build_path = /obj/item/weapon/gun/syringe/rapidsyringe -/* -datum/design/largecrossbow - name = "Energy Crossbow" - desc = "A weapon favoured by syndicate infiltration teams." - id = "largecrossbow" - req_tech = list("combat" = 4, "materials" = 5, "engineering" = 3, "biotech" = 4, "syndicate" = 3) - build_type = PROTOLATHE - materials = list("$metal" = 5000, "$glass" = 1000, "$uranium" = 1000, "$silver" = 1000) - build_path = /obj/item/weapon/gun/energy/crossbow/largecrossbow" -*/ -datum/design/temp_gun - name = "Temperature Gun" - desc = "A gun that shoots temperature bullet energythings to change temperature."//Change it if you want - id = "temp_gun" - req_tech = list("combat" = 3, "materials" = 4, "powerstorage" = 3, "magnets" = 2) - build_type = PROTOLATHE - materials = list("$metal" = 5000, "$glass" = 500, "$silver" = 3000) - build_path = /obj/item/weapon/gun/energy/temperature - locked = 1 - -datum/design/flora_gun - name = "Floral Somatoray" - desc = "A tool that discharges controlled radiation which induces mutation in plant cells. Harmless to other organic life." - id = "flora_gun" - req_tech = list("materials" = 2, "biotech" = 3, "powerstorage" = 3) - build_type = PROTOLATHE - materials = list("$metal" = 2000, "$glass" = 500, "radium" = 20) - build_path = /obj/item/weapon/gun/energy/floragun - -datum/design/large_grenade - name = "Large Grenade" - desc = "A grenade that affects a larger area and use larger containers." - id = "large_Grenade" - req_tech = list("combat" = 3, "materials" = 2) - build_type = PROTOLATHE - materials = list("$metal" = 3000) - reliability = 79 - build_path = /obj/item/weapon/grenade/chem_grenade/large - -datum/design/smg - name = "Submachine Gun" - desc = "A lightweight, fast firing gun." - id = "smg" - req_tech = list("combat" = 4, "materials" = 3) - build_type = PROTOLATHE - materials = list("$metal" = 8000, "$silver" = 2000, "$diamond" = 1000) - build_path = /obj/item/weapon/gun/projectile/automatic - locked = 1 - -datum/design/xray - name = "Xray Laser Gun" - desc = "Not quite as menacing as it sounds" - id = "xray" - req_tech = list("combat" = 6, "materials" = 5, "biotech" = 5, "powerstorage" = 4) - build_type = PROTOLATHE - materials = list("$gold" = 5000,"$uranium" = 10000, "$metal" = 4000) - build_path = /obj/item/weapon/gun/energy/xray - locked = 1 - -datum/design/ionrifle - name = "Ion Rifle" - desc = "How to dismantle a cyborg : The gun." - id = "ionrifle" - req_tech = list("combat" = 5, "materials" = 4, "magnets" = 4) - build_type = PROTOLATHE - materials = list("$silver" = 4000, "$metal" = 6000, "$uranium" = 1000) - build_path = /obj/item/weapon/gun/energy/ionrifle - locked = 1 - -datum/design/ammo_9mm - name = "Ammunition Box (9mm)" - desc = "A box of prototype 9mm ammunition." - id = "ammo_9mm" - req_tech = list("combat" = 4, "materials" = 3) - build_type = PROTOLATHE - materials = list("$metal" = 2000) - build_path = /obj/item/ammo_box/c9mm - -datum/design/mag_smg - name = "Submachine Gun Magazine (9mm)" - desc = "A prototype magazine for the submachine gun." - id = "mag_smg" - req_tech = list("combat" = 4, "materials" = 3) - build_type = PROTOLATHE - materials = list("$metal" = 2000) - build_path = /obj/item/ammo_box/magazine/msmg9mm - -datum/design/stunshell - name = "Stun Shell" - desc = "A stunning shell for a shotgun." - id = "stunshell" - req_tech = list("combat" = 3, "materials" = 3) - build_type = PROTOLATHE - materials = list("$metal" = 200) - build_path = /obj/item/ammo_casing/shotgun/stunshell ///////////////////////////////////////// /////////////////Mining////////////////// @@ -1824,6 +191,17 @@ datum/design/bluespace_crystal reliability = 100 build_path = /obj/item/bluespace_crystal/artificial +datum/design/telesci_gps + name = "GPS Device" + desc = "Little thingie that can track its position at all times." + id = "telesci_gps" + req_tech = list("materials" = 2, "magnets" = 3, "bluespace" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 500, "$glass" = 1000) + build_path = /obj/item/device/gps + + + ///////////////////////////////////////// /////////////////HUDs//////////////////// ///////////////////////////////////////// @@ -1900,6 +278,7 @@ datum/design/security_hud_night ///////////////////////////////////////// //////////////Borg Upgrades////////////// ///////////////////////////////////////// + datum/design/borg_syndicate_module name = "Borg Illegal Weapons Upgrade" desc = "Allows for the construction of illegal upgrades for cyborgs" @@ -1909,6 +288,7 @@ datum/design/borg_syndicate_module build_path = /obj/item/borg/upgrade/syndicate category = "Cyborg Upgrade Modules" + ///////////////////////////////////////// //////////////////Misc/////////////////// ///////////////////////////////////////// diff --git a/code/modules/research/designs/AI_module_designs.dm b/code/modules/research/designs/AI_module_designs.dm new file mode 100644 index 00000000000..c8188d904b0 --- /dev/null +++ b/code/modules/research/designs/AI_module_designs.dm @@ -0,0 +1,129 @@ +/////////////////////////////////// +//////////AI Module Disks////////// +/////////////////////////////////// + +datum/design/safeguard_module + name = "Module Design (Safeguard)" + desc = "Allows for the construction of a Safeguard AI Module." + id = "safeguard_module" + req_tech = list("programming" = 3, "materials" = 4) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20, "$gold" = 100) + build_path = /obj/item/weapon/aiModule/supplied/safeguard + +datum/design/onehuman_module + name = "Module Design (OneHuman)" + desc = "Allows for the construction of a OneHuman AI Module." + id = "onehuman_module" + req_tech = list("programming" = 4, "materials" = 6) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20, "$diamond" = 100) + build_path = /obj/item/weapon/aiModule/zeroth/oneHuman + +datum/design/protectstation_module + name = "Module Design (ProtectStation)" + desc = "Allows for the construction of a ProtectStation AI Module." + id = "protectstation_module" + req_tech = list("programming" = 3, "materials" = 6) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20, "$gold" = 100) + build_path = /obj/item/weapon/aiModule/supplied/protectStation + +datum/design/quarantine_module + name = "Module Design (Quarantine)" + desc = "Allows for the construction of a Quarantine AI Module." + id = "quarantine_module" + req_tech = list("programming" = 3, "biotech" = 2, "materials" = 4) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20, "$gold" = 100) + build_path = /obj/item/weapon/aiModule/supplied/quarantine + +datum/design/oxygen_module + name = "Module Design (OxygenIsToxicToHumans)" + desc = "Allows for the construction of a Safeguard AI Module." + id = "oxygen_module" + req_tech = list("programming" = 3, "biotech" = 2, "materials" = 4) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20, "$gold" = 100) + build_path = /obj/item/weapon/aiModule/supplied/oxygen + +datum/design/freeform_module + name = "Module Design (Freeform)" + desc = "Allows for the construction of a Freeform AI Module." + id = "freeform_module" + req_tech = list("programming" = 4, "materials" = 4) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20, "$gold" = 100) + build_path = /obj/item/weapon/aiModule/supplied/freeform + +datum/design/reset_module + name = "Module Design (Reset)" + desc = "Allows for the construction of a Reset AI Module." + id = "reset_module" + req_tech = list("programming" = 3, "materials" = 6) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20, "$gold" = 100) + build_path = /obj/item/weapon/aiModule/reset + +datum/design/purge_module + name = "Module Design (Purge)" + desc = "Allows for the construction of a Purge AI Module." + id = "purge_module" + req_tech = list("programming" = 4, "materials" = 6) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20, "$diamond" = 100) + build_path = /obj/item/weapon/aiModule/reset/purge + +datum/design/freeformcore_module + name = "Core Module Design (Freeform)" + desc = "Allows for the construction of a Freeform AI Core Module." + id = "freeformcore_module" + req_tech = list("programming" = 4, "materials" = 6) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20, "$diamond" = 100) + build_path = /obj/item/weapon/aiModule/core/freeformcore + +datum/design/asimov + name = "Core Module Design (Asimov)" + desc = "Allows for the construction of a Asimov AI Core Module." + id = "asimov_module" + req_tech = list("programming" = 3, "materials" = 6) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20, "$diamond" = 100) + build_path = /obj/item/weapon/aiModule/core/full/asimov + +datum/design/paladin_module + name = "Core Module Design (P.A.L.A.D.I.N.)" + desc = "Allows for the construction of a P.A.L.A.D.I.N. AI Core Module." + id = "paladin_module" + req_tech = list("programming" = 4, "materials" = 6) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20, "$diamond" = 100) + build_path = /obj/item/weapon/aiModule/core/full/paladin + +datum/design/tyrant_module + name = "Core Module Design (T.Y.R.A.N.T.)" + desc = "Allows for the construction of a T.Y.R.A.N.T. AI Module." + id = "tyrant_module" + req_tech = list("programming" = 4, "syndicate" = 2, "materials" = 6) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20, "$diamond" = 100) + build_path = /obj/item/weapon/aiModule/core/full/tyrant + +datum/design/corporate_module + name = "Core Module Design (Corporate)" + desc = "Allows for the construction of a Corporate AI Core Module." + id = "corporate_module" + req_tech = list("programming" = 4, "materials" = 6) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20, "$diamond" = 100) + build_path = /obj/item/weapon/aiModule/core/full/corp + +datum/design/custom_module + name = "Core Module Design (Custom)" + desc = "Allows for the construction of a Custom AI Core Module." + id = "custom_module" + req_tech = list("programming" = 4, "materials" = 6) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20, "$diamond" = 100) + build_path = /obj/item/weapon/aiModule/core/full/custom \ No newline at end of file diff --git a/code/modules/research/designs/comp_board_designs.dm b/code/modules/research/designs/comp_board_designs.dm new file mode 100644 index 00000000000..33839c88874 --- /dev/null +++ b/code/modules/research/designs/comp_board_designs.dm @@ -0,0 +1,334 @@ +///////////////////Computer Boards/////////////////////////////////// + +datum/design/seccamera + name = "Computer Design (Security)" + desc = "Allows for the construction of circuit boards used to build security camera computers." + id = "seccamera" + req_tech = list("programming" = 2) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/security + +datum/design/aicore + name = "AI Design (AI Core)" + desc = "Allows for the construction of circuit boards used to build new AI cores." + id = "aicore" + req_tech = list("programming" = 4, "biotech" = 3) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/aicore + +datum/design/aiupload + name = "Computer Design (AI Upload)" + desc = "Allows for the construction of circuit boards used to build an AI Upload Console." + id = "aiupload" + req_tech = list("programming" = 4) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/aiupload + +datum/design/borgupload + name = "Computer Design (Cyborg Upload)" + desc = "Allows for the construction of circuit boards used to build a Cyborg Upload Console." + id = "borgupload" + req_tech = list("programming" = 4) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/borgupload + +datum/design/med_data + name = "Computer Design (Medical Records)" + desc = "Allows for the construction of circuit boards used to build a medical records console." + id = "med_data" + req_tech = list("programming" = 2) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/med_data + +datum/design/operating + name = "Computer Design (Operating Computer)" + desc = "Allows for the construction of circuit boards used to build an operating computer console." + id = "operating" + req_tech = list("programming" = 2, "biotech" = 2) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/operating + +datum/design/pandemic + name = "Computer Design (PanD.E.M.I.C. 2200)" + desc = "Allows for the construction of circuit boards used to build a PanD.E.M.I.C. 2200 console." + id = "pandemic" + req_tech = list("programming" = 2, "biotech" = 2) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/pandemic + +datum/design/scan_console + name = "Computer Design (DNA Machine)" + desc = "Allows for the construction of circuit boards used to build a new DNA scanning console." + id = "scan_console" + req_tech = list("programming" = 2, "biotech" = 3) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/scan_consolenew + +datum/design/comconsole + name = "Computer Design (Communications)" + desc = "Allows for the construction of circuit boards used to build a communications console." + id = "comconsole" + req_tech = list("programming" = 2, "magnets" = 2) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/communications + +datum/design/idcardconsole + name = "Computer Design (ID Console)" + desc = "Allows for the construction of circuit boards used to build an ID computer." + id = "idcardconsole" + req_tech = list("programming" = 2) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/card + +datum/design/crewconsole + name = "Computer Design (Crew monitoring computer)" + desc = "Allows for the construction of circuit boards used to build a Crew monitoring computer." + id = "crewconsole" + req_tech = list("programming" = 3, "magnets" = 2, "biotech" = 2) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/crew + +datum/design/teleconsole + name = "Computer Design (Teleporter Console)" + desc = "Allows for the construction of circuit boards used to build a teleporter control console." + id = "teleconsole" + req_tech = list("programming" = 3, "bluespace" = 2) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/teleporter + +datum/design/secdata + name = "Computer Design (Security Records Console)" + desc = "Allows for the construction of circuit boards used to build a security records console." + id = "secdata" + req_tech = list("programming" = 2) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/secure_data + +datum/design/atmosalerts + name = "Computer Design (Atmosphere Alert)" + desc = "Allows for the construction of circuit boards used to build an atmosphere alert console.." + id = "atmosalerts" + req_tech = list("programming" = 2) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/atmos_alert + +datum/design/air_management + name = "Computer Design (Atmospheric Monitor)" + desc = "Allows for the construction of circuit boards used to build an Atmospheric Monitor." + id = "air_management" + req_tech = list("programming" = 2) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/air_management + +datum/design/robocontrol + name = "Computer Design (Robotics Control Console)" + desc = "Allows for the construction of circuit boards used to build a Robotics Control console." + id = "robocontrol" + req_tech = list("programming" = 4) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/robotics + +datum/design/clonecontrol + name = "Computer Design (Cloning Machine Console)" + desc = "Allows for the construction of circuit boards used to build a new Cloning Machine console." + id = "clonecontrol" + req_tech = list("programming" = 3, "biotech" = 3) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/cloning + +datum/design/clonepod + name = "Machine Design (Clone Pod)" + desc = "Allows for the construction of circuit boards used to build a Cloning Pod." + id = "clonepod" + req_tech = list("programming" = 3, "biotech" = 3) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/clonepod + +datum/design/clonescanner + name = "Machine Design (Cloning Scanner)" + desc = "Allows for the construction of circuit boards used to build a Cloning Scanner." + id = "clonescanner" + req_tech = list("programming" = 3, "biotech" = 3) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/clonescanner + +datum/design/arcadebattle + name = "Computer Design (Battle Arcade Machine)" + desc = "Allows for the construction of circuit boards used to build a new arcade machine." + id = "arcademachine" + req_tech = list("programming" = 1) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/arcade/battle + +datum/design/orion_trail + name = "Computer Design (Orion Trail Arcade Machine)" + desc = "Allows for the construction of circuit boards used to build a new Orion Trail machine." + id = "arcademachine" + req_tech = list("programming" = 2) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/arcade/orion_trail + +datum/design/orion_trail + name = "Computer Design (Slot Machine)" + desc = "Allows for the construction of circuit boards used to build a new slot machine." + id = "slotmachine" + req_tech = list("programming" = 2) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/slot_machine + +datum/design/powermonitor + name = "Computer Design (Power Monitor)" + desc = "Allows for the construction of circuit boards used to build a new power monitor." + id = "powermonitor" + req_tech = list("programming" = 2) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/powermonitor + +datum/design/solarcontrol + name = "Computer Design (Solar Control)" + desc = "Allows for the construction of circuit boards used to build a solar control console." + id = "solarcontrol" + req_tech = list("programming" = 2, "powerstorage" = 2) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/solar_control + +datum/design/prisonmanage + name = "Computer Design (Prisoner Management Console)" + desc = "Allows for the construction of circuit boards used to build a prisoner management console." + id = "prisonmanage" + req_tech = list("programming" = 2) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/prisoner + +datum/design/mechacontrol + name = "Computer Design (Exosuit Control Console)" + desc = "Allows for the construction of circuit boards used to build an exosuit control console." + id = "mechacontrol" + req_tech = list("programming" = 3) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/mecha_control + +datum/design/mechapower + name = "Computer Design (Mech Bay Power Control Console)" + desc = "Allows for the construction of circuit boards used to build a mech bay power control console." + id = "mechapower" + req_tech = list("programming" = 2, "powerstorage" = 3) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/mech_bay_power_console + +datum/design/rdconsole + name = "Computer Design (R&D Console)" + desc = "Allows for the construction of circuit boards used to build a new R&D console." + id = "rdconsole" + req_tech = list("programming" = 4) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/rdconsole + +datum/design/ordercomp + name = "Computer Design (Supply ordering console)" + desc = "Allows for the construction of circuit boards used to build a Supply ordering console." + id = "ordercomp" + req_tech = list("programming" = 2) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/ordercomp + +datum/design/supplycomp + name = "Computer Design (Supply shuttle console)" + desc = "Allows for the construction of circuit boards used to build a Supply shuttle console." + id = "supplycomp" + req_tech = list("programming" = 3) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/supplycomp + +datum/design/mining + name = "Computer Design (Outpost Status Display)" + desc = "Allows for the construction of circuit boards used to build an outpost status display console." + id = "mining" + req_tech = list("programming" = 2) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/mining + +datum/design/comm_monitor + name = "Computer Design (Telecommunications Monitoring Console)" + desc = "Allows for the construction of circuit boards used to build a telecommunications monitor." + id = "comm_monitor" + req_tech = list("programming" = 3) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/comm_monitor + +datum/design/comm_server + name = "Computer Design (Telecommunications Server Monitoring Console)" + desc = "Allows for the construction of circuit boards used to build a telecommunication server browser and monitor." + id = "comm_server" + req_tech = list("programming" = 3) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/comm_server + +datum/design/message_monitor + name = "Computer Design (Messaging Monitor Console)" + desc = "Allows for the construction of circuit boards used to build a messaging monitor console." + id = "message_monitor" + req_tech = list("programming" = 5) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/message_monitor + +datum/design/comm_traffic + name = "Computer Design (Telecommunications Traffic Control Console)" + desc = "Allows for the construction of circuit boards used to build a telecommunications traffic control console." + id = "comm_traffic" + req_tech = list("programming" = 3) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/comm_traffic + +datum/design/telesci_console + name = "Computer Design (Telepad Control Console Board)" + desc = "Allows for the construction of circuit boards used to build a telescience console." + id = "telesci_console" + req_tech = list("programming" = 3, "bluespace" = 2) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/telesci_console + +datum/design/aifixer + name = "Computer Design (AI Integrity Restorer)" + desc = "Allows for the construction of circuit boards used to build an AI Integrity Restorer." + id = "aifixer" + req_tech = list("programming" = 3, "biotech" = 2) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/aifixer \ No newline at end of file diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm new file mode 100644 index 00000000000..bc0d01dd8fb --- /dev/null +++ b/code/modules/research/designs/machine_designs.dm @@ -0,0 +1,238 @@ +//////////////////////////////////////// +//////////////MISC Boards/////////////// +//////////////////////////////////////// + +datum/design/smes + name = "Machine Design (SMES Board)" + desc = "The circuit board for a SMES." + id = "smes" + req_tech = list("programming" = 4, "power" = 5, "engineering" = 4) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/smes + +datum/design/turbine_computer + name = "Computer Design (Power Turbine Console Board)" + desc = "The circuit board for a power turbine console." + id = "power_turbine_console" + req_tech = list("programming" = 4, "power" = 4, "engineering" = 4) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/turbine_computer + +datum/design/power_compressor + name = "Machine Design (Power Compressor Board)" + desc = "The circuit board for a power compressor." + id = "power_compressor" + req_tech = list("programming" = 4, "power" = 5, "engineering" = 4) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/power_compressor + +datum/design/power_turbine + name = "Machine Design (Power Turbine Board)" + desc = "The circuit board for a power turbine." + id = "power_turbine" + req_tech = list("programming" = 4, "power" = 4, "engineering" = 5) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/power_turbine + +datum/design/teleport_station + name = "Machine Design (Teleportation Station Board)" + desc = "The circuit board for a teleportation station." + id = "tele_station" + req_tech = list("programming" = 4, "bluespace" = 4, "engineering" = 4) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/teleporter_station + +datum/design/teleport_hub + name = "Machine Design (Teleportation Hub Board)" + desc = "The circuit board for a teleportation hub." + id = "tele_hub" + req_tech = list("programming" = 3, "bluespace" = 5, "materials" = 4, "engineering" = 5) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/teleporter_hub + +datum/design/telepad + name = "Machine Design (Telepad Board)" + desc = "The circuit board for a telescience telepad." + id = "telepad" + req_tech = list("programming" = 4, "bluespace" = 4, "materials" = 3, "engineering" = 3) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/telesci_pad + +datum/design/sleeper + name = "Machine Design (Sleeper Board)" + desc = "The circuit board for a sleeper." + id = "sleeper" + req_tech = list("programming" = 3, "biotech" = 2, "materials" = 3, "engineering" = 3) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/sleeper + +datum/design/cryotube + name = "Machine Design (Cryotube Board)" + desc = "The circuit board for a cryotube." + id = "cryotube" + req_tech = list("programming" = 4, "biotech" = 3, "engineering" = 4) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/cryo_tube + +datum/design/thermomachine + name = "Machine Design (Freezer/Heater Board)" + desc = "The circuit board for a freezer/heater." + id = "thermomachine" + req_tech = list("programming" = 3, "plasmatech" = 3) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/thermomachine + +datum/design/biogenerator + name = "Machine Design (Biogenerator Board)" + desc = "The circuit board for a biogenerator." + id = "biogenerator" + req_tech = list("programming" = 3, "biotech" = 2, "materials" = 3) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/biogenerator + +datum/design/hydroponics + name = "Machine Design (Hydroponics Tray Board)" + desc = "The circuit board for a hydroponics tray." + id = "hydro_tray" + req_tech = list("programming" = 1, "biotech" = 1) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/hydroponics + +datum/design/microwave + name = "Machine Design (Microwave Board)" + desc = "The circuit board for a microwave." + id = "microwave" + req_tech = list("programming" = 1) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/microwave + +datum/design/chem_dispenser + name = "Machine Design (Portable Chem Dispenser Board)" + desc = "The circuit board for a portable chem dispenser." + id = "chem_dispenser" + req_tech = list("programming" = 4, "biotech" = 3, "engineering" = 4, "materials" = 4, "plasmatech" = 3) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/chem_dispenser + +datum/design/destructive_analyzer + name = "Machine Design (Destructive Analyzer Board)" + desc = "The circuit board for a destructive analyzer." + id = "destructive_analyzer" + req_tech = list("programming" = 2, "magnets" = 2, "engineering" = 2) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/destructive_analyzer + +datum/design/protolathe + name = "Machine Design (Protolathe Board)" + desc = "The circuit board for a protolathe." + id = "protolathe" + req_tech = list("programming" = 2, "engineering" = 2) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/protolathe + +datum/design/circuit_imprinter + name = "Machine Design (Circuit Imprinter Board)" + desc = "The circuit board for a circuit imprinter." + id = "circuit_imprinter" + req_tech = list("programming" = 2, "engineering" = 2) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/circuit_imprinter + +datum/design/autolathe + name = "Machine Design (Autolathe Board)" + desc = "The circuit board for an autolathe." + id = "autolathe" + req_tech = list("programming" = 2, "engineering" = 2) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/autolathe + +datum/design/rdservercontrol + name = "Computer Design (R&D Server Control Console Board)" + desc = "The circuit board for an R&D Server Control Console." + id = "rdservercontrol" + req_tech = list("programming" = 3) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/rdservercontrol + +datum/design/rdserver + name = "Machine Design (R&D Server Board)" + desc = "The circuit board for an R&D Server." + id = "rdserver" + req_tech = list("programming" = 3) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/rdserver + +datum/design/mechfab + name = "Machine Design (Exosuit Fabricator Board)" + desc = "The circuit board for an Exosuit Fabricator." + id = "mechfab" + req_tech = list("programming" = 3, "engineering" = 3) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/mechfab + +datum/design/cyborgrecharger + name = "Machine Design (Cyborg Recharger Board)" + desc = "The circuit board for a Cyborg Recharger." + id = "cyborgrecharger" + req_tech = list("powerstorage" = 3, "engineering" = 3) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/cyborgrecharger + +datum/design/mech_recharger + name = "Machine Design (Mechbay Recharger Board)" + desc = "The circuit board for a Mechbay Recharger." + id = "mech_recharger" + req_tech = list("programming" = 3, "powerstorage" = 4, "engineering" = 4) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/mech_recharger + +datum/design/vendor + name = "Machine Design (Vendor Board)" + desc = "The circuit board for a Vendor." + id = "vendor" + req_tech = list("programming" = 1) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/vendor + +datum/design/ore_redemption + name = "Machine Design (Ore Redemption Board)" + desc = "The circuit board for an Ore Redemption machine." + id = "ore_redemption" + req_tech = list("programming" = 1, "engineering" = 2) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/ore_redemption + + +datum/design/mining_equipment_vendor + name = "Machine Design (Mining Rewards Vender Board)" + desc = "The circuit board for a Mining Rewards Vender." + id = "mining_equipment_vendor" + req_tech = list("programming" = 1, "engineering" = 2) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/mining_equipment_vendor \ No newline at end of file diff --git a/code/modules/research/designs/mecha_designs.dm b/code/modules/research/designs/mecha_designs.dm new file mode 100644 index 00000000000..f50c4b9b256 --- /dev/null +++ b/code/modules/research/designs/mecha_designs.dm @@ -0,0 +1,295 @@ +/////////////////////////////////// +//////////Mecha Module Disks/////// +/////////////////////////////////// + +datum/design/ripley_main + name = "Exosuit Design (APLU \"Ripley\" Central Control module)" + desc = "Allows for the construction of a \"Ripley\" Central Control module." + id = "ripley_main" + req_tech = list("programming" = 3) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/mecha/ripley/main + +datum/design/ripley_peri + name = "Exosuit Design (APLU \"Ripley\" Peripherals Control module)" + desc = "Allows for the construction of a \"Ripley\" Peripheral Control module." + id = "ripley_peri" + req_tech = list("programming" = 3) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/mecha/ripley/peripherals + +datum/design/odysseus_main + name = "Exosuit Design (\"Odysseus\" Central Control module)" + desc = "Allows for the construction of a \"Odysseus\" Central Control module." + id = "odysseus_main" + req_tech = list("programming" = 3,"biotech" = 2) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/mecha/odysseus/main + +datum/design/odysseus_peri + name = "Exosuit Design (\"Odysseus\" Peripherals Control module)" + desc = "Allows for the construction of a \"Odysseus\" Peripheral Control module." + id = "odysseus_peri" + req_tech = list("programming" = 3,"biotech" = 2) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/mecha/odysseus/peripherals + +datum/design/gygax_main + name = "Exosuit Design (\"Gygax\" Central Control module)" + desc = "Allows for the construction of a \"Gygax\" Central Control module." + id = "gygax_main" + req_tech = list("programming" = 4) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/mecha/gygax/main + +datum/design/gygax_peri + name = "Exosuit Design (\"Gygax\" Peripherals Control module)" + desc = "Allows for the construction of a \"Gygax\" Peripheral Control module." + id = "gygax_peri" + req_tech = list("programming" = 4) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/mecha/gygax/peripherals + +datum/design/gygax_targ + name = "Exosuit Design (\"Gygax\" Weapons & Targeting Control module)" + desc = "Allows for the construction of a \"Gygax\" Weapons & Targeting Control module." + id = "gygax_targ" + req_tech = list("programming" = 4, "combat" = 2) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/mecha/gygax/targeting + +datum/design/durand_main + name = "Exosuit Design (\"Durand\" Central Control module)" + desc = "Allows for the construction of a \"Durand\" Central Control module." + id = "durand_main" + req_tech = list("programming" = 4) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/mecha/durand/main + +datum/design/durand_peri + name = "Exosuit Design (\"Durand\" Peripherals Control module)" + desc = "Allows for the construction of a \"Durand\" Peripheral Control module." + id = "durand_peri" + req_tech = list("programming" = 4) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/mecha/durand/peripherals + +datum/design/durand_targ + name = "Exosuit Design (\"Durand\" Weapons & Targeting Control module)" + desc = "Allows for the construction of a \"Durand\" Weapons & Targeting Control module." + id = "durand_targ" + req_tech = list("programming" = 4, "combat" = 2) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/mecha/durand/targeting + +datum/design/honker_main + name = "Exosuit Design (\"H.O.N.K\" Central Control module)" + desc = "Allows for the construction of a \"H.O.N.K\" Central Control module." + id = "honker_main" + req_tech = list("programming" = 3) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/mecha/honker/main + +datum/design/honker_peri + name = "Exosuit Design (\"H.O.N.K\" Peripherals Control module)" + desc = "Allows for the construction of a \"H.O.N.K\" Peripheral Control module." + id = "honker_peri" + req_tech = list("programming" = 3) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/mecha/honker/peripherals + +datum/design/honker_targ + name = "Exosuit Design (\"H.O.N.K\" Weapons & Targeting Control module)" + desc = "Allows for the construction of a \"H.O.N.K\" Weapons & Targeting Control module." + id = "honker_targ" + req_tech = list("programming" = 3) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/mecha/honker/targeting + +//////////////////////////////////////// +/////////// Mecha Equpment ///////////// +//////////////////////////////////////// + +datum/design/mech_scattershot + name = "Exosuit Weapon Design (LBX AC 10 \"Scattershot\")" + desc = "Allows for the construction of LBX AC 10." + id = "mech_scattershot" + build_type = MECHFAB + req_tech = list("combat" = 4) + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot + category = "Exosuit Equipment" + +datum/design/mech_carbine + name = "Exosuit Weapon Design (FNX-99 \"Hades\" Carbine)" + desc = "Allows for the construction of FNX-99 \"Hades\" Carbine." + id = "mech_carbine" + build_type = MECHFAB + req_tech = list("combat" = 5, "materials" = 4) + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/carbine + category = "Exosuit Equipment" + +datum/design/mech_ion + name = "Exosuit Weapon Design (MKIV Ion Heavy Cannon)" + desc = "Allows for the construction of MKIV Ion Heavy Cannon." + id = "mech_ion" + build_type = MECHFAB + req_tech = list("combat" = 6, "magnets" = 5, "materials" = 5) + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/ion + category = "Exosuit Equipment" + +datum/design/mech_laser + name = "Exosuit Weapon Design (CH-PS \"Immolator\" Laser)" + desc = "Allows for the construction of CH-PS Laser." + id = "mech_laser" + build_type = MECHFAB + req_tech = list("combat" = 3, "magnets" = 3) + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser + category = "Exosuit Equipment" + +datum/design/mech_laser_heavy + name = "Exosuit Weapon Design (CH-LC \"Solaris\" Laser Cannon)" + desc = "Allows for the construction of CH-LC Laser Cannon." + id = "mech_laser_heavy" + build_type = MECHFAB + req_tech = list("combat" = 4, "magnets" = 4) + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy + category = "Exosuit Equipment" + +datum/design/mech_grenade_launcher + name = "Exosuit Weapon Design (SGL-6 Grenade Launcher)" + desc = "Allows for the construction of SGL-6 Grenade Launcher." + id = "mech_grenade_launcher" + build_type = MECHFAB + req_tech = list("combat" = 3) + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang + category = "Exosuit Equipment" + +datum/design/mech_missile_rack + name = "Exosuit Weapon Design (SRM-8 Missile Rack)" + desc = "Allows for the construction of SRM-8 Missile Rack." + id = "mech_missile_rack" + build_type = MECHFAB + req_tech = list("combat" = 6, "materials" = 6) + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack + category = "Exosuit Equipment" + +datum/design/clusterbang_launcher + name = "Exosuit Module Design (SOB-3 Clusterbang Launcher)" + desc = "A weapon that violates the Geneva Convention at 3 rounds per minute" + id = "clusterbang_launcher" + build_type = MECHFAB + req_tech = list("combat"= 5, "materials" = 5, "syndicate" = 3) + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/clusterbang + category = "Exosuit Equipment" + +datum/design/mech_wormhole_gen + name = "Exosuit Module Design (Localized Wormhole Generator)" + desc = "An exosuit module that allows generating of small quasi-stable wormholes." + id = "mech_wormhole_gen" + build_type = MECHFAB + req_tech = list("bluespace" = 3, "magnets" = 2) + build_path = /obj/item/mecha_parts/mecha_equipment/wormhole_generator + category = "Exosuit Equipment" + +datum/design/mech_teleporter + name = "Exosuit Module Design (Teleporter Module)" + desc = "An exosuit module that allows exosuits to teleport to any position in view." + id = "mech_teleporter" + build_type = MECHFAB + req_tech = list("bluespace" = 10, "magnets" = 5) + build_path = /obj/item/mecha_parts/mecha_equipment/teleporter + category = "Exosuit Equipment" + +datum/design/mech_rcd + name = "Exosuit Module Design (RCD Module)" + desc = "An exosuit-mounted Rapid Construction Device." + id = "mech_rcd" + build_type = MECHFAB + req_tech = list("materials" = 4, "bluespace" = 3, "magnets" = 4, "powerstorage"=4, "engineering" = 4) + build_path = /obj/item/mecha_parts/mecha_equipment/tool/rcd + category = "Exosuit Equipment" + +datum/design/mech_gravcatapult + name = "Exosuit Module Design (Gravitational Catapult Module)" + desc = "An exosuit mounted Gravitational Catapult." + id = "mech_gravcatapult" + build_type = MECHFAB + req_tech = list("bluespace" = 2, "magnets" = 3, "engineering" = 3) + build_path = /obj/item/mecha_parts/mecha_equipment/gravcatapult + category = "Exosuit Equipment" + +datum/design/mech_repair_droid + name = "Exosuit Module Design (Repair Droid Module)" + desc = "Automated Repair Droid. BEEP BOOP" + id = "mech_repair_droid" + build_type = MECHFAB + req_tech = list("magnets" = 3, "programming" = 3, "engineering" = 3) + build_path = /obj/item/mecha_parts/mecha_equipment/repair_droid + category = "Exosuit Equipment" + +datum/design/mech_energy_relay + name = "Exosuit Module Design (Tesla Energy Relay)" + desc = "Tesla Energy Relay" + id = "mech_energy_relay" + build_type = MECHFAB + req_tech = list("magnets" = 4, "powerstorage" = 3) + build_path = /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay + category = "Exosuit Equipment" + +datum/design/mech_ccw_armor + name = "Exosuit Module Design(Reactive Armor Booster Module)" + desc = "Exosuit-mounted armor booster." + id = "mech_ccw_armor" + build_type = MECHFAB + req_tech = list("materials" = 5, "combat" = 4) + build_path = /obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster + category = "Exosuit Equipment" + +datum/design/mech_proj_armor + name = "Exosuit Module Design(Reflective Armor Booster Module)" + desc = "Exosuit-mounted armor booster." + id = "mech_proj_armor" + build_type = MECHFAB + req_tech = list("materials" = 5, "combat" = 5, "engineering"=3) + build_path = /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster + category = "Exosuit Equipment" + +datum/design/mech_syringe_gun + name = "Exosuit Module Design(Syringe Gun)" + desc = "Exosuit-mounted syringe gun and chemical synthesizer." + id = "mech_syringe_gun" + build_type = MECHFAB + req_tech = list("materials" = 3, "biotech"=4, "magnets"=4, "programming"=3) + build_path = /obj/item/mecha_parts/mecha_equipment/tool/syringe_gun + category = "Exosuit Equipment" + +datum/design/mech_diamond_drill + name = "Exosuit Module Design (Diamond Mining Drill)" + desc = "An upgraded version of the standard drill." + id = "mech_diamond_drill" + build_type = MECHFAB + req_tech = list("materials" = 4, "engineering" = 3) + build_path = /obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill + category = "Exosuit Equipment" + +datum/design/mech_generator_nuclear + name = "Exosuit Module Design (ExoNuclear Reactor)" + desc = "Compact nuclear reactor module." + id = "mech_generator_nuclear" + build_type = MECHFAB + req_tech = list("powerstorage"= 3, "engineering" = 3, "materials" = 3) + build_path = /obj/item/mecha_parts/mecha_equipment/generator/nuclear + category = "Exosuit Equipment" \ No newline at end of file diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm new file mode 100644 index 00000000000..dcd5f06d0c1 --- /dev/null +++ b/code/modules/research/designs/medical_designs.dm @@ -0,0 +1,78 @@ +///////////////////////////////////////// +////////////Medical Tools//////////////// +///////////////////////////////////////// + +datum/design/mass_spectrometer + name = "Mass-Spectrometer" + desc = "A device for analyzing chemicals in the blood." + id = "mass_spectrometer" + req_tech = list("biotech" = 2, "magnets" = 2) + build_type = PROTOLATHE + materials = list("$metal" = 30, "$glass" = 20) + reliability = 76 + build_path = /obj/item/device/mass_spectrometer + +datum/design/adv_mass_spectrometer + name = "Advanced Mass-Spectrometer" + desc = "A device for analyzing chemicals in the blood and their quantities." + id = "adv_mass_spectrometer" + req_tech = list("biotech" = 2, "magnets" = 4) + build_type = PROTOLATHE + materials = list("$metal" = 30, "$glass" = 20) + reliability = 74 + build_path = /obj/item/device/mass_spectrometer/adv + +datum/design/mmi + name = "Man-Machine Interface" + desc = "The Warrior's bland acronym, MMI, obscures the true horror of this monstrosity." + id = "mmi" + req_tech = list("programming" = 2, "biotech" = 3) + build_type = PROTOLATHE | MECHFAB + materials = list("$metal" = 1000, "$glass" = 500) + reliability = 76 + build_path = /obj/item/device/mmi + category = "Misc" + +datum/design/mmi_radio + name = "Radio-enabled Man-Machine Interface" + desc = "The Warrior's bland acronym, MMI, obscures the true horror of this monstrosity. This one comes with a built-in radio." + id = "mmi_radio" + req_tech = list("programming" = 2, "biotech" = 4) + build_type = PROTOLATHE | MECHFAB + materials = list("$metal" = 1200, "$glass" = 500) + reliability = 74 + build_path = /obj/item/device/mmi/radio_enabled + category = "Misc" + +datum/design/synthetic_flash + name = "Synthetic Flash" + desc = "When a problem arises, SCIENCE is the solution." + id = "sflash" + req_tech = list("magnets" = 3, "combat" = 2) + build_type = MECHFAB + materials = list("$metal" = 750, "$glass" = 750) + reliability = 76 + build_path = /obj/item/device/flash/synthetic + category = "Misc" + +datum/design/bluespacebeaker + 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." + id = "bluespacebeaker" + req_tech = list("bluespace" = 2, "materials" = 6) + build_type = PROTOLATHE + materials = list("$metal" = 3000, "$plasma" = 3000, "$diamond" = 500) + reliability = 76 + build_path = /obj/item/weapon/reagent_containers/glass/beaker/bluespace + category = "Misc" + +datum/design/noreactbeaker + name = "Cryostasis Beaker" + desc = "A cryostasis beaker that allows for chemical storage without reactions. Can hold up to 50 units." + id = "splitbeaker" + req_tech = list("materials" = 2) + build_type = PROTOLATHE + materials = list("$metal" = 3000) + reliability = 76 + build_path = /obj/item/weapon/reagent_containers/glass/beaker/noreact + category = "Misc" \ No newline at end of file diff --git a/code/modules/research/designs/power_designs.dm b/code/modules/research/designs/power_designs.dm new file mode 100644 index 00000000000..a8273cfdeb0 --- /dev/null +++ b/code/modules/research/designs/power_designs.dm @@ -0,0 +1,84 @@ +//////////////////////////////////////// +//////////////////Power///////////////// +//////////////////////////////////////// + +datum/design/basic_cell + name = "Basic Power Cell" + desc = "A basic power cell that holds 1000 units of energy." + id = "basic_cell" + req_tech = list("powerstorage" = 1) + build_type = PROTOLATHE | AUTOLATHE |MECHFAB + materials = list("$metal" = 700, "$glass" = 50) + build_path = /obj/item/weapon/stock_parts/cell + category = "Misc" + +datum/design/high_cell + name = "High-Capacity Power Cell" + desc = "A power cell that holds 10000 units of energy." + id = "high_cell" + req_tech = list("powerstorage" = 2) + build_type = PROTOLATHE | AUTOLATHE | MECHFAB + materials = list("$metal" = 700, "$glass" = 60) + build_path = /obj/item/weapon/stock_parts/cell/high + category = "Misc" + +datum/design/super_cell + name = "Super-Capacity Power Cell" + desc = "A power cell that holds 20000 units of energy." + id = "super_cell" + req_tech = list("powerstorage" = 3, "materials" = 2) + reliability = 75 + build_type = PROTOLATHE | MECHFAB + materials = list("$metal" = 700, "$glass" = 70) + build_path = /obj/item/weapon/stock_parts/cell/super + category = "Misc" + +datum/design/hyper_cell + name = "Hyper-Capacity Power Cell" + desc = "A power cell that holds 30000 units of energy." + id = "hyper_cell" + req_tech = list("powerstorage" = 5, "materials" = 4) + reliability = 70 + build_type = PROTOLATHE | MECHFAB + materials = list("$metal" = 400, "$gold" = 150, "$silver" = 150, "$glass" = 70) + build_path = /obj/item/weapon/stock_parts/cell/hyper + category = "Misc" + +datum/design/light_replacer + name = "Light Replacer" + desc = "A device to automatically replace lights. Refill with working lightbulbs." + id = "light_replacer" + req_tech = list("magnets" = 3, "materials" = 4) + build_type = PROTOLATHE + materials = list("$metal" = 1500, "$silver" = 150, "$glass" = 3000) + build_path = /obj/item/device/lightreplacer + +datum/design/pacman + name = "Machine Design (PACMAN-type Generator Board)" + desc = "The circuit board that for a PACMAN-type portable generator." + id = "pacman" + req_tech = list("programming" = 3, "plasmatech" = 3, "powerstorage" = 3, "engineering" = 3) + build_type = IMPRINTER + reliability = 79 + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/pacman + +datum/design/superpacman + name = "Machine Design (SUPERPACMAN-type Generator Board)" + desc = "The circuit board that for a SUPERPACMAN-type portable generator." + id = "superpacman" + req_tech = list("programming" = 3, "powerstorage" = 4, "engineering" = 4) + build_type = IMPRINTER + reliability = 76 + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/pacman/super + +datum/design/mrspacman + name = "Machine Design (MRSPACMAN-type Generator Board)" + desc = "The circuit board that for a MRSPACMAN-type portable generator." + id = "mrspacman" + req_tech = list("programming" = 3, "powerstorage" = 5, "engineering" = 5) + build_type = IMPRINTER + reliability = 74 + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/pacman/mrs \ No newline at end of file diff --git a/code/modules/research/designs/stock_parts_designs.dm b/code/modules/research/designs/stock_parts_designs.dm new file mode 100644 index 00000000000..1268e86079a --- /dev/null +++ b/code/modules/research/designs/stock_parts_designs.dm @@ -0,0 +1,216 @@ +//////////////////////////////////////// +/////////////Stock Parts//////////////// +//////////////////////////////////////// + +datum/design/RPED + name = "Rapid Part Exchange Device" + desc = "Special mechanical module made to store, sort, and apply standard machine parts." + id = "rped" + req_tech = list("engineering" = 3, + "materials" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 15000, "$glass" = 5000) //hardcore + build_path = /obj/item/weapon/storage/part_replacer + +datum/design/basic_capacitor + name = "Basic Capacitor" + desc = "A stock part used in the construction of various devices." + id = "basic_capacitor" + req_tech = list("powerstorage" = 1) + build_type = PROTOLATHE | AUTOLATHE + materials = list("$metal" = 50, "$glass" = 50) + build_path = /obj/item/weapon/stock_parts/capacitor + +datum/design/basic_scanning + name = "Basic Scanning Module" + desc = "A stock part used in the construction of various devices." + id = "basic_scanning" + req_tech = list("magnets" = 1) + build_type = PROTOLATHE | AUTOLATHE + materials = list("$metal" = 50, "$glass" = 20) + build_path = /obj/item/weapon/stock_parts/scanning_module + +datum/design/micro_mani + name = "Micro Manipulator" + desc = "A stock part used in the construction of various devices." + id = "micro_mani" + req_tech = list("materials" = 1, "programming" = 1) + build_type = PROTOLATHE | AUTOLATHE + materials = list("$metal" = 30) + build_path = /obj/item/weapon/stock_parts/manipulator + +datum/design/basic_micro_laser + name = "Basic Micro-Laser" + desc = "A stock part used in the construction of various devices." + id = "basic_micro_laser" + req_tech = list("magnets" = 1) + build_type = PROTOLATHE | AUTOLATHE + materials = list("$metal" = 10, "$glass" = 20) + build_path = /obj/item/weapon/stock_parts/micro_laser + +datum/design/basic_matter_bin + name = "Basic Matter Bin" + desc = "A stock part used in the construction of various devices." + id = "basic_matter_bin" + req_tech = list("materials" = 1) + build_type = PROTOLATHE | AUTOLATHE + materials = list("$metal" = 80) + build_path = /obj/item/weapon/stock_parts/matter_bin + +datum/design/adv_capacitor + name = "Advanced Capacitor" + desc = "A stock part used in the construction of various devices." + id = "adv_capacitor" + req_tech = list("powerstorage" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 50, "$glass" = 50) + build_path = /obj/item/weapon/stock_parts/capacitor/adv + +datum/design/adv_scanning + name = "Advanced Scanning Module" + desc = "A stock part used in the construction of various devices." + id = "adv_scanning" + req_tech = list("magnets" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 50, "$glass" = 20) + build_path = /obj/item/weapon/stock_parts/scanning_module/adv + +datum/design/nano_mani + name = "Nano Manipulator" + desc = "A stock part used in the construction of various devices." + id = "nano_mani" + req_tech = list("materials" = 3, "programming" = 2) + build_type = PROTOLATHE + materials = list("$metal" = 30) + build_path = /obj/item/weapon/stock_parts/manipulator/nano + +datum/design/high_micro_laser + name = "High-Power Micro-Laser" + desc = "A stock part used in the construction of various devices." + id = "high_micro_laser" + req_tech = list("magnets" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 10, "$glass" = 20) + build_path = /obj/item/weapon/stock_parts/micro_laser/high + +datum/design/adv_matter_bin + name = "Advanced Matter Bin" + desc = "A stock part used in the construction of various devices." + id = "adv_matter_bin" + req_tech = list("materials" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 80) + build_path = /obj/item/weapon/stock_parts/matter_bin/adv + +datum/design/super_capacitor + name = "Super Capacitor" + desc = "A stock part used in the construction of various devices." + id = "super_capacitor" + req_tech = list("powerstorage" = 5, "materials" = 4) + build_type = PROTOLATHE + reliability = 71 + materials = list("$metal" = 50, "$glass" = 50, "$gold" = 20) + build_path = /obj/item/weapon/stock_parts/capacitor/super + +datum/design/phasic_scanning + name = "Phasic Scanning Module" + desc = "A stock part used in the construction of various devices." + id = "phasic_scanning" + req_tech = list("magnets" = 5, "materials" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 50, "$glass" = 20, "$silver" = 10) + reliability = 72 + build_path = /obj/item/weapon/stock_parts/scanning_module/phasic + +datum/design/pico_mani + name = "Pico Manipulator" + desc = "A stock part used in the construction of various devices." + id = "pico_mani" + req_tech = list("materials" = 5, "programming" = 2) + build_type = PROTOLATHE + materials = list("$metal" = 30) + reliability = 73 + build_path = /obj/item/weapon/stock_parts/manipulator/pico + +datum/design/ultra_micro_laser + name = "Ultra-High-Power Micro-Laser" + desc = "A stock part used in the construction of various devices." + id = "ultra_micro_laser" + req_tech = list("magnets" = 5, "materials" = 5) + build_type = PROTOLATHE + materials = list("$metal" = 10, "$glass" = 20, "$uranium" = 10) + reliability = 70 + build_path = /obj/item/weapon/stock_parts/micro_laser/ultra + +datum/design/super_matter_bin + name = "Super Matter Bin" + desc = "A stock part used in the construction of various devices." + id = "super_matter_bin" + req_tech = list("materials" = 5) + build_type = PROTOLATHE + materials = list("$metal" = 80) + reliability = 75 + build_path = /obj/item/weapon/stock_parts/matter_bin/super + +datum/design/subspace_ansible + name = "Subspace Ansible" + desc = "A compact module capable of sensing extradimensional activity." + id = "s-ansible" + req_tech = list("programming" = 2, "magnets" = 2, "materials" = 2, "bluespace" = 1) + build_type = PROTOLATHE + materials = list("$metal" = 80, "$silver" = 20) + build_path = /obj/item/weapon/stock_parts/subspace/ansible + +datum/design/hyperwave_filter + name = "Hyperwave Filter" + desc = "A tiny device capable of filtering and converting super-intense radiowaves." + id = "s-filter" + req_tech = list("programming" = 2, "magnets" = 2) + build_type = PROTOLATHE + materials = list("$metal" = 40, "$silver" = 10) + build_path = /obj/item/weapon/stock_parts/subspace/filter + +datum/design/subspace_amplifier + name = "Subspace Amplifier" + desc = "A compact micro-machine capable of amplifying weak subspace transmissions." + id = "s-amplifier" + req_tech = list("programming" = 2, "magnets" = 2, "materials" = 2, "bluespace" = 1) + build_type = PROTOLATHE + materials = list("$metal" = 10, "$gold" = 30, "$uranium" = 15) + build_path = /obj/item/weapon/stock_parts/subspace/amplifier + +datum/design/subspace_treatment + name = "Subspace Treatment Disk" + desc = "A compact micro-machine capable of stretching out hyper-compressed radio waves." + id = "s-treatment" + req_tech = list("programming" = 2, "magnets" = 1, "materials" = 2, "bluespace" = 1) + build_type = PROTOLATHE + materials = list("$metal" = 10, "$silver" = 20) + build_path = /obj/item/weapon/stock_parts/subspace/treatment + +datum/design/subspace_analyzer + name = "Subspace Analyzer" + desc = "A sophisticated analyzer capable of analyzing cryptic subspace wavelengths." + id = "s-analyzer" + req_tech = list("programming" = 2, "magnets" = 2, "materials" = 2, "bluespace" = 1) + build_type = PROTOLATHE + materials = list("$metal" = 10, "$gold" = 15) + build_path = /obj/item/weapon/stock_parts/subspace/analyzer + +datum/design/subspace_crystal + name = "Ansible Crystal" + desc = "A sophisticated analyzer capable of analyzing cryptic subspace wavelengths." + id = "s-crystal" + req_tech = list("magnets" = 2, "materials" = 2, "bluespace" = 1) + build_type = PROTOLATHE + materials = list("$glass" = 1000, "$silver" = 20, "$gold" = 20) + build_path = /obj/item/weapon/stock_parts/subspace/crystal + +datum/design/subspace_transmitter + name = "Subspace Transmitter" + desc = "A large piece of equipment used to open a window into the subspace dimension." + id = "s-transmitter" + req_tech = list("magnets" = 3, "materials" = 3, "bluespace" = 2) + build_type = PROTOLATHE + materials = list("$glass" = 100, "$silver" = 10, "$uranium" = 15) + build_path = /obj/item/weapon/stock_parts/subspace/transmitter \ No newline at end of file diff --git a/code/modules/research/designs/telecomms_designs.dm b/code/modules/research/designs/telecomms_designs.dm new file mode 100644 index 00000000000..e4de22f4fdd --- /dev/null +++ b/code/modules/research/designs/telecomms_designs.dm @@ -0,0 +1,66 @@ +/////////////////////////////////// +/////Subspace Telecomms//////////// +/////////////////////////////////// + +datum/design/subspace_receiver + name = "Machine Design (Subspace Receiver)" + desc = "Allows for the construction of Subspace Receiver equipment." + id = "s-receiver" + req_tech = list("programming" = 2, "engineering" = 2, "bluespace" = 1) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/telecomms/receiver + +datum/design/telecomms_bus + name = "Machine Design (Bus Mainframe)" + desc = "Allows for the construction of Telecommunications Bus Mainframes." + id = "s-bus" + req_tech = list("programming" = 2, "engineering" = 2) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/telecomms/bus + +datum/design/telecomms_hub + name = "Machine Design (Hub Mainframe)" + desc = "Allows for the construction of Telecommunications Hub Mainframes." + id = "s-hub" + req_tech = list("programming" = 2, "engineering" = 2) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/telecomms/hub + +datum/design/telecomms_relay + name = "Machine Design (Relay Mainframe)" + desc = "Allows for the construction of Telecommunications Relay Mainframes." + id = "s-relay" + req_tech = list("programming" = 2, "engineering" = 2, "bluespace" = 2) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/telecomms/relay + +datum/design/telecomms_processor + name = "Machine Design (Processor Unit)" + desc = "Allows for the construction of Telecommunications Processor equipment." + id = "s-processor" + req_tech = list("programming" = 2, "engineering" = 2) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/telecomms/processor + +datum/design/telecomms_server + name = "Machine Design (Server Mainframe)" + desc = "Allows for the construction of Telecommunications Servers." + id = "s-server" + req_tech = list("programming" = 2, "engineering" = 2) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/telecomms/server + +datum/design/subspace_broadcaster + name = "Machine Design (Subspace Broadcaster)" + desc = "Allows for the construction of Subspace Broadcasting equipment." + id = "s-broadcaster" + req_tech = list("programming" = 2, "engineering" = 2, "bluespace" = 1) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/telecomms/broadcaster \ No newline at end of file diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm new file mode 100644 index 00000000000..b50e0225101 --- /dev/null +++ b/code/modules/research/designs/weapon_designs.dm @@ -0,0 +1,167 @@ +///////////////////////////////////////// +/////////////////Weapons///////////////// +///////////////////////////////////////// + +datum/design/nuclear_gun + name = "Advanced Energy Gun" + desc = "An energy gun with an experimental miniaturized reactor." + id = "nuclear_gun" + req_tech = list("combat" = 3, "materials" = 5, "powerstorage" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 5000, "$glass" = 1000, "$uranium" = 2000) + reliability = 76 + build_path = /obj/item/weapon/gun/energy/gun/nuclear + locked = 1 + +datum/design/stunrevolver + name = "Stun Revolver" + desc = "The prize of the Head of Security." + id = "stunrevolver" + req_tech = list("combat" = 3, "materials" = 3, "powerstorage" = 2) + build_type = PROTOLATHE + materials = list("$metal" = 4000) + build_path = /obj/item/weapon/gun/energy/stunrevolver + locked = 1 + +datum/design/lasercannon + name = "Laser Cannon" + desc = "A heavy duty laser cannon." + id = "lasercannon" + req_tech = list("combat" = 4, "materials" = 3, "powerstorage" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 10000, "$glass" = 2000, "$diamond" = 2000) + build_path = /obj/item/weapon/gun/energy/lasercannon + locked = 1 + +datum/design/decloner + name = "Decloner" + desc = "Your opponent will bubble into a messy pile of goop." + id = "decloner" + req_tech = list("combat" = 8, "materials" = 7, "biotech" = 5, "powerstorage" = 6) + build_type = PROTOLATHE + materials = list("$gold" = 5000,"$uranium" = 10000, "mutagen" = 40) + build_path = /obj/item/weapon/gun/energy/decloner + locked = 1 +/* +datum/design/chemsprayer + name = "Chem Sprayer" + desc = "An advanced chem spraying device." + id = "chemsprayer" + req_tech = list("combat" = 3, "materials" = 3, "engineering" = 3, "biotech" = 2) + build_type = PROTOLATHE + materials = list("$metal" = 5000, "$glass" = 1000) + reliability = 100 + build_path = /obj/item/weapon/chemsprayer" +*/ +datum/design/rapidsyringe + name = "Rapid Syringe Gun" + desc = "A gun that fires many syringes." + id = "rapidsyringe" + req_tech = list("combat" = 3, "materials" = 3, "engineering" = 3, "biotech" = 2) + build_type = PROTOLATHE + materials = list("$metal" = 5000, "$glass" = 1000) + build_path = /obj/item/weapon/gun/syringe/rapidsyringe +/* +datum/design/largecrossbow + name = "Energy Crossbow" + desc = "A weapon favoured by syndicate infiltration teams." + id = "largecrossbow" + req_tech = list("combat" = 4, "materials" = 5, "engineering" = 3, "biotech" = 4, "syndicate" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 5000, "$glass" = 1000, "$uranium" = 1000, "$silver" = 1000) + build_path = /obj/item/weapon/gun/energy/crossbow/largecrossbow" +*/ +datum/design/temp_gun + name = "Temperature Gun" + desc = "A gun that shoots temperature bullet energythings to change temperature."//Change it if you want + id = "temp_gun" + req_tech = list("combat" = 3, "materials" = 4, "powerstorage" = 3, "magnets" = 2) + build_type = PROTOLATHE + materials = list("$metal" = 5000, "$glass" = 500, "$silver" = 3000) + build_path = /obj/item/weapon/gun/energy/temperature + locked = 1 + +datum/design/flora_gun + name = "Floral Somatoray" + desc = "A tool that discharges controlled radiation which induces mutation in plant cells. Harmless to other organic life." + id = "flora_gun" + req_tech = list("materials" = 2, "biotech" = 3, "powerstorage" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 2000, "$glass" = 500, "radium" = 20) + build_path = /obj/item/weapon/gun/energy/floragun + +datum/design/large_grenade + name = "Large Grenade" + desc = "A grenade that affects a larger area and use larger containers." + id = "large_Grenade" + req_tech = list("combat" = 3, "materials" = 2) + build_type = PROTOLATHE + materials = list("$metal" = 3000) + reliability = 79 + build_path = /obj/item/weapon/grenade/chem_grenade/large + +datum/design/smg + name = "Submachine Gun" + desc = "A lightweight, fast firing gun." + id = "smg" + req_tech = list("combat" = 4, "materials" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 8000, "$silver" = 2000, "$diamond" = 1000) + build_path = /obj/item/weapon/gun/projectile/automatic + locked = 1 + +datum/design/xray + name = "Xray Laser Gun" + desc = "Not quite as menacing as it sounds" + id = "xray" + req_tech = list("combat" = 6, "materials" = 5, "biotech" = 5, "powerstorage" = 4) + build_type = PROTOLATHE + materials = list("$gold" = 5000,"$uranium" = 10000, "$metal" = 4000) + build_path = /obj/item/weapon/gun/energy/xray + locked = 1 + +datum/design/ionrifle + name = "Ion Rifle" + desc = "How to dismantle a cyborg : The gun." + id = "ionrifle" + req_tech = list("combat" = 5, "materials" = 4, "magnets" = 4) + build_type = PROTOLATHE + materials = list("$silver" = 4000, "$metal" = 6000, "$uranium" = 1000) + build_path = /obj/item/weapon/gun/energy/ionrifle + locked = 1 + +datum/design/ammo_9mm + name = "Ammunition Box (9mm)" + desc = "A box of prototype 9mm ammunition." + id = "ammo_9mm" + req_tech = list("combat" = 4, "materials" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 2000) + build_path = /obj/item/ammo_box/c9mm + +datum/design/mag_smg + name = "Submachine Gun Magazine (9mm)" + desc = "A prototype magazine for the submachine gun." + id = "mag_smg" + req_tech = list("combat" = 4, "materials" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 2000) + build_path = /obj/item/ammo_box/magazine/msmg9mm + +datum/design/stunshell + name = "Stun Shell" + desc = "A stunning shell for a shotgun." + id = "stunshell" + req_tech = list("combat" = 3, "materials" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 200) + build_path = /obj/item/ammo_casing/shotgun/stunshell + +datum/design/techshell + name = "Unloaded Technological Shotshell" + desc = "A high-tech shotgun shell which can be loaded with materials to produce unique effects." + id = "techshotshell" + req_tech = list("combat" = 3, "materials" = 3, "powerstorage" = 4, "magnets" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 1000, "$glass" = 200, "$silver" = 300) + build_path = /obj/item/ammo_casing/shotgun/techshell \ No newline at end of file diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index 859d5a20481..aa4d807255d 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -392,7 +392,7 @@ won't update every console in existence) but it's more of a hassle to do. Also, var/P = being_built.build_path //lets save these values before the spawn() just in case. Nobody likes runtimes. var/R = being_built.reliability var/O = being_built.locked - spawn(32*amount) + spawn(32*amount/coeff) if(g2g) //And if we only fail the material requirements, we still spend time and power for(var/i = 0, iSpanmin
    \ No newline at end of file diff --git a/html/changelog.html b/html/changelog.html index 36bdbe08a5c..289f12a5c7d 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,37 @@ should be listed in the changelog upon commit tho. Thanks. --> +
    +

    20 August 2014

    +

    Cheridan updated:

    +
      +
    • Three new shotgun shells added. Create them by first researching and printing an unloaded tech shell in R&D. Afterwards, use table-crafting with the appropriate components with a screwdriver in-hand.
    • +
    • Meteorshot: tech shell + compressed matter cartridge + micro(or better) manipulator.
    • +
    • Pulse Slug: tech shell + advanced capacitor + ultra micro-laser.
    • +
    • Dragonsbreath: tech shell + 5 phosphorus (in container).
    • +
    • Incendiary rounds now leave a blazing trail as they pass. This includes existing incendiary rounds, new dragonsbreath rounds, and the Dark Gygax's carbine.
    • +
    +
    + +
    +

    19 August 2014

    +

    Ikarrus updated:

    +
      +
    • Brig cells and labour shuttle have both been modified to send a message to all security HUDs whenever a prisoner is automatically released.
    • +
    • The labour camp has been outfitted with a points checking console to allow prisoners to check their quota progress easier and better explain the punishment system of forced labour.
    • +
    +
    + +
    +

    15 August 2014

    +

    AndroidSFV updated:

    +
      +
    • AI photography has been extended to Cyborgs. While connected to an AI, all images taken by cyborgs will be placed in the AI's album, and viewable by the AI and all linked Cyborgs.
    • +
    • When a Cyborgs AI link wire is pulsed, the images from the Cyborgs image album will be synced with the AI it gets linked to.
    • +
    • Additonally, Cyborgs are able to attach images to newscaster feeds from whichever album is active for them. Cyborgs are also mobile, inefficent, printers of same images. +
    +
    +

    11 August 2014

    Ikarrus updated:

    diff --git a/icons/mob/back.dmi b/icons/mob/back.dmi index 5efde47fc04..5c0f93e93d8 100644 Binary files a/icons/mob/back.dmi and b/icons/mob/back.dmi differ diff --git a/icons/mob/human_face.dmi b/icons/mob/human_face.dmi index 7b9629e0de8..6446a854770 100644 Binary files a/icons/mob/human_face.dmi and b/icons/mob/human_face.dmi differ diff --git a/icons/obj/ammo.dmi b/icons/obj/ammo.dmi index 3126cde6405..94ff50ba91a 100644 Binary files a/icons/obj/ammo.dmi and b/icons/obj/ammo.dmi differ diff --git a/interface/stylesheet.dm b/interface/stylesheet.dm index db0b10a1046..7899d955929 100644 --- a/interface/stylesheet.dm +++ b/interface/stylesheet.dm @@ -26,13 +26,13 @@ em {font-style: normal; font-weight: bold;} .deadsay {color: #5c00e6;} .radio {color: #008000;} .sciradio {color: #993399;} -.comradio {color: #ACA82D;} -.secradio {color: #B22222;} +.comradio {color: #aca82d;} +.secradio {color: #b22222;} .medradio {color: #337296;} .engradio {color: #fb5613;} .suppradio {color: #a8732b;} .servradio {color: #6eaa2c;} -.syndradio {color: #6D3F40;} +.syndradio {color: #6d3f40;} .dsquadradio {color: #686868;} .aiprivradio {color: #ff00ff;} @@ -40,7 +40,7 @@ em {font-style: normal; font-weight: bold;} h1.alert, h2.alert {color: #000000;} .emote { font-style: italic;} -.selecteddna {color: #FFFFFF; background-color: #001B1B} +.selecteddna {color: #ffffff; background-color: #001B1B} .attack {color: #ff0000;} .disarm {color: #990000;} @@ -53,16 +53,18 @@ h1.alert, h2.alert {color: #000000;} .rose {color: #ff5050;} .info {color: #0000CC;} .notice {color: #000099;} -.unconscious {color: #0000FF; font-weight: bold;} +.unconscious {color: #0000ff; font-weight: bold;} .suicide {color: #ff5050; font-style: italic;} -.alien {color: #543354;} .newscaster {color: #800000;} .ghostalert {color: #5c00e6; font-style: italic; font-weight: bold;} +.alien {color: #543354;} +.noticealien {color: #00c000;} +.alertalien {color: #00c000; font-weight: bold;} + .interface {color: #330033;} BIG IMG.icon {width: 32px; height: 32px;} - "} diff --git a/sound/vox_fem/a.ogg b/sound/vox_fem/a.ogg index 7c6863012b7..f91e6de8f29 100644 Binary files a/sound/vox_fem/a.ogg and b/sound/vox_fem/a.ogg differ diff --git a/sound/vox_fem/abortions.ogg b/sound/vox_fem/abortions.ogg index e371694b6ca..1eecff6c89d 100644 Binary files a/sound/vox_fem/abortions.ogg and b/sound/vox_fem/abortions.ogg differ diff --git a/sound/vox_fem/accelerating.ogg b/sound/vox_fem/accelerating.ogg index ef15dcda4e4..2ad134d963d 100644 Binary files a/sound/vox_fem/accelerating.ogg and b/sound/vox_fem/accelerating.ogg differ diff --git a/sound/vox_fem/accelerator.ogg b/sound/vox_fem/accelerator.ogg index 81982a0cb7a..3cc4044525a 100644 Binary files a/sound/vox_fem/accelerator.ogg and b/sound/vox_fem/accelerator.ogg differ diff --git a/sound/vox_fem/accepted.ogg b/sound/vox_fem/accepted.ogg index c8e6ea76d48..0e93357e9d6 100644 Binary files a/sound/vox_fem/accepted.ogg and b/sound/vox_fem/accepted.ogg differ diff --git a/sound/vox_fem/access.ogg b/sound/vox_fem/access.ogg index 8c02ddb5b41..21c926651cc 100644 Binary files a/sound/vox_fem/access.ogg and b/sound/vox_fem/access.ogg differ diff --git a/sound/vox_fem/acknowledge.ogg b/sound/vox_fem/acknowledge.ogg index a25661cc08c..29938de29de 100644 Binary files a/sound/vox_fem/acknowledge.ogg and b/sound/vox_fem/acknowledge.ogg differ diff --git a/sound/vox_fem/acknowledged.ogg b/sound/vox_fem/acknowledged.ogg index ce3a8756494..910a31fc179 100644 Binary files a/sound/vox_fem/acknowledged.ogg and b/sound/vox_fem/acknowledged.ogg differ diff --git a/sound/vox_fem/acquired.ogg b/sound/vox_fem/acquired.ogg index 0b74101ec9b..8248e057782 100644 Binary files a/sound/vox_fem/acquired.ogg and b/sound/vox_fem/acquired.ogg differ diff --git a/sound/vox_fem/acquisition.ogg b/sound/vox_fem/acquisition.ogg index 1d4e67fd603..28d3dc67355 100644 Binary files a/sound/vox_fem/acquisition.ogg and b/sound/vox_fem/acquisition.ogg differ diff --git a/sound/vox_fem/across.ogg b/sound/vox_fem/across.ogg index d9db1b83de8..e3a82f7ee9a 100644 Binary files a/sound/vox_fem/across.ogg and b/sound/vox_fem/across.ogg differ diff --git a/sound/vox_fem/activate.ogg b/sound/vox_fem/activate.ogg index f49bcd878d4..662f74e7a51 100644 Binary files a/sound/vox_fem/activate.ogg and b/sound/vox_fem/activate.ogg differ diff --git a/sound/vox_fem/activated.ogg b/sound/vox_fem/activated.ogg index 4a7a260665d..526352d0bed 100644 Binary files a/sound/vox_fem/activated.ogg and b/sound/vox_fem/activated.ogg differ diff --git a/sound/vox_fem/activity.ogg b/sound/vox_fem/activity.ogg index d045d6b2541..b45be28c061 100644 Binary files a/sound/vox_fem/activity.ogg and b/sound/vox_fem/activity.ogg differ diff --git a/sound/vox_fem/adios.ogg b/sound/vox_fem/adios.ogg index d9c536be6cc..d90dec63ab4 100644 Binary files a/sound/vox_fem/adios.ogg and b/sound/vox_fem/adios.ogg differ diff --git a/sound/vox_fem/administration.ogg b/sound/vox_fem/administration.ogg index 404b9d4043d..89df9d6889d 100644 Binary files a/sound/vox_fem/administration.ogg and b/sound/vox_fem/administration.ogg differ diff --git a/sound/vox_fem/advanced.ogg b/sound/vox_fem/advanced.ogg index 3a32cb81682..04359f62e25 100644 Binary files a/sound/vox_fem/advanced.ogg and b/sound/vox_fem/advanced.ogg differ diff --git a/sound/vox_fem/aft.ogg b/sound/vox_fem/aft.ogg index 242c094023b..c7d967e8159 100644 Binary files a/sound/vox_fem/aft.ogg and b/sound/vox_fem/aft.ogg differ diff --git a/sound/vox_fem/after.ogg b/sound/vox_fem/after.ogg index 4115198e065..950e3019b22 100644 Binary files a/sound/vox_fem/after.ogg and b/sound/vox_fem/after.ogg differ diff --git a/sound/vox_fem/agent.ogg b/sound/vox_fem/agent.ogg index 6affb0e3c2d..0375ccaa700 100644 Binary files a/sound/vox_fem/agent.ogg and b/sound/vox_fem/agent.ogg differ diff --git a/sound/vox_fem/ai.ogg b/sound/vox_fem/ai.ogg index c1249bf9625..af61ae25cec 100644 Binary files a/sound/vox_fem/ai.ogg and b/sound/vox_fem/ai.ogg differ diff --git a/sound/vox_fem/alarm.ogg b/sound/vox_fem/alarm.ogg index 4f42cd10b6f..b3aad597351 100644 Binary files a/sound/vox_fem/alarm.ogg and b/sound/vox_fem/alarm.ogg differ diff --git a/sound/vox_fem/alert.ogg b/sound/vox_fem/alert.ogg index d17cf6ee971..9e66d9b1c2d 100644 Binary files a/sound/vox_fem/alert.ogg and b/sound/vox_fem/alert.ogg differ diff --git a/sound/vox_fem/alien.ogg b/sound/vox_fem/alien.ogg index 3abd5ebbd77..4895423f5e9 100644 Binary files a/sound/vox_fem/alien.ogg and b/sound/vox_fem/alien.ogg differ diff --git a/sound/vox_fem/aligned.ogg b/sound/vox_fem/aligned.ogg index 097685c71d1..9a427ad6fb7 100644 Binary files a/sound/vox_fem/aligned.ogg and b/sound/vox_fem/aligned.ogg differ diff --git a/sound/vox_fem/all.ogg b/sound/vox_fem/all.ogg index 52c4d6b59f7..d02fbf8d5b5 100644 Binary files a/sound/vox_fem/all.ogg and b/sound/vox_fem/all.ogg differ diff --git a/sound/vox_fem/alpha.ogg b/sound/vox_fem/alpha.ogg index bcd722c96b8..ab5aa85a0f6 100644 Binary files a/sound/vox_fem/alpha.ogg and b/sound/vox_fem/alpha.ogg differ diff --git a/sound/vox_fem/am.ogg b/sound/vox_fem/am.ogg index ce499f11c57..a38d05c9356 100644 Binary files a/sound/vox_fem/am.ogg and b/sound/vox_fem/am.ogg differ diff --git a/sound/vox_fem/amigo.ogg b/sound/vox_fem/amigo.ogg index 3ea42298e3a..efe51a5568e 100644 Binary files a/sound/vox_fem/amigo.ogg and b/sound/vox_fem/amigo.ogg differ diff --git a/sound/vox_fem/ammunition.ogg b/sound/vox_fem/ammunition.ogg index 4f8dc140185..e13406ab284 100644 Binary files a/sound/vox_fem/ammunition.ogg and b/sound/vox_fem/ammunition.ogg differ diff --git a/sound/vox_fem/an.ogg b/sound/vox_fem/an.ogg index 5d7c8595bb4..c371f13ee35 100644 Binary files a/sound/vox_fem/an.ogg and b/sound/vox_fem/an.ogg differ diff --git a/sound/vox_fem/and.ogg b/sound/vox_fem/and.ogg index b64e51ddbc8..6765aaa98d0 100644 Binary files a/sound/vox_fem/and.ogg and b/sound/vox_fem/and.ogg differ diff --git a/sound/vox_fem/announcement.ogg b/sound/vox_fem/announcement.ogg index f1fd37d9848..16cc4b45710 100644 Binary files a/sound/vox_fem/announcement.ogg and b/sound/vox_fem/announcement.ogg differ diff --git a/sound/vox_fem/anomalous.ogg b/sound/vox_fem/anomalous.ogg index 5a614592d63..00849a70c75 100644 Binary files a/sound/vox_fem/anomalous.ogg and b/sound/vox_fem/anomalous.ogg differ diff --git a/sound/vox_fem/antenna.ogg b/sound/vox_fem/antenna.ogg index 55c390aaa9d..65e50cb55d5 100644 Binary files a/sound/vox_fem/antenna.ogg and b/sound/vox_fem/antenna.ogg differ diff --git a/sound/vox_fem/any.ogg b/sound/vox_fem/any.ogg index b5e648653ae..bf10035db98 100644 Binary files a/sound/vox_fem/any.ogg and b/sound/vox_fem/any.ogg differ diff --git a/sound/vox_fem/apprehend.ogg b/sound/vox_fem/apprehend.ogg index 91b99cf6721..8b84b7b5439 100644 Binary files a/sound/vox_fem/apprehend.ogg and b/sound/vox_fem/apprehend.ogg differ diff --git a/sound/vox_fem/approach.ogg b/sound/vox_fem/approach.ogg index d6dc3d2a167..e1514d1bded 100644 Binary files a/sound/vox_fem/approach.ogg and b/sound/vox_fem/approach.ogg differ diff --git a/sound/vox_fem/are.ogg b/sound/vox_fem/are.ogg index 240ed4d32cf..c91427b9760 100644 Binary files a/sound/vox_fem/are.ogg and b/sound/vox_fem/are.ogg differ diff --git a/sound/vox_fem/area.ogg b/sound/vox_fem/area.ogg index e631b97ebc2..7bb402ba3e8 100644 Binary files a/sound/vox_fem/area.ogg and b/sound/vox_fem/area.ogg differ diff --git a/sound/vox_fem/arm.ogg b/sound/vox_fem/arm.ogg index aa1cf4ca4d9..270325ca9b6 100644 Binary files a/sound/vox_fem/arm.ogg and b/sound/vox_fem/arm.ogg differ diff --git a/sound/vox_fem/armed.ogg b/sound/vox_fem/armed.ogg index 0e980613d62..6710dc13328 100644 Binary files a/sound/vox_fem/armed.ogg and b/sound/vox_fem/armed.ogg differ diff --git a/sound/vox_fem/armor.ogg b/sound/vox_fem/armor.ogg index d8509a510f1..be00c5c1aed 100644 Binary files a/sound/vox_fem/armor.ogg and b/sound/vox_fem/armor.ogg differ diff --git a/sound/vox_fem/armory.ogg b/sound/vox_fem/armory.ogg index ee9adea2918..1b8b486713f 100644 Binary files a/sound/vox_fem/armory.ogg and b/sound/vox_fem/armory.ogg differ diff --git a/sound/vox_fem/array.ogg b/sound/vox_fem/array.ogg index c482e0db211..3caabbf9d94 100644 Binary files a/sound/vox_fem/array.ogg and b/sound/vox_fem/array.ogg differ diff --git a/sound/vox_fem/arrest.ogg b/sound/vox_fem/arrest.ogg index 3d812f2fefe..db4291d93eb 100644 Binary files a/sound/vox_fem/arrest.ogg and b/sound/vox_fem/arrest.ogg differ diff --git a/sound/vox_fem/asimov.ogg b/sound/vox_fem/asimov.ogg index 752be57d8f9..6665a1c2b6a 100644 Binary files a/sound/vox_fem/asimov.ogg and b/sound/vox_fem/asimov.ogg differ diff --git a/sound/vox_fem/ass.ogg b/sound/vox_fem/ass.ogg index b261433ea39..ab51e76032d 100644 Binary files a/sound/vox_fem/ass.ogg and b/sound/vox_fem/ass.ogg differ diff --git a/sound/vox_fem/asshole.ogg b/sound/vox_fem/asshole.ogg index 7eabf85a29c..d446c21281a 100644 Binary files a/sound/vox_fem/asshole.ogg and b/sound/vox_fem/asshole.ogg differ diff --git a/sound/vox_fem/assholes.ogg b/sound/vox_fem/assholes.ogg index 612d6ab4b75..ce06096ef42 100644 Binary files a/sound/vox_fem/assholes.ogg and b/sound/vox_fem/assholes.ogg differ diff --git a/sound/vox_fem/at.ogg b/sound/vox_fem/at.ogg index bd45395c0d9..446edf47878 100644 Binary files a/sound/vox_fem/at.ogg and b/sound/vox_fem/at.ogg differ diff --git a/sound/vox_fem/atomic.ogg b/sound/vox_fem/atomic.ogg index ffece4ca03e..6d75570f0e8 100644 Binary files a/sound/vox_fem/atomic.ogg and b/sound/vox_fem/atomic.ogg differ diff --git a/sound/vox_fem/attention.ogg b/sound/vox_fem/attention.ogg index 655a2f76a70..1de7b20fca9 100644 Binary files a/sound/vox_fem/attention.ogg and b/sound/vox_fem/attention.ogg differ diff --git a/sound/vox_fem/authorize.ogg b/sound/vox_fem/authorize.ogg index a14d2cad1fd..332ed3b3314 100644 Binary files a/sound/vox_fem/authorize.ogg and b/sound/vox_fem/authorize.ogg differ diff --git a/sound/vox_fem/authorized.ogg b/sound/vox_fem/authorized.ogg index 127e498e22d..d7f91f81328 100644 Binary files a/sound/vox_fem/authorized.ogg and b/sound/vox_fem/authorized.ogg differ diff --git a/sound/vox_fem/automatic.ogg b/sound/vox_fem/automatic.ogg index 47296e85ad1..2f7fedada2e 100644 Binary files a/sound/vox_fem/automatic.ogg and b/sound/vox_fem/automatic.ogg differ diff --git a/sound/vox_fem/away.ogg b/sound/vox_fem/away.ogg index 2e550b5c7dd..3f482d5ccf3 100644 Binary files a/sound/vox_fem/away.ogg and b/sound/vox_fem/away.ogg differ diff --git a/sound/vox_fem/b.ogg b/sound/vox_fem/b.ogg index e5444171ebc..9985f7c56aa 100644 Binary files a/sound/vox_fem/b.ogg and b/sound/vox_fem/b.ogg differ diff --git a/sound/vox_fem/back.ogg b/sound/vox_fem/back.ogg index 77e7a83bc53..87fd5b3cc0d 100644 Binary files a/sound/vox_fem/back.ogg and b/sound/vox_fem/back.ogg differ diff --git a/sound/vox_fem/backman.ogg b/sound/vox_fem/backman.ogg index 77c9e19e816..6b3e758e90b 100644 Binary files a/sound/vox_fem/backman.ogg and b/sound/vox_fem/backman.ogg differ diff --git a/sound/vox_fem/bad.ogg b/sound/vox_fem/bad.ogg index b3cb0af0288..3dd4e2cec6b 100644 Binary files a/sound/vox_fem/bad.ogg and b/sound/vox_fem/bad.ogg differ diff --git a/sound/vox_fem/bag.ogg b/sound/vox_fem/bag.ogg index 74237046e27..04d64df9f2f 100644 Binary files a/sound/vox_fem/bag.ogg and b/sound/vox_fem/bag.ogg differ diff --git a/sound/vox_fem/bailey.ogg b/sound/vox_fem/bailey.ogg index d75f5782a87..25fee818440 100644 Binary files a/sound/vox_fem/bailey.ogg and b/sound/vox_fem/bailey.ogg differ diff --git a/sound/vox_fem/barracks.ogg b/sound/vox_fem/barracks.ogg index 160c63d1f54..6f78b3a8202 100644 Binary files a/sound/vox_fem/barracks.ogg and b/sound/vox_fem/barracks.ogg differ diff --git a/sound/vox_fem/base.ogg b/sound/vox_fem/base.ogg index d73dec5177c..9706d299453 100644 Binary files a/sound/vox_fem/base.ogg and b/sound/vox_fem/base.ogg differ diff --git a/sound/vox_fem/bay.ogg b/sound/vox_fem/bay.ogg index fe61b649713..a4aac8563f3 100644 Binary files a/sound/vox_fem/bay.ogg and b/sound/vox_fem/bay.ogg differ diff --git a/sound/vox_fem/be.ogg b/sound/vox_fem/be.ogg index 925b02ead8a..e3ee37f2a04 100644 Binary files a/sound/vox_fem/be.ogg and b/sound/vox_fem/be.ogg differ diff --git a/sound/vox_fem/been.ogg b/sound/vox_fem/been.ogg index 011629a1527..202d8f229cd 100644 Binary files a/sound/vox_fem/been.ogg and b/sound/vox_fem/been.ogg differ diff --git a/sound/vox_fem/before.ogg b/sound/vox_fem/before.ogg index ab94bf3fe0d..9b25bf1d2c6 100644 Binary files a/sound/vox_fem/before.ogg and b/sound/vox_fem/before.ogg differ diff --git a/sound/vox_fem/beyond.ogg b/sound/vox_fem/beyond.ogg index e11d695a5da..d9064b764a3 100644 Binary files a/sound/vox_fem/beyond.ogg and b/sound/vox_fem/beyond.ogg differ diff --git a/sound/vox_fem/biohazard.ogg b/sound/vox_fem/biohazard.ogg index 55ff5d6eb32..914a083c5be 100644 Binary files a/sound/vox_fem/biohazard.ogg and b/sound/vox_fem/biohazard.ogg differ diff --git a/sound/vox_fem/biological.ogg b/sound/vox_fem/biological.ogg index 3e1fd695dfa..4efbb349702 100644 Binary files a/sound/vox_fem/biological.ogg and b/sound/vox_fem/biological.ogg differ diff --git a/sound/vox_fem/birdwell.ogg b/sound/vox_fem/birdwell.ogg index 2a07a4de4e4..b291d8d40b2 100644 Binary files a/sound/vox_fem/birdwell.ogg and b/sound/vox_fem/birdwell.ogg differ diff --git a/sound/vox_fem/bitch.ogg b/sound/vox_fem/bitch.ogg index 32c80e7b348..348715b1517 100644 Binary files a/sound/vox_fem/bitch.ogg and b/sound/vox_fem/bitch.ogg differ diff --git a/sound/vox_fem/bitches.ogg b/sound/vox_fem/bitches.ogg index 25f9504c6ba..dab8e1257ab 100644 Binary files a/sound/vox_fem/bitches.ogg and b/sound/vox_fem/bitches.ogg differ diff --git a/sound/vox_fem/black.ogg b/sound/vox_fem/black.ogg index 2d5d30ef695..9c74790de48 100644 Binary files a/sound/vox_fem/black.ogg and b/sound/vox_fem/black.ogg differ diff --git a/sound/vox_fem/blast.ogg b/sound/vox_fem/blast.ogg index 52bac578777..21d13d1e3ba 100644 Binary files a/sound/vox_fem/blast.ogg and b/sound/vox_fem/blast.ogg differ diff --git a/sound/vox_fem/blocked.ogg b/sound/vox_fem/blocked.ogg index 8208b0bf922..0d97cf44e04 100644 Binary files a/sound/vox_fem/blocked.ogg and b/sound/vox_fem/blocked.ogg differ diff --git a/sound/vox_fem/blue.ogg b/sound/vox_fem/blue.ogg index 0363e5effe8..2bca816f342 100644 Binary files a/sound/vox_fem/blue.ogg and b/sound/vox_fem/blue.ogg differ diff --git a/sound/vox_fem/bottom.ogg b/sound/vox_fem/bottom.ogg index 06bcfc8530c..c1850574c58 100644 Binary files a/sound/vox_fem/bottom.ogg and b/sound/vox_fem/bottom.ogg differ diff --git a/sound/vox_fem/bravo.ogg b/sound/vox_fem/bravo.ogg index 2ec3f494b31..eaba95e28b6 100644 Binary files a/sound/vox_fem/bravo.ogg and b/sound/vox_fem/bravo.ogg differ diff --git a/sound/vox_fem/breach.ogg b/sound/vox_fem/breach.ogg index 3b950aae120..b95f17f8d7c 100644 Binary files a/sound/vox_fem/breach.ogg and b/sound/vox_fem/breach.ogg differ diff --git a/sound/vox_fem/breached.ogg b/sound/vox_fem/breached.ogg index 0fa6340c03d..fd5369c05ac 100644 Binary files a/sound/vox_fem/breached.ogg and b/sound/vox_fem/breached.ogg differ diff --git a/sound/vox_fem/break.ogg b/sound/vox_fem/break.ogg index 4fb6c762694..7a846fad7f4 100644 Binary files a/sound/vox_fem/break.ogg and b/sound/vox_fem/break.ogg differ diff --git a/sound/vox_fem/bridge.ogg b/sound/vox_fem/bridge.ogg index 7912a06f8ba..9d99aaf7067 100644 Binary files a/sound/vox_fem/bridge.ogg and b/sound/vox_fem/bridge.ogg differ diff --git a/sound/vox_fem/bust.ogg b/sound/vox_fem/bust.ogg index 9660d48c132..eb227024863 100644 Binary files a/sound/vox_fem/bust.ogg and b/sound/vox_fem/bust.ogg differ diff --git a/sound/vox_fem/but.ogg b/sound/vox_fem/but.ogg index 00b2347b465..a1c80f6d5d7 100644 Binary files a/sound/vox_fem/but.ogg and b/sound/vox_fem/but.ogg differ diff --git a/sound/vox_fem/button.ogg b/sound/vox_fem/button.ogg index 3d7ce663acc..b31c342b149 100644 Binary files a/sound/vox_fem/button.ogg and b/sound/vox_fem/button.ogg differ diff --git a/sound/vox_fem/bypass.ogg b/sound/vox_fem/bypass.ogg index 7474c751735..f5e7449143b 100644 Binary files a/sound/vox_fem/bypass.ogg and b/sound/vox_fem/bypass.ogg differ diff --git a/sound/vox_fem/c.ogg b/sound/vox_fem/c.ogg index 6d4a237fa65..4fdccce68c4 100644 Binary files a/sound/vox_fem/c.ogg and b/sound/vox_fem/c.ogg differ diff --git a/sound/vox_fem/cable.ogg b/sound/vox_fem/cable.ogg index 8ac529fd93f..d859a727291 100644 Binary files a/sound/vox_fem/cable.ogg and b/sound/vox_fem/cable.ogg differ diff --git a/sound/vox_fem/call.ogg b/sound/vox_fem/call.ogg index 8b6b73b8dca..9040e35ca1a 100644 Binary files a/sound/vox_fem/call.ogg and b/sound/vox_fem/call.ogg differ diff --git a/sound/vox_fem/called.ogg b/sound/vox_fem/called.ogg index c87f00cacc9..b40530537dd 100644 Binary files a/sound/vox_fem/called.ogg and b/sound/vox_fem/called.ogg differ diff --git a/sound/vox_fem/canal.ogg b/sound/vox_fem/canal.ogg index d3082bb1460..74b888be6bf 100644 Binary files a/sound/vox_fem/canal.ogg and b/sound/vox_fem/canal.ogg differ diff --git a/sound/vox_fem/cap.ogg b/sound/vox_fem/cap.ogg index 2e5830b4325..842cd36f51a 100644 Binary files a/sound/vox_fem/cap.ogg and b/sound/vox_fem/cap.ogg differ diff --git a/sound/vox_fem/captain.ogg b/sound/vox_fem/captain.ogg index 891e7156f0e..b3c418cdd33 100644 Binary files a/sound/vox_fem/captain.ogg and b/sound/vox_fem/captain.ogg differ diff --git a/sound/vox_fem/capture.ogg b/sound/vox_fem/capture.ogg index ba4923e0e7f..7ff6e2d303f 100644 Binary files a/sound/vox_fem/capture.ogg and b/sound/vox_fem/capture.ogg differ diff --git a/sound/vox_fem/cargo.ogg b/sound/vox_fem/cargo.ogg index db5ba362071..bacb92bcefc 100644 Binary files a/sound/vox_fem/cargo.ogg and b/sound/vox_fem/cargo.ogg differ diff --git a/sound/vox_fem/ceiling.ogg b/sound/vox_fem/ceiling.ogg index 94a6c1e7e12..23077d3190f 100644 Binary files a/sound/vox_fem/ceiling.ogg and b/sound/vox_fem/ceiling.ogg differ diff --git a/sound/vox_fem/celsius.ogg b/sound/vox_fem/celsius.ogg index f511399c212..c581b1826c6 100644 Binary files a/sound/vox_fem/celsius.ogg and b/sound/vox_fem/celsius.ogg differ diff --git a/sound/vox_fem/centcom.ogg b/sound/vox_fem/centcom.ogg index 9c6404df836..fa959cf317e 100644 Binary files a/sound/vox_fem/centcom.ogg and b/sound/vox_fem/centcom.ogg differ diff --git a/sound/vox_fem/center.ogg b/sound/vox_fem/center.ogg index f7777bfe599..25287989017 100644 Binary files a/sound/vox_fem/center.ogg and b/sound/vox_fem/center.ogg differ diff --git a/sound/vox_fem/centi.ogg b/sound/vox_fem/centi.ogg index 4e05d4b1158..1edbec2af63 100644 Binary files a/sound/vox_fem/centi.ogg and b/sound/vox_fem/centi.ogg differ diff --git a/sound/vox_fem/central.ogg b/sound/vox_fem/central.ogg index 0559204e26a..46391d79d5f 100644 Binary files a/sound/vox_fem/central.ogg and b/sound/vox_fem/central.ogg differ diff --git a/sound/vox_fem/chamber.ogg b/sound/vox_fem/chamber.ogg index be4cd9990af..2ebe6e95ef8 100644 Binary files a/sound/vox_fem/chamber.ogg and b/sound/vox_fem/chamber.ogg differ diff --git a/sound/vox_fem/changed.ogg b/sound/vox_fem/changed.ogg index ca2ed7a42a1..a18a7e0bfa9 100644 Binary files a/sound/vox_fem/changed.ogg and b/sound/vox_fem/changed.ogg differ diff --git a/sound/vox_fem/charlie.ogg b/sound/vox_fem/charlie.ogg index c82908eb621..0178175604a 100644 Binary files a/sound/vox_fem/charlie.ogg and b/sound/vox_fem/charlie.ogg differ diff --git a/sound/vox_fem/check.ogg b/sound/vox_fem/check.ogg index f94e753b4b3..111d71d51aa 100644 Binary files a/sound/vox_fem/check.ogg and b/sound/vox_fem/check.ogg differ diff --git a/sound/vox_fem/checkpoint.ogg b/sound/vox_fem/checkpoint.ogg index 80ef803fc09..591e4506a73 100644 Binary files a/sound/vox_fem/checkpoint.ogg and b/sound/vox_fem/checkpoint.ogg differ diff --git a/sound/vox_fem/chemical.ogg b/sound/vox_fem/chemical.ogg index 8de2dfc54b5..f79015a82f3 100644 Binary files a/sound/vox_fem/chemical.ogg and b/sound/vox_fem/chemical.ogg differ diff --git a/sound/vox_fem/cleanup.ogg b/sound/vox_fem/cleanup.ogg index 700b9beb4d2..21bb9439055 100644 Binary files a/sound/vox_fem/cleanup.ogg and b/sound/vox_fem/cleanup.ogg differ diff --git a/sound/vox_fem/clear.ogg b/sound/vox_fem/clear.ogg index 0ea496386f0..28bc282ae23 100644 Binary files a/sound/vox_fem/clear.ogg and b/sound/vox_fem/clear.ogg differ diff --git a/sound/vox_fem/clearance.ogg b/sound/vox_fem/clearance.ogg index 73ebc3a3a5c..31e27ea4532 100644 Binary files a/sound/vox_fem/clearance.ogg and b/sound/vox_fem/clearance.ogg differ diff --git a/sound/vox_fem/close.ogg b/sound/vox_fem/close.ogg index a5655f9c8f1..e478f3c2423 100644 Binary files a/sound/vox_fem/close.ogg and b/sound/vox_fem/close.ogg differ diff --git a/sound/vox_fem/clown.ogg b/sound/vox_fem/clown.ogg index 2d8103e3a29..3d92a003732 100644 Binary files a/sound/vox_fem/clown.ogg and b/sound/vox_fem/clown.ogg differ diff --git a/sound/vox_fem/code.ogg b/sound/vox_fem/code.ogg index 6b233f565b6..2f4f969e63c 100644 Binary files a/sound/vox_fem/code.ogg and b/sound/vox_fem/code.ogg differ diff --git a/sound/vox_fem/coded.ogg b/sound/vox_fem/coded.ogg index 58750503ebc..a82df555807 100644 Binary files a/sound/vox_fem/coded.ogg and b/sound/vox_fem/coded.ogg differ diff --git a/sound/vox_fem/collider.ogg b/sound/vox_fem/collider.ogg index fc880498a4e..985d715bffe 100644 Binary files a/sound/vox_fem/collider.ogg and b/sound/vox_fem/collider.ogg differ diff --git a/sound/vox_fem/come.ogg b/sound/vox_fem/come.ogg index c666bdb1bb5..d3c414ff984 100644 Binary files a/sound/vox_fem/come.ogg and b/sound/vox_fem/come.ogg differ diff --git a/sound/vox_fem/command.ogg b/sound/vox_fem/command.ogg index b02f62f3162..4461a7f1a40 100644 Binary files a/sound/vox_fem/command.ogg and b/sound/vox_fem/command.ogg differ diff --git a/sound/vox_fem/communication.ogg b/sound/vox_fem/communication.ogg index 5acb9a4546f..1bdea077e1d 100644 Binary files a/sound/vox_fem/communication.ogg and b/sound/vox_fem/communication.ogg differ diff --git a/sound/vox_fem/complex.ogg b/sound/vox_fem/complex.ogg index 80d3734f3e5..baedb710c99 100644 Binary files a/sound/vox_fem/complex.ogg and b/sound/vox_fem/complex.ogg differ diff --git a/sound/vox_fem/computer.ogg b/sound/vox_fem/computer.ogg index dd194d2c9b9..9582c594bb9 100644 Binary files a/sound/vox_fem/computer.ogg and b/sound/vox_fem/computer.ogg differ diff --git a/sound/vox_fem/condition.ogg b/sound/vox_fem/condition.ogg index 024e408a209..d6467534104 100644 Binary files a/sound/vox_fem/condition.ogg and b/sound/vox_fem/condition.ogg differ diff --git a/sound/vox_fem/connor.ogg b/sound/vox_fem/connor.ogg index 17b85fc3a89..d151e640d31 100644 Binary files a/sound/vox_fem/connor.ogg and b/sound/vox_fem/connor.ogg differ diff --git a/sound/vox_fem/containment.ogg b/sound/vox_fem/containment.ogg index cc8674f2061..669ab3ebba3 100644 Binary files a/sound/vox_fem/containment.ogg and b/sound/vox_fem/containment.ogg differ diff --git a/sound/vox_fem/contamination.ogg b/sound/vox_fem/contamination.ogg index 327085dc375..11dd067ace7 100644 Binary files a/sound/vox_fem/contamination.ogg and b/sound/vox_fem/contamination.ogg differ diff --git a/sound/vox_fem/contraband.ogg b/sound/vox_fem/contraband.ogg index 2fe6da29f88..f236049a7cf 100644 Binary files a/sound/vox_fem/contraband.ogg and b/sound/vox_fem/contraband.ogg differ diff --git a/sound/vox_fem/control.ogg b/sound/vox_fem/control.ogg index 38b91cca882..0074e0ffbb5 100644 Binary files a/sound/vox_fem/control.ogg and b/sound/vox_fem/control.ogg differ diff --git a/sound/vox_fem/coolant.ogg b/sound/vox_fem/coolant.ogg index 923dcfd53c3..dc4065daee3 100644 Binary files a/sound/vox_fem/coolant.ogg and b/sound/vox_fem/coolant.ogg differ diff --git a/sound/vox_fem/coomer.ogg b/sound/vox_fem/coomer.ogg index ff8140db909..4f7f8ca3b94 100644 Binary files a/sound/vox_fem/coomer.ogg and b/sound/vox_fem/coomer.ogg differ diff --git a/sound/vox_fem/core.ogg b/sound/vox_fem/core.ogg index e3dd073d989..c44383dd591 100644 Binary files a/sound/vox_fem/core.ogg and b/sound/vox_fem/core.ogg differ diff --git a/sound/vox_fem/correct.ogg b/sound/vox_fem/correct.ogg index f9cf6b2e3d1..952bee83563 100644 Binary files a/sound/vox_fem/correct.ogg and b/sound/vox_fem/correct.ogg differ diff --git a/sound/vox_fem/corridor.ogg b/sound/vox_fem/corridor.ogg index 46b1cb16f07..04227fd5d4e 100644 Binary files a/sound/vox_fem/corridor.ogg and b/sound/vox_fem/corridor.ogg differ diff --git a/sound/vox_fem/coward.ogg b/sound/vox_fem/coward.ogg index 75873e43a54..a343df23f75 100644 Binary files a/sound/vox_fem/coward.ogg and b/sound/vox_fem/coward.ogg differ diff --git a/sound/vox_fem/cowards.ogg b/sound/vox_fem/cowards.ogg index 4aba6793a7a..f5dac8813c3 100644 Binary files a/sound/vox_fem/cowards.ogg and b/sound/vox_fem/cowards.ogg differ diff --git a/sound/vox_fem/crew.ogg b/sound/vox_fem/crew.ogg index f4f749fb575..4a886bbfb71 100644 Binary files a/sound/vox_fem/crew.ogg and b/sound/vox_fem/crew.ogg differ diff --git a/sound/vox_fem/cross.ogg b/sound/vox_fem/cross.ogg index 7efe69a4359..caaeb7057fb 100644 Binary files a/sound/vox_fem/cross.ogg and b/sound/vox_fem/cross.ogg differ diff --git a/sound/vox_fem/cryogenic.ogg b/sound/vox_fem/cryogenic.ogg index 2efb8db8b27..04624fe5601 100644 Binary files a/sound/vox_fem/cryogenic.ogg and b/sound/vox_fem/cryogenic.ogg differ diff --git a/sound/vox_fem/cunt.ogg b/sound/vox_fem/cunt.ogg index d5700592e42..37abf11e927 100644 Binary files a/sound/vox_fem/cunt.ogg and b/sound/vox_fem/cunt.ogg differ diff --git a/sound/vox_fem/cyborg.ogg b/sound/vox_fem/cyborg.ogg index 399fe35133f..76ea47f7d27 100644 Binary files a/sound/vox_fem/cyborg.ogg and b/sound/vox_fem/cyborg.ogg differ diff --git a/sound/vox_fem/cyborgs.ogg b/sound/vox_fem/cyborgs.ogg index 7c07d670b5d..f05ec68ac08 100644 Binary files a/sound/vox_fem/cyborgs.ogg and b/sound/vox_fem/cyborgs.ogg differ diff --git a/sound/vox_fem/d.ogg b/sound/vox_fem/d.ogg index 83eccc85a4b..55a41320604 100644 Binary files a/sound/vox_fem/d.ogg and b/sound/vox_fem/d.ogg differ diff --git a/sound/vox_fem/damage.ogg b/sound/vox_fem/damage.ogg index a43f9801929..08b44edc4ec 100644 Binary files a/sound/vox_fem/damage.ogg and b/sound/vox_fem/damage.ogg differ diff --git a/sound/vox_fem/damaged.ogg b/sound/vox_fem/damaged.ogg index 40f392e24ed..dddb8ce9768 100644 Binary files a/sound/vox_fem/damaged.ogg and b/sound/vox_fem/damaged.ogg differ diff --git a/sound/vox_fem/danger.ogg b/sound/vox_fem/danger.ogg index 7307b3c3cdb..4e3f77b0eaf 100644 Binary files a/sound/vox_fem/danger.ogg and b/sound/vox_fem/danger.ogg differ diff --git a/sound/vox_fem/day.ogg b/sound/vox_fem/day.ogg index cf06ec003f4..a1ad0c915f3 100644 Binary files a/sound/vox_fem/day.ogg and b/sound/vox_fem/day.ogg differ diff --git a/sound/vox_fem/deactivated.ogg b/sound/vox_fem/deactivated.ogg index 921b10c9b89..9553b60f797 100644 Binary files a/sound/vox_fem/deactivated.ogg and b/sound/vox_fem/deactivated.ogg differ diff --git a/sound/vox_fem/decompression.ogg b/sound/vox_fem/decompression.ogg index 1434459c3d9..d6bf99ddf4b 100644 Binary files a/sound/vox_fem/decompression.ogg and b/sound/vox_fem/decompression.ogg differ diff --git a/sound/vox_fem/decontamination.ogg b/sound/vox_fem/decontamination.ogg index 6eb032bad6a..6c2678fea9d 100644 Binary files a/sound/vox_fem/decontamination.ogg and b/sound/vox_fem/decontamination.ogg differ diff --git a/sound/vox_fem/deeoo.ogg b/sound/vox_fem/deeoo.ogg index bb465bd949f..3a8bbd48aee 100644 Binary files a/sound/vox_fem/deeoo.ogg and b/sound/vox_fem/deeoo.ogg differ diff --git a/sound/vox_fem/defense.ogg b/sound/vox_fem/defense.ogg index fad8709bbba..fb96cc7cce4 100644 Binary files a/sound/vox_fem/defense.ogg and b/sound/vox_fem/defense.ogg differ diff --git a/sound/vox_fem/degrees.ogg b/sound/vox_fem/degrees.ogg index dd7e56b7968..cb483e04fb7 100644 Binary files a/sound/vox_fem/degrees.ogg and b/sound/vox_fem/degrees.ogg differ diff --git a/sound/vox_fem/delta.ogg b/sound/vox_fem/delta.ogg index c25839a87ae..63cfcbc64c3 100644 Binary files a/sound/vox_fem/delta.ogg and b/sound/vox_fem/delta.ogg differ diff --git a/sound/vox_fem/denied.ogg b/sound/vox_fem/denied.ogg index 1f3eef8f343..b44fc72b8f0 100644 Binary files a/sound/vox_fem/denied.ogg and b/sound/vox_fem/denied.ogg differ diff --git a/sound/vox_fem/deploy.ogg b/sound/vox_fem/deploy.ogg index 61ff085b6dc..1ff0a0e8625 100644 Binary files a/sound/vox_fem/deploy.ogg and b/sound/vox_fem/deploy.ogg differ diff --git a/sound/vox_fem/deployed.ogg b/sound/vox_fem/deployed.ogg index c0c3a5c988d..28bde2e2769 100644 Binary files a/sound/vox_fem/deployed.ogg and b/sound/vox_fem/deployed.ogg differ diff --git a/sound/vox_fem/destroy.ogg b/sound/vox_fem/destroy.ogg index 7a8dce32b37..924ec152f6e 100644 Binary files a/sound/vox_fem/destroy.ogg and b/sound/vox_fem/destroy.ogg differ diff --git a/sound/vox_fem/destroyed.ogg b/sound/vox_fem/destroyed.ogg index cbe5ee43b32..0cbd8474f99 100644 Binary files a/sound/vox_fem/destroyed.ogg and b/sound/vox_fem/destroyed.ogg differ diff --git a/sound/vox_fem/detain.ogg b/sound/vox_fem/detain.ogg index 2596d508c0e..3391f7f859b 100644 Binary files a/sound/vox_fem/detain.ogg and b/sound/vox_fem/detain.ogg differ diff --git a/sound/vox_fem/detected.ogg b/sound/vox_fem/detected.ogg index a438cbe1e91..b308ce59c97 100644 Binary files a/sound/vox_fem/detected.ogg and b/sound/vox_fem/detected.ogg differ diff --git a/sound/vox_fem/detonation.ogg b/sound/vox_fem/detonation.ogg index 88a470d088f..835111b1d7d 100644 Binary files a/sound/vox_fem/detonation.ogg and b/sound/vox_fem/detonation.ogg differ diff --git a/sound/vox_fem/device.ogg b/sound/vox_fem/device.ogg index e5343a59eda..a08e6c3f443 100644 Binary files a/sound/vox_fem/device.ogg and b/sound/vox_fem/device.ogg differ diff --git a/sound/vox_fem/did.ogg b/sound/vox_fem/did.ogg index bb80968c1bd..3af6acb99ed 100644 Binary files a/sound/vox_fem/did.ogg and b/sound/vox_fem/did.ogg differ diff --git a/sound/vox_fem/die.ogg b/sound/vox_fem/die.ogg index f4fb598a086..602cc083ca7 100644 Binary files a/sound/vox_fem/die.ogg and b/sound/vox_fem/die.ogg differ diff --git a/sound/vox_fem/dimensional.ogg b/sound/vox_fem/dimensional.ogg index 2b349d7f5dc..175bfe01074 100644 Binary files a/sound/vox_fem/dimensional.ogg and b/sound/vox_fem/dimensional.ogg differ diff --git a/sound/vox_fem/dirt.ogg b/sound/vox_fem/dirt.ogg index df82cf76902..39cc18c6163 100644 Binary files a/sound/vox_fem/dirt.ogg and b/sound/vox_fem/dirt.ogg differ diff --git a/sound/vox_fem/disengaged.ogg b/sound/vox_fem/disengaged.ogg index 19c16b7358a..906350fd67b 100644 Binary files a/sound/vox_fem/disengaged.ogg and b/sound/vox_fem/disengaged.ogg differ diff --git a/sound/vox_fem/dish.ogg b/sound/vox_fem/dish.ogg index e7f3c2d30b7..5dd123050fb 100644 Binary files a/sound/vox_fem/dish.ogg and b/sound/vox_fem/dish.ogg differ diff --git a/sound/vox_fem/disposal.ogg b/sound/vox_fem/disposal.ogg index 8569a012ed6..25331eeaf2a 100644 Binary files a/sound/vox_fem/disposal.ogg and b/sound/vox_fem/disposal.ogg differ diff --git a/sound/vox_fem/distance.ogg b/sound/vox_fem/distance.ogg index ac979817671..a663a6386b4 100644 Binary files a/sound/vox_fem/distance.ogg and b/sound/vox_fem/distance.ogg differ diff --git a/sound/vox_fem/distortion.ogg b/sound/vox_fem/distortion.ogg index 4a65c206304..825cc558163 100644 Binary files a/sound/vox_fem/distortion.ogg and b/sound/vox_fem/distortion.ogg differ diff --git a/sound/vox_fem/do.ogg b/sound/vox_fem/do.ogg index 5291ce51d41..6ac7099d0bf 100644 Binary files a/sound/vox_fem/do.ogg and b/sound/vox_fem/do.ogg differ diff --git a/sound/vox_fem/doctor.ogg b/sound/vox_fem/doctor.ogg index af10d76affa..a0736050219 100644 Binary files a/sound/vox_fem/doctor.ogg and b/sound/vox_fem/doctor.ogg differ diff --git a/sound/vox_fem/door.ogg b/sound/vox_fem/door.ogg index cedc6609173..4d93d28cd85 100644 Binary files a/sound/vox_fem/door.ogg and b/sound/vox_fem/door.ogg differ diff --git a/sound/vox_fem/down.ogg b/sound/vox_fem/down.ogg index 4377136bec9..c6a69398b28 100644 Binary files a/sound/vox_fem/down.ogg and b/sound/vox_fem/down.ogg differ diff --git a/sound/vox_fem/dual.ogg b/sound/vox_fem/dual.ogg index 8bca7b52cd7..291c5eca450 100644 Binary files a/sound/vox_fem/dual.ogg and b/sound/vox_fem/dual.ogg differ diff --git a/sound/vox_fem/duct.ogg b/sound/vox_fem/duct.ogg index da440eaf8bb..04309950649 100644 Binary files a/sound/vox_fem/duct.ogg and b/sound/vox_fem/duct.ogg differ diff --git a/sound/vox_fem/e.ogg b/sound/vox_fem/e.ogg index 6254b76fbb5..7a9af66368a 100644 Binary files a/sound/vox_fem/e.ogg and b/sound/vox_fem/e.ogg differ diff --git a/sound/vox_fem/east.ogg b/sound/vox_fem/east.ogg index fc587cb8c04..6034fcc6412 100644 Binary files a/sound/vox_fem/east.ogg and b/sound/vox_fem/east.ogg differ diff --git a/sound/vox_fem/echo.ogg b/sound/vox_fem/echo.ogg index 273c032994d..6bbf45589f3 100644 Binary files a/sound/vox_fem/echo.ogg and b/sound/vox_fem/echo.ogg differ diff --git a/sound/vox_fem/ed.ogg b/sound/vox_fem/ed.ogg index df8f32fff8f..e4bb08f3e8b 100644 Binary files a/sound/vox_fem/ed.ogg and b/sound/vox_fem/ed.ogg differ diff --git a/sound/vox_fem/effect.ogg b/sound/vox_fem/effect.ogg index 0f0b2e30805..5c60751cf3c 100644 Binary files a/sound/vox_fem/effect.ogg and b/sound/vox_fem/effect.ogg differ diff --git a/sound/vox_fem/egress.ogg b/sound/vox_fem/egress.ogg index 49cf5087c0d..b7b6a29d0d5 100644 Binary files a/sound/vox_fem/egress.ogg and b/sound/vox_fem/egress.ogg differ diff --git a/sound/vox_fem/eight.ogg b/sound/vox_fem/eight.ogg index a229bf163fd..ecf7111a42e 100644 Binary files a/sound/vox_fem/eight.ogg and b/sound/vox_fem/eight.ogg differ diff --git a/sound/vox_fem/eighteen.ogg b/sound/vox_fem/eighteen.ogg index 8e61c7b7d3a..b9c239faf62 100644 Binary files a/sound/vox_fem/eighteen.ogg and b/sound/vox_fem/eighteen.ogg differ diff --git a/sound/vox_fem/eighty.ogg b/sound/vox_fem/eighty.ogg index 9f940752e8d..c9b2f0ac5f8 100644 Binary files a/sound/vox_fem/eighty.ogg and b/sound/vox_fem/eighty.ogg differ diff --git a/sound/vox_fem/electric.ogg b/sound/vox_fem/electric.ogg index ba21120dac5..58788723d23 100644 Binary files a/sound/vox_fem/electric.ogg and b/sound/vox_fem/electric.ogg differ diff --git a/sound/vox_fem/electromagnetic.ogg b/sound/vox_fem/electromagnetic.ogg index 343cf63fbb9..bec4c9d2f90 100644 Binary files a/sound/vox_fem/electromagnetic.ogg and b/sound/vox_fem/electromagnetic.ogg differ diff --git a/sound/vox_fem/elevator.ogg b/sound/vox_fem/elevator.ogg index c16d677a707..d4383ba9089 100644 Binary files a/sound/vox_fem/elevator.ogg and b/sound/vox_fem/elevator.ogg differ diff --git a/sound/vox_fem/eleven.ogg b/sound/vox_fem/eleven.ogg index e2cbf9768c4..ea38113247a 100644 Binary files a/sound/vox_fem/eleven.ogg and b/sound/vox_fem/eleven.ogg differ diff --git a/sound/vox_fem/eliminate.ogg b/sound/vox_fem/eliminate.ogg index 38526009166..1e2bc8cc658 100644 Binary files a/sound/vox_fem/eliminate.ogg and b/sound/vox_fem/eliminate.ogg differ diff --git a/sound/vox_fem/emergency.ogg b/sound/vox_fem/emergency.ogg index 879cdca52bd..5289a375caa 100644 Binary files a/sound/vox_fem/emergency.ogg and b/sound/vox_fem/emergency.ogg differ diff --git a/sound/vox_fem/energy.ogg b/sound/vox_fem/energy.ogg index 46de8690951..d0e52f084b0 100644 Binary files a/sound/vox_fem/energy.ogg and b/sound/vox_fem/energy.ogg differ diff --git a/sound/vox_fem/engage.ogg b/sound/vox_fem/engage.ogg index 9f2599867ac..ee7d2112b87 100644 Binary files a/sound/vox_fem/engage.ogg and b/sound/vox_fem/engage.ogg differ diff --git a/sound/vox_fem/engaged.ogg b/sound/vox_fem/engaged.ogg index 2983abc9969..358d13f1061 100644 Binary files a/sound/vox_fem/engaged.ogg and b/sound/vox_fem/engaged.ogg differ diff --git a/sound/vox_fem/engine.ogg b/sound/vox_fem/engine.ogg index defb291fca5..1936b115cc1 100644 Binary files a/sound/vox_fem/engine.ogg and b/sound/vox_fem/engine.ogg differ diff --git a/sound/vox_fem/enter.ogg b/sound/vox_fem/enter.ogg index 5788e096517..93d796ca9c0 100644 Binary files a/sound/vox_fem/enter.ogg and b/sound/vox_fem/enter.ogg differ diff --git a/sound/vox_fem/entry.ogg b/sound/vox_fem/entry.ogg index c0baeb0aa7e..a11ed9be4ec 100644 Binary files a/sound/vox_fem/entry.ogg and b/sound/vox_fem/entry.ogg differ diff --git a/sound/vox_fem/environment.ogg b/sound/vox_fem/environment.ogg index b96dc916f18..02a2a172cf1 100644 Binary files a/sound/vox_fem/environment.ogg and b/sound/vox_fem/environment.ogg differ diff --git a/sound/vox_fem/error.ogg b/sound/vox_fem/error.ogg index f8d4e646fc3..44c45e4a99b 100644 Binary files a/sound/vox_fem/error.ogg and b/sound/vox_fem/error.ogg differ diff --git a/sound/vox_fem/escape.ogg b/sound/vox_fem/escape.ogg index a51cde6acb5..5567566d5ae 100644 Binary files a/sound/vox_fem/escape.ogg and b/sound/vox_fem/escape.ogg differ diff --git a/sound/vox_fem/evacuate.ogg b/sound/vox_fem/evacuate.ogg index 7e5fa8b4c89..929f5514a3b 100644 Binary files a/sound/vox_fem/evacuate.ogg and b/sound/vox_fem/evacuate.ogg differ diff --git a/sound/vox_fem/exchange.ogg b/sound/vox_fem/exchange.ogg index 69ae043721a..844fd8e7bbe 100644 Binary files a/sound/vox_fem/exchange.ogg and b/sound/vox_fem/exchange.ogg differ diff --git a/sound/vox_fem/exit.ogg b/sound/vox_fem/exit.ogg index 5722745a572..7a6f5048870 100644 Binary files a/sound/vox_fem/exit.ogg and b/sound/vox_fem/exit.ogg differ diff --git a/sound/vox_fem/expect.ogg b/sound/vox_fem/expect.ogg index 348f7a206b4..e02d7913169 100644 Binary files a/sound/vox_fem/expect.ogg and b/sound/vox_fem/expect.ogg differ diff --git a/sound/vox_fem/experiment.ogg b/sound/vox_fem/experiment.ogg index d45f8741243..7937c16d4d3 100644 Binary files a/sound/vox_fem/experiment.ogg and b/sound/vox_fem/experiment.ogg differ diff --git a/sound/vox_fem/experimental.ogg b/sound/vox_fem/experimental.ogg index 54a7b249b8a..d9b1312603e 100644 Binary files a/sound/vox_fem/experimental.ogg and b/sound/vox_fem/experimental.ogg differ diff --git a/sound/vox_fem/explode.ogg b/sound/vox_fem/explode.ogg index 76e8080b72b..ad026fe0038 100644 Binary files a/sound/vox_fem/explode.ogg and b/sound/vox_fem/explode.ogg differ diff --git a/sound/vox_fem/explosion.ogg b/sound/vox_fem/explosion.ogg index 436e4ca4564..717f55ad63a 100644 Binary files a/sound/vox_fem/explosion.ogg and b/sound/vox_fem/explosion.ogg differ diff --git a/sound/vox_fem/exposure.ogg b/sound/vox_fem/exposure.ogg index c095733623c..c10c8a621da 100644 Binary files a/sound/vox_fem/exposure.ogg and b/sound/vox_fem/exposure.ogg differ diff --git a/sound/vox_fem/exterminate.ogg b/sound/vox_fem/exterminate.ogg index 1629ed336b7..476f16484f5 100644 Binary files a/sound/vox_fem/exterminate.ogg and b/sound/vox_fem/exterminate.ogg differ diff --git a/sound/vox_fem/extinguish.ogg b/sound/vox_fem/extinguish.ogg index 3a1dea1e968..184541bf630 100644 Binary files a/sound/vox_fem/extinguish.ogg and b/sound/vox_fem/extinguish.ogg differ diff --git a/sound/vox_fem/extinguisher.ogg b/sound/vox_fem/extinguisher.ogg index 1048d352298..53afe9584ba 100644 Binary files a/sound/vox_fem/extinguisher.ogg and b/sound/vox_fem/extinguisher.ogg differ diff --git a/sound/vox_fem/extreme.ogg b/sound/vox_fem/extreme.ogg index bdb521203be..73bd6d769fa 100644 Binary files a/sound/vox_fem/extreme.ogg and b/sound/vox_fem/extreme.ogg differ diff --git a/sound/vox_fem/f.ogg b/sound/vox_fem/f.ogg index 7e0955c1b97..edf6d8aa2ed 100644 Binary files a/sound/vox_fem/f.ogg and b/sound/vox_fem/f.ogg differ diff --git a/sound/vox_fem/facility.ogg b/sound/vox_fem/facility.ogg index 9108abcdfef..a9a6992ee9e 100644 Binary files a/sound/vox_fem/facility.ogg and b/sound/vox_fem/facility.ogg differ diff --git a/sound/vox_fem/fahrenheit.ogg b/sound/vox_fem/fahrenheit.ogg index 721778cdd76..5a49a31a29e 100644 Binary files a/sound/vox_fem/fahrenheit.ogg and b/sound/vox_fem/fahrenheit.ogg differ diff --git a/sound/vox_fem/failed.ogg b/sound/vox_fem/failed.ogg index 86f05c79c22..1914ade3c4e 100644 Binary files a/sound/vox_fem/failed.ogg and b/sound/vox_fem/failed.ogg differ diff --git a/sound/vox_fem/failure.ogg b/sound/vox_fem/failure.ogg index 9954642d159..352bce6e45a 100644 Binary files a/sound/vox_fem/failure.ogg and b/sound/vox_fem/failure.ogg differ diff --git a/sound/vox_fem/farthest.ogg b/sound/vox_fem/farthest.ogg index 6df59168130..74216b9a2e1 100644 Binary files a/sound/vox_fem/farthest.ogg and b/sound/vox_fem/farthest.ogg differ diff --git a/sound/vox_fem/fast.ogg b/sound/vox_fem/fast.ogg index 720b1e96ee4..80f7468142c 100644 Binary files a/sound/vox_fem/fast.ogg and b/sound/vox_fem/fast.ogg differ diff --git a/sound/vox_fem/feet.ogg b/sound/vox_fem/feet.ogg index 6060522cb17..b94c99517cd 100644 Binary files a/sound/vox_fem/feet.ogg and b/sound/vox_fem/feet.ogg differ diff --git a/sound/vox_fem/field.ogg b/sound/vox_fem/field.ogg index e992afe4437..89cc50ea826 100644 Binary files a/sound/vox_fem/field.ogg and b/sound/vox_fem/field.ogg differ diff --git a/sound/vox_fem/fifteen.ogg b/sound/vox_fem/fifteen.ogg index 6bedf4cd013..0343d6b3ffe 100644 Binary files a/sound/vox_fem/fifteen.ogg and b/sound/vox_fem/fifteen.ogg differ diff --git a/sound/vox_fem/fifth.ogg b/sound/vox_fem/fifth.ogg index 254496586c1..b8255dad441 100644 Binary files a/sound/vox_fem/fifth.ogg and b/sound/vox_fem/fifth.ogg differ diff --git a/sound/vox_fem/fifty.ogg b/sound/vox_fem/fifty.ogg index b5b23a68451..b71757c7c11 100644 Binary files a/sound/vox_fem/fifty.ogg and b/sound/vox_fem/fifty.ogg differ diff --git a/sound/vox_fem/final.ogg b/sound/vox_fem/final.ogg index 41e15b07251..d1dc9e44ec1 100644 Binary files a/sound/vox_fem/final.ogg and b/sound/vox_fem/final.ogg differ diff --git a/sound/vox_fem/fine.ogg b/sound/vox_fem/fine.ogg index a4fba8f60b5..4737c4259a8 100644 Binary files a/sound/vox_fem/fine.ogg and b/sound/vox_fem/fine.ogg differ diff --git a/sound/vox_fem/fire.ogg b/sound/vox_fem/fire.ogg index 282ca0cef1f..db52a769179 100644 Binary files a/sound/vox_fem/fire.ogg and b/sound/vox_fem/fire.ogg differ diff --git a/sound/vox_fem/first.ogg b/sound/vox_fem/first.ogg index 7da2fc7b7bb..9ef771b1671 100644 Binary files a/sound/vox_fem/first.ogg and b/sound/vox_fem/first.ogg differ diff --git a/sound/vox_fem/five.ogg b/sound/vox_fem/five.ogg index a16bf5bb379..014b7d4251e 100644 Binary files a/sound/vox_fem/five.ogg and b/sound/vox_fem/five.ogg differ diff --git a/sound/vox_fem/flooding.ogg b/sound/vox_fem/flooding.ogg index 9b6d8e91647..a1019a56b99 100644 Binary files a/sound/vox_fem/flooding.ogg and b/sound/vox_fem/flooding.ogg differ diff --git a/sound/vox_fem/floor.ogg b/sound/vox_fem/floor.ogg index e492f452bff..d5d501d4756 100644 Binary files a/sound/vox_fem/floor.ogg and b/sound/vox_fem/floor.ogg differ diff --git a/sound/vox_fem/fool.ogg b/sound/vox_fem/fool.ogg index db0d7fcae77..6b3f5e0fa32 100644 Binary files a/sound/vox_fem/fool.ogg and b/sound/vox_fem/fool.ogg differ diff --git a/sound/vox_fem/for.ogg b/sound/vox_fem/for.ogg index 6345c79edd4..eaf89e5f782 100644 Binary files a/sound/vox_fem/for.ogg and b/sound/vox_fem/for.ogg differ diff --git a/sound/vox_fem/forbidden.ogg b/sound/vox_fem/forbidden.ogg index 0aab3c217cd..4f5fc36bbe7 100644 Binary files a/sound/vox_fem/forbidden.ogg and b/sound/vox_fem/forbidden.ogg differ diff --git a/sound/vox_fem/force.ogg b/sound/vox_fem/force.ogg index df5af5ae98a..575ffb613ed 100644 Binary files a/sound/vox_fem/force.ogg and b/sound/vox_fem/force.ogg differ diff --git a/sound/vox_fem/fore.ogg b/sound/vox_fem/fore.ogg index 6e87fb0dcd1..61f995103b8 100644 Binary files a/sound/vox_fem/fore.ogg and b/sound/vox_fem/fore.ogg differ diff --git a/sound/vox_fem/forms.ogg b/sound/vox_fem/forms.ogg index c82528572a4..2de5796c8d0 100644 Binary files a/sound/vox_fem/forms.ogg and b/sound/vox_fem/forms.ogg differ diff --git a/sound/vox_fem/found.ogg b/sound/vox_fem/found.ogg index 68c0f780122..e6ff55b2421 100644 Binary files a/sound/vox_fem/found.ogg and b/sound/vox_fem/found.ogg differ diff --git a/sound/vox_fem/four.ogg b/sound/vox_fem/four.ogg index e521785972c..a7f16e38ec3 100644 Binary files a/sound/vox_fem/four.ogg and b/sound/vox_fem/four.ogg differ diff --git a/sound/vox_fem/fourteen.ogg b/sound/vox_fem/fourteen.ogg index 464709daa7a..268b18abf95 100644 Binary files a/sound/vox_fem/fourteen.ogg and b/sound/vox_fem/fourteen.ogg differ diff --git a/sound/vox_fem/fourth.ogg b/sound/vox_fem/fourth.ogg index ab85499bd8f..5c867743b5c 100644 Binary files a/sound/vox_fem/fourth.ogg and b/sound/vox_fem/fourth.ogg differ diff --git a/sound/vox_fem/fourty.ogg b/sound/vox_fem/fourty.ogg index d6efec50609..5280d49b2fb 100644 Binary files a/sound/vox_fem/fourty.ogg and b/sound/vox_fem/fourty.ogg differ diff --git a/sound/vox_fem/foxtrot.ogg b/sound/vox_fem/foxtrot.ogg index 94214d1e4b3..4f64b89c489 100644 Binary files a/sound/vox_fem/foxtrot.ogg and b/sound/vox_fem/foxtrot.ogg differ diff --git a/sound/vox_fem/freeman.ogg b/sound/vox_fem/freeman.ogg index bb6b0cfec8b..e94c55fbf21 100644 Binary files a/sound/vox_fem/freeman.ogg and b/sound/vox_fem/freeman.ogg differ diff --git a/sound/vox_fem/freezer.ogg b/sound/vox_fem/freezer.ogg index 78f625abb10..f2f5362b3ed 100644 Binary files a/sound/vox_fem/freezer.ogg and b/sound/vox_fem/freezer.ogg differ diff --git a/sound/vox_fem/from.ogg b/sound/vox_fem/from.ogg index 90a9c1d51d9..eacf7a7c01c 100644 Binary files a/sound/vox_fem/from.ogg and b/sound/vox_fem/from.ogg differ diff --git a/sound/vox_fem/front.ogg b/sound/vox_fem/front.ogg index e8c11d5eba2..748d021e33d 100644 Binary files a/sound/vox_fem/front.ogg and b/sound/vox_fem/front.ogg differ diff --git a/sound/vox_fem/fuck.ogg b/sound/vox_fem/fuck.ogg index 6c9ec75de8c..adc5e48c9ff 100644 Binary files a/sound/vox_fem/fuck.ogg and b/sound/vox_fem/fuck.ogg differ diff --git a/sound/vox_fem/fucking.ogg b/sound/vox_fem/fucking.ogg index 05acbcd6760..1c877c01298 100644 Binary files a/sound/vox_fem/fucking.ogg and b/sound/vox_fem/fucking.ogg differ diff --git a/sound/vox_fem/fucks.ogg b/sound/vox_fem/fucks.ogg index 3e9664a12ac..2b4c0102655 100644 Binary files a/sound/vox_fem/fucks.ogg and b/sound/vox_fem/fucks.ogg differ diff --git a/sound/vox_fem/fuel.ogg b/sound/vox_fem/fuel.ogg index 8e827d8c865..3604ce4c913 100644 Binary files a/sound/vox_fem/fuel.ogg and b/sound/vox_fem/fuel.ogg differ diff --git a/sound/vox_fem/g.ogg b/sound/vox_fem/g.ogg index f171cac1ce3..fccf3f566ad 100644 Binary files a/sound/vox_fem/g.ogg and b/sound/vox_fem/g.ogg differ diff --git a/sound/vox_fem/gas.ogg b/sound/vox_fem/gas.ogg index bbf6ade32d2..a65a8b11b0b 100644 Binary files a/sound/vox_fem/gas.ogg and b/sound/vox_fem/gas.ogg differ diff --git a/sound/vox_fem/get.ogg b/sound/vox_fem/get.ogg index 716eee1a79f..9ae01e8c997 100644 Binary files a/sound/vox_fem/get.ogg and b/sound/vox_fem/get.ogg differ diff --git a/sound/vox_fem/glory.ogg b/sound/vox_fem/glory.ogg index cb166a52a1c..4bf9738844f 100644 Binary files a/sound/vox_fem/glory.ogg and b/sound/vox_fem/glory.ogg differ diff --git a/sound/vox_fem/go.ogg b/sound/vox_fem/go.ogg index b0c93f1cd11..e8ace3d943a 100644 Binary files a/sound/vox_fem/go.ogg and b/sound/vox_fem/go.ogg differ diff --git a/sound/vox_fem/going.ogg b/sound/vox_fem/going.ogg index 3e1d4314b10..3f21184de93 100644 Binary files a/sound/vox_fem/going.ogg and b/sound/vox_fem/going.ogg differ diff --git a/sound/vox_fem/good.ogg b/sound/vox_fem/good.ogg index 5c9d0fd53d1..63760754d50 100644 Binary files a/sound/vox_fem/good.ogg and b/sound/vox_fem/good.ogg differ diff --git a/sound/vox_fem/goodbye.ogg b/sound/vox_fem/goodbye.ogg index 47875554c14..9be827d7a47 100644 Binary files a/sound/vox_fem/goodbye.ogg and b/sound/vox_fem/goodbye.ogg differ diff --git a/sound/vox_fem/gordon.ogg b/sound/vox_fem/gordon.ogg index d63783979b0..586f15063df 100644 Binary files a/sound/vox_fem/gordon.ogg and b/sound/vox_fem/gordon.ogg differ diff --git a/sound/vox_fem/got.ogg b/sound/vox_fem/got.ogg index ac8928c3063..893e9a15697 100644 Binary files a/sound/vox_fem/got.ogg and b/sound/vox_fem/got.ogg differ diff --git a/sound/vox_fem/government.ogg b/sound/vox_fem/government.ogg index 04b9138e335..581e92c9184 100644 Binary files a/sound/vox_fem/government.ogg and b/sound/vox_fem/government.ogg differ diff --git a/sound/vox_fem/granted.ogg b/sound/vox_fem/granted.ogg index 349efb3d3a1..f7d73456073 100644 Binary files a/sound/vox_fem/granted.ogg and b/sound/vox_fem/granted.ogg differ diff --git a/sound/vox_fem/gray.ogg b/sound/vox_fem/gray.ogg index cab850b882b..11e2e143f29 100644 Binary files a/sound/vox_fem/gray.ogg and b/sound/vox_fem/gray.ogg differ diff --git a/sound/vox_fem/great.ogg b/sound/vox_fem/great.ogg index d3748034488..b88d5eb40d4 100644 Binary files a/sound/vox_fem/great.ogg and b/sound/vox_fem/great.ogg differ diff --git a/sound/vox_fem/green.ogg b/sound/vox_fem/green.ogg index 982f45ff024..45d82c59c92 100644 Binary files a/sound/vox_fem/green.ogg and b/sound/vox_fem/green.ogg differ diff --git a/sound/vox_fem/grenade.ogg b/sound/vox_fem/grenade.ogg index 63b3afe2428..de9050bc91c 100644 Binary files a/sound/vox_fem/grenade.ogg and b/sound/vox_fem/grenade.ogg differ diff --git a/sound/vox_fem/guard.ogg b/sound/vox_fem/guard.ogg index 6a218ff1c40..1fc69a3499a 100644 Binary files a/sound/vox_fem/guard.ogg and b/sound/vox_fem/guard.ogg differ diff --git a/sound/vox_fem/gulf.ogg b/sound/vox_fem/gulf.ogg index 71e2d1782e4..0237ae19c05 100644 Binary files a/sound/vox_fem/gulf.ogg and b/sound/vox_fem/gulf.ogg differ diff --git a/sound/vox_fem/gun.ogg b/sound/vox_fem/gun.ogg index 294ea6099cf..7d2195b4c5d 100644 Binary files a/sound/vox_fem/gun.ogg and b/sound/vox_fem/gun.ogg differ diff --git a/sound/vox_fem/guthrie.ogg b/sound/vox_fem/guthrie.ogg index 879a0ba203c..1b7e5b6ae47 100644 Binary files a/sound/vox_fem/guthrie.ogg and b/sound/vox_fem/guthrie.ogg differ diff --git a/sound/vox_fem/h.ogg b/sound/vox_fem/h.ogg index c890be8112c..837d5ce44ce 100644 Binary files a/sound/vox_fem/h.ogg and b/sound/vox_fem/h.ogg differ diff --git a/sound/vox_fem/hacker.ogg b/sound/vox_fem/hacker.ogg index e3b71218ec0..16e1fbffebc 100644 Binary files a/sound/vox_fem/hacker.ogg and b/sound/vox_fem/hacker.ogg differ diff --git a/sound/vox_fem/hackers.ogg b/sound/vox_fem/hackers.ogg index 4b626a75373..f2d1a8b5e67 100644 Binary files a/sound/vox_fem/hackers.ogg and b/sound/vox_fem/hackers.ogg differ diff --git a/sound/vox_fem/handling.ogg b/sound/vox_fem/handling.ogg index f2b3864f6e6..91d6e879bae 100644 Binary files a/sound/vox_fem/handling.ogg and b/sound/vox_fem/handling.ogg differ diff --git a/sound/vox_fem/hangar.ogg b/sound/vox_fem/hangar.ogg index 22fc18babf7..c7add659889 100644 Binary files a/sound/vox_fem/hangar.ogg and b/sound/vox_fem/hangar.ogg differ diff --git a/sound/vox_fem/harm.ogg b/sound/vox_fem/harm.ogg index 7d021003ce9..777935ecf39 100644 Binary files a/sound/vox_fem/harm.ogg and b/sound/vox_fem/harm.ogg differ diff --git a/sound/vox_fem/has.ogg b/sound/vox_fem/has.ogg index 1e06d016977..a094d6017de 100644 Binary files a/sound/vox_fem/has.ogg and b/sound/vox_fem/has.ogg differ diff --git a/sound/vox_fem/have.ogg b/sound/vox_fem/have.ogg index 00530d867a4..df454d1168c 100644 Binary files a/sound/vox_fem/have.ogg and b/sound/vox_fem/have.ogg differ diff --git a/sound/vox_fem/hazard.ogg b/sound/vox_fem/hazard.ogg index 2d82b71f0a7..864acfd0b0f 100644 Binary files a/sound/vox_fem/hazard.ogg and b/sound/vox_fem/hazard.ogg differ diff --git a/sound/vox_fem/head.ogg b/sound/vox_fem/head.ogg index 8ef0d3afdbb..ae99aaf3fab 100644 Binary files a/sound/vox_fem/head.ogg and b/sound/vox_fem/head.ogg differ diff --git a/sound/vox_fem/health.ogg b/sound/vox_fem/health.ogg index 05a53ab599a..23022948442 100644 Binary files a/sound/vox_fem/health.ogg and b/sound/vox_fem/health.ogg differ diff --git a/sound/vox_fem/heat.ogg b/sound/vox_fem/heat.ogg index 4c87acba207..d83892a4c3d 100644 Binary files a/sound/vox_fem/heat.ogg and b/sound/vox_fem/heat.ogg differ diff --git a/sound/vox_fem/helicopter.ogg b/sound/vox_fem/helicopter.ogg index d92ae453357..3e7ecac435f 100644 Binary files a/sound/vox_fem/helicopter.ogg and b/sound/vox_fem/helicopter.ogg differ diff --git a/sound/vox_fem/helium.ogg b/sound/vox_fem/helium.ogg index f78efbebedf..3cf5c1638a2 100644 Binary files a/sound/vox_fem/helium.ogg and b/sound/vox_fem/helium.ogg differ diff --git a/sound/vox_fem/hello.ogg b/sound/vox_fem/hello.ogg index 2e8f2b55893..3122f275113 100644 Binary files a/sound/vox_fem/hello.ogg and b/sound/vox_fem/hello.ogg differ diff --git a/sound/vox_fem/help.ogg b/sound/vox_fem/help.ogg index de5ecafdb7d..221aec588ad 100644 Binary files a/sound/vox_fem/help.ogg and b/sound/vox_fem/help.ogg differ diff --git a/sound/vox_fem/here.ogg b/sound/vox_fem/here.ogg index 98148ef4020..974c80b862a 100644 Binary files a/sound/vox_fem/here.ogg and b/sound/vox_fem/here.ogg differ diff --git a/sound/vox_fem/hide.ogg b/sound/vox_fem/hide.ogg index a4710dc43c2..41a3556c359 100644 Binary files a/sound/vox_fem/hide.ogg and b/sound/vox_fem/hide.ogg differ diff --git a/sound/vox_fem/high.ogg b/sound/vox_fem/high.ogg index 885a6978055..29569f6a7ae 100644 Binary files a/sound/vox_fem/high.ogg and b/sound/vox_fem/high.ogg differ diff --git a/sound/vox_fem/highest.ogg b/sound/vox_fem/highest.ogg index 7a0c954ffbe..c59ff592164 100644 Binary files a/sound/vox_fem/highest.ogg and b/sound/vox_fem/highest.ogg differ diff --git a/sound/vox_fem/hit.ogg b/sound/vox_fem/hit.ogg index 1a6919bbf65..47cbbab958d 100644 Binary files a/sound/vox_fem/hit.ogg and b/sound/vox_fem/hit.ogg differ diff --git a/sound/vox_fem/hole.ogg b/sound/vox_fem/hole.ogg index 347a5747270..4507339b197 100644 Binary files a/sound/vox_fem/hole.ogg and b/sound/vox_fem/hole.ogg differ diff --git a/sound/vox_fem/hostile.ogg b/sound/vox_fem/hostile.ogg index be50c44607b..cad5232be5c 100644 Binary files a/sound/vox_fem/hostile.ogg and b/sound/vox_fem/hostile.ogg differ diff --git a/sound/vox_fem/hot.ogg b/sound/vox_fem/hot.ogg index 4aec99e9331..b56cab99425 100644 Binary files a/sound/vox_fem/hot.ogg and b/sound/vox_fem/hot.ogg differ diff --git a/sound/vox_fem/hotel.ogg b/sound/vox_fem/hotel.ogg index 8449e5a33d3..54f3297485a 100644 Binary files a/sound/vox_fem/hotel.ogg and b/sound/vox_fem/hotel.ogg differ diff --git a/sound/vox_fem/hour.ogg b/sound/vox_fem/hour.ogg index 7392d54b929..963b2a1f119 100644 Binary files a/sound/vox_fem/hour.ogg and b/sound/vox_fem/hour.ogg differ diff --git a/sound/vox_fem/hours.ogg b/sound/vox_fem/hours.ogg index 927b5679879..516adc16fad 100644 Binary files a/sound/vox_fem/hours.ogg and b/sound/vox_fem/hours.ogg differ diff --git a/sound/vox_fem/human.ogg b/sound/vox_fem/human.ogg index 7f7c5ed2728..247164486f2 100644 Binary files a/sound/vox_fem/human.ogg and b/sound/vox_fem/human.ogg differ diff --git a/sound/vox_fem/hundred.ogg b/sound/vox_fem/hundred.ogg index 5554a95a2ba..bdee8e497f4 100644 Binary files a/sound/vox_fem/hundred.ogg and b/sound/vox_fem/hundred.ogg differ diff --git a/sound/vox_fem/hunger.ogg b/sound/vox_fem/hunger.ogg index b29083a01ee..52de984e6ea 100644 Binary files a/sound/vox_fem/hunger.ogg and b/sound/vox_fem/hunger.ogg differ diff --git a/sound/vox_fem/hydro.ogg b/sound/vox_fem/hydro.ogg index e9fefb59d28..e371348a803 100644 Binary files a/sound/vox_fem/hydro.ogg and b/sound/vox_fem/hydro.ogg differ diff --git a/sound/vox_fem/hydroponics.ogg b/sound/vox_fem/hydroponics.ogg index 531b5ebcc78..b82884ad7de 100644 Binary files a/sound/vox_fem/hydroponics.ogg and b/sound/vox_fem/hydroponics.ogg differ diff --git a/sound/vox_fem/i.ogg b/sound/vox_fem/i.ogg index b939b51bb02..4184feccea2 100644 Binary files a/sound/vox_fem/i.ogg and b/sound/vox_fem/i.ogg differ diff --git a/sound/vox_fem/idiot.ogg b/sound/vox_fem/idiot.ogg index 67683c80de7..54539dc84db 100644 Binary files a/sound/vox_fem/idiot.ogg and b/sound/vox_fem/idiot.ogg differ diff --git a/sound/vox_fem/illegal.ogg b/sound/vox_fem/illegal.ogg index be6181d5f34..efc7a24f31c 100644 Binary files a/sound/vox_fem/illegal.ogg and b/sound/vox_fem/illegal.ogg differ diff --git a/sound/vox_fem/immediate.ogg b/sound/vox_fem/immediate.ogg index d0253cbadd4..589cb64d425 100644 Binary files a/sound/vox_fem/immediate.ogg and b/sound/vox_fem/immediate.ogg differ diff --git a/sound/vox_fem/immediately.ogg b/sound/vox_fem/immediately.ogg index c7dc6237248..0fb1a653e13 100644 Binary files a/sound/vox_fem/immediately.ogg and b/sound/vox_fem/immediately.ogg differ diff --git a/sound/vox_fem/in.ogg b/sound/vox_fem/in.ogg index 6548a0276bb..5620518d9f0 100644 Binary files a/sound/vox_fem/in.ogg and b/sound/vox_fem/in.ogg differ diff --git a/sound/vox_fem/inches.ogg b/sound/vox_fem/inches.ogg index 17b44126367..77a5a9f8ed9 100644 Binary files a/sound/vox_fem/inches.ogg and b/sound/vox_fem/inches.ogg differ diff --git a/sound/vox_fem/india.ogg b/sound/vox_fem/india.ogg index 3740ab7bb02..c9db0e71a1c 100644 Binary files a/sound/vox_fem/india.ogg and b/sound/vox_fem/india.ogg differ diff --git a/sound/vox_fem/ing.ogg b/sound/vox_fem/ing.ogg index ede58ecacbe..9373505f277 100644 Binary files a/sound/vox_fem/ing.ogg and b/sound/vox_fem/ing.ogg differ diff --git a/sound/vox_fem/inoperative.ogg b/sound/vox_fem/inoperative.ogg index 545b48b7a5a..09db3ab0625 100644 Binary files a/sound/vox_fem/inoperative.ogg and b/sound/vox_fem/inoperative.ogg differ diff --git a/sound/vox_fem/inside.ogg b/sound/vox_fem/inside.ogg index 865def0e7ba..4524e2b4529 100644 Binary files a/sound/vox_fem/inside.ogg and b/sound/vox_fem/inside.ogg differ diff --git a/sound/vox_fem/inspection.ogg b/sound/vox_fem/inspection.ogg index 69158e93237..93af36a4157 100644 Binary files a/sound/vox_fem/inspection.ogg and b/sound/vox_fem/inspection.ogg differ diff --git a/sound/vox_fem/inspector.ogg b/sound/vox_fem/inspector.ogg index 7da688b7f49..b18db6ab2bf 100644 Binary files a/sound/vox_fem/inspector.ogg and b/sound/vox_fem/inspector.ogg differ diff --git a/sound/vox_fem/interchange.ogg b/sound/vox_fem/interchange.ogg index a8f7dc77604..29028b2223a 100644 Binary files a/sound/vox_fem/interchange.ogg and b/sound/vox_fem/interchange.ogg differ diff --git a/sound/vox_fem/intruder.ogg b/sound/vox_fem/intruder.ogg index b77af2c2e4e..766980da4b0 100644 Binary files a/sound/vox_fem/intruder.ogg and b/sound/vox_fem/intruder.ogg differ diff --git a/sound/vox_fem/invalid.ogg b/sound/vox_fem/invalid.ogg index 7b7528c3574..beb8b66e8e8 100644 Binary files a/sound/vox_fem/invalid.ogg and b/sound/vox_fem/invalid.ogg differ diff --git a/sound/vox_fem/invasion.ogg b/sound/vox_fem/invasion.ogg index f4c2e333c02..9a73e827f8b 100644 Binary files a/sound/vox_fem/invasion.ogg and b/sound/vox_fem/invasion.ogg differ diff --git a/sound/vox_fem/is.ogg b/sound/vox_fem/is.ogg index 9980a72fc28..d8b1d6a1e7c 100644 Binary files a/sound/vox_fem/is.ogg and b/sound/vox_fem/is.ogg differ diff --git a/sound/vox_fem/it.ogg b/sound/vox_fem/it.ogg index c496303ba78..f0a09d7083c 100644 Binary files a/sound/vox_fem/it.ogg and b/sound/vox_fem/it.ogg differ diff --git a/sound/vox_fem/j.ogg b/sound/vox_fem/j.ogg index 9600aeb5008..bcf17e34a18 100644 Binary files a/sound/vox_fem/j.ogg and b/sound/vox_fem/j.ogg differ diff --git a/sound/vox_fem/johnson.ogg b/sound/vox_fem/johnson.ogg index 6372ae2193d..4b95210e8ff 100644 Binary files a/sound/vox_fem/johnson.ogg and b/sound/vox_fem/johnson.ogg differ diff --git a/sound/vox_fem/juliet.ogg b/sound/vox_fem/juliet.ogg index 5b9a349e8b7..c93e5a453bc 100644 Binary files a/sound/vox_fem/juliet.ogg and b/sound/vox_fem/juliet.ogg differ diff --git a/sound/vox_fem/k.ogg b/sound/vox_fem/k.ogg index ba71718e48b..4e791416bd4 100644 Binary files a/sound/vox_fem/k.ogg and b/sound/vox_fem/k.ogg differ diff --git a/sound/vox_fem/key.ogg b/sound/vox_fem/key.ogg index 165bd1f5071..d4abd3cdbdd 100644 Binary files a/sound/vox_fem/key.ogg and b/sound/vox_fem/key.ogg differ diff --git a/sound/vox_fem/kill.ogg b/sound/vox_fem/kill.ogg index fada11b05ff..3d9d0f58fce 100644 Binary files a/sound/vox_fem/kill.ogg and b/sound/vox_fem/kill.ogg differ diff --git a/sound/vox_fem/kilo.ogg b/sound/vox_fem/kilo.ogg index 460f249126f..b00875f0ea7 100644 Binary files a/sound/vox_fem/kilo.ogg and b/sound/vox_fem/kilo.ogg differ diff --git a/sound/vox_fem/kit.ogg b/sound/vox_fem/kit.ogg index a6719303069..9f9b0fee205 100644 Binary files a/sound/vox_fem/kit.ogg and b/sound/vox_fem/kit.ogg differ diff --git a/sound/vox_fem/l.ogg b/sound/vox_fem/l.ogg index 14e830e54fd..d32e84f8b6f 100644 Binary files a/sound/vox_fem/l.ogg and b/sound/vox_fem/l.ogg differ diff --git a/sound/vox_fem/lab.ogg b/sound/vox_fem/lab.ogg index 888a4863148..1e5e48f4ddc 100644 Binary files a/sound/vox_fem/lab.ogg and b/sound/vox_fem/lab.ogg differ diff --git a/sound/vox_fem/lambda.ogg b/sound/vox_fem/lambda.ogg index 75f88be2e0a..111041cb521 100644 Binary files a/sound/vox_fem/lambda.ogg and b/sound/vox_fem/lambda.ogg differ diff --git a/sound/vox_fem/laser.ogg b/sound/vox_fem/laser.ogg index f169bf4d827..93b5d9fd5b9 100644 Binary files a/sound/vox_fem/laser.ogg and b/sound/vox_fem/laser.ogg differ diff --git a/sound/vox_fem/last.ogg b/sound/vox_fem/last.ogg index b257fdafe88..a9e1703d78c 100644 Binary files a/sound/vox_fem/last.ogg and b/sound/vox_fem/last.ogg differ diff --git a/sound/vox_fem/launch.ogg b/sound/vox_fem/launch.ogg index 8f2cfc5943c..03319bb3a8f 100644 Binary files a/sound/vox_fem/launch.ogg and b/sound/vox_fem/launch.ogg differ diff --git a/sound/vox_fem/law.ogg b/sound/vox_fem/law.ogg index 2003dc273e7..1d78bb78c91 100644 Binary files a/sound/vox_fem/law.ogg and b/sound/vox_fem/law.ogg differ diff --git a/sound/vox_fem/laws.ogg b/sound/vox_fem/laws.ogg index c7a0cda09c3..78064715860 100644 Binary files a/sound/vox_fem/laws.ogg and b/sound/vox_fem/laws.ogg differ diff --git a/sound/vox_fem/leak.ogg b/sound/vox_fem/leak.ogg index 60218fad015..ac2966daffb 100644 Binary files a/sound/vox_fem/leak.ogg and b/sound/vox_fem/leak.ogg differ diff --git a/sound/vox_fem/leave.ogg b/sound/vox_fem/leave.ogg index 32dbe83fa55..023d6ccec9d 100644 Binary files a/sound/vox_fem/leave.ogg and b/sound/vox_fem/leave.ogg differ diff --git a/sound/vox_fem/left.ogg b/sound/vox_fem/left.ogg index 7045d052fdb..bab8c25f963 100644 Binary files a/sound/vox_fem/left.ogg and b/sound/vox_fem/left.ogg differ diff --git a/sound/vox_fem/legal.ogg b/sound/vox_fem/legal.ogg index b5a8a007110..89d11ae6a1e 100644 Binary files a/sound/vox_fem/legal.ogg and b/sound/vox_fem/legal.ogg differ diff --git a/sound/vox_fem/level.ogg b/sound/vox_fem/level.ogg index ed6aebb8bd9..d2a38d01605 100644 Binary files a/sound/vox_fem/level.ogg and b/sound/vox_fem/level.ogg differ diff --git a/sound/vox_fem/lever.ogg b/sound/vox_fem/lever.ogg index 8dd8ba644d7..e21aa7521d8 100644 Binary files a/sound/vox_fem/lever.ogg and b/sound/vox_fem/lever.ogg differ diff --git a/sound/vox_fem/lie.ogg b/sound/vox_fem/lie.ogg index f9b9f705fbf..bf78bfde8bc 100644 Binary files a/sound/vox_fem/lie.ogg and b/sound/vox_fem/lie.ogg differ diff --git a/sound/vox_fem/lieutenant.ogg b/sound/vox_fem/lieutenant.ogg index 137aa4eb1f8..bdc3aa05ef1 100644 Binary files a/sound/vox_fem/lieutenant.ogg and b/sound/vox_fem/lieutenant.ogg differ diff --git a/sound/vox_fem/life.ogg b/sound/vox_fem/life.ogg index d390ce55b81..a445c04df42 100644 Binary files a/sound/vox_fem/life.ogg and b/sound/vox_fem/life.ogg differ diff --git a/sound/vox_fem/light.ogg b/sound/vox_fem/light.ogg index 950d2989bac..b3514dfc55a 100644 Binary files a/sound/vox_fem/light.ogg and b/sound/vox_fem/light.ogg differ diff --git a/sound/vox_fem/lima.ogg b/sound/vox_fem/lima.ogg index a1bb5740f6d..4870bbe9505 100644 Binary files a/sound/vox_fem/lima.ogg and b/sound/vox_fem/lima.ogg differ diff --git a/sound/vox_fem/liquid.ogg b/sound/vox_fem/liquid.ogg index 3d385edabc1..8c071731257 100644 Binary files a/sound/vox_fem/liquid.ogg and b/sound/vox_fem/liquid.ogg differ diff --git a/sound/vox_fem/loading.ogg b/sound/vox_fem/loading.ogg index b4ff9015ca7..f3cca6e4827 100644 Binary files a/sound/vox_fem/loading.ogg and b/sound/vox_fem/loading.ogg differ diff --git a/sound/vox_fem/locate.ogg b/sound/vox_fem/locate.ogg index 513e38a225e..47d4e442bfb 100644 Binary files a/sound/vox_fem/locate.ogg and b/sound/vox_fem/locate.ogg differ diff --git a/sound/vox_fem/located.ogg b/sound/vox_fem/located.ogg index 2948ea615b9..2bf7cc84cb0 100644 Binary files a/sound/vox_fem/located.ogg and b/sound/vox_fem/located.ogg differ diff --git a/sound/vox_fem/location.ogg b/sound/vox_fem/location.ogg index 282b6f64f74..5b9466f5e2a 100644 Binary files a/sound/vox_fem/location.ogg and b/sound/vox_fem/location.ogg differ diff --git a/sound/vox_fem/lock.ogg b/sound/vox_fem/lock.ogg index 1649f7f4e03..1e6b9e66c55 100644 Binary files a/sound/vox_fem/lock.ogg and b/sound/vox_fem/lock.ogg differ diff --git a/sound/vox_fem/locked.ogg b/sound/vox_fem/locked.ogg index c5a4ef2ba88..e704c91cd57 100644 Binary files a/sound/vox_fem/locked.ogg and b/sound/vox_fem/locked.ogg differ diff --git a/sound/vox_fem/locker.ogg b/sound/vox_fem/locker.ogg index 14083a1115a..33a4d8172bf 100644 Binary files a/sound/vox_fem/locker.ogg and b/sound/vox_fem/locker.ogg differ diff --git a/sound/vox_fem/lockout.ogg b/sound/vox_fem/lockout.ogg index b1b9d9db17a..a49f98b0ccb 100644 Binary files a/sound/vox_fem/lockout.ogg and b/sound/vox_fem/lockout.ogg differ diff --git a/sound/vox_fem/loose.ogg b/sound/vox_fem/loose.ogg index 695834739e8..99434ebf140 100644 Binary files a/sound/vox_fem/loose.ogg and b/sound/vox_fem/loose.ogg differ diff --git a/sound/vox_fem/lower.ogg b/sound/vox_fem/lower.ogg index 44b01488a56..30b78e0e175 100644 Binary files a/sound/vox_fem/lower.ogg and b/sound/vox_fem/lower.ogg differ diff --git a/sound/vox_fem/lowest.ogg b/sound/vox_fem/lowest.ogg index 833d738b725..bac548f7c80 100644 Binary files a/sound/vox_fem/lowest.ogg and b/sound/vox_fem/lowest.ogg differ diff --git a/sound/vox_fem/m.ogg b/sound/vox_fem/m.ogg index 99c8bc3031b..f80354f00d2 100644 Binary files a/sound/vox_fem/m.ogg and b/sound/vox_fem/m.ogg differ diff --git a/sound/vox_fem/magnetic.ogg b/sound/vox_fem/magnetic.ogg index 23ddae5b63a..453363e076d 100644 Binary files a/sound/vox_fem/magnetic.ogg and b/sound/vox_fem/magnetic.ogg differ diff --git a/sound/vox_fem/main.ogg b/sound/vox_fem/main.ogg index ab8edf45ff0..f95b10ddd5c 100644 Binary files a/sound/vox_fem/main.ogg and b/sound/vox_fem/main.ogg differ diff --git a/sound/vox_fem/maintenance.ogg b/sound/vox_fem/maintenance.ogg index 8b08a15c073..7dd53dc47fb 100644 Binary files a/sound/vox_fem/maintenance.ogg and b/sound/vox_fem/maintenance.ogg differ diff --git a/sound/vox_fem/malfunction.ogg b/sound/vox_fem/malfunction.ogg index 5cc6cf5012b..df1655ca064 100644 Binary files a/sound/vox_fem/malfunction.ogg and b/sound/vox_fem/malfunction.ogg differ diff --git a/sound/vox_fem/man.ogg b/sound/vox_fem/man.ogg index c9ef267aa27..ec48fe61cb3 100644 Binary files a/sound/vox_fem/man.ogg and b/sound/vox_fem/man.ogg differ diff --git a/sound/vox_fem/mass.ogg b/sound/vox_fem/mass.ogg index 58b1922554e..5a71a33f07f 100644 Binary files a/sound/vox_fem/mass.ogg and b/sound/vox_fem/mass.ogg differ diff --git a/sound/vox_fem/materials.ogg b/sound/vox_fem/materials.ogg index 11d33380dda..250e678114a 100644 Binary files a/sound/vox_fem/materials.ogg and b/sound/vox_fem/materials.ogg differ diff --git a/sound/vox_fem/maximum.ogg b/sound/vox_fem/maximum.ogg index 5b4e06a7140..6b39bf1614d 100644 Binary files a/sound/vox_fem/maximum.ogg and b/sound/vox_fem/maximum.ogg differ diff --git a/sound/vox_fem/may.ogg b/sound/vox_fem/may.ogg index dd279d1f0dd..0739b28b26b 100644 Binary files a/sound/vox_fem/may.ogg and b/sound/vox_fem/may.ogg differ diff --git a/sound/vox_fem/me.ogg b/sound/vox_fem/me.ogg index 9fd2ae66da5..c96355b58d6 100644 Binary files a/sound/vox_fem/me.ogg and b/sound/vox_fem/me.ogg differ diff --git a/sound/vox_fem/medbay.ogg b/sound/vox_fem/medbay.ogg index 2d88b709d34..e16b458ab67 100644 Binary files a/sound/vox_fem/medbay.ogg and b/sound/vox_fem/medbay.ogg differ diff --git a/sound/vox_fem/medical.ogg b/sound/vox_fem/medical.ogg index 75e1a82a0ea..66b24a5d3f1 100644 Binary files a/sound/vox_fem/medical.ogg and b/sound/vox_fem/medical.ogg differ diff --git a/sound/vox_fem/men.ogg b/sound/vox_fem/men.ogg index ac59df5bba8..f3a9588adab 100644 Binary files a/sound/vox_fem/men.ogg and b/sound/vox_fem/men.ogg differ diff --git a/sound/vox_fem/mercy.ogg b/sound/vox_fem/mercy.ogg index d01c2599805..8cdba6a2571 100644 Binary files a/sound/vox_fem/mercy.ogg and b/sound/vox_fem/mercy.ogg differ diff --git a/sound/vox_fem/mesa.ogg b/sound/vox_fem/mesa.ogg index dbe2033b9a3..de69e00c8f3 100644 Binary files a/sound/vox_fem/mesa.ogg and b/sound/vox_fem/mesa.ogg differ diff --git a/sound/vox_fem/message.ogg b/sound/vox_fem/message.ogg index b57f5d60463..83eeb175d07 100644 Binary files a/sound/vox_fem/message.ogg and b/sound/vox_fem/message.ogg differ diff --git a/sound/vox_fem/meter.ogg b/sound/vox_fem/meter.ogg index 4503186a137..ba0e43ab9b7 100644 Binary files a/sound/vox_fem/meter.ogg and b/sound/vox_fem/meter.ogg differ diff --git a/sound/vox_fem/micro.ogg b/sound/vox_fem/micro.ogg index 67a5ad50c61..502bce58aae 100644 Binary files a/sound/vox_fem/micro.ogg and b/sound/vox_fem/micro.ogg differ diff --git a/sound/vox_fem/middle.ogg b/sound/vox_fem/middle.ogg index 0ebaddd9b34..429b39857f8 100644 Binary files a/sound/vox_fem/middle.ogg and b/sound/vox_fem/middle.ogg differ diff --git a/sound/vox_fem/mike.ogg b/sound/vox_fem/mike.ogg index a3d5f00b272..75a1549c6fa 100644 Binary files a/sound/vox_fem/mike.ogg and b/sound/vox_fem/mike.ogg differ diff --git a/sound/vox_fem/miles.ogg b/sound/vox_fem/miles.ogg index ef0e7a54b94..0de3bd36c71 100644 Binary files a/sound/vox_fem/miles.ogg and b/sound/vox_fem/miles.ogg differ diff --git a/sound/vox_fem/military.ogg b/sound/vox_fem/military.ogg index 281640fd701..0ff33b82340 100644 Binary files a/sound/vox_fem/military.ogg and b/sound/vox_fem/military.ogg differ diff --git a/sound/vox_fem/milli.ogg b/sound/vox_fem/milli.ogg index 8d9b9b147f8..4713bac1cdb 100644 Binary files a/sound/vox_fem/milli.ogg and b/sound/vox_fem/milli.ogg differ diff --git a/sound/vox_fem/million.ogg b/sound/vox_fem/million.ogg index 560a77a8a8e..dadcffc3ff9 100644 Binary files a/sound/vox_fem/million.ogg and b/sound/vox_fem/million.ogg differ diff --git a/sound/vox_fem/minefield.ogg b/sound/vox_fem/minefield.ogg index fe21d05dd4a..b4f1d013709 100644 Binary files a/sound/vox_fem/minefield.ogg and b/sound/vox_fem/minefield.ogg differ diff --git a/sound/vox_fem/minimum.ogg b/sound/vox_fem/minimum.ogg index 90767598fff..39b7e1439c8 100644 Binary files a/sound/vox_fem/minimum.ogg and b/sound/vox_fem/minimum.ogg differ diff --git a/sound/vox_fem/minutes.ogg b/sound/vox_fem/minutes.ogg index 665eb0d6308..f1eb19eb742 100644 Binary files a/sound/vox_fem/minutes.ogg and b/sound/vox_fem/minutes.ogg differ diff --git a/sound/vox_fem/mister.ogg b/sound/vox_fem/mister.ogg index 15cc27ddfbb..97fdde4c188 100644 Binary files a/sound/vox_fem/mister.ogg and b/sound/vox_fem/mister.ogg differ diff --git a/sound/vox_fem/mode.ogg b/sound/vox_fem/mode.ogg index 9aaf6470994..b585fc4a097 100644 Binary files a/sound/vox_fem/mode.ogg and b/sound/vox_fem/mode.ogg differ diff --git a/sound/vox_fem/money.ogg b/sound/vox_fem/money.ogg index 917f601c74d..ad054a71301 100644 Binary files a/sound/vox_fem/money.ogg and b/sound/vox_fem/money.ogg differ diff --git a/sound/vox_fem/motor.ogg b/sound/vox_fem/motor.ogg index 558ed877d9d..9a78193b464 100644 Binary files a/sound/vox_fem/motor.ogg and b/sound/vox_fem/motor.ogg differ diff --git a/sound/vox_fem/motorpool.ogg b/sound/vox_fem/motorpool.ogg index 82ff9146efc..4dcbdc6e9d3 100644 Binary files a/sound/vox_fem/motorpool.ogg and b/sound/vox_fem/motorpool.ogg differ diff --git a/sound/vox_fem/move.ogg b/sound/vox_fem/move.ogg index c467fc848e5..1f9ef74e546 100644 Binary files a/sound/vox_fem/move.ogg and b/sound/vox_fem/move.ogg differ diff --git a/sound/vox_fem/must.ogg b/sound/vox_fem/must.ogg index fb4c2c44cb6..54d4ffe53a5 100644 Binary files a/sound/vox_fem/must.ogg and b/sound/vox_fem/must.ogg differ diff --git a/sound/vox_fem/my.ogg b/sound/vox_fem/my.ogg index 429c43be7e6..fc6ae2366a0 100644 Binary files a/sound/vox_fem/my.ogg and b/sound/vox_fem/my.ogg differ diff --git a/sound/vox_fem/n.ogg b/sound/vox_fem/n.ogg index e9d4a5d8739..e0c396f5476 100644 Binary files a/sound/vox_fem/n.ogg and b/sound/vox_fem/n.ogg differ diff --git a/sound/vox_fem/nanotrasen.ogg b/sound/vox_fem/nanotrasen.ogg index 11a664c2116..10aa196c4ed 100644 Binary files a/sound/vox_fem/nanotrasen.ogg and b/sound/vox_fem/nanotrasen.ogg differ diff --git a/sound/vox_fem/nearest.ogg b/sound/vox_fem/nearest.ogg index 897ffa8c1ab..c11a89d9953 100644 Binary files a/sound/vox_fem/nearest.ogg and b/sound/vox_fem/nearest.ogg differ diff --git a/sound/vox_fem/nice.ogg b/sound/vox_fem/nice.ogg index 6136864cf33..e800e84d00f 100644 Binary files a/sound/vox_fem/nice.ogg and b/sound/vox_fem/nice.ogg differ diff --git a/sound/vox_fem/nine.ogg b/sound/vox_fem/nine.ogg index 4b1d67a55a6..86601bfa1ec 100644 Binary files a/sound/vox_fem/nine.ogg and b/sound/vox_fem/nine.ogg differ diff --git a/sound/vox_fem/nineteen.ogg b/sound/vox_fem/nineteen.ogg index 10a3b9c4871..d28d7b15b64 100644 Binary files a/sound/vox_fem/nineteen.ogg and b/sound/vox_fem/nineteen.ogg differ diff --git a/sound/vox_fem/ninety.ogg b/sound/vox_fem/ninety.ogg index f7432335506..ad5a1c1b42d 100644 Binary files a/sound/vox_fem/ninety.ogg and b/sound/vox_fem/ninety.ogg differ diff --git a/sound/vox_fem/no.ogg b/sound/vox_fem/no.ogg index 97605a78012..8eee9df35fb 100644 Binary files a/sound/vox_fem/no.ogg and b/sound/vox_fem/no.ogg differ diff --git a/sound/vox_fem/nominal.ogg b/sound/vox_fem/nominal.ogg index f0a86173b91..f6fb6736e71 100644 Binary files a/sound/vox_fem/nominal.ogg and b/sound/vox_fem/nominal.ogg differ diff --git a/sound/vox_fem/north.ogg b/sound/vox_fem/north.ogg index 01ebc8c57c7..7efef865cf8 100644 Binary files a/sound/vox_fem/north.ogg and b/sound/vox_fem/north.ogg differ diff --git a/sound/vox_fem/not.ogg b/sound/vox_fem/not.ogg index 21e86303947..b5cd9e5f55a 100644 Binary files a/sound/vox_fem/not.ogg and b/sound/vox_fem/not.ogg differ diff --git a/sound/vox_fem/november.ogg b/sound/vox_fem/november.ogg index 7b54ead3856..403b9160f7a 100644 Binary files a/sound/vox_fem/november.ogg and b/sound/vox_fem/november.ogg differ diff --git a/sound/vox_fem/now.ogg b/sound/vox_fem/now.ogg index 4d292fea76a..f5d4df71936 100644 Binary files a/sound/vox_fem/now.ogg and b/sound/vox_fem/now.ogg differ diff --git a/sound/vox_fem/number.ogg b/sound/vox_fem/number.ogg index b13e087ed1d..afa6bb45950 100644 Binary files a/sound/vox_fem/number.ogg and b/sound/vox_fem/number.ogg differ diff --git a/sound/vox_fem/o.ogg b/sound/vox_fem/o.ogg index 0e612ab944e..09fc769dd98 100644 Binary files a/sound/vox_fem/o.ogg and b/sound/vox_fem/o.ogg differ diff --git a/sound/vox_fem/objective.ogg b/sound/vox_fem/objective.ogg index bc4616c94bd..ecfacb733ec 100644 Binary files a/sound/vox_fem/objective.ogg and b/sound/vox_fem/objective.ogg differ diff --git a/sound/vox_fem/observation.ogg b/sound/vox_fem/observation.ogg index b6cf3820e06..653c31e346d 100644 Binary files a/sound/vox_fem/observation.ogg and b/sound/vox_fem/observation.ogg differ diff --git a/sound/vox_fem/obtain.ogg b/sound/vox_fem/obtain.ogg index 1f3a566c68a..ae28974e404 100644 Binary files a/sound/vox_fem/obtain.ogg and b/sound/vox_fem/obtain.ogg differ diff --git a/sound/vox_fem/of.ogg b/sound/vox_fem/of.ogg index 0a793a5e0c4..5bf24883419 100644 Binary files a/sound/vox_fem/of.ogg and b/sound/vox_fem/of.ogg differ diff --git a/sound/vox_fem/officer.ogg b/sound/vox_fem/officer.ogg index 2a7bbcf6048..4f80dd195a0 100644 Binary files a/sound/vox_fem/officer.ogg and b/sound/vox_fem/officer.ogg differ diff --git a/sound/vox_fem/ok.ogg b/sound/vox_fem/ok.ogg index f26e298ea81..072a208af95 100644 Binary files a/sound/vox_fem/ok.ogg and b/sound/vox_fem/ok.ogg differ diff --git a/sound/vox_fem/on.ogg b/sound/vox_fem/on.ogg index d9e1932ba17..be42780f461 100644 Binary files a/sound/vox_fem/on.ogg and b/sound/vox_fem/on.ogg differ diff --git a/sound/vox_fem/one.ogg b/sound/vox_fem/one.ogg index 181f328b4ea..749a9e5be9d 100644 Binary files a/sound/vox_fem/one.ogg and b/sound/vox_fem/one.ogg differ diff --git a/sound/vox_fem/open.ogg b/sound/vox_fem/open.ogg index 17c5e4350ec..96806dc3296 100644 Binary files a/sound/vox_fem/open.ogg and b/sound/vox_fem/open.ogg differ diff --git a/sound/vox_fem/operating.ogg b/sound/vox_fem/operating.ogg index 7093d9b2ba0..5404634ab13 100644 Binary files a/sound/vox_fem/operating.ogg and b/sound/vox_fem/operating.ogg differ diff --git a/sound/vox_fem/operations.ogg b/sound/vox_fem/operations.ogg index 50b92351b6c..114c603ed05 100644 Binary files a/sound/vox_fem/operations.ogg and b/sound/vox_fem/operations.ogg differ diff --git a/sound/vox_fem/operative.ogg b/sound/vox_fem/operative.ogg index d26fbb30bc7..d93b6534364 100644 Binary files a/sound/vox_fem/operative.ogg and b/sound/vox_fem/operative.ogg differ diff --git a/sound/vox_fem/option.ogg b/sound/vox_fem/option.ogg index fc7354ad87d..c9d163c3bbf 100644 Binary files a/sound/vox_fem/option.ogg and b/sound/vox_fem/option.ogg differ diff --git a/sound/vox_fem/order.ogg b/sound/vox_fem/order.ogg index 73e645acc32..fc19d3311a9 100644 Binary files a/sound/vox_fem/order.ogg and b/sound/vox_fem/order.ogg differ diff --git a/sound/vox_fem/organic.ogg b/sound/vox_fem/organic.ogg index a4f327a16c1..0ad410030a5 100644 Binary files a/sound/vox_fem/organic.ogg and b/sound/vox_fem/organic.ogg differ diff --git a/sound/vox_fem/oscar.ogg b/sound/vox_fem/oscar.ogg index 17c3b88cbf8..ae2dea023ff 100644 Binary files a/sound/vox_fem/oscar.ogg and b/sound/vox_fem/oscar.ogg differ diff --git a/sound/vox_fem/out.ogg b/sound/vox_fem/out.ogg index 23e4c515b01..005b7e204ec 100644 Binary files a/sound/vox_fem/out.ogg and b/sound/vox_fem/out.ogg differ diff --git a/sound/vox_fem/outside.ogg b/sound/vox_fem/outside.ogg index 9815ca2de77..5c6f721dc0c 100644 Binary files a/sound/vox_fem/outside.ogg and b/sound/vox_fem/outside.ogg differ diff --git a/sound/vox_fem/over.ogg b/sound/vox_fem/over.ogg index 3cc46c1332f..567bb69431d 100644 Binary files a/sound/vox_fem/over.ogg and b/sound/vox_fem/over.ogg differ diff --git a/sound/vox_fem/overload.ogg b/sound/vox_fem/overload.ogg index 05c685afe0c..d9ab530b1ec 100644 Binary files a/sound/vox_fem/overload.ogg and b/sound/vox_fem/overload.ogg differ diff --git a/sound/vox_fem/override.ogg b/sound/vox_fem/override.ogg index 6d63e7ae274..fcc285fb8bd 100644 Binary files a/sound/vox_fem/override.ogg and b/sound/vox_fem/override.ogg differ diff --git a/sound/vox_fem/p.ogg b/sound/vox_fem/p.ogg index c73cd8ab25f..98eacdf5498 100644 Binary files a/sound/vox_fem/p.ogg and b/sound/vox_fem/p.ogg differ diff --git a/sound/vox_fem/pacify.ogg b/sound/vox_fem/pacify.ogg index 2dbdf71f07e..15747e8d935 100644 Binary files a/sound/vox_fem/pacify.ogg and b/sound/vox_fem/pacify.ogg differ diff --git a/sound/vox_fem/pain.ogg b/sound/vox_fem/pain.ogg index 48f150b0d17..23ec6e2b7be 100644 Binary files a/sound/vox_fem/pain.ogg and b/sound/vox_fem/pain.ogg differ diff --git a/sound/vox_fem/pal.ogg b/sound/vox_fem/pal.ogg index 20d369f80b3..d9eaecc16d9 100644 Binary files a/sound/vox_fem/pal.ogg and b/sound/vox_fem/pal.ogg differ diff --git a/sound/vox_fem/panel.ogg b/sound/vox_fem/panel.ogg index 4d04f5e3c33..c68029951d8 100644 Binary files a/sound/vox_fem/panel.ogg and b/sound/vox_fem/panel.ogg differ diff --git a/sound/vox_fem/percent.ogg b/sound/vox_fem/percent.ogg index b340e7719e9..5c7432454d9 100644 Binary files a/sound/vox_fem/percent.ogg and b/sound/vox_fem/percent.ogg differ diff --git a/sound/vox_fem/perimeter.ogg b/sound/vox_fem/perimeter.ogg index a129f00192c..f4d5cebad9e 100644 Binary files a/sound/vox_fem/perimeter.ogg and b/sound/vox_fem/perimeter.ogg differ diff --git a/sound/vox_fem/permitted.ogg b/sound/vox_fem/permitted.ogg index 73e6998399b..39ebc8678a4 100644 Binary files a/sound/vox_fem/permitted.ogg and b/sound/vox_fem/permitted.ogg differ diff --git a/sound/vox_fem/personnel.ogg b/sound/vox_fem/personnel.ogg index e8822faa4f3..9eba8eab376 100644 Binary files a/sound/vox_fem/personnel.ogg and b/sound/vox_fem/personnel.ogg differ diff --git a/sound/vox_fem/pipe.ogg b/sound/vox_fem/pipe.ogg index 4537f7506f4..54f6d7cd528 100644 Binary files a/sound/vox_fem/pipe.ogg and b/sound/vox_fem/pipe.ogg differ diff --git a/sound/vox_fem/plant.ogg b/sound/vox_fem/plant.ogg index 2ae907a8eea..4b693d75bc9 100644 Binary files a/sound/vox_fem/plant.ogg and b/sound/vox_fem/plant.ogg differ diff --git a/sound/vox_fem/plasma.ogg b/sound/vox_fem/plasma.ogg index 3bab79725ef..4187d273d8c 100644 Binary files a/sound/vox_fem/plasma.ogg and b/sound/vox_fem/plasma.ogg differ diff --git a/sound/vox_fem/platform.ogg b/sound/vox_fem/platform.ogg index 2c006cae165..ede9921a167 100644 Binary files a/sound/vox_fem/platform.ogg and b/sound/vox_fem/platform.ogg differ diff --git a/sound/vox_fem/please.ogg b/sound/vox_fem/please.ogg index 4cc35d75280..829119d817c 100644 Binary files a/sound/vox_fem/please.ogg and b/sound/vox_fem/please.ogg differ diff --git a/sound/vox_fem/point.ogg b/sound/vox_fem/point.ogg index 9fe76bf9fee..c837b25f763 100644 Binary files a/sound/vox_fem/point.ogg and b/sound/vox_fem/point.ogg differ diff --git a/sound/vox_fem/port.ogg b/sound/vox_fem/port.ogg index 15b655dc68e..aa2c783b50a 100644 Binary files a/sound/vox_fem/port.ogg and b/sound/vox_fem/port.ogg differ diff --git a/sound/vox_fem/portal.ogg b/sound/vox_fem/portal.ogg index f11253d41b3..fa1345c3dc4 100644 Binary files a/sound/vox_fem/portal.ogg and b/sound/vox_fem/portal.ogg differ diff --git a/sound/vox_fem/power.ogg b/sound/vox_fem/power.ogg index 7f819bce56b..8c7f8f147a9 100644 Binary files a/sound/vox_fem/power.ogg and b/sound/vox_fem/power.ogg differ diff --git a/sound/vox_fem/presence.ogg b/sound/vox_fem/presence.ogg index c842cf3b262..7f8cb296d73 100644 Binary files a/sound/vox_fem/presence.ogg and b/sound/vox_fem/presence.ogg differ diff --git a/sound/vox_fem/press.ogg b/sound/vox_fem/press.ogg index a664808d449..a3e52593a3d 100644 Binary files a/sound/vox_fem/press.ogg and b/sound/vox_fem/press.ogg differ diff --git a/sound/vox_fem/primary.ogg b/sound/vox_fem/primary.ogg index 78953a1b68f..0452d8f00e5 100644 Binary files a/sound/vox_fem/primary.ogg and b/sound/vox_fem/primary.ogg differ diff --git a/sound/vox_fem/proceed.ogg b/sound/vox_fem/proceed.ogg index 76a95fb5371..13d301240de 100644 Binary files a/sound/vox_fem/proceed.ogg and b/sound/vox_fem/proceed.ogg differ diff --git a/sound/vox_fem/processing.ogg b/sound/vox_fem/processing.ogg index 579debcc065..c31af991ab1 100644 Binary files a/sound/vox_fem/processing.ogg and b/sound/vox_fem/processing.ogg differ diff --git a/sound/vox_fem/progress.ogg b/sound/vox_fem/progress.ogg index 66993b29bed..deefb0e56a7 100644 Binary files a/sound/vox_fem/progress.ogg and b/sound/vox_fem/progress.ogg differ diff --git a/sound/vox_fem/proper.ogg b/sound/vox_fem/proper.ogg index 0814a13c21b..4564070d09a 100644 Binary files a/sound/vox_fem/proper.ogg and b/sound/vox_fem/proper.ogg differ diff --git a/sound/vox_fem/propulsion.ogg b/sound/vox_fem/propulsion.ogg index d9d5500fbd9..b6f532b55ce 100644 Binary files a/sound/vox_fem/propulsion.ogg and b/sound/vox_fem/propulsion.ogg differ diff --git a/sound/vox_fem/prosecute.ogg b/sound/vox_fem/prosecute.ogg index f04c43e231b..98478476fe5 100644 Binary files a/sound/vox_fem/prosecute.ogg and b/sound/vox_fem/prosecute.ogg differ diff --git a/sound/vox_fem/protective.ogg b/sound/vox_fem/protective.ogg index 089992f65ed..c0f8ccc63e3 100644 Binary files a/sound/vox_fem/protective.ogg and b/sound/vox_fem/protective.ogg differ diff --git a/sound/vox_fem/push.ogg b/sound/vox_fem/push.ogg index 8b4572fc36b..9c15d2dd3e8 100644 Binary files a/sound/vox_fem/push.ogg and b/sound/vox_fem/push.ogg differ diff --git a/sound/vox_fem/q.ogg b/sound/vox_fem/q.ogg index 46a6da1205e..1763bb631a2 100644 Binary files a/sound/vox_fem/q.ogg and b/sound/vox_fem/q.ogg differ diff --git a/sound/vox_fem/quantum.ogg b/sound/vox_fem/quantum.ogg index ad297f4d070..57a03c9e823 100644 Binary files a/sound/vox_fem/quantum.ogg and b/sound/vox_fem/quantum.ogg differ diff --git a/sound/vox_fem/quebec.ogg b/sound/vox_fem/quebec.ogg index 36071a9cfc5..7234289c360 100644 Binary files a/sound/vox_fem/quebec.ogg and b/sound/vox_fem/quebec.ogg differ diff --git a/sound/vox_fem/queen.ogg b/sound/vox_fem/queen.ogg index 2c9058fc654..468d2eaf31a 100644 Binary files a/sound/vox_fem/queen.ogg and b/sound/vox_fem/queen.ogg differ diff --git a/sound/vox_fem/question.ogg b/sound/vox_fem/question.ogg index df55723b2a8..b849d536b0c 100644 Binary files a/sound/vox_fem/question.ogg and b/sound/vox_fem/question.ogg differ diff --git a/sound/vox_fem/questioning.ogg b/sound/vox_fem/questioning.ogg index d3a7af1d21a..fed35a84644 100644 Binary files a/sound/vox_fem/questioning.ogg and b/sound/vox_fem/questioning.ogg differ diff --git a/sound/vox_fem/quick.ogg b/sound/vox_fem/quick.ogg index 9b5107ecfa5..efd970ea193 100644 Binary files a/sound/vox_fem/quick.ogg and b/sound/vox_fem/quick.ogg differ diff --git a/sound/vox_fem/quit.ogg b/sound/vox_fem/quit.ogg index bec00b0675b..ad3af8c4621 100644 Binary files a/sound/vox_fem/quit.ogg and b/sound/vox_fem/quit.ogg differ diff --git a/sound/vox_fem/r.ogg b/sound/vox_fem/r.ogg index b28b48d98fc..ee0c442249b 100644 Binary files a/sound/vox_fem/r.ogg and b/sound/vox_fem/r.ogg differ diff --git a/sound/vox_fem/radiation.ogg b/sound/vox_fem/radiation.ogg index 2fd0bbc7157..83c42936576 100644 Binary files a/sound/vox_fem/radiation.ogg and b/sound/vox_fem/radiation.ogg differ diff --git a/sound/vox_fem/radioactive.ogg b/sound/vox_fem/radioactive.ogg index 34e6f659335..73dcd7f0ee8 100644 Binary files a/sound/vox_fem/radioactive.ogg and b/sound/vox_fem/radioactive.ogg differ diff --git a/sound/vox_fem/rads.ogg b/sound/vox_fem/rads.ogg index 121421ab283..a5d1e631f6f 100644 Binary files a/sound/vox_fem/rads.ogg and b/sound/vox_fem/rads.ogg differ diff --git a/sound/vox_fem/raider.ogg b/sound/vox_fem/raider.ogg index 661626e31df..a14a2eaf0bd 100644 Binary files a/sound/vox_fem/raider.ogg and b/sound/vox_fem/raider.ogg differ diff --git a/sound/vox_fem/raiders.ogg b/sound/vox_fem/raiders.ogg index a84dea0e804..5d4e6689791 100644 Binary files a/sound/vox_fem/raiders.ogg and b/sound/vox_fem/raiders.ogg differ diff --git a/sound/vox_fem/rapid.ogg b/sound/vox_fem/rapid.ogg index ba857632fd0..17bcad6f12f 100644 Binary files a/sound/vox_fem/rapid.ogg and b/sound/vox_fem/rapid.ogg differ diff --git a/sound/vox_fem/reach.ogg b/sound/vox_fem/reach.ogg index a45820cbc06..c3cb81cc39f 100644 Binary files a/sound/vox_fem/reach.ogg and b/sound/vox_fem/reach.ogg differ diff --git a/sound/vox_fem/reached.ogg b/sound/vox_fem/reached.ogg index 7dc48cbb39e..2fe07542c79 100644 Binary files a/sound/vox_fem/reached.ogg and b/sound/vox_fem/reached.ogg differ diff --git a/sound/vox_fem/reactor.ogg b/sound/vox_fem/reactor.ogg index 01edc35ff2d..ea05564d415 100644 Binary files a/sound/vox_fem/reactor.ogg and b/sound/vox_fem/reactor.ogg differ diff --git a/sound/vox_fem/red.ogg b/sound/vox_fem/red.ogg index 3c217f6899d..4d7226a0b13 100644 Binary files a/sound/vox_fem/red.ogg and b/sound/vox_fem/red.ogg differ diff --git a/sound/vox_fem/relay.ogg b/sound/vox_fem/relay.ogg index 2053dc0eebd..2f661b9c5e0 100644 Binary files a/sound/vox_fem/relay.ogg and b/sound/vox_fem/relay.ogg differ diff --git a/sound/vox_fem/released.ogg b/sound/vox_fem/released.ogg index 502cad90783..d7be271f41c 100644 Binary files a/sound/vox_fem/released.ogg and b/sound/vox_fem/released.ogg differ diff --git a/sound/vox_fem/remaining.ogg b/sound/vox_fem/remaining.ogg index c492bad1db6..a59165e1a51 100644 Binary files a/sound/vox_fem/remaining.ogg and b/sound/vox_fem/remaining.ogg differ diff --git a/sound/vox_fem/removal.ogg b/sound/vox_fem/removal.ogg index 4409ebd5a87..cb4c68c4b70 100644 Binary files a/sound/vox_fem/removal.ogg and b/sound/vox_fem/removal.ogg differ diff --git a/sound/vox_fem/renegade.ogg b/sound/vox_fem/renegade.ogg index 370ead73a6c..3c25e933fb6 100644 Binary files a/sound/vox_fem/renegade.ogg and b/sound/vox_fem/renegade.ogg differ diff --git a/sound/vox_fem/repair.ogg b/sound/vox_fem/repair.ogg index 77bd167c4d1..ee6f0921912 100644 Binary files a/sound/vox_fem/repair.ogg and b/sound/vox_fem/repair.ogg differ diff --git a/sound/vox_fem/report.ogg b/sound/vox_fem/report.ogg index 1efc1e552eb..13a3dcf6137 100644 Binary files a/sound/vox_fem/report.ogg and b/sound/vox_fem/report.ogg differ diff --git a/sound/vox_fem/reports.ogg b/sound/vox_fem/reports.ogg index 99cd0e1ebb7..d4317a29c08 100644 Binary files a/sound/vox_fem/reports.ogg and b/sound/vox_fem/reports.ogg differ diff --git a/sound/vox_fem/required.ogg b/sound/vox_fem/required.ogg index fcfcc5af77d..89fe4af635f 100644 Binary files a/sound/vox_fem/required.ogg and b/sound/vox_fem/required.ogg differ diff --git a/sound/vox_fem/research.ogg b/sound/vox_fem/research.ogg index 838083d3a9c..b7426ed6577 100644 Binary files a/sound/vox_fem/research.ogg and b/sound/vox_fem/research.ogg differ diff --git a/sound/vox_fem/resevoir.ogg b/sound/vox_fem/resevoir.ogg index 72b8baf6a15..b021c4b0b46 100644 Binary files a/sound/vox_fem/resevoir.ogg and b/sound/vox_fem/resevoir.ogg differ diff --git a/sound/vox_fem/resistance.ogg b/sound/vox_fem/resistance.ogg index 7a89c815628..3abbe8c3831 100644 Binary files a/sound/vox_fem/resistance.ogg and b/sound/vox_fem/resistance.ogg differ diff --git a/sound/vox_fem/rest.ogg b/sound/vox_fem/rest.ogg index da10d78aaf9..e41daa22d81 100644 Binary files a/sound/vox_fem/rest.ogg and b/sound/vox_fem/rest.ogg differ diff --git a/sound/vox_fem/right.ogg b/sound/vox_fem/right.ogg index 20f18f75749..b515afdfe14 100644 Binary files a/sound/vox_fem/right.ogg and b/sound/vox_fem/right.ogg differ diff --git a/sound/vox_fem/rocket.ogg b/sound/vox_fem/rocket.ogg index 87ffdf95312..ef56fb7397d 100644 Binary files a/sound/vox_fem/rocket.ogg and b/sound/vox_fem/rocket.ogg differ diff --git a/sound/vox_fem/roger.ogg b/sound/vox_fem/roger.ogg index 3910ecb03de..ae9d841daaf 100644 Binary files a/sound/vox_fem/roger.ogg and b/sound/vox_fem/roger.ogg differ diff --git a/sound/vox_fem/romeo.ogg b/sound/vox_fem/romeo.ogg index f400af1b27a..e5e5586d501 100644 Binary files a/sound/vox_fem/romeo.ogg and b/sound/vox_fem/romeo.ogg differ diff --git a/sound/vox_fem/room.ogg b/sound/vox_fem/room.ogg index 94f5ca95bba..6f72372f88f 100644 Binary files a/sound/vox_fem/room.ogg and b/sound/vox_fem/room.ogg differ diff --git a/sound/vox_fem/round.ogg b/sound/vox_fem/round.ogg index f62f70c935e..b5ed3e15cec 100644 Binary files a/sound/vox_fem/round.ogg and b/sound/vox_fem/round.ogg differ diff --git a/sound/vox_fem/run.ogg b/sound/vox_fem/run.ogg index ca5d162a5a8..edfde382d30 100644 Binary files a/sound/vox_fem/run.ogg and b/sound/vox_fem/run.ogg differ diff --git a/sound/vox_fem/s.ogg b/sound/vox_fem/s.ogg index e87ba9c3ec6..40d08fa599d 100644 Binary files a/sound/vox_fem/s.ogg and b/sound/vox_fem/s.ogg differ diff --git a/sound/vox_fem/safe.ogg b/sound/vox_fem/safe.ogg index fced276c126..b7ffe4245b3 100644 Binary files a/sound/vox_fem/safe.ogg and b/sound/vox_fem/safe.ogg differ diff --git a/sound/vox_fem/safety.ogg b/sound/vox_fem/safety.ogg index 6bc762e9852..4535a175afd 100644 Binary files a/sound/vox_fem/safety.ogg and b/sound/vox_fem/safety.ogg differ diff --git a/sound/vox_fem/sarah.ogg b/sound/vox_fem/sarah.ogg index 050737712b6..caece78a0bf 100644 Binary files a/sound/vox_fem/sarah.ogg and b/sound/vox_fem/sarah.ogg differ diff --git a/sound/vox_fem/sargeant.ogg b/sound/vox_fem/sargeant.ogg index 33fb5ac34d0..6e1c38a9430 100644 Binary files a/sound/vox_fem/sargeant.ogg and b/sound/vox_fem/sargeant.ogg differ diff --git a/sound/vox_fem/satellite.ogg b/sound/vox_fem/satellite.ogg index 5fcebe0046d..95a8b7043a2 100644 Binary files a/sound/vox_fem/satellite.ogg and b/sound/vox_fem/satellite.ogg differ diff --git a/sound/vox_fem/save.ogg b/sound/vox_fem/save.ogg index e0ba81d7b16..7a91a6429d4 100644 Binary files a/sound/vox_fem/save.ogg and b/sound/vox_fem/save.ogg differ diff --git a/sound/vox_fem/science.ogg b/sound/vox_fem/science.ogg index bfe39501a2a..72c62bfcbfc 100644 Binary files a/sound/vox_fem/science.ogg and b/sound/vox_fem/science.ogg differ diff --git a/sound/vox_fem/scream.ogg b/sound/vox_fem/scream.ogg index 7861b2bd2a1..2e7a12a6dbe 100644 Binary files a/sound/vox_fem/scream.ogg and b/sound/vox_fem/scream.ogg differ diff --git a/sound/vox_fem/screen.ogg b/sound/vox_fem/screen.ogg index 96a036ed6b2..0303f1e3982 100644 Binary files a/sound/vox_fem/screen.ogg and b/sound/vox_fem/screen.ogg differ diff --git a/sound/vox_fem/search.ogg b/sound/vox_fem/search.ogg index 168ad55d848..a1153e1baba 100644 Binary files a/sound/vox_fem/search.ogg and b/sound/vox_fem/search.ogg differ diff --git a/sound/vox_fem/second.ogg b/sound/vox_fem/second.ogg index 0dc8477672e..6e13ef40477 100644 Binary files a/sound/vox_fem/second.ogg and b/sound/vox_fem/second.ogg differ diff --git a/sound/vox_fem/secondary.ogg b/sound/vox_fem/secondary.ogg index 37d50e6371f..bdbadfa27ed 100644 Binary files a/sound/vox_fem/secondary.ogg and b/sound/vox_fem/secondary.ogg differ diff --git a/sound/vox_fem/seconds.ogg b/sound/vox_fem/seconds.ogg index 48024e37e5f..29d22cae9e2 100644 Binary files a/sound/vox_fem/seconds.ogg and b/sound/vox_fem/seconds.ogg differ diff --git a/sound/vox_fem/sector.ogg b/sound/vox_fem/sector.ogg index 094c59c85a6..f80294a8162 100644 Binary files a/sound/vox_fem/sector.ogg and b/sound/vox_fem/sector.ogg differ diff --git a/sound/vox_fem/secure.ogg b/sound/vox_fem/secure.ogg index 47ddd16db1d..6ed743af7c3 100644 Binary files a/sound/vox_fem/secure.ogg and b/sound/vox_fem/secure.ogg differ diff --git a/sound/vox_fem/secured.ogg b/sound/vox_fem/secured.ogg index bc524515cc9..f5126adec59 100644 Binary files a/sound/vox_fem/secured.ogg and b/sound/vox_fem/secured.ogg differ diff --git a/sound/vox_fem/security.ogg b/sound/vox_fem/security.ogg index ede9fb4b001..79c380eaf04 100644 Binary files a/sound/vox_fem/security.ogg and b/sound/vox_fem/security.ogg differ diff --git a/sound/vox_fem/select.ogg b/sound/vox_fem/select.ogg index 3b193d4ce8c..e98a0b8de83 100644 Binary files a/sound/vox_fem/select.ogg and b/sound/vox_fem/select.ogg differ diff --git a/sound/vox_fem/selected.ogg b/sound/vox_fem/selected.ogg index 7cf61646427..4aca5508673 100644 Binary files a/sound/vox_fem/selected.ogg and b/sound/vox_fem/selected.ogg differ diff --git a/sound/vox_fem/sensors.ogg b/sound/vox_fem/sensors.ogg index be2b84c07be..ee582ca9abb 100644 Binary files a/sound/vox_fem/sensors.ogg and b/sound/vox_fem/sensors.ogg differ diff --git a/sound/vox_fem/service.ogg b/sound/vox_fem/service.ogg index fd097d34ba7..372a89ce9d1 100644 Binary files a/sound/vox_fem/service.ogg and b/sound/vox_fem/service.ogg differ diff --git a/sound/vox_fem/seven.ogg b/sound/vox_fem/seven.ogg index 9a1d7f68822..e86498ddf44 100644 Binary files a/sound/vox_fem/seven.ogg and b/sound/vox_fem/seven.ogg differ diff --git a/sound/vox_fem/seventeen.ogg b/sound/vox_fem/seventeen.ogg index 25ef3e210c2..84e52f12d6d 100644 Binary files a/sound/vox_fem/seventeen.ogg and b/sound/vox_fem/seventeen.ogg differ diff --git a/sound/vox_fem/seventy.ogg b/sound/vox_fem/seventy.ogg index 5d9a7b269f1..d42bf34d0ef 100644 Binary files a/sound/vox_fem/seventy.ogg and b/sound/vox_fem/seventy.ogg differ diff --git a/sound/vox_fem/severe.ogg b/sound/vox_fem/severe.ogg index 4e3a18f5485..b99d49ebc73 100644 Binary files a/sound/vox_fem/severe.ogg and b/sound/vox_fem/severe.ogg differ diff --git a/sound/vox_fem/sewage.ogg b/sound/vox_fem/sewage.ogg index e765b3c7b69..f9988fcbb28 100644 Binary files a/sound/vox_fem/sewage.ogg and b/sound/vox_fem/sewage.ogg differ diff --git a/sound/vox_fem/sewer.ogg b/sound/vox_fem/sewer.ogg index 176de9bce6e..30e9b08a5a9 100644 Binary files a/sound/vox_fem/sewer.ogg and b/sound/vox_fem/sewer.ogg differ diff --git a/sound/vox_fem/shield.ogg b/sound/vox_fem/shield.ogg index be9739329f5..3a4daa666a7 100644 Binary files a/sound/vox_fem/shield.ogg and b/sound/vox_fem/shield.ogg differ diff --git a/sound/vox_fem/shipment.ogg b/sound/vox_fem/shipment.ogg index 563271eee71..bfcbaddeeb0 100644 Binary files a/sound/vox_fem/shipment.ogg and b/sound/vox_fem/shipment.ogg differ diff --git a/sound/vox_fem/shirt.ogg b/sound/vox_fem/shirt.ogg index a528d769976..6fc1d202569 100644 Binary files a/sound/vox_fem/shirt.ogg and b/sound/vox_fem/shirt.ogg differ diff --git a/sound/vox_fem/shit.ogg b/sound/vox_fem/shit.ogg index daabea473dd..ac9dcd6684c 100644 Binary files a/sound/vox_fem/shit.ogg and b/sound/vox_fem/shit.ogg differ diff --git a/sound/vox_fem/shitlord.ogg b/sound/vox_fem/shitlord.ogg index 92b1bb8988e..2f615748fe0 100644 Binary files a/sound/vox_fem/shitlord.ogg and b/sound/vox_fem/shitlord.ogg differ diff --git a/sound/vox_fem/shits.ogg b/sound/vox_fem/shits.ogg index 53fb0f56d30..7bab92de7fe 100644 Binary files a/sound/vox_fem/shits.ogg and b/sound/vox_fem/shits.ogg differ diff --git a/sound/vox_fem/shitting.ogg b/sound/vox_fem/shitting.ogg index ea1dcc28c53..550e3e6fe75 100644 Binary files a/sound/vox_fem/shitting.ogg and b/sound/vox_fem/shitting.ogg differ diff --git a/sound/vox_fem/shock.ogg b/sound/vox_fem/shock.ogg index be5827a2e81..0eaaae1f473 100644 Binary files a/sound/vox_fem/shock.ogg and b/sound/vox_fem/shock.ogg differ diff --git a/sound/vox_fem/shoot.ogg b/sound/vox_fem/shoot.ogg index 82d1d59f95b..3b2333e489f 100644 Binary files a/sound/vox_fem/shoot.ogg and b/sound/vox_fem/shoot.ogg differ diff --git a/sound/vox_fem/shower.ogg b/sound/vox_fem/shower.ogg index 266e3c003b1..0ee0234961b 100644 Binary files a/sound/vox_fem/shower.ogg and b/sound/vox_fem/shower.ogg differ diff --git a/sound/vox_fem/shut.ogg b/sound/vox_fem/shut.ogg index e6498ec735e..c7db582d06d 100644 Binary files a/sound/vox_fem/shut.ogg and b/sound/vox_fem/shut.ogg differ diff --git a/sound/vox_fem/shuttle.ogg b/sound/vox_fem/shuttle.ogg index dfc3afdbd3b..fd99a8239c3 100644 Binary files a/sound/vox_fem/shuttle.ogg and b/sound/vox_fem/shuttle.ogg differ diff --git a/sound/vox_fem/side.ogg b/sound/vox_fem/side.ogg index 3c14ad61a06..ea7b6fe8070 100644 Binary files a/sound/vox_fem/side.ogg and b/sound/vox_fem/side.ogg differ diff --git a/sound/vox_fem/sierra.ogg b/sound/vox_fem/sierra.ogg index 9e13dc7dbe8..dff0940bfe2 100644 Binary files a/sound/vox_fem/sierra.ogg and b/sound/vox_fem/sierra.ogg differ diff --git a/sound/vox_fem/sight.ogg b/sound/vox_fem/sight.ogg index 3b31351f2e3..18c20572759 100644 Binary files a/sound/vox_fem/sight.ogg and b/sound/vox_fem/sight.ogg differ diff --git a/sound/vox_fem/silo.ogg b/sound/vox_fem/silo.ogg index 5dd5c0570b7..90898029889 100644 Binary files a/sound/vox_fem/silo.ogg and b/sound/vox_fem/silo.ogg differ diff --git a/sound/vox_fem/singularity.ogg b/sound/vox_fem/singularity.ogg index 34f579d3201..18fa8c0a576 100644 Binary files a/sound/vox_fem/singularity.ogg and b/sound/vox_fem/singularity.ogg differ diff --git a/sound/vox_fem/six.ogg b/sound/vox_fem/six.ogg index 84de2ceaf6a..ddb45cfe20c 100644 Binary files a/sound/vox_fem/six.ogg and b/sound/vox_fem/six.ogg differ diff --git a/sound/vox_fem/sixteen.ogg b/sound/vox_fem/sixteen.ogg index 85e290cb7ea..ae4a4acc758 100644 Binary files a/sound/vox_fem/sixteen.ogg and b/sound/vox_fem/sixteen.ogg differ diff --git a/sound/vox_fem/sixty.ogg b/sound/vox_fem/sixty.ogg index fe1fa1b997b..4f1877f9791 100644 Binary files a/sound/vox_fem/sixty.ogg and b/sound/vox_fem/sixty.ogg differ diff --git a/sound/vox_fem/slime.ogg b/sound/vox_fem/slime.ogg index 64b9e65670e..eeae42794e3 100644 Binary files a/sound/vox_fem/slime.ogg and b/sound/vox_fem/slime.ogg differ diff --git a/sound/vox_fem/slow.ogg b/sound/vox_fem/slow.ogg index beb0e3196e9..d08f367ccc4 100644 Binary files a/sound/vox_fem/slow.ogg and b/sound/vox_fem/slow.ogg differ diff --git a/sound/vox_fem/solar.ogg b/sound/vox_fem/solar.ogg index a8288487261..e1b842a1ef4 100644 Binary files a/sound/vox_fem/solar.ogg and b/sound/vox_fem/solar.ogg differ diff --git a/sound/vox_fem/solars.ogg b/sound/vox_fem/solars.ogg index c50a137d25c..4c2699194d9 100644 Binary files a/sound/vox_fem/solars.ogg and b/sound/vox_fem/solars.ogg differ diff --git a/sound/vox_fem/soldier.ogg b/sound/vox_fem/soldier.ogg index 81ad7a2e813..33e82c8da68 100644 Binary files a/sound/vox_fem/soldier.ogg and b/sound/vox_fem/soldier.ogg differ diff --git a/sound/vox_fem/some.ogg b/sound/vox_fem/some.ogg index 0271e8ff0f4..ea24836f7f5 100644 Binary files a/sound/vox_fem/some.ogg and b/sound/vox_fem/some.ogg differ diff --git a/sound/vox_fem/someone.ogg b/sound/vox_fem/someone.ogg index ef49db72dcc..1586dfe0f6c 100644 Binary files a/sound/vox_fem/someone.ogg and b/sound/vox_fem/someone.ogg differ diff --git a/sound/vox_fem/something.ogg b/sound/vox_fem/something.ogg index 011eca0ece3..a7f12de2054 100644 Binary files a/sound/vox_fem/something.ogg and b/sound/vox_fem/something.ogg differ diff --git a/sound/vox_fem/son.ogg b/sound/vox_fem/son.ogg index 0a133ea2f1e..943d4fe23c5 100644 Binary files a/sound/vox_fem/son.ogg and b/sound/vox_fem/son.ogg differ diff --git a/sound/vox_fem/sorry.ogg b/sound/vox_fem/sorry.ogg index 511ae3227d3..9d2da84540e 100644 Binary files a/sound/vox_fem/sorry.ogg and b/sound/vox_fem/sorry.ogg differ diff --git a/sound/vox_fem/south.ogg b/sound/vox_fem/south.ogg index 963abd07907..5ce09ffa698 100644 Binary files a/sound/vox_fem/south.ogg and b/sound/vox_fem/south.ogg differ diff --git a/sound/vox_fem/squad.ogg b/sound/vox_fem/squad.ogg index 5b418bbf4b4..d356c019fcb 100644 Binary files a/sound/vox_fem/squad.ogg and b/sound/vox_fem/squad.ogg differ diff --git a/sound/vox_fem/square.ogg b/sound/vox_fem/square.ogg index 75d999fbe1a..e7c91123cd5 100644 Binary files a/sound/vox_fem/square.ogg and b/sound/vox_fem/square.ogg differ diff --git a/sound/vox_fem/ss13.ogg b/sound/vox_fem/ss13.ogg index c3d526a9eeb..e4e80e829ee 100644 Binary files a/sound/vox_fem/ss13.ogg and b/sound/vox_fem/ss13.ogg differ diff --git a/sound/vox_fem/stairway.ogg b/sound/vox_fem/stairway.ogg index 8e81f4cb8a6..713960cf62e 100644 Binary files a/sound/vox_fem/stairway.ogg and b/sound/vox_fem/stairway.ogg differ diff --git a/sound/vox_fem/starboard.ogg b/sound/vox_fem/starboard.ogg index 3a1454a7a8b..02c0ffe10ba 100644 Binary files a/sound/vox_fem/starboard.ogg and b/sound/vox_fem/starboard.ogg differ diff --git a/sound/vox_fem/station.ogg b/sound/vox_fem/station.ogg index 9bb667f1c13..465b83db809 100644 Binary files a/sound/vox_fem/station.ogg and b/sound/vox_fem/station.ogg differ diff --git a/sound/vox_fem/status.ogg b/sound/vox_fem/status.ogg index 3683f581674..985765375fc 100644 Binary files a/sound/vox_fem/status.ogg and b/sound/vox_fem/status.ogg differ diff --git a/sound/vox_fem/sterile.ogg b/sound/vox_fem/sterile.ogg index 7fba53a6ccf..3a51aecaf6b 100644 Binary files a/sound/vox_fem/sterile.ogg and b/sound/vox_fem/sterile.ogg differ diff --git a/sound/vox_fem/sterilization.ogg b/sound/vox_fem/sterilization.ogg index 08df6e08451..ebf092c8449 100644 Binary files a/sound/vox_fem/sterilization.ogg and b/sound/vox_fem/sterilization.ogg differ diff --git a/sound/vox_fem/storage.ogg b/sound/vox_fem/storage.ogg index 5d8e9615904..cc57069c25f 100644 Binary files a/sound/vox_fem/storage.ogg and b/sound/vox_fem/storage.ogg differ diff --git a/sound/vox_fem/stuck.ogg b/sound/vox_fem/stuck.ogg index e47d01c67d8..c4e477de6aa 100644 Binary files a/sound/vox_fem/stuck.ogg and b/sound/vox_fem/stuck.ogg differ diff --git a/sound/vox_fem/sub.ogg b/sound/vox_fem/sub.ogg index 5fdd39e4768..92c240a6468 100644 Binary files a/sound/vox_fem/sub.ogg and b/sound/vox_fem/sub.ogg differ diff --git a/sound/vox_fem/subsurface.ogg b/sound/vox_fem/subsurface.ogg index 1a9cc59c5d6..24da9c88936 100644 Binary files a/sound/vox_fem/subsurface.ogg and b/sound/vox_fem/subsurface.ogg differ diff --git a/sound/vox_fem/sudden.ogg b/sound/vox_fem/sudden.ogg index c9c4fed6042..baee11baaed 100644 Binary files a/sound/vox_fem/sudden.ogg and b/sound/vox_fem/sudden.ogg differ diff --git a/sound/vox_fem/suffer.ogg b/sound/vox_fem/suffer.ogg index f0a598bbfda..a1ab81689d5 100644 Binary files a/sound/vox_fem/suffer.ogg and b/sound/vox_fem/suffer.ogg differ diff --git a/sound/vox_fem/suit.ogg b/sound/vox_fem/suit.ogg index 55b177622da..e188763215e 100644 Binary files a/sound/vox_fem/suit.ogg and b/sound/vox_fem/suit.ogg differ diff --git a/sound/vox_fem/superconducting.ogg b/sound/vox_fem/superconducting.ogg index 9bce02e79ce..c89ab9b9eb3 100644 Binary files a/sound/vox_fem/superconducting.ogg and b/sound/vox_fem/superconducting.ogg differ diff --git a/sound/vox_fem/supercooled.ogg b/sound/vox_fem/supercooled.ogg index f9f0ab77f7b..c377951455b 100644 Binary files a/sound/vox_fem/supercooled.ogg and b/sound/vox_fem/supercooled.ogg differ diff --git a/sound/vox_fem/supply.ogg b/sound/vox_fem/supply.ogg index d69f77f64d7..992b2c68f81 100644 Binary files a/sound/vox_fem/supply.ogg and b/sound/vox_fem/supply.ogg differ diff --git a/sound/vox_fem/surface.ogg b/sound/vox_fem/surface.ogg index ba5802d3420..afe81808dd3 100644 Binary files a/sound/vox_fem/surface.ogg and b/sound/vox_fem/surface.ogg differ diff --git a/sound/vox_fem/surrender.ogg b/sound/vox_fem/surrender.ogg index a879e2930bb..207629f6ccc 100644 Binary files a/sound/vox_fem/surrender.ogg and b/sound/vox_fem/surrender.ogg differ diff --git a/sound/vox_fem/surround.ogg b/sound/vox_fem/surround.ogg index 4b64c723947..88d209d2651 100644 Binary files a/sound/vox_fem/surround.ogg and b/sound/vox_fem/surround.ogg differ diff --git a/sound/vox_fem/surrounded.ogg b/sound/vox_fem/surrounded.ogg index 288a46a1261..411040fa4dd 100644 Binary files a/sound/vox_fem/surrounded.ogg and b/sound/vox_fem/surrounded.ogg differ diff --git a/sound/vox_fem/switch.ogg b/sound/vox_fem/switch.ogg index 77d33e7ec9d..f98be12953c 100644 Binary files a/sound/vox_fem/switch.ogg and b/sound/vox_fem/switch.ogg differ diff --git a/sound/vox_fem/syndicate.ogg b/sound/vox_fem/syndicate.ogg index 460eb9bfb1a..e085c981565 100644 Binary files a/sound/vox_fem/syndicate.ogg and b/sound/vox_fem/syndicate.ogg differ diff --git a/sound/vox_fem/system.ogg b/sound/vox_fem/system.ogg index aa54f188b75..8c3cb383ff5 100644 Binary files a/sound/vox_fem/system.ogg and b/sound/vox_fem/system.ogg differ diff --git a/sound/vox_fem/systems.ogg b/sound/vox_fem/systems.ogg index 8537cf8f3d3..79b7ca80c31 100644 Binary files a/sound/vox_fem/systems.ogg and b/sound/vox_fem/systems.ogg differ diff --git a/sound/vox_fem/t.ogg b/sound/vox_fem/t.ogg index 508558d564e..f7bc5996a34 100644 Binary files a/sound/vox_fem/t.ogg and b/sound/vox_fem/t.ogg differ diff --git a/sound/vox_fem/tactical.ogg b/sound/vox_fem/tactical.ogg index 29b9ac75080..a482dba476e 100644 Binary files a/sound/vox_fem/tactical.ogg and b/sound/vox_fem/tactical.ogg differ diff --git a/sound/vox_fem/take.ogg b/sound/vox_fem/take.ogg index 4870651afc3..f3c5c6f1eef 100644 Binary files a/sound/vox_fem/take.ogg and b/sound/vox_fem/take.ogg differ diff --git a/sound/vox_fem/talk.ogg b/sound/vox_fem/talk.ogg index 7337c8947d6..122cc1e59e6 100644 Binary files a/sound/vox_fem/talk.ogg and b/sound/vox_fem/talk.ogg differ diff --git a/sound/vox_fem/tango.ogg b/sound/vox_fem/tango.ogg index d6211daee9d..eb8602f8c5f 100644 Binary files a/sound/vox_fem/tango.ogg and b/sound/vox_fem/tango.ogg differ diff --git a/sound/vox_fem/tank.ogg b/sound/vox_fem/tank.ogg index 421c7345bd0..6a7943a998c 100644 Binary files a/sound/vox_fem/tank.ogg and b/sound/vox_fem/tank.ogg differ diff --git a/sound/vox_fem/target.ogg b/sound/vox_fem/target.ogg index 86f77c95b55..f12c29de47d 100644 Binary files a/sound/vox_fem/target.ogg and b/sound/vox_fem/target.ogg differ diff --git a/sound/vox_fem/team.ogg b/sound/vox_fem/team.ogg index b2574fdca18..7269dd82232 100644 Binary files a/sound/vox_fem/team.ogg and b/sound/vox_fem/team.ogg differ diff --git a/sound/vox_fem/temperature.ogg b/sound/vox_fem/temperature.ogg index c688949398c..ae85c3ffedf 100644 Binary files a/sound/vox_fem/temperature.ogg and b/sound/vox_fem/temperature.ogg differ diff --git a/sound/vox_fem/temporal.ogg b/sound/vox_fem/temporal.ogg index b634294d07c..efa1de6189e 100644 Binary files a/sound/vox_fem/temporal.ogg and b/sound/vox_fem/temporal.ogg differ diff --git a/sound/vox_fem/ten.ogg b/sound/vox_fem/ten.ogg index f9d9a77c90e..d7c97e6310c 100644 Binary files a/sound/vox_fem/ten.ogg and b/sound/vox_fem/ten.ogg differ diff --git a/sound/vox_fem/terminal.ogg b/sound/vox_fem/terminal.ogg index bf41176495d..e19141b4de6 100644 Binary files a/sound/vox_fem/terminal.ogg and b/sound/vox_fem/terminal.ogg differ diff --git a/sound/vox_fem/terminated.ogg b/sound/vox_fem/terminated.ogg index c48abcad04c..505b5955123 100644 Binary files a/sound/vox_fem/terminated.ogg and b/sound/vox_fem/terminated.ogg differ diff --git a/sound/vox_fem/termination.ogg b/sound/vox_fem/termination.ogg index c9313e752b4..bc96b64a00b 100644 Binary files a/sound/vox_fem/termination.ogg and b/sound/vox_fem/termination.ogg differ diff --git a/sound/vox_fem/test.ogg b/sound/vox_fem/test.ogg index 44f6fa97966..90261697c96 100644 Binary files a/sound/vox_fem/test.ogg and b/sound/vox_fem/test.ogg differ diff --git a/sound/vox_fem/that.ogg b/sound/vox_fem/that.ogg index fd57219c060..868cdb0bf2d 100644 Binary files a/sound/vox_fem/that.ogg and b/sound/vox_fem/that.ogg differ diff --git a/sound/vox_fem/the.ogg b/sound/vox_fem/the.ogg index caa3b7deb55..f3783635aab 100644 Binary files a/sound/vox_fem/the.ogg and b/sound/vox_fem/the.ogg differ diff --git a/sound/vox_fem/then.ogg b/sound/vox_fem/then.ogg index a69977a0b47..547b2238b1a 100644 Binary files a/sound/vox_fem/then.ogg and b/sound/vox_fem/then.ogg differ diff --git a/sound/vox_fem/there.ogg b/sound/vox_fem/there.ogg index 499c11a7bbc..928bba64194 100644 Binary files a/sound/vox_fem/there.ogg and b/sound/vox_fem/there.ogg differ diff --git a/sound/vox_fem/third.ogg b/sound/vox_fem/third.ogg index fc3c1ad9090..63202c53214 100644 Binary files a/sound/vox_fem/third.ogg and b/sound/vox_fem/third.ogg differ diff --git a/sound/vox_fem/thirteen.ogg b/sound/vox_fem/thirteen.ogg index fd2c4d546fe..88115f5fa10 100644 Binary files a/sound/vox_fem/thirteen.ogg and b/sound/vox_fem/thirteen.ogg differ diff --git a/sound/vox_fem/thirty.ogg b/sound/vox_fem/thirty.ogg index 7899f376d5e..12e50744c38 100644 Binary files a/sound/vox_fem/thirty.ogg and b/sound/vox_fem/thirty.ogg differ diff --git a/sound/vox_fem/this.ogg b/sound/vox_fem/this.ogg index 8bead3b1087..b55923a48f4 100644 Binary files a/sound/vox_fem/this.ogg and b/sound/vox_fem/this.ogg differ diff --git a/sound/vox_fem/those.ogg b/sound/vox_fem/those.ogg index 24b77a90a29..41fc7456577 100644 Binary files a/sound/vox_fem/those.ogg and b/sound/vox_fem/those.ogg differ diff --git a/sound/vox_fem/thousand.ogg b/sound/vox_fem/thousand.ogg index e8b7a7d0610..ba92bcb2e89 100644 Binary files a/sound/vox_fem/thousand.ogg and b/sound/vox_fem/thousand.ogg differ diff --git a/sound/vox_fem/threat.ogg b/sound/vox_fem/threat.ogg index 001c63b12b1..d4003d6ab56 100644 Binary files a/sound/vox_fem/threat.ogg and b/sound/vox_fem/threat.ogg differ diff --git a/sound/vox_fem/three.ogg b/sound/vox_fem/three.ogg index 90ab31ac5e3..2e8dbf175c1 100644 Binary files a/sound/vox_fem/three.ogg and b/sound/vox_fem/three.ogg differ diff --git a/sound/vox_fem/through.ogg b/sound/vox_fem/through.ogg index 8469523146f..ad2e5ed1b72 100644 Binary files a/sound/vox_fem/through.ogg and b/sound/vox_fem/through.ogg differ diff --git a/sound/vox_fem/tide.ogg b/sound/vox_fem/tide.ogg index 5a003de1fe2..45917e2f57b 100644 Binary files a/sound/vox_fem/tide.ogg and b/sound/vox_fem/tide.ogg differ diff --git a/sound/vox_fem/time.ogg b/sound/vox_fem/time.ogg index 213395f7ea7..02746c98df0 100644 Binary files a/sound/vox_fem/time.ogg and b/sound/vox_fem/time.ogg differ diff --git a/sound/vox_fem/to.ogg b/sound/vox_fem/to.ogg index 0c83650fc81..aaf695702d1 100644 Binary files a/sound/vox_fem/to.ogg and b/sound/vox_fem/to.ogg differ diff --git a/sound/vox_fem/top.ogg b/sound/vox_fem/top.ogg index 992ff488874..1db5b104f28 100644 Binary files a/sound/vox_fem/top.ogg and b/sound/vox_fem/top.ogg differ diff --git a/sound/vox_fem/topside.ogg b/sound/vox_fem/topside.ogg index 79d632ca8bd..c3c4639830f 100644 Binary files a/sound/vox_fem/topside.ogg and b/sound/vox_fem/topside.ogg differ diff --git a/sound/vox_fem/touch.ogg b/sound/vox_fem/touch.ogg index 36db14887ac..4a165a15b8b 100644 Binary files a/sound/vox_fem/touch.ogg and b/sound/vox_fem/touch.ogg differ diff --git a/sound/vox_fem/towards.ogg b/sound/vox_fem/towards.ogg index 852e19b5947..1ee555597ff 100644 Binary files a/sound/vox_fem/towards.ogg and b/sound/vox_fem/towards.ogg differ diff --git a/sound/vox_fem/toxins.ogg b/sound/vox_fem/toxins.ogg index 5ae7d43b2d2..34d29ed792c 100644 Binary files a/sound/vox_fem/toxins.ogg and b/sound/vox_fem/toxins.ogg differ diff --git a/sound/vox_fem/track.ogg b/sound/vox_fem/track.ogg index 5119641b701..70467c449a8 100644 Binary files a/sound/vox_fem/track.ogg and b/sound/vox_fem/track.ogg differ diff --git a/sound/vox_fem/train.ogg b/sound/vox_fem/train.ogg index cd3b46c3582..c3b92d956d8 100644 Binary files a/sound/vox_fem/train.ogg and b/sound/vox_fem/train.ogg differ diff --git a/sound/vox_fem/traitor.ogg b/sound/vox_fem/traitor.ogg index 615a09630bd..5cfc3714d1a 100644 Binary files a/sound/vox_fem/traitor.ogg and b/sound/vox_fem/traitor.ogg differ diff --git a/sound/vox_fem/transportation.ogg b/sound/vox_fem/transportation.ogg index f9635b0b081..97d56ff61e4 100644 Binary files a/sound/vox_fem/transportation.ogg and b/sound/vox_fem/transportation.ogg differ diff --git a/sound/vox_fem/truck.ogg b/sound/vox_fem/truck.ogg index ede75cb9224..bd190eed3b6 100644 Binary files a/sound/vox_fem/truck.ogg and b/sound/vox_fem/truck.ogg differ diff --git a/sound/vox_fem/tunnel.ogg b/sound/vox_fem/tunnel.ogg index 40828dc94ed..d42beae1552 100644 Binary files a/sound/vox_fem/tunnel.ogg and b/sound/vox_fem/tunnel.ogg differ diff --git a/sound/vox_fem/turn.ogg b/sound/vox_fem/turn.ogg index 01fdca4b2ea..f6a11de5b52 100644 Binary files a/sound/vox_fem/turn.ogg and b/sound/vox_fem/turn.ogg differ diff --git a/sound/vox_fem/turret.ogg b/sound/vox_fem/turret.ogg index 8855ea430ed..541846aa2b8 100644 Binary files a/sound/vox_fem/turret.ogg and b/sound/vox_fem/turret.ogg differ diff --git a/sound/vox_fem/twelve.ogg b/sound/vox_fem/twelve.ogg index ab15c1dbc17..e192edeccd1 100644 Binary files a/sound/vox_fem/twelve.ogg and b/sound/vox_fem/twelve.ogg differ diff --git a/sound/vox_fem/twenty.ogg b/sound/vox_fem/twenty.ogg index 7fb374015e0..7b920b0ba8a 100644 Binary files a/sound/vox_fem/twenty.ogg and b/sound/vox_fem/twenty.ogg differ diff --git a/sound/vox_fem/two.ogg b/sound/vox_fem/two.ogg index ab9152ccab2..c327cc105ee 100644 Binary files a/sound/vox_fem/two.ogg and b/sound/vox_fem/two.ogg differ diff --git a/sound/vox_fem/u.ogg b/sound/vox_fem/u.ogg index 5e70abd2d6c..790bd095200 100644 Binary files a/sound/vox_fem/u.ogg and b/sound/vox_fem/u.ogg differ diff --git a/sound/vox_fem/unauthorized.ogg b/sound/vox_fem/unauthorized.ogg index bb3198f43e3..35d48120e98 100644 Binary files a/sound/vox_fem/unauthorized.ogg and b/sound/vox_fem/unauthorized.ogg differ diff --git a/sound/vox_fem/under.ogg b/sound/vox_fem/under.ogg index 7a42956aafa..89d91bef37d 100644 Binary files a/sound/vox_fem/under.ogg and b/sound/vox_fem/under.ogg differ diff --git a/sound/vox_fem/uniform.ogg b/sound/vox_fem/uniform.ogg index fac6ad19b9a..6f7de6902f7 100644 Binary files a/sound/vox_fem/uniform.ogg and b/sound/vox_fem/uniform.ogg differ diff --git a/sound/vox_fem/unlocked.ogg b/sound/vox_fem/unlocked.ogg index 362984b341e..725f8a6c819 100644 Binary files a/sound/vox_fem/unlocked.ogg and b/sound/vox_fem/unlocked.ogg differ diff --git a/sound/vox_fem/until.ogg b/sound/vox_fem/until.ogg index 85376504cc6..43cadd1a88d 100644 Binary files a/sound/vox_fem/until.ogg and b/sound/vox_fem/until.ogg differ diff --git a/sound/vox_fem/up.ogg b/sound/vox_fem/up.ogg index ed6aa7554d6..1c395a61958 100644 Binary files a/sound/vox_fem/up.ogg and b/sound/vox_fem/up.ogg differ diff --git a/sound/vox_fem/update.ogg b/sound/vox_fem/update.ogg index 841deff30a3..31a4e651aba 100644 Binary files a/sound/vox_fem/update.ogg and b/sound/vox_fem/update.ogg differ diff --git a/sound/vox_fem/updated.ogg b/sound/vox_fem/updated.ogg index 9c98ae36de6..61559f22939 100644 Binary files a/sound/vox_fem/updated.ogg and b/sound/vox_fem/updated.ogg differ diff --git a/sound/vox_fem/updating.ogg b/sound/vox_fem/updating.ogg index 6987745785a..0403f777969 100644 Binary files a/sound/vox_fem/updating.ogg and b/sound/vox_fem/updating.ogg differ diff --git a/sound/vox_fem/upload.ogg b/sound/vox_fem/upload.ogg index fece0c9ac11..f96547bfea1 100644 Binary files a/sound/vox_fem/upload.ogg and b/sound/vox_fem/upload.ogg differ diff --git a/sound/vox_fem/upper.ogg b/sound/vox_fem/upper.ogg index 01658ac0836..810d330ef08 100644 Binary files a/sound/vox_fem/upper.ogg and b/sound/vox_fem/upper.ogg differ diff --git a/sound/vox_fem/uranium.ogg b/sound/vox_fem/uranium.ogg index c1622b2b597..e2ac70d93eb 100644 Binary files a/sound/vox_fem/uranium.ogg and b/sound/vox_fem/uranium.ogg differ diff --git a/sound/vox_fem/us.ogg b/sound/vox_fem/us.ogg index 90c0977f560..0731a879a58 100644 Binary files a/sound/vox_fem/us.ogg and b/sound/vox_fem/us.ogg differ diff --git a/sound/vox_fem/usa.ogg b/sound/vox_fem/usa.ogg index b7a273bd556..f3bc1912e92 100644 Binary files a/sound/vox_fem/usa.ogg and b/sound/vox_fem/usa.ogg differ diff --git a/sound/vox_fem/use.ogg b/sound/vox_fem/use.ogg index 325536c4975..3ab7367a252 100644 Binary files a/sound/vox_fem/use.ogg and b/sound/vox_fem/use.ogg differ diff --git a/sound/vox_fem/used.ogg b/sound/vox_fem/used.ogg index 3e1a5344b66..5cb1afd8531 100644 Binary files a/sound/vox_fem/used.ogg and b/sound/vox_fem/used.ogg differ diff --git a/sound/vox_fem/user.ogg b/sound/vox_fem/user.ogg index 720a1fb83bd..739b3a31641 100644 Binary files a/sound/vox_fem/user.ogg and b/sound/vox_fem/user.ogg differ diff --git a/sound/vox_fem/v.ogg b/sound/vox_fem/v.ogg index 5df76474290..91484502295 100644 Binary files a/sound/vox_fem/v.ogg and b/sound/vox_fem/v.ogg differ diff --git a/sound/vox_fem/vacate.ogg b/sound/vox_fem/vacate.ogg index ef9e0f0c809..12f1c52c4ca 100644 Binary files a/sound/vox_fem/vacate.ogg and b/sound/vox_fem/vacate.ogg differ diff --git a/sound/vox_fem/valid.ogg b/sound/vox_fem/valid.ogg index 19a74baefed..a2d58b879c1 100644 Binary files a/sound/vox_fem/valid.ogg and b/sound/vox_fem/valid.ogg differ diff --git a/sound/vox_fem/vapor.ogg b/sound/vox_fem/vapor.ogg index 9643e16df9e..859d103ea6e 100644 Binary files a/sound/vox_fem/vapor.ogg and b/sound/vox_fem/vapor.ogg differ diff --git a/sound/vox_fem/vent.ogg b/sound/vox_fem/vent.ogg index cc7c31c1566..35fdffafa09 100644 Binary files a/sound/vox_fem/vent.ogg and b/sound/vox_fem/vent.ogg differ diff --git a/sound/vox_fem/ventilation.ogg b/sound/vox_fem/ventilation.ogg index c5903349a65..594cfbb5b8e 100644 Binary files a/sound/vox_fem/ventilation.ogg and b/sound/vox_fem/ventilation.ogg differ diff --git a/sound/vox_fem/victor.ogg b/sound/vox_fem/victor.ogg index a820e25ba95..97ce16b7f6d 100644 Binary files a/sound/vox_fem/victor.ogg and b/sound/vox_fem/victor.ogg differ diff --git a/sound/vox_fem/violated.ogg b/sound/vox_fem/violated.ogg index 64165c7364e..f7b0b72a8b3 100644 Binary files a/sound/vox_fem/violated.ogg and b/sound/vox_fem/violated.ogg differ diff --git a/sound/vox_fem/violation.ogg b/sound/vox_fem/violation.ogg index e870f9defe6..d50801ee766 100644 Binary files a/sound/vox_fem/violation.ogg and b/sound/vox_fem/violation.ogg differ diff --git a/sound/vox_fem/virology.ogg b/sound/vox_fem/virology.ogg index cc8e99d3fa6..9050ed50575 100644 Binary files a/sound/vox_fem/virology.ogg and b/sound/vox_fem/virology.ogg differ diff --git a/sound/vox_fem/voltage.ogg b/sound/vox_fem/voltage.ogg index 2665427add0..efcc71ffa93 100644 Binary files a/sound/vox_fem/voltage.ogg and b/sound/vox_fem/voltage.ogg differ diff --git a/sound/vox_fem/vox.ogg b/sound/vox_fem/vox.ogg index 5413d5e9693..9e173140c72 100644 Binary files a/sound/vox_fem/vox.ogg and b/sound/vox_fem/vox.ogg differ diff --git a/sound/vox_fem/vox_login.ogg b/sound/vox_fem/vox_login.ogg index d9a5a0be3c0..4c349b5835a 100644 Binary files a/sound/vox_fem/vox_login.ogg and b/sound/vox_fem/vox_login.ogg differ diff --git a/sound/vox_fem/voxtest.ogg b/sound/vox_fem/voxtest.ogg index 3e7ccda843b..cc73b4e8539 100644 Binary files a/sound/vox_fem/voxtest.ogg and b/sound/vox_fem/voxtest.ogg differ diff --git a/sound/vox_fem/voxtest2.ogg b/sound/vox_fem/voxtest2.ogg index c264f85256a..da1f57bc93a 100644 Binary files a/sound/vox_fem/voxtest2.ogg and b/sound/vox_fem/voxtest2.ogg differ diff --git a/sound/vox_fem/w.ogg b/sound/vox_fem/w.ogg index af691f5e546..9d79ce4a2a6 100644 Binary files a/sound/vox_fem/w.ogg and b/sound/vox_fem/w.ogg differ diff --git a/sound/vox_fem/walk.ogg b/sound/vox_fem/walk.ogg index 75cf580307b..10f5d04cf28 100644 Binary files a/sound/vox_fem/walk.ogg and b/sound/vox_fem/walk.ogg differ diff --git a/sound/vox_fem/wall.ogg b/sound/vox_fem/wall.ogg index 07ebc58d0bb..cc08c00256e 100644 Binary files a/sound/vox_fem/wall.ogg and b/sound/vox_fem/wall.ogg differ diff --git a/sound/vox_fem/wanker.ogg b/sound/vox_fem/wanker.ogg index 510faec69dc..fbb8c404e67 100644 Binary files a/sound/vox_fem/wanker.ogg and b/sound/vox_fem/wanker.ogg differ diff --git a/sound/vox_fem/want.ogg b/sound/vox_fem/want.ogg index 4c65e53c7f2..49ad91c895b 100644 Binary files a/sound/vox_fem/want.ogg and b/sound/vox_fem/want.ogg differ diff --git a/sound/vox_fem/wanted.ogg b/sound/vox_fem/wanted.ogg index e0e98f74678..1c87b3e140d 100644 Binary files a/sound/vox_fem/wanted.ogg and b/sound/vox_fem/wanted.ogg differ diff --git a/sound/vox_fem/warm.ogg b/sound/vox_fem/warm.ogg index 8acfb7de743..534203ba70e 100644 Binary files a/sound/vox_fem/warm.ogg and b/sound/vox_fem/warm.ogg differ diff --git a/sound/vox_fem/warn.ogg b/sound/vox_fem/warn.ogg index 6c387184830..437ef92c681 100644 Binary files a/sound/vox_fem/warn.ogg and b/sound/vox_fem/warn.ogg differ diff --git a/sound/vox_fem/warning.ogg b/sound/vox_fem/warning.ogg index ef546995a8b..5ff68583a0e 100644 Binary files a/sound/vox_fem/warning.ogg and b/sound/vox_fem/warning.ogg differ diff --git a/sound/vox_fem/waste.ogg b/sound/vox_fem/waste.ogg index 10f92e11aa0..46726eaa2dc 100644 Binary files a/sound/vox_fem/waste.ogg and b/sound/vox_fem/waste.ogg differ diff --git a/sound/vox_fem/water.ogg b/sound/vox_fem/water.ogg index 853e7fb4db3..08e6c8a0f1a 100644 Binary files a/sound/vox_fem/water.ogg and b/sound/vox_fem/water.ogg differ diff --git a/sound/vox_fem/we.ogg b/sound/vox_fem/we.ogg index 5d0f2736304..eb417004f52 100644 Binary files a/sound/vox_fem/we.ogg and b/sound/vox_fem/we.ogg differ diff --git a/sound/vox_fem/weapon.ogg b/sound/vox_fem/weapon.ogg index 8ee0d3b9336..b892f246d94 100644 Binary files a/sound/vox_fem/weapon.ogg and b/sound/vox_fem/weapon.ogg differ diff --git a/sound/vox_fem/welcome.ogg b/sound/vox_fem/welcome.ogg index 6c17b08fca0..cde71ac125f 100644 Binary files a/sound/vox_fem/welcome.ogg and b/sound/vox_fem/welcome.ogg differ diff --git a/sound/vox_fem/west.ogg b/sound/vox_fem/west.ogg index 3e281c681dc..588020a1d9f 100644 Binary files a/sound/vox_fem/west.ogg and b/sound/vox_fem/west.ogg differ diff --git a/sound/vox_fem/whiskey.ogg b/sound/vox_fem/whiskey.ogg index 29599ffc203..9b1b03c04c5 100644 Binary files a/sound/vox_fem/whiskey.ogg and b/sound/vox_fem/whiskey.ogg differ diff --git a/sound/vox_fem/white.ogg b/sound/vox_fem/white.ogg index ea7c279b513..0c95d531f1d 100644 Binary files a/sound/vox_fem/white.ogg and b/sound/vox_fem/white.ogg differ diff --git a/sound/vox_fem/wilco.ogg b/sound/vox_fem/wilco.ogg index 7604bf920d0..29109ecbdcb 100644 Binary files a/sound/vox_fem/wilco.ogg and b/sound/vox_fem/wilco.ogg differ diff --git a/sound/vox_fem/will.ogg b/sound/vox_fem/will.ogg index 8d039e704c7..fa1e53b78fb 100644 Binary files a/sound/vox_fem/will.ogg and b/sound/vox_fem/will.ogg differ diff --git a/sound/vox_fem/with.ogg b/sound/vox_fem/with.ogg index 54fc4c1cd7b..7bed6fcc46c 100644 Binary files a/sound/vox_fem/with.ogg and b/sound/vox_fem/with.ogg differ diff --git a/sound/vox_fem/without.ogg b/sound/vox_fem/without.ogg index 3eed0f1a8d6..814e123c8ce 100644 Binary files a/sound/vox_fem/without.ogg and b/sound/vox_fem/without.ogg differ diff --git a/sound/vox_fem/wood.ogg b/sound/vox_fem/wood.ogg index 640314e4d16..ec84917ea4f 100644 Binary files a/sound/vox_fem/wood.ogg and b/sound/vox_fem/wood.ogg differ diff --git a/sound/vox_fem/woody.ogg b/sound/vox_fem/woody.ogg index ccea84fe051..54e56f72e83 100644 Binary files a/sound/vox_fem/woody.ogg and b/sound/vox_fem/woody.ogg differ diff --git a/sound/vox_fem/x.ogg b/sound/vox_fem/x.ogg index db98a053d8b..c483daca87d 100644 Binary files a/sound/vox_fem/x.ogg and b/sound/vox_fem/x.ogg differ diff --git a/sound/vox_fem/xeno.ogg b/sound/vox_fem/xeno.ogg index 2b3fd99fcbe..ed486388d8a 100644 Binary files a/sound/vox_fem/xeno.ogg and b/sound/vox_fem/xeno.ogg differ diff --git a/sound/vox_fem/xenobiology.ogg b/sound/vox_fem/xenobiology.ogg index 4e04e305e99..f5e6554052b 100644 Binary files a/sound/vox_fem/xenobiology.ogg and b/sound/vox_fem/xenobiology.ogg differ diff --git a/sound/vox_fem/xenomorph.ogg b/sound/vox_fem/xenomorph.ogg index ea04350bf3e..5558123f938 100644 Binary files a/sound/vox_fem/xenomorph.ogg and b/sound/vox_fem/xenomorph.ogg differ diff --git a/sound/vox_fem/xenomorphs.ogg b/sound/vox_fem/xenomorphs.ogg index 369033fb4c5..caf268c9667 100644 Binary files a/sound/vox_fem/xenomorphs.ogg and b/sound/vox_fem/xenomorphs.ogg differ diff --git a/sound/vox_fem/y.ogg b/sound/vox_fem/y.ogg index ccf57ec9356..eac894378fc 100644 Binary files a/sound/vox_fem/y.ogg and b/sound/vox_fem/y.ogg differ diff --git a/sound/vox_fem/yankee.ogg b/sound/vox_fem/yankee.ogg index c93e921a9c9..6121116435c 100644 Binary files a/sound/vox_fem/yankee.ogg and b/sound/vox_fem/yankee.ogg differ diff --git a/sound/vox_fem/yards.ogg b/sound/vox_fem/yards.ogg index 640ad49c189..ed7a8a35e0c 100644 Binary files a/sound/vox_fem/yards.ogg and b/sound/vox_fem/yards.ogg differ diff --git a/sound/vox_fem/year.ogg b/sound/vox_fem/year.ogg index f31f2d168fe..4376f8f1251 100644 Binary files a/sound/vox_fem/year.ogg and b/sound/vox_fem/year.ogg differ diff --git a/sound/vox_fem/yellow.ogg b/sound/vox_fem/yellow.ogg index f703e96a25e..0588027ab6b 100644 Binary files a/sound/vox_fem/yellow.ogg and b/sound/vox_fem/yellow.ogg differ diff --git a/sound/vox_fem/yes.ogg b/sound/vox_fem/yes.ogg index 7523c67bf72..8c9d4fe441d 100644 Binary files a/sound/vox_fem/yes.ogg and b/sound/vox_fem/yes.ogg differ diff --git a/sound/vox_fem/you.ogg b/sound/vox_fem/you.ogg index e279b0a3c93..0f00616bd60 100644 Binary files a/sound/vox_fem/you.ogg and b/sound/vox_fem/you.ogg differ diff --git a/sound/vox_fem/your.ogg b/sound/vox_fem/your.ogg index a947291fb98..9113df51ec8 100644 Binary files a/sound/vox_fem/your.ogg and b/sound/vox_fem/your.ogg differ diff --git a/sound/vox_fem/yourself.ogg b/sound/vox_fem/yourself.ogg index dfd4d8f0e50..137be1bb376 100644 Binary files a/sound/vox_fem/yourself.ogg and b/sound/vox_fem/yourself.ogg differ diff --git a/sound/vox_fem/z.ogg b/sound/vox_fem/z.ogg index 4b984376bbd..6ece175d8f1 100644 Binary files a/sound/vox_fem/z.ogg and b/sound/vox_fem/z.ogg differ diff --git a/sound/vox_fem/zero.ogg b/sound/vox_fem/zero.ogg index af05ce0bc6c..1d9344f2203 100644 Binary files a/sound/vox_fem/zero.ogg and b/sound/vox_fem/zero.ogg differ diff --git a/sound/vox_fem/zone.ogg b/sound/vox_fem/zone.ogg index bb0af3b93e0..b054cca741c 100644 Binary files a/sound/vox_fem/zone.ogg and b/sound/vox_fem/zone.ogg differ diff --git a/sound/vox_fem/zulu.ogg b/sound/vox_fem/zulu.ogg index e853b4af5da..f54eeac9527 100644 Binary files a/sound/vox_fem/zulu.ogg and b/sound/vox_fem/zulu.ogg differ diff --git a/sound/weapons/empty.ogg b/sound/weapons/empty.ogg new file mode 100644 index 00000000000..12ef9e5fce8 Binary files /dev/null and b/sound/weapons/empty.ogg differ diff --git a/tgstation.dme b/tgstation.dme index 548d5fabb98..da6e81f5e41 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -479,6 +479,7 @@ #include "code\game\objects\effects\decals\Cleanable\robots.dm" #include "code\game\objects\effects\spawners\bombspawner.dm" #include "code\game\objects\effects\spawners\gibspawner.dm" +#include "code\game\objects\effects\spawners\lootdrop.dm" #include "code\game\objects\effects\spawners\vaultspawner.dm" #include "code\game\objects\items\apc_frame.dm" #include "code\game\objects\items\blueprints.dm" @@ -743,7 +744,6 @@ #include "code\modules\awaymissions\corpse.dm" #include "code\modules\awaymissions\exile.dm" #include "code\modules\awaymissions\gateway.dm" -#include "code\modules\awaymissions\loot.dm" #include "code\modules\awaymissions\pamphlet.dm" #include "code\modules\awaymissions\trigger.dm" #include "code\modules\awaymissions\zlevel.dm" @@ -1146,8 +1146,8 @@ #include "code\modules\projectiles\firing.dm" #include "code\modules\projectiles\gun.dm" #include "code\modules\projectiles\projectile.dm" +#include "code\modules\projectiles\ammunition\ammo_casings.dm" #include "code\modules\projectiles\ammunition\boxes.dm" -#include "code\modules\projectiles\ammunition\bullets.dm" #include "code\modules\projectiles\ammunition\energy.dm" #include "code\modules\projectiles\ammunition\magazines.dm" #include "code\modules\projectiles\ammunition\special.dm" @@ -1204,6 +1204,15 @@ #include "code\modules\research\rdmachines.dm" #include "code\modules\research\research.dm" #include "code\modules\research\server.dm" +#include "code\modules\research\designs\AI_module_designs.dm" +#include "code\modules\research\designs\comp_board_designs.dm" +#include "code\modules\research\designs\machine_designs.dm" +#include "code\modules\research\designs\mecha_designs.dm" +#include "code\modules\research\designs\medical_designs.dm" +#include "code\modules\research\designs\power_designs.dm" +#include "code\modules\research\designs\stock_parts_designs.dm" +#include "code\modules\research\designs\telecomms_designs.dm" +#include "code\modules\research\designs\weapon_designs.dm" #include "code\modules\scripting\Errors.dm" #include "code\modules\scripting\IDE.dm" #include "code\modules\scripting\Options.dm"