mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-21 04:57:57 +01:00
Merge remote-tracking branch 'remotes/upstream/master' into Botcall_V2
Conflicts: code/game/machinery/bots/bots.dm
This commit is contained in:
@@ -313,7 +313,7 @@
|
||||
"ga" = (/turf/simulated/shuttle/wall{icon_state = "swallc4"; dir = 2},/area/space)
|
||||
"gb" = (/turf/unsimulated/floor{name = "plating"},/area/centcom/ferry)
|
||||
"gc" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows"; dir = 1},/area/centcom/ferry)
|
||||
"gd" = (/obj/effect/landmark{name = "Deathsquad"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry)
|
||||
"gd" = (/obj/structure/flora/kirbyplants,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry)
|
||||
"ge" = (/obj/structure/rack,/obj/item/weapon/storage/fancy/crayons,/obj/item/toy/sword,/turf/unsimulated/floor{tag = "icon-red (NORTH)"; icon_state = "red"; dir = 1},/area/centcom/evac)
|
||||
"gf" = (/turf/unsimulated/floor{icon_state = "greencorner"; dir = 8},/area/centcom/control)
|
||||
"gg" = (/turf/unsimulated/floor{icon_state = "greencorner"},/area/centcom/control)
|
||||
@@ -325,11 +325,11 @@
|
||||
"gm" = (/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/turf/simulated/shuttle/floor,/area/space)
|
||||
"gn" = (/obj/structure/stool/bed/chair/office/dark{dir = 1},/obj/effect/landmark{name = "Emergencyresponseteam"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry)
|
||||
"go" = (/obj/machinery/door/airlock/shuttle,/turf/simulated/shuttle/floor,/area/space)
|
||||
"gp" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/emps,/obj/item/weapon/gun/energy/ionrifle{pin = /obj/item/device/firing_pin},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry)
|
||||
"gp" = (/obj/structure/extinguisher_cabinet{pixel_x = 28},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry)
|
||||
"gq" = (/obj/structure/window/shuttle,/obj/structure/grille,/turf/simulated/shuttle/plating,/area/space)
|
||||
"gr" = (/turf/unsimulated/floor{name = "plating"},/turf/simulated/shuttle/wall{icon_state = "swall_f10"; dir = 2},/area/space)
|
||||
"gs" = (/turf/unsimulated/floor{name = "plating"},/area/space)
|
||||
"gt" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows2"; dir = 1},/area/centcom/ferry)
|
||||
"gt" = (/obj/structure/table/reinforced,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/turf/unsimulated/floor{dir = 8; icon_state = "vault"},/area/centcom/ferry)
|
||||
"gu" = (/obj/machinery/door/airlock/external{name = "Supply Shuttle"; req_access_txt = "106"},/turf/unsimulated/floor{icon_state = "delivery"},/area/centcom/suppy)
|
||||
"gv" = (/turf/unsimulated/wall/fakeglass,/area/centcom/control)
|
||||
"gw" = (/obj/structure/stool/bed/chair{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space)
|
||||
@@ -409,9 +409,9 @@
|
||||
"hS" = (/obj/machinery/door/poddoor/shutters/preopen{id = "adminshut"; name = "Administrative Shutters"},/turf/unsimulated/wall/fakeglass,/area/centcom/ferry)
|
||||
"hT" = (/obj/machinery/door/poddoor/preopen{id = "CentComPort"; name = "security door"},/turf/unsimulated/floor{tag = "icon-loadingarea (WEST)"; icon_state = "loadingarea"; dir = 8},/area/centcom/control)
|
||||
"hU" = (/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry)
|
||||
"hV" = (/obj/structure/dresser,/obj/structure/mirror{pixel_x = 0; pixel_y = 30},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry)
|
||||
"hW" = (/obj/structure/closet/secure_closet/ertCom,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry)
|
||||
"hX" = (/obj/structure/stool/bed/chair/office/dark{dir = 8},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry)
|
||||
"hV" = (/obj/structure/stool/bed/chair/office/dark,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/ferry)
|
||||
"hW" = (/obj/structure/closet/secure_closet/ertCom,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/ferry)
|
||||
"hX" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/syringes,/obj/item/weapon/gun/syringe/rapidsyringe,/obj/structure/extinguisher_cabinet{pixel_y = 28},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/ferry)
|
||||
"hY" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 5},/obj/item/weapon/pen/blue,/turf/unsimulated/floor{dir = 8; icon_state = "vault"},/area/centcom/ferry)
|
||||
"hZ" = (/turf/unsimulated/wall,/area/tdome/tdomeobserve)
|
||||
"ia" = (/obj/structure/reagent_dispensers/water_cooler,/turf/unsimulated/floor{dir = 6; icon_state = "carpetside"},/area/centcom/ferry)
|
||||
@@ -432,7 +432,7 @@
|
||||
"ip" = (/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/obj/structure/flora/grass/both,/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "gravsnow_corner"},/area/syndicate_mothership)
|
||||
"iq" = (/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/obj/structure/flora/tree/pine,/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "gravsnow_corner"},/area/syndicate_mothership)
|
||||
"ir" = (/turf/unsimulated/floor{dir = 8; heat_capacity = 1; icon_state = "warning"},/area/centcom/evac)
|
||||
"is" = (/obj/structure/closet/secure_closet/ertMed,/turf/unsimulated/floor{tag = "icon-darkblue (EAST)"; icon_state = "darkblue"; dir = 4},/area/centcom/ferry)
|
||||
"is" = (/obj/structure/table/reinforced,/obj/item/weapon/c4,/obj/item/weapon/c4{pixel_x = 7},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/ferry)
|
||||
"it" = (/obj/structure/table,/turf/unsimulated/floor{icon_state = "floor"},/area/tdome/tdomeobserve)
|
||||
"iu" = (/turf/unsimulated/floor{icon_state = "floor"},/area/tdome/tdomeobserve)
|
||||
"iv" = (/obj/machinery/door/airlock/centcom{name = "Transport Shuttle"; opacity = 1; req_access_txt = "101"},/turf/unsimulated/floor{tag = "icon-darkgreen"; icon_state = "darkgreen"; dir = 2},/area/centcom/ferry)
|
||||
@@ -451,15 +451,15 @@
|
||||
"iI" = (/obj/machinery/washing_machine,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership)
|
||||
"iJ" = (/obj/structure/reagent_dispensers/water_cooler,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry)
|
||||
"iK" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{dir = 8; icon_state = "vault"},/area/centcom/ferry)
|
||||
"iL" = (/obj/structure/closet/secure_closet/ertEngi,/obj/structure/extinguisher_cabinet{pixel_x = 28},/turf/unsimulated/floor{tag = "icon-darkbrown (EAST)"; icon_state = "darkbrown"; dir = 4},/area/centcom/ferry)
|
||||
"iL" = (/obj/structure/closet/secure_closet/ertEngi,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/ferry)
|
||||
"iM" = (/obj/machinery/vending/cigarette{products = list(/obj/item/weapon/storage/fancy/cigarettes/cigpack_syndicate = 7, /obj/item/weapon/storage/fancy/cigarettes/cigpack_uplift = 3, /obj/item/weapon/storage/fancy/cigarettes/cigpack_robust = 2, /obj/item/weapon/storage/fancy/cigarettes/cigpack_carp = 3, /obj/item/weapon/storage/fancy/cigarettes/cigpack_midori = 1, /obj/item/weapon/storage/box/matches = 10, /obj/item/weapon/lighter/random = 4, /obj/item/weapon/storage/fancy/rollingpapers = 5)},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry)
|
||||
"iN" = (/obj/structure/sign/map/left,/turf/unsimulated/floor{tag = "icon-light_on"; icon_state = "light_on"},/area/centcom/ferry)
|
||||
"iO" = (/obj/structure/sign/map/right,/turf/unsimulated/floor{tag = "icon-light_on"; icon_state = "light_on"},/area/centcom/ferry)
|
||||
"iP" = (/obj/structure/closet/secure_closet/ertSec,/turf/unsimulated/floor{tag = "icon-darkred (EAST)"; icon_state = "darkred"; dir = 4},/area/centcom/ferry)
|
||||
"iP" = (/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/ferry)
|
||||
"iQ" = (/obj/machinery/vending/coffee,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry)
|
||||
"iR" = (/obj/structure/table/reinforced,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry)
|
||||
"iR" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows"; dir = 9},/area/centcom/ferry)
|
||||
"iS" = (/obj/structure/table/wood,/obj/item/weapon/storage/box/drinkingglasses,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry)
|
||||
"iT" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/syringes,/obj/item/weapon/gun/syringe/rapidsyringe,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry)
|
||||
"iT" = (/obj/machinery/door/poddoor/ert,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/ferry)
|
||||
"iU" = (/obj/structure/stool/bed/chair/comfy/black{dir = 4},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/centcom/ferry)
|
||||
"iV" = (/obj/structure/stool/bed/chair/comfy/black{dir = 1},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/ferry)
|
||||
"iW" = (/turf/unsimulated/floor{dir = 4; icon_state = "carpetside"},/area/centcom/ferry)
|
||||
@@ -499,11 +499,11 @@
|
||||
"jE" = (/mob/living/simple_animal/hostile/retaliate/bat{desc = "A Syndicate experiment in weaponized space carp technology. Its fangs seem to have been intentionally dulled down to prevent accidents."; faction = list("syndicate"); harm_intent_damage = 5; health = 50; icon_dead = "carp_dead"; icon_gib = "carp_gib"; icon_living = "carp"; icon_state = "carp"; name = "Cayenne"; real_name = "Cayenne"; response_disarm = "lightly brushes aside"; response_help = "pets"},/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
|
||||
"jF" = (/obj/machinery/door/airlock/centcom{name = "Study"; opacity = 1; req_access_txt = "150"},/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
|
||||
"jG" = (/turf/unsimulated/floor{icon_state = "grimy"},/area/syndicate_mothership)
|
||||
"jH" = (/obj/structure/closet/secure_closet/ertMed,/turf/unsimulated/floor{tag = "icon-darkblue"; icon_state = "darkblue"; dir = 2},/area/centcom/ferry)
|
||||
"jI" = (/obj/structure/closet/secure_closet/ertSec,/turf/unsimulated/floor{tag = "icon-darkred"; icon_state = "darkred"; dir = 2},/area/centcom/ferry)
|
||||
"jH" = (/obj/structure/closet/secure_closet/ertSec,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/ferry)
|
||||
"jI" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/syringes,/obj/item/weapon/gun/syringe/rapidsyringe,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/ferry)
|
||||
"jJ" = (/obj/machinery/door/poddoor/shutters/preopen{id = "adminshut"; name = "Administrative Shutters"},/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows"; dir = 1},/area/centcom/ferry)
|
||||
"jK" = (/turf/unsimulated/floor{tag = "icon-yellowcornersiding (WEST)"; icon_state = "yellowcornersiding"; dir = 8},/area/centcom/evac)
|
||||
"jL" = (/obj/structure/table/reinforced,/obj/item/weapon/c4,/obj/item/weapon/c4{pixel_x = 7},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry)
|
||||
"jL" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/emps,/obj/item/weapon/gun/energy/ionrifle{pin = /obj/item/device/firing_pin},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/ferry)
|
||||
"jM" = (/turf/unsimulated/floor{tag = "icon-yellowsiding"; icon_state = "yellowsiding"},/area/centcom/evac)
|
||||
"jN" = (/turf/unsimulated/floor{tag = "icon-warningcorner (EAST)"; icon_state = "warningcorner"; dir = 4},/area/centcom/evac)
|
||||
"jO" = (/turf/unsimulated/floor{tag = "icon-darkgreencorners"; icon_state = "darkgreencorners"},/area/centcom/ferry)
|
||||
@@ -545,13 +545,13 @@
|
||||
"ky" = (/obj/structure/table/wood,/obj/item/weapon/reagent_containers/food/snacks/pizzaslice/mushroom,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
|
||||
"kz" = (/obj/structure/table/wood,/obj/item/weapon/reagent_containers/food/drinks/beer{pixel_x = 5; pixel_y = -2; step_x = 0},/obj/item/toy/cards/deck/syndicate{icon_state = "deck_syndicate_full"; pixel_x = -6; pixel_y = 6},/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
|
||||
"kA" = (/obj/machinery/computer/telecrystals/uplinker,/turf/unsimulated/floor{tag = "icon-podhatch (WEST)"; icon_state = "podhatch"; dir = 8},/area/syndicate_mothership)
|
||||
"kB" = (/obj/machinery/door/airlock/centcom{name = "briefing room"; opacity = 1; req_access_txt = "103"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry)
|
||||
"kB" = (/obj/structure/closet/secure_closet/ertMed,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/ferry)
|
||||
"kC" = (/obj/structure/table/wood,/obj/item/weapon/paper_bin,/turf/unsimulated/floor{dir = 9; icon_state = "carpetside"},/area/centcom/ferry)
|
||||
"kD" = (/turf/unsimulated/floor{tag = "icon-yellowcornersiding (NORTH)"; icon_state = "yellowcornersiding"; dir = 1},/area/centcom/evac)
|
||||
"kE" = (/turf/unsimulated/floor{tag = "icon-yellowsiding (NORTH)"; icon_state = "yellowsiding"; dir = 1},/area/centcom/evac)
|
||||
"kF" = (/turf/unsimulated/floor{tag = "icon-warningcorner (NORTH)"; icon_state = "warningcorner"; dir = 1},/area/centcom/evac)
|
||||
"kG" = (/turf/unsimulated/floor{tag = "icon-warndark (EAST)"; icon_state = "warndark"; dir = 4},/area/centcom/ferry)
|
||||
"kH" = (/obj/machinery/door/airlock/external{name = "Ferry Airlock"; req_access_txt = "0"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry)
|
||||
"kG" = (/obj/machinery/computer/shuttle/ferry,/turf/unsimulated/floor{tag = "icon-warndark (WEST)"; icon_state = "warndark"; dir = 8},/area/centcom/ferry)
|
||||
"kH" = (/turf/unsimulated/floor{icon_state = "delivery"},/area/centcom/ferry)
|
||||
"kI" = (/turf/unsimulated/wall/fakeglass{color = "#008000"; dir = 6; icon_state = "fakewindows2"},/area/wizard_station)
|
||||
"kJ" = (/obj/effect/forcefield,/obj/structure/door_assembly{anchored = 1; icon_state = "door_as_uranium1"; name = "Bridge"},/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station)
|
||||
"kK" = (/turf/unsimulated/wall/normal{tag = "icon-uranium6"; icon_state = "uranium6"},/area/wizard_station)
|
||||
@@ -654,7 +654,7 @@
|
||||
"mD" = (/turf/simulated/floor/plasteel,/area/tdome/arena)
|
||||
"mE" = (/turf/unsimulated/wall/normal{tag = "icon-uranium1"; icon_state = "uranium1"},/area/wizard_station)
|
||||
"mF" = (/obj/structure/stool/bed/chair/wood/wings,/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station)
|
||||
"mG" = (/obj/structure/table/wood,/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/ointment,/obj/item/device/radio/intercom{desc = "Talk through this. Magically."; freerange = 1; frequency = 1213; name = "Wizard Intercom"; pixel_x = -32; subspace_transmission = 1; syndie = 1},/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station)
|
||||
"mG" = (/obj/structure/table/wood,/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/ointment,/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station)
|
||||
"mH" = (/obj/structure/table/wood,/obj/item/weapon/retractor,/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station)
|
||||
"mI" = (/obj/structure/stool/bed/chair/office/dark,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/centcom/ferry)
|
||||
"mJ" = (/obj/structure/table/wood,/obj/item/clothing/suit/wizrobe/magusred,/obj/item/clothing/head/wizard/magus,/obj/item/weapon/staff,/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station)
|
||||
@@ -672,7 +672,7 @@
|
||||
"mV" = (/obj/structure/table,/obj/item/weapon/weldingtool/largetank{pixel_y = 3},/obj/item/device/multitool,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/space)
|
||||
"mW" = (/obj/structure/stool,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
|
||||
"mX" = (/obj/machinery/door/poddoor/shutters/preopen{id = "adminshut"; name = "Administrative Shutters"},/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows2"; dir = 6},/area/centcom/ferry)
|
||||
"mY" = (/obj/structure/closet/secure_closet/ertEngi,/obj/structure/extinguisher_cabinet{pixel_y = 28},/turf/unsimulated/floor{tag = "icon-darkbrown"; icon_state = "darkbrown"; dir = 2},/area/centcom/ferry)
|
||||
"mY" = (/obj/machinery/door/airlock/centcom{name = "briefing room"; opacity = 1; req_access_txt = "101"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry)
|
||||
"mZ" = (/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/melee/baton/loaded,/obj/item/weapon/melee/energy/sword/saber/red,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/arena)
|
||||
"na" = (/obj/machinery/door/poddoor{id = "thunderdomegen"; name = "General Supply"},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/arena)
|
||||
"nb" = (/obj/effect/landmark{name = "tdome2"},/turf/unsimulated/floor{name = "plating"},/area/tdome/tdome2)
|
||||
@@ -909,7 +909,9 @@
|
||||
"ry" = (/obj/effect/landmark/abductor/agent{team = 2},/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"rz" = (/obj/effect/landmark/abductor/scientist{team = 3},/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"rA" = (/obj/effect/landmark/abductor/agent{team = 3},/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
|
||||
"rB" = (/obj/machinery/door/airlock/external{name = "Ferry Airlock"; req_access_txt = "0"},/turf/unsimulated/floor{icon_state = "delivery"},/area/centcom/ferry)
|
||||
"rC" = (/turf/unsimulated/wall/fakeglass{tag = "icon-fakewindows (SOUTHWEST)"; icon_state = "fakewindows"; dir = 10},/area/centcom/ferry)
|
||||
|
||||
(1,1,1) = {"
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababadaeaeaeaeaeafaeaeaeaeaeafaeaeaeaeaeafaeaeaeaeaeag
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababahaiaiaiaiaiajakakakakakajalalalalalajamanananaoap
|
||||
@@ -1043,23 +1045,23 @@ abababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcBdOdPdQdRdScBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcWdsdsdsdsdscXabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhfhfhfhfhgBfhfhfhfhfhfhfhfhfhfhababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhhUhVhUhUhUhUhUhUjHmYjIgpiTjLfhababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhhUhUhUhUfDhUfDhUhUhUhUhUhUiRfhababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhiJhUhUiKiKiKiKfRhUhUhUhUhUiTfhababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhiMhUfTiKiNiOiKhUhUhUhUhUhUiPfhababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhiQhUhUiKiKiKiKfRhUhUhUhUhUiLfhfhfhfhfhepepepepepepepepepabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhiShUhUgnhUgnhUhUhUhUhUhUhUismXfFfFfFfhepeuepeuepeuepeuepabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhjqhUhUhUhUhUhUhUhWhYhXhUhUeKmAfFmIfFfhepepepepepepepepepabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhfhfhfhfhfhfhhzhAhAhBfhfhfhfhfhkBfhfhkCkjkkfhepeuepeuepeuepeuepabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhgbgbgbgbgbgbgbgbgbgbgbgbgbgcfahUeKjJjQiViWfhepepepepepepepepepabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhgbhHdBdBgqdBdBdBezdBdBgrgsgtfagdeKhShRieiafhababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhhHhIeNgDgEgEgEgEgEgEgEgqgFgGfagdeKfhfhfhfhfhepepepepepepepepepabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhgodHdHdHdHdHdHdHdHdHdHgTkHkGfagdkPfhfWfFfIfhepeuepeuepeuepeuepabababababababababababdAezezezezezdCabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhhQeBgMgMeDeDeDeDeDeDeDgqgFhafagdhUfUfFfFelfhepepepepepepepepepabekekekekekekabababdAdZeCeDeEeDeFdYdCababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhgbhQdBdBgqdBdBdBezdBdBhigsgtfagdjOfhfFfFftfhepeuepeuepeuepeuepabeklflglglCekabababdGeLeMdHdHdHeNeOdGababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhgbgbgbgbgbgbgbgbgbgbgbgbgbhmfahUeKfhfFiUfYfhepepepepepepepepepabeAeJeJeJeJekabababdGeSeTeUeVdHeNeWdGababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhfhfhfhfhgBfhfhfhfhfhababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhiQiMiJhUhUhUhUhUgdfhababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhhUhUhUfDhUfDhUhUhUfhababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhhUhUiKiKiKiKfRhUhUfhababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhfhfhfhfhfhfhfhhUfTiKiNiOiKhUhUgpfhababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhhWhVishXiLiLfhhUhUiKiKiKiKfRhUjqfhababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhiPiPiPiPiPiPiThUhUgnhUgnhUhUhUiSfhfhfhfhfhepepepepepepepepepabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhiPiPiPiPiPiPiThUhUhUhUhUhUhUhUeKmXfFfFfFfhepeuepeuepeuepeuepabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhjHjHjLjIkBkBfhgthYhUhUhUhUhUhUeKmAfFmIfFfhepepepepepepepepepabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhfhfhhzhAhAhBfhfhhzhAhAhBfhfhfhmYfhfhkCkjkkfhepeuepeuepeuepeuepabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhgbgbgbgbgbgbgbgbgbgbgbgbgbgchUhUeKjJjQiViWfhepepepepepepepepepabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhfhhHdBdBgqdBdBdBezdBdBgrgsiRgGhUhUeKhShRieiafhababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhhHhIeNgDgEgEgEgEgEgEgEgqgFgGkGhUhUeKfhfhfhfhfhepepepepepepepepepabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhgodHdHdHdHdHdHdHdHdHdHgTrBkHfahUhUkPfhfWfFfIfhepeuepeuepeuepeuepabababababababababababdAezezezezezdCabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhhQeBgMgMeDeDeDeDeDeDeDgqgFhafahUhUhUfUfFfFelfhepepepepepepepepepabekekekekekekabababdAdZeCeDeEeDeFdYdCababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhfhhQdBdBgqdBdBdBezdBdBhigsrChahUhUjOfhfFfFftfhepeuepeuepeuepeuepabeklflglglCekabababdGeLeMdHdHdHeNeOdGababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhgbgbgbgbgbgbgbgbgbgbgbgbgbhmhUhUeKfhfFiUfYfhepepepepepepepepepabeAeJeJeJeJekabababdGeSeTeUeVdHeNeWdGababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhfhfhfhfhfhfhfhfhfhfhfhfhfhfhfhivfhfhfhfhfhfhababababababababababekeJkTfbfcekababdAfddBdBfedBfffgdBfddCabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababeifXhpfXfHhlfHfXhpfXeiabababekekekekekekekekekfklelcldekababdGfofofoezfpdHfqfrfsezabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababeifXfXfXgvemgvfXfXfXeiabababekfufnfnfnfSfGgegWeJeJeJhjfxfyfzdGfAfBfBfCdHdHdHdHfqdGabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
|
||||
@@ -20,9 +20,7 @@ Pipelines + Other Objects -> Pipe network
|
||||
var/initialize_directions = 0
|
||||
var/pipe_color
|
||||
var/obj/item/pipe/stored
|
||||
|
||||
var/welded = 0 //Used on pumps and scrubbers
|
||||
|
||||
var/global/list/iconsetids = list()
|
||||
var/global/list/pipeimages = list()
|
||||
|
||||
@@ -36,11 +34,27 @@ Pipelines + Other Objects -> Pipe network
|
||||
|
||||
/obj/machinery/atmospherics/New()
|
||||
..()
|
||||
|
||||
SSair.atmos_machinery += src
|
||||
SetInitDirections()
|
||||
if(can_unwrench)
|
||||
stored = new(src, make_from=src)
|
||||
|
||||
/obj/machinery/atmospherics/Destroy()
|
||||
SSair.atmos_machinery -= src
|
||||
if (stored)
|
||||
qdel(stored)
|
||||
stored = null
|
||||
..()
|
||||
|
||||
//this is called just after the air controller sets up turfs
|
||||
/obj/machinery/atmospherics/proc/atmosinit()
|
||||
return
|
||||
|
||||
//object initializion. done well after air is setup (build_network needs all pipes to be init'ed with atmosinit before hand)
|
||||
/obj/machinery/atmospherics/initialize()
|
||||
..()
|
||||
build_network() //make sure to build our pipe nets
|
||||
|
||||
/obj/machinery/atmospherics/proc/SetInitDirections()
|
||||
return
|
||||
|
||||
|
||||
@@ -74,7 +74,7 @@
|
||||
nullifyPipenet(parent2)
|
||||
..()
|
||||
|
||||
/obj/machinery/atmospherics/binary/initialize()
|
||||
/obj/machinery/atmospherics/binary/atmosinit()
|
||||
|
||||
var/node2_connect = dir
|
||||
var/node1_connect = turn(dir, 180)
|
||||
@@ -93,6 +93,7 @@
|
||||
showpipe = 1
|
||||
|
||||
update_icon()
|
||||
..()
|
||||
|
||||
/obj/machinery/atmospherics/binary/construction()
|
||||
..()
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
else
|
||||
last_pressure_delta = 0
|
||||
|
||||
/obj/machinery/atmospherics/binary/circulator/process()
|
||||
/obj/machinery/atmospherics/binary/circulator/process_atmos()
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
else
|
||||
icon_state = "vent_in"
|
||||
|
||||
/obj/machinery/atmospherics/binary/dp_vent_pump/process()
|
||||
/obj/machinery/atmospherics/binary/dp_vent_pump/process_atmos()
|
||||
..()
|
||||
|
||||
if(!on)
|
||||
@@ -133,11 +133,15 @@
|
||||
|
||||
return 1
|
||||
|
||||
/obj/machinery/atmospherics/binary/dp_vent_pump/initialize()
|
||||
/obj/machinery/atmospherics/binary/dp_vent_pump/atmosinit()
|
||||
..()
|
||||
if(frequency)
|
||||
set_frequency(frequency)
|
||||
|
||||
/obj/machinery/atmospherics/binary/dp_vent_pump/initialize()
|
||||
..()
|
||||
broadcast_status()
|
||||
|
||||
/obj/machinery/atmospherics/binary/dp_vent_pump/receive_signal(datum/signal/signal)
|
||||
|
||||
if(!signal.data["tag"] || (signal.data["tag"] != id) || (signal.data["sigtype"]!="command"))
|
||||
|
||||
@@ -32,7 +32,7 @@ Passive gate is similar to the regular pump except:
|
||||
if(on & !(stat & NOPOWER))
|
||||
overlays += getpipeimage('icons/obj/atmospherics/binary_devices.dmi', "passgate_on")
|
||||
|
||||
/obj/machinery/atmospherics/binary/passive_gate/process()
|
||||
/obj/machinery/atmospherics/binary/passive_gate/process_atmos()
|
||||
..()
|
||||
if(!on)
|
||||
return 0
|
||||
@@ -108,7 +108,7 @@ Passive gate is similar to the regular pump except:
|
||||
else
|
||||
ui.push_data(data)
|
||||
|
||||
/obj/machinery/atmospherics/binary/passive_gate/initialize()
|
||||
/obj/machinery/atmospherics/binary/passive_gate/atmosinit()
|
||||
..()
|
||||
if(frequency)
|
||||
set_frequency(frequency)
|
||||
|
||||
@@ -41,7 +41,7 @@ Thus, the two variables affect pump operation are set in New():
|
||||
|
||||
icon_state = "pump_[on?"on":"off"]"
|
||||
|
||||
/obj/machinery/atmospherics/binary/pump/process()
|
||||
/obj/machinery/atmospherics/binary/pump/process_atmos()
|
||||
// ..()
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
return 0
|
||||
@@ -116,7 +116,7 @@ Thus, the two variables affect pump operation are set in New():
|
||||
else
|
||||
ui.push_data(data)
|
||||
|
||||
/obj/machinery/atmospherics/binary/pump/initialize()
|
||||
/obj/machinery/atmospherics/binary/pump/atmosinit()
|
||||
..()
|
||||
if(frequency)
|
||||
set_frequency(frequency)
|
||||
|
||||
@@ -41,7 +41,7 @@ Thus, the two variables affect pump operation are set in New():
|
||||
|
||||
icon_state = "volpump_[on?"on":"off"]"
|
||||
|
||||
/obj/machinery/atmospherics/binary/volume_pump/process()
|
||||
/obj/machinery/atmospherics/binary/volume_pump/process_atmos()
|
||||
// ..()
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
return
|
||||
@@ -112,7 +112,7 @@ Thus, the two variables affect pump operation are set in New():
|
||||
else
|
||||
ui.push_data(data)
|
||||
|
||||
/obj/machinery/atmospherics/binary/volume_pump/initialize()
|
||||
/obj/machinery/atmospherics/binary/volume_pump/atmosinit()
|
||||
..()
|
||||
|
||||
set_frequency(frequency)
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
state = "pipe_exposed"
|
||||
underlays += getpipeimage('icons/obj/atmospherics/binary_devices.dmi', state, initialize_directions, col)
|
||||
|
||||
/obj/machinery/atmospherics/unary/portables_connector/process()
|
||||
/obj/machinery/atmospherics/unary/portables_connector/process_atmos()
|
||||
if(!connected_device)
|
||||
return
|
||||
parent.update = 1
|
||||
|
||||
@@ -69,7 +69,7 @@ Filter types:
|
||||
if(old_stat != stat)
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/atmospherics/trinary/filter/process()
|
||||
/obj/machinery/atmospherics/trinary/filter/process_atmos()
|
||||
..()
|
||||
if(!on)
|
||||
return 0
|
||||
@@ -143,7 +143,7 @@ Filter types:
|
||||
|
||||
return 1
|
||||
|
||||
/obj/machinery/atmospherics/trinary/filter/initialize()
|
||||
/obj/machinery/atmospherics/trinary/filter/atmosinit()
|
||||
set_frequency(frequency)
|
||||
return ..()
|
||||
|
||||
@@ -216,4 +216,4 @@ Filter types:
|
||||
if ((M.client && M.machine == src))
|
||||
src.attack_hand(M)
|
||||
*/
|
||||
return
|
||||
return
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
..()
|
||||
air3.volume = 300
|
||||
|
||||
/obj/machinery/atmospherics/trinary/mixer/process()
|
||||
/obj/machinery/atmospherics/trinary/mixer/process_atmos()
|
||||
..()
|
||||
if(!on)
|
||||
return 0
|
||||
|
||||
@@ -94,7 +94,7 @@ Housekeeping and pipe network stuff below
|
||||
nullifyPipenet(parent3)
|
||||
..()
|
||||
|
||||
/obj/machinery/atmospherics/trinary/initialize()
|
||||
/obj/machinery/atmospherics/trinary/atmosinit()
|
||||
|
||||
//Mixer:
|
||||
//1 and 2 is input
|
||||
@@ -131,6 +131,7 @@ Housekeeping and pipe network stuff below
|
||||
break
|
||||
|
||||
update_icon()
|
||||
..()
|
||||
|
||||
/obj/machinery/atmospherics/trinary/construction()
|
||||
..()
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
|
||||
return
|
||||
|
||||
/obj/machinery/atmospherics/unary/cold_sink/process()
|
||||
/obj/machinery/atmospherics/unary/cold_sink/process_atmos()
|
||||
..()
|
||||
if(!on)
|
||||
return 0
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
|
||||
return
|
||||
|
||||
/obj/machinery/atmospherics/unary/heat_exchanger/initialize()
|
||||
/obj/machinery/atmospherics/unary/heat_exchanger/atmosinit()
|
||||
if(!partner)
|
||||
var/partner_connect = turn(dir,180)
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
|
||||
..()
|
||||
|
||||
/obj/machinery/atmospherics/unary/heat_exchanger/process()
|
||||
/obj/machinery/atmospherics/unary/heat_exchanger/process_atmos()
|
||||
..()
|
||||
if(!partner)
|
||||
return 0
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
return
|
||||
|
||||
/obj/machinery/atmospherics/unary/heat_reservoir/process()
|
||||
/obj/machinery/atmospherics/unary/heat_reservoir/process_atmos()
|
||||
..()
|
||||
if(!on)
|
||||
return 0
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
update_icon()
|
||||
|
||||
|
||||
/obj/machinery/atmospherics/unary/outlet_injector/process()
|
||||
/obj/machinery/atmospherics/unary/outlet_injector/process_atmos()
|
||||
..()
|
||||
injecting = 0
|
||||
|
||||
@@ -101,12 +101,14 @@
|
||||
|
||||
return 1
|
||||
|
||||
/obj/machinery/atmospherics/unary/outlet_injector/initialize()
|
||||
/obj/machinery/atmospherics/unary/outlet_injector/atmosinit()
|
||||
set_frequency(frequency)
|
||||
..()
|
||||
|
||||
set_frequency(frequency)
|
||||
spawn(rand(25,50))
|
||||
broadcast_status()
|
||||
/obj/machinery/atmospherics/unary/outlet_injector/initialize()
|
||||
..()
|
||||
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"))
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
|
||||
air_contents.volume = 50
|
||||
|
||||
/obj/machinery/atmospherics/unary/oxygen_generator/process()
|
||||
/obj/machinery/atmospherics/unary/oxygen_generator/process_atmos()
|
||||
..()
|
||||
if(!on)
|
||||
return 0
|
||||
|
||||
@@ -60,7 +60,7 @@ Housekeeping and pipe network stuff below
|
||||
..()
|
||||
|
||||
|
||||
/obj/machinery/atmospherics/unary/initialize()
|
||||
/obj/machinery/atmospherics/unary/atmosinit()
|
||||
for(var/obj/machinery/atmospherics/target in get_step(src, dir))
|
||||
if(target.initialize_directions & get_dir(target,src))
|
||||
node = target
|
||||
@@ -68,6 +68,7 @@ Housekeeping and pipe network stuff below
|
||||
if(level == 2)
|
||||
showpipe = 1
|
||||
update_icon()
|
||||
..()
|
||||
|
||||
/obj/machinery/atmospherics/unary/construction()
|
||||
..()
|
||||
|
||||
@@ -84,7 +84,7 @@
|
||||
else
|
||||
icon_state = "vent_in"
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_pump/process()
|
||||
/obj/machinery/atmospherics/unary/vent_pump/process_atmos()
|
||||
..()
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
return
|
||||
@@ -181,14 +181,16 @@
|
||||
return 1
|
||||
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_pump/initialize()
|
||||
..()
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_pump/atmosinit()
|
||||
//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/initialize()
|
||||
..()
|
||||
broadcast_status()
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_pump/receive_signal(datum/signal/signal)
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
|
||||
@@ -98,14 +98,18 @@
|
||||
|
||||
return 1
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_scrubber/initialize()
|
||||
..()
|
||||
/obj/machinery/atmospherics/unary/vent_scrubber/atmosinit()
|
||||
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/initialize()
|
||||
..()
|
||||
broadcast_status()
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_scrubber/process()
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_scrubber/process_atmos()
|
||||
..()
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
return
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
update_icon_nopipes()
|
||||
parent1.update = 0
|
||||
parent2.update = 0
|
||||
parent1.reconcile_air()
|
||||
investigate_log("was opened by [usr ? key_name(usr) : "a remote signal"]", "atmos")
|
||||
return
|
||||
|
||||
@@ -64,7 +65,7 @@
|
||||
close()
|
||||
else
|
||||
open()
|
||||
parent1.reconcile_air()
|
||||
|
||||
|
||||
/obj/machinery/atmospherics/binary/valve/digital // can be controlled by AI
|
||||
name = "digital valve"
|
||||
|
||||
@@ -10,10 +10,10 @@
|
||||
var/alert_pressure = 0
|
||||
|
||||
/datum/pipeline/New()
|
||||
SSpipe.networks += src
|
||||
SSair.networks += src
|
||||
|
||||
/datum/pipeline/Destroy()
|
||||
SSpipe.networks -= src
|
||||
SSair.networks -= src
|
||||
if(air && air.volume)
|
||||
temporarily_store_air()
|
||||
for(var/obj/machinery/atmospherics/pipe/P in members)
|
||||
@@ -22,10 +22,11 @@
|
||||
A.nullifyPipenet(src)
|
||||
..()
|
||||
|
||||
/datum/pipeline/process()//This use to be called called from the pipe networks
|
||||
/datum/pipeline/process()
|
||||
if(update)
|
||||
update = 0
|
||||
reconcile_air()
|
||||
|
||||
return
|
||||
/*
|
||||
//Check to see if pressure is within acceptable limits
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
if(SOUTHWEST)
|
||||
initialize_directions_he = SOUTH|WEST
|
||||
|
||||
/obj/machinery/atmospherics/pipe/simple/heat_exchanging/initialize()
|
||||
/obj/machinery/atmospherics/pipe/simple/heat_exchanging/atmosinit()
|
||||
normalize_dir()
|
||||
var/N = 2
|
||||
for(var/D in cardinal)
|
||||
@@ -51,8 +51,9 @@
|
||||
node2 = target
|
||||
break
|
||||
update_icon()
|
||||
..()
|
||||
|
||||
/obj/machinery/atmospherics/pipe/simple/heat_exchanging/process()
|
||||
/obj/machinery/atmospherics/pipe/simple/heat_exchanging/process_atmos()
|
||||
var/environment_temperature = 0
|
||||
var/datum/gas_mixture/pipe_air = return_air()
|
||||
|
||||
@@ -69,15 +70,18 @@
|
||||
parent.temperature_interact(loc, volume, thermal_conductivity)
|
||||
|
||||
|
||||
//Burn any mobs buckled to ourselves based on our temperature
|
||||
//heatup/cooldown any mobs buckled to ourselves based on our temperature
|
||||
if(buckled_mob)
|
||||
var/hc = pipe_air.heat_capacity()
|
||||
var/avg_temp = (pipe_air.temperature * hc + buckled_mob.bodytemperature * 3500) / (hc + 3500)
|
||||
pipe_air.temperature = avg_temp
|
||||
buckled_mob.bodytemperature = avg_temp
|
||||
|
||||
/obj/machinery/atmospherics/pipe/simple/heat_exchanging/process()
|
||||
var/datum/gas_mixture/pipe_air = return_air()
|
||||
//Burn any mobs buckled to ourselves based on our temperature
|
||||
if(buckled_mob)
|
||||
var/heat_limit = 1000
|
||||
|
||||
if(pipe_air.temperature > heat_limit + 1)
|
||||
buckled_mob.apply_damage(4 * log(pipe_air.temperature - heat_limit), BURN, "chest")
|
||||
|
||||
@@ -131,7 +135,7 @@
|
||||
var/have_node2 = node2?1:0
|
||||
icon_state = "exposed[have_node1][have_node2]"
|
||||
|
||||
/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction/initialize()
|
||||
/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction/atmosinit()
|
||||
for(var/obj/machinery/atmospherics/target in get_step(src,initialize_directions))
|
||||
if(target.initialize_directions & get_dir(target,src))
|
||||
node1 = target
|
||||
@@ -141,4 +145,4 @@
|
||||
node2 = target
|
||||
break
|
||||
update_icon()
|
||||
return
|
||||
..()
|
||||
@@ -38,7 +38,7 @@
|
||||
if(WEST)
|
||||
initialize_directions = NORTH|EAST|SOUTH
|
||||
|
||||
/obj/machinery/atmospherics/pipe/manifold/initialize()
|
||||
/obj/machinery/atmospherics/pipe/manifold/atmosinit()
|
||||
for(var/D in cardinal)
|
||||
if(D == dir)
|
||||
continue
|
||||
@@ -54,6 +54,7 @@
|
||||
var/turf/T = src.loc // hide if turf is not intact
|
||||
hide(T.intact)
|
||||
update_icon()
|
||||
..()
|
||||
|
||||
/obj/machinery/atmospherics/pipe/manifold/Destroy()
|
||||
if(node1)
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
/obj/machinery/atmospherics/pipe/manifold4w/SetInitDirections()
|
||||
return
|
||||
|
||||
/obj/machinery/atmospherics/pipe/manifold4w/initialize()
|
||||
/obj/machinery/atmospherics/pipe/manifold4w/atmosinit()
|
||||
for(var/D in cardinal)
|
||||
for(var/obj/machinery/atmospherics/target in get_step(src, D))
|
||||
if(target.initialize_directions & get_dir(target,src))
|
||||
@@ -45,6 +45,7 @@
|
||||
var/turf/T = src.loc // hide if turf is not intact
|
||||
hide(T.intact)
|
||||
update_icon()
|
||||
..()
|
||||
|
||||
/obj/machinery/atmospherics/pipe/manifold4w/hide(var/i)
|
||||
if(level == 1 && istype(loc, /turf/simulated))
|
||||
|
||||
@@ -53,7 +53,7 @@ The regular pipe you see everywhere, including bent ones.
|
||||
if(SOUTHWEST)
|
||||
initialize_directions = SOUTH|WEST
|
||||
|
||||
/obj/machinery/atmospherics/pipe/simple/initialize()
|
||||
/obj/machinery/atmospherics/pipe/simple/atmosinit()
|
||||
normalize_dir()
|
||||
var/N = 2
|
||||
for(var/D in cardinal)
|
||||
@@ -70,6 +70,7 @@ The regular pipe you see everywhere, including bent ones.
|
||||
var/turf/T = loc // hide if turf is not intact
|
||||
hide(T.intact)
|
||||
update_icon()
|
||||
..()
|
||||
|
||||
/obj/machinery/atmospherics/pipe/simple/Destroy()
|
||||
if(node1)
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
if(air_contents.oxygen < 0.5 || air_contents.toxins < 0.5)
|
||||
return 0
|
||||
|
||||
active_hotspot = new(src)
|
||||
active_hotspot = PoolOrNew(/obj/effect/hotspot, src)
|
||||
active_hotspot.temperature = exposed_temperature
|
||||
active_hotspot.volume = exposed_volume
|
||||
|
||||
@@ -142,16 +142,17 @@
|
||||
// Garbage collect itself by nulling reference to it
|
||||
|
||||
/obj/effect/hotspot/proc/Kill()
|
||||
SSair.hotspots -= src
|
||||
DestroyTurf()
|
||||
qdel(src)
|
||||
PlaceInPool(src)
|
||||
|
||||
/obj/effect/hotspot/Destroy()
|
||||
SSair.hotspots -= src
|
||||
DestroyTurf()
|
||||
if(istype(loc, /turf/simulated))
|
||||
var/turf/simulated/T = loc
|
||||
if(T.active_hotspot == src)
|
||||
T.active_hotspot = null
|
||||
loc = null
|
||||
return QDEL_HINT_PUTINPOOL
|
||||
|
||||
/obj/effect/hotspot/proc/DestroyTurf()
|
||||
|
||||
|
||||
@@ -66,7 +66,7 @@ turf/simulated/New()
|
||||
|
||||
turf/simulated/Del()
|
||||
if(active_hotspot)
|
||||
qdel(active_hotspot)
|
||||
active_hotspot.Kill()
|
||||
..()
|
||||
|
||||
turf/simulated/assume_air(datum/gas_mixture/giver)
|
||||
@@ -274,11 +274,11 @@ atom/movable/var/pressure_resistance = 5
|
||||
atom/movable/var/last_forced_movement = 0
|
||||
|
||||
atom/movable/proc/experience_pressure_difference(pressure_difference, direction)
|
||||
if(last_forced_movement >= SSair.times_fired)
|
||||
if(last_forced_movement >= world.time-10)
|
||||
return 0
|
||||
else if(!anchored)
|
||||
if(pressure_difference > pressure_resistance)
|
||||
last_forced_movement = SSair.times_fired
|
||||
last_forced_movement = world.time
|
||||
spawn step(src, direction)
|
||||
return 1
|
||||
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
#define BE_MALF 16
|
||||
#define BE_REV 32
|
||||
#define BE_ALIEN 64
|
||||
#define BE_PAI 128
|
||||
#define BE_PAI 128 //Includes Positronic brains, but the flag is already maxed.
|
||||
#define BE_CULTIST 256
|
||||
#define BE_BLOB 512
|
||||
#define BE_NINJA 1024
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
//defines that give qdel hints. these can be given as a return in destory() or by calling
|
||||
|
||||
|
||||
#define QDEL_HINT_QUEUE 0 //qdel should queue the object for deletion.
|
||||
#define QDEL_HINT_LETMELIVE 1 //qdel should let the object live after calling destory.
|
||||
#define QDEL_HINT_IWILLGC 2 //functionally the same as the above. qdel should assume the object will gc on its own, and not check it.
|
||||
#define QDEL_HINT_HARDDEL 3 //qdel should assume this object won't gc, and queue a hard delete using a hard reference.
|
||||
#define QDEL_HINT_HARDDEL_NOW 4 //qdel should assume this object won't gc, and hard del it post haste.
|
||||
#define QDEL_HINT_PUTINPOOL 5 //qdel will put this object in the atom pool.
|
||||
|
||||
@@ -41,7 +41,7 @@ var/list/be_special_flags = list(
|
||||
"Malf AI" = BE_MALF,
|
||||
"Revolutionary" = BE_REV,
|
||||
"Alien Lifeform" = BE_ALIEN,
|
||||
"pAI" = BE_PAI,
|
||||
"pAI/Positronic Brain" = BE_PAI,
|
||||
"Cultist" = BE_CULTIST,
|
||||
"Blob" = BE_BLOB,
|
||||
"Ninja" = BE_NINJA,
|
||||
|
||||
@@ -200,5 +200,4 @@ Reharging stations are available in robotics, the dormitory's bathrooms. and the
|
||||
return usr.client.Click(master, location, control, params)
|
||||
|
||||
/obj/screen/alert/Destroy()
|
||||
PlaceInPool(src)
|
||||
return 1 // Don't destroy me, I have a family!
|
||||
return QDEL_HINT_PUTINPOOL //Don't destroy me, I have a family!
|
||||
|
||||
@@ -562,7 +562,7 @@
|
||||
|
||||
datum/configuration/proc/get_runnable_midround_modes(crew)
|
||||
var/list/datum/game_mode/runnable_modes = new
|
||||
for(var/T in (typesof(/datum/game_mode) - /datum/game_mode))
|
||||
for(var/T in (typesof(/datum/game_mode) - /datum/game_mode - ticker.mode.type))
|
||||
var/datum/game_mode/M = new T()
|
||||
if(!(M.config_tag in modes))
|
||||
qdel(M)
|
||||
|
||||
@@ -23,22 +23,31 @@ var/global/datum/controller/game_controller/master_controller = new()
|
||||
init_subtypes(/datum/subsystem, subsystems)
|
||||
|
||||
master_controller = src
|
||||
calculateGCD()
|
||||
|
||||
|
||||
/*
|
||||
calculate the longest number of ticks the MC can wait between each cycle without causing subsystems to not fire on schedule
|
||||
Note: you can set the datum's defined processing_interval to some integer to set an -absolute- minimum wait duration.
|
||||
*/
|
||||
/datum/controller/game_controller/proc/calculateGCD()
|
||||
var/GCD
|
||||
for(var/datum/subsystem/SS in subsystems)
|
||||
if(SS.wait)
|
||||
GCD = Gcd(SS.wait, GCD)
|
||||
GCD = Gcd(round(SS.wait*10), GCD)
|
||||
GCD = round(GCD)
|
||||
if(GCD > processing_interval)
|
||||
processing_interval = GCD
|
||||
if(GCD < world.tick_lag*10)
|
||||
GCD = world.tick_lag*10
|
||||
processing_interval = GCD/10
|
||||
|
||||
/datum/controller/game_controller/proc/setup()
|
||||
/datum/controller/game_controller/proc/setup(zlevel)
|
||||
if (zlevel && zlevel > 0 && zlevel <= world.maxz)
|
||||
for(var/datum/subsystem/S in subsystems)
|
||||
S.Initialize(world.timeofday, zlevel)
|
||||
sleep(-1)
|
||||
return
|
||||
world << "<span class='boldannounce'>Initializing Subsystems...</span>"
|
||||
|
||||
|
||||
//sort subsystems by priority, so they initialize in the correct order
|
||||
sortTim(subsystems, /proc/cmp_subsystem_priority)
|
||||
|
||||
@@ -49,7 +58,7 @@ Note: you can set the datum's defined processing_interval to some integer to set
|
||||
|
||||
//Eventually all this other setup stuff should be contained in subsystems and done in subsystem.Initialize()
|
||||
for(var/datum/subsystem/S in subsystems)
|
||||
S.Initialize(world.timeofday)
|
||||
S.Initialize(world.timeofday, zlevel)
|
||||
sleep(-1)
|
||||
|
||||
world << "<span class='boldannounce'>Initializations complete</span>"
|
||||
@@ -74,7 +83,6 @@ Note: you can set the datum's defined processing_interval to some integer to set
|
||||
SS.next_fire = timer
|
||||
|
||||
var/start_time
|
||||
var/cpu
|
||||
|
||||
while(1) //far more efficient than recursively calling ourself
|
||||
if(processing_interval > 0)
|
||||
@@ -85,16 +93,19 @@ Note: you can set the datum's defined processing_interval to some integer to set
|
||||
for(var/datum/subsystem/SS in subsystems)
|
||||
if(SS.can_fire > 0)
|
||||
if(SS.next_fire <= world.time)
|
||||
SS.next_fire += SS.wait
|
||||
|
||||
timer = world.timeofday
|
||||
cpu = world.cpu
|
||||
last_thing_processed = SS.type
|
||||
SS.last_fire = world.time
|
||||
SS.fire()
|
||||
SS.cpu = MC_AVERAGE(SS.cpu, world.cpu - cpu)
|
||||
SS.cost = MC_AVERAGE(SS.cost, world.timeofday - timer)
|
||||
if (SS.dynamic_wait)
|
||||
var/oldwait = SS.wait
|
||||
SS.wait = min(max(round(SS.cost*SS.dwait_delta, 0.1),SS.dwait_lower),SS.dwait_upper)
|
||||
if (oldwait != SS.wait)
|
||||
calculateGCD()
|
||||
SS.next_fire += SS.wait
|
||||
++SS.times_fired
|
||||
|
||||
sleep(-1)
|
||||
|
||||
cost = MC_AVERAGE(cost, world.timeofday - start_time)
|
||||
@@ -108,7 +119,7 @@ Note: you can set the datum's defined processing_interval to some integer to set
|
||||
/datum/controller/game_controller/proc/roundHasStarted()
|
||||
for(var/datum/subsystem/SS in subsystems)
|
||||
SS.can_fire = 1
|
||||
SS.next_fire = world.time
|
||||
SS.next_fire = world.time + rand(0,SS.wait)
|
||||
|
||||
/datum/controller/game_controller/proc/Recover()
|
||||
var/msg = "## DEBUG: [time2text(world.timeofday)] MC restarted. Reports:\n"
|
||||
|
||||
@@ -3,12 +3,19 @@ var/datum/subsystem/air/SSair
|
||||
/datum/subsystem/air
|
||||
name = "Air"
|
||||
priority = 20
|
||||
cost = 5
|
||||
wait = 5
|
||||
dynamic_wait = 1
|
||||
dwait_lower = 5
|
||||
dwait_upper = 50
|
||||
|
||||
var/cost_turfs = 0
|
||||
var/cost_groups = 0
|
||||
var/cost_highpressure = 0
|
||||
var/cost_hotspots = 0
|
||||
var/cost_superconductivity = 0
|
||||
var/cost_pipenets = 0
|
||||
var/cost_atmos_machinery = 0
|
||||
|
||||
var/obj/effect/overlay/plasma_overlay //overlay for plasma
|
||||
var/obj/effect/overlay/sleeptoxin_overlay //overlay for sleeptoxin
|
||||
@@ -16,6 +23,9 @@ var/datum/subsystem/air/SSair
|
||||
var/list/excited_groups = list()
|
||||
var/list/active_turfs = list()
|
||||
var/list/hotspots = list()
|
||||
var/list/networks = list()
|
||||
var/list/obj/machinery/atmos_machinery = list()
|
||||
|
||||
|
||||
//Special functions lists
|
||||
var/list/turf/simulated/active_super_conductivity = list()
|
||||
@@ -28,14 +38,39 @@ var/datum/subsystem/air/SSair
|
||||
plasma_overlay = new /obj/effect/overlay{icon='icons/effects/tile_effects.dmi';mouse_opacity=0;layer=5;icon_state="plasma"}()
|
||||
sleeptoxin_overlay = new /obj/effect/overlay{icon='icons/effects/tile_effects.dmi';mouse_opacity=0;layer=5;icon_state="sleeping_agent"}()
|
||||
|
||||
/datum/subsystem/air/stat_entry(msg)
|
||||
msg += "C:{"
|
||||
msg += "AT:[round(cost_turfs,0.01)]|"
|
||||
msg += "EG:[round(cost_groups,0.01)]|"
|
||||
msg += "HP:[round(cost_highpressure,0.01)]|"
|
||||
msg += "HS:[round(cost_hotspots,0.01)]|"
|
||||
msg += "SC:[round(cost_superconductivity,0.01)]|"
|
||||
msg += "PN:[round(cost_pipenets,0.01)]|"
|
||||
msg += "AM:[round(cost_atmos_machinery,0.01)]"
|
||||
msg += "} "
|
||||
msg += "AT:[active_turfs.len]|"
|
||||
msg += "EG:[excited_groups.len]|"
|
||||
msg += "HS:[hotspots.len]|"
|
||||
msg += "AS:[active_super_conductivity.len]"
|
||||
..(msg)
|
||||
|
||||
/datum/subsystem/air/Initialize()
|
||||
setup_allturfs()
|
||||
|
||||
/datum/subsystem/air/Initialize(timeofday, zlevel)
|
||||
setup_allturfs(zlevel)
|
||||
setup_atmos_machinery(zlevel)
|
||||
..()
|
||||
|
||||
#define MC_AVERAGE(average, current) (0.8*(average) + 0.2*(current))
|
||||
/datum/subsystem/air/fire()
|
||||
var/timer = world.timeofday
|
||||
process_pipenets()
|
||||
cost_pipenets = MC_AVERAGE(cost_pipenets, (world.timeofday - timer))
|
||||
|
||||
timer = world.timeofday
|
||||
process_atmos_machinery()
|
||||
cost_atmos_machinery = MC_AVERAGE(cost_atmos_machinery, (world.timeofday - timer))
|
||||
|
||||
timer = world.timeofday
|
||||
process_active_turfs()
|
||||
cost_turfs = MC_AVERAGE(cost_turfs, (world.timeofday - timer))
|
||||
|
||||
@@ -55,9 +90,29 @@ var/datum/subsystem/air/SSair
|
||||
process_super_conductivity()
|
||||
cost_superconductivity = MC_AVERAGE(cost_superconductivity, (world.timeofday - timer))
|
||||
|
||||
|
||||
#undef MC_AVERAGE
|
||||
|
||||
|
||||
|
||||
/datum/subsystem/air/proc/process_pipenets()
|
||||
var/i=1
|
||||
for(var/thing in networks)
|
||||
if(thing)
|
||||
thing:process()
|
||||
++i
|
||||
continue
|
||||
networks.Cut(i, i+1)
|
||||
|
||||
|
||||
/datum/subsystem/air/proc/process_atmos_machinery()
|
||||
var/seconds = wait * 0.1
|
||||
for(var/obj/machinery/M in atmos_machinery)
|
||||
if(M && (M.process_atmos(seconds) != PROCESS_KILL))
|
||||
continue
|
||||
atmos_machinery.Remove(M)
|
||||
|
||||
|
||||
/datum/subsystem/air/proc/process_super_conductivity()
|
||||
for(var/turf/simulated/T in active_super_conductivity)
|
||||
T.super_conduct()
|
||||
@@ -102,9 +157,26 @@ var/datum/subsystem/air/SSair
|
||||
if(istype(S))
|
||||
add_to_active(S)
|
||||
|
||||
/datum/subsystem/air/proc/process_excited_groups()
|
||||
for(var/datum/excited_group/EG in excited_groups)
|
||||
EG.breakdown_cooldown ++
|
||||
if(EG.breakdown_cooldown == 10)
|
||||
EG.self_breakdown()
|
||||
return
|
||||
if(EG.breakdown_cooldown > 20)
|
||||
EG.dismantle()
|
||||
|
||||
/datum/subsystem/air/proc/setup_allturfs()
|
||||
for(var/turf/simulated/T in world)
|
||||
/datum/subsystem/air/proc/setup_allturfs(z_level)
|
||||
var/z_start = 1
|
||||
var/z_finish = world.maxz
|
||||
if(1 <= z_level && z_level <= world.maxz)
|
||||
z_level = round(z_level)
|
||||
z_start = z_level
|
||||
z_finish = z_level
|
||||
|
||||
var/list/turfs_to_init = block(locate(1, 1, z_start), locate(world.maxx, world.maxy, z_finish))
|
||||
|
||||
for(var/turf/simulated/T in turfs_to_init)
|
||||
T.CalculateAdjacentTurfs()
|
||||
if(!T.blocks_air)
|
||||
if(T.air.check_tile_graphic())
|
||||
@@ -124,11 +196,8 @@ var/datum/subsystem/air/SSair
|
||||
T.excited = 1
|
||||
active_turfs |= T
|
||||
|
||||
/datum/subsystem/air/proc/process_excited_groups()
|
||||
for(var/datum/excited_group/EG in excited_groups)
|
||||
EG.breakdown_cooldown ++
|
||||
if(EG.breakdown_cooldown == 10)
|
||||
EG.self_breakdown()
|
||||
return
|
||||
if(EG.breakdown_cooldown > 20)
|
||||
EG.dismantle()
|
||||
/datum/subsystem/air/proc/setup_atmos_machinery(z_level)
|
||||
for (var/obj/machinery/atmospherics/AM in atmos_machinery)
|
||||
if (z_level && AM.z != z_level)
|
||||
continue
|
||||
AM.atmosinit()
|
||||
@@ -9,6 +9,9 @@ var/datum/subsystem/bots/SSbot
|
||||
/datum/subsystem/bots/New()
|
||||
NEW_SS_GLOBAL(SSbot)
|
||||
|
||||
/datum/subsystem/bots/stat_entry(msg)
|
||||
..("P:[processing.len]")
|
||||
|
||||
/datum/subsystem/bots/fire()
|
||||
var/seconds = wait * 0.1
|
||||
var/i=1
|
||||
|
||||
@@ -9,6 +9,8 @@ var/datum/subsystem/diseases/SSdisease
|
||||
/datum/subsystem/diseases/New()
|
||||
NEW_SS_GLOBAL(SSdisease)
|
||||
|
||||
/datum/subsystem/diseases/stat_entry(msg)
|
||||
..("P:[processing.len]")
|
||||
|
||||
/datum/subsystem/diseases/fire()
|
||||
var/i=1
|
||||
|
||||
@@ -19,7 +19,9 @@ var/datum/subsystem/events/SSevent
|
||||
NEW_SS_GLOBAL(SSevent)
|
||||
|
||||
|
||||
/datum/subsystem/events/Initialize()
|
||||
/datum/subsystem/events/Initialize(time, zlevel)
|
||||
if (zlevel)
|
||||
return ..()
|
||||
for(var/type in typesof(/datum/round_event_control))
|
||||
var/datum/round_event_control/E = new type()
|
||||
if(!E.typepath)
|
||||
|
||||
@@ -3,79 +3,122 @@ var/datum/subsystem/garbage_collector/SSgarbage
|
||||
/datum/subsystem/garbage_collector
|
||||
name = "Garbage"
|
||||
can_fire = 1
|
||||
wait = 60
|
||||
priority = 21
|
||||
wait = 5
|
||||
priority = -1
|
||||
|
||||
var/collection_timeout = 300 //deciseconds to wait to let running procs finish before we just say fuck it and force del() the object
|
||||
var/max_checks_multiplier = 5 //multiplier (per-decisecond) for calculating max number of tests per SS tick. These tests check if our GC'd objects are actually GC'd
|
||||
var/max_forcedel_multiplier = 1 //multiplier (per-decisecond) for calculating max number of force del() calls per SS tick.
|
||||
var/collection_timeout = 300// deciseconds to wait to let running procs finish before we just say fuck it and force del() the object
|
||||
var/max_run_time = 2 // how long, in deciseconds, can we run before waiting for the next tick
|
||||
var/delslasttick = 0 // number of del()'s we've done this tick
|
||||
var/gcedlasttick = 0 // number of things that gc'ed last tick
|
||||
var/totaldels = 0
|
||||
var/totalgcs = 0
|
||||
|
||||
var/dels = 0 // number of del()'s we've done this tick
|
||||
var/list/destroyed = list() // list of refID's of things that should be garbage collected
|
||||
var/list/queue = list() // list of refID's of things that should be garbage collected
|
||||
// refID's are associated with the time at which they time out and need to be manually del()
|
||||
// we do this so we aren't constantly locating them and preventing them from being gc'd
|
||||
|
||||
var/list/logging = list() // list of all types that have failed to GC associated with the number of times that's happened.
|
||||
|
||||
var/list/didntgc = list() // list of all types that have failed to GC associated with the number of times that's happened.
|
||||
// the types are stored as strings
|
||||
|
||||
|
||||
/datum/subsystem/garbage_collector/New()
|
||||
NEW_SS_GLOBAL(SSgarbage)
|
||||
|
||||
/datum/subsystem/garbage_collector/stat_entry(msg)
|
||||
msg += "Q:[queue.len]|D:[delslasttick]|G:[gcedlasttick]|"
|
||||
msg += "GR:"
|
||||
if (!(delslasttick+gcedlasttick))
|
||||
msg += "n/a|"
|
||||
else
|
||||
msg += "[round((gcedlasttick/(delslasttick+gcedlasttick))*100, 0.01)]%|"
|
||||
|
||||
msg += "TD:[totaldels]|TG:[totalgcs]|"
|
||||
if (!(totaldels+totalgcs))
|
||||
msg += "n/a|"
|
||||
else
|
||||
msg += "TGR:[round((totalgcs/(totaldels+totalgcs))*100, 0.01)]%"
|
||||
..(msg)
|
||||
|
||||
/datum/subsystem/garbage_collector/fire()
|
||||
dels = 0
|
||||
|
||||
delslasttick = 0
|
||||
gcedlasttick = 0
|
||||
var/time_to_stop = world.timeofday + max_run_time
|
||||
var/time_to_kill = world.time - collection_timeout // Anything qdel() but not GC'd BEFORE this time needs to be manually del()
|
||||
var/checkRemain = max_checks_multiplier * wait
|
||||
var/maxDels = max_forcedel_multiplier * wait
|
||||
|
||||
while(destroyed.len && --checkRemain >= 0)
|
||||
if(dels >= maxDels)
|
||||
// testing("GC: Reached max force dels per tick [dels] vs [GC_FORCE_DEL_PER_TICK]")
|
||||
break // Server's already pretty pounded, everything else can wait 2 seconds
|
||||
var/refID = destroyed[1]
|
||||
var/GCd_at_time = destroyed[refID]
|
||||
|
||||
while(queue.len && world.timeofday < time_to_stop)
|
||||
var/refID = queue[1]
|
||||
if (!refID)
|
||||
queue.Cut(1, 2)
|
||||
continue
|
||||
|
||||
var/GCd_at_time = queue[refID]
|
||||
if(GCd_at_time > time_to_kill)
|
||||
// testing("GC: [refID] not old enough, breaking at [world.time] for [GCd_at_time - time_to_kill] deciseconds until [GCd_at_time + GC_COLLECTION_TIMEOUT]")
|
||||
break // Everything else is newer, skip them
|
||||
var/atom/A = locate(refID)
|
||||
// testing("GC: [refID] old enough to test: GCd_at_time: [GCd_at_time] time_to_kill: [time_to_kill] current: [world.time]")
|
||||
if(A && A.gc_destroyed == GCd_at_time) // So if something else coincidently gets the same ref, it's not deleted by mistake
|
||||
// Something's still referring to the qdel'd object. Kill it.
|
||||
testing("GC: -- \ref[A] | [A.type] was unable to be GC'd and was deleted --")
|
||||
logging["[A.type]"]++
|
||||
|
||||
var/atom/A
|
||||
if (!istext(refID))
|
||||
del(A)
|
||||
++dels
|
||||
// else
|
||||
// testing("GC: [refID] properly GC'd at [world.time] with timeout [GCd_at_time]")
|
||||
destroyed.Cut(1, 2)
|
||||
else
|
||||
A = locate(refID)
|
||||
if (A && A.gc_destroyed == GCd_at_time) // So if something else coincidently gets the same ref, it's not deleted by mistake
|
||||
// Something's still referring to the qdel'd object. Kill it.
|
||||
testing("GC: -- \ref[A] | [A.type] was unable to be GC'd and was deleted --")
|
||||
didntgc["[A.type]"]++
|
||||
del(A)
|
||||
++delslasttick
|
||||
++totaldels
|
||||
else
|
||||
++gcedlasttick
|
||||
++totalgcs
|
||||
|
||||
queue.Cut(1, 2)
|
||||
|
||||
|
||||
/datum/subsystem/garbage_collector/proc/AddTrash(datum/A)
|
||||
if(!istype(A) || !isnull(A.gc_destroyed))
|
||||
/datum/subsystem/garbage_collector/proc/Queue(datum/A, harddel = 0)
|
||||
if (!istype(A) || !isnull(A.gc_destroyed))
|
||||
return
|
||||
// testing("GC: AddTrash([A.type])")
|
||||
A.gc_destroyed = world.time
|
||||
destroyed -= "\ref[A]" // Removing any previous references that were GC'd so that the current object will be at the end of the list.
|
||||
destroyed["\ref[A]"] = world.time
|
||||
queue -= "\ref[A]" // Removing any previous references that were GC'd so that the current object will be at the end of the list.
|
||||
queue["\ref[A]"] = world.time
|
||||
|
||||
/datum/subsystem/garbage_collector/proc/HardQueue(datum/A, harddel = 0)
|
||||
if (!istype(A) || !isnull(A.gc_destroyed))
|
||||
return
|
||||
A.gc_destroyed = world.time
|
||||
queue -= A // Removing any previous references that were GC'd so that the current object will be at the end of the list.
|
||||
queue[A] = world.time
|
||||
|
||||
|
||||
// Should be treated as a replacement for the 'del' keyword.
|
||||
// Datums passed to this will be given a chance to clean up references to allow the GC to collect them.
|
||||
/proc/qdel(var/datum/A)
|
||||
if(!A)
|
||||
if (!A)
|
||||
return
|
||||
if(!istype(A))
|
||||
if (!istype(A))
|
||||
//warning("qdel() passed object of type [A.type]. qdel() can only handle /datum types.")
|
||||
del(A)
|
||||
SSgarbage.dels++
|
||||
else if(isnull(A.gc_destroyed))
|
||||
else if (isnull(A.gc_destroyed))
|
||||
// Let our friend know they're about to get fucked up.
|
||||
. = !A.Destroy()
|
||||
if(. && A)
|
||||
if(!isturf(A))
|
||||
SSgarbage.AddTrash(A)
|
||||
else
|
||||
var/hint = A.Destroy()
|
||||
if (!A)
|
||||
return
|
||||
switch (hint)
|
||||
if (QDEL_HINT_QUEUE) //qdel should queue the object for deletion.
|
||||
SSgarbage.Queue(A)
|
||||
if (QDEL_HINT_LETMELIVE) //qdel should let the object live after calling destory.
|
||||
return
|
||||
if (QDEL_HINT_IWILLGC) //functionally the same as the above. qdel should assume the object will gc on its own, and not check it.
|
||||
return
|
||||
if (QDEL_HINT_HARDDEL) //qdel should assume this object won't gc, and queue a hard delete using a hard reference to save time from the locate()
|
||||
SSgarbage.HardQueue(A)
|
||||
if (QDEL_HINT_HARDDEL_NOW) //qdel should assume this object won't gc, and hard del it post haste.
|
||||
del(A)
|
||||
if (QDEL_HINT_PUTINPOOL) //qdel will put this object in the pool.
|
||||
PlaceInPool(A,0)
|
||||
else
|
||||
SSgarbage.Queue(A)
|
||||
|
||||
// Default implementation of clean-up code.
|
||||
// This should be overridden to remove all references pointing to the object being destroyed.
|
||||
@@ -83,7 +126,7 @@ var/datum/subsystem/garbage_collector/SSgarbage
|
||||
/datum/proc/Destroy()
|
||||
//del(src)
|
||||
tag = null
|
||||
return 0
|
||||
return QDEL_HINT_QUEUE
|
||||
|
||||
/datum/var/gc_destroyed //Time when this object was destroyed.
|
||||
|
||||
|
||||
@@ -13,7 +13,9 @@ var/datum/subsystem/job/SSjob
|
||||
NEW_SS_GLOBAL(SSjob)
|
||||
|
||||
|
||||
/datum/subsystem/job/Initialize()
|
||||
/datum/subsystem/job/Initialize(timeofday, zlevel)
|
||||
if (zlevel)
|
||||
return ..()
|
||||
SetupOccupations()
|
||||
LoadJobs("config/jobs.txt")
|
||||
..()
|
||||
|
||||
@@ -6,6 +6,7 @@ var/datum/subsystem/lighting/SSlighting
|
||||
name = "Lighting"
|
||||
wait = 5
|
||||
priority = 1
|
||||
dynamic_wait = 1
|
||||
|
||||
var/list/changed_lights = list() //list of all datum/light_source that need updating
|
||||
var/changed_lights_workload = 0 //stats on the largest number of lights (max changed_lights.len)
|
||||
@@ -20,7 +21,7 @@ var/datum/subsystem/lighting/SSlighting
|
||||
|
||||
|
||||
/datum/subsystem/lighting/stat_entry()
|
||||
stat(name, "[round(cost,0.001)]ds (CPU:[round(cpu,1)]%) L:[round(changed_lights_workload,1)]/T:[round(changed_turfs_workload,1)]")
|
||||
..("L:[round(changed_lights_workload,1)]|T:[round(changed_turfs_workload,1)]")
|
||||
|
||||
|
||||
//Workhorse of lighting. It cycles through each light that needs updating. It updates their
|
||||
|
||||
@@ -17,7 +17,7 @@ var/datum/subsystem/machines/SSmachine
|
||||
|
||||
|
||||
/datum/subsystem/machines/stat_entry()
|
||||
stat(name, "[round(cost,0.001)]ds (CPU:[round(cpu,1)]%)\t[processing.len]")
|
||||
..("P:[processing.len]")
|
||||
|
||||
|
||||
/datum/subsystem/machines/fire()
|
||||
|
||||
@@ -10,7 +10,7 @@ var/datum/subsystem/mobs/SSmob
|
||||
|
||||
|
||||
/datum/subsystem/mobs/stat_entry()
|
||||
stat(name, "[round(cost,0.001)]ds (CPU:[round(cpu,1)]%) [mob_list.len]")
|
||||
..("P:[mob_list.len]")
|
||||
|
||||
|
||||
/datum/subsystem/mobs/fire()
|
||||
|
||||
@@ -30,11 +30,11 @@ var/datum/subsystem/nano/SSnano
|
||||
//Ignore directories
|
||||
if(copytext(filename, length(filename)) != "/")
|
||||
if(fexists(path + filename))
|
||||
asset_files.Add(fcopy_rsc(path + filename))
|
||||
asset_files.Add(fcopy_rsc(path + filename))
|
||||
|
||||
|
||||
/datum/subsystem/nano/stat_entry()
|
||||
stat(name, "[round(cost,0.001)]ds (CPU:[round(cpu,1)]%) [processing_uis.len]")
|
||||
..("P:[processing_uis.len]")
|
||||
|
||||
|
||||
/datum/subsystem/nano/fire()
|
||||
|
||||
@@ -23,7 +23,7 @@ var/datum/subsystem/npcpool/SSbp
|
||||
|
||||
|
||||
/datum/subsystem/npcpool/stat_entry()
|
||||
stat(name, "[round(cost,0.001)]ds (CPU:[round(cpu,1)]%) (T:[botPool_l.len + botPool_l_non.len] | D: [needsDelegate.len] | A: [needsAssistant.len + needsHelp_non.len] | U: [canBeUsed.len + canBeUsed_non.len])")
|
||||
..("T:[botPool_l.len + botPool_l_non.len]|D:[needsDelegate.len]|A:[needsAssistant.len + needsHelp_non.len]|U:[canBeUsed.len + canBeUsed_non.len]")
|
||||
|
||||
|
||||
/datum/subsystem/npcpool/fire()
|
||||
@@ -40,7 +40,7 @@ var/datum/subsystem/npcpool/SSbp
|
||||
for(var/obj/machinery/bot/check in botPool_l_non)
|
||||
if(!check)
|
||||
botPool_l_non.Cut(npcCount,npcCount+1)
|
||||
|
||||
continue
|
||||
if(check.hacked)
|
||||
needsHelp_non |= check
|
||||
else if(check.frustration > 5) //average for most bots
|
||||
@@ -53,9 +53,10 @@ var/datum/subsystem/npcpool/SSbp
|
||||
|
||||
//SNPC handling
|
||||
for(var/mob/living/carbon/human/interactive/check in botPool_l)
|
||||
var/checkInRange = view(MAX_RANGE_FIND,check)
|
||||
if(!check)
|
||||
botPool_l.Cut(npcCount,npcCount+1)
|
||||
continue
|
||||
var/checkInRange = view(MAX_RANGE_FIND,check)
|
||||
if(!(locate(check.TARGET) in checkInRange))
|
||||
needsDelegate |= check
|
||||
|
||||
@@ -70,7 +71,11 @@ var/datum/subsystem/npcpool/SSbp
|
||||
npcCount++
|
||||
|
||||
if(needsDelegate.len)
|
||||
npcCount = 1 //reset the count
|
||||
for(var/mob/living/carbon/human/interactive/check in needsDelegate)
|
||||
if(!check)
|
||||
needsDelegate.Cut(npcCount,npcCount+1)
|
||||
continue
|
||||
if(canBeUsed.len)
|
||||
var/mob/living/carbon/human/interactive/candidate = pick(canBeUsed)
|
||||
var/facCount = 0
|
||||
@@ -87,9 +92,14 @@ var/datum/subsystem/npcpool/SSbp
|
||||
needsDelegate -= check
|
||||
canBeUsed -= candidate
|
||||
candidate.eye_color = "red"
|
||||
npcCount++
|
||||
|
||||
if(needsAssistant.len)
|
||||
npcCount = 1 //reset the count
|
||||
for(var/mob/living/carbon/human/interactive/check in needsAssistant)
|
||||
if(!check)
|
||||
needsAssistant.Cut(npcCount,npcCount+1)
|
||||
continue
|
||||
if(canBeUsed.len)
|
||||
var/mob/living/carbon/human/interactive/candidate = pick(canBeUsed)
|
||||
var/facCount = 0
|
||||
@@ -106,11 +116,18 @@ var/datum/subsystem/npcpool/SSbp
|
||||
needsAssistant -= check
|
||||
canBeUsed -= candidate
|
||||
candidate.eye_color = "yellow"
|
||||
npcCount++
|
||||
|
||||
if(needsHelp_non.len)
|
||||
npcCount = 1 //reset the count
|
||||
for(var/obj/machinery/bot/B in needsHelp_non)
|
||||
if (!B)
|
||||
needsHelp_non.Cut(npcCount,npcCount+1)
|
||||
continue
|
||||
if(canBeUsed_non.len)
|
||||
var/obj/machinery/bot/candidate = pick(canBeUsed_non)
|
||||
candidate.call_bot(B,get_turf(B),FALSE)
|
||||
canBeUsed_non -= B
|
||||
needsHelp_non -= candidate
|
||||
npcCount++
|
||||
|
||||
|
||||
@@ -13,16 +13,20 @@ var/datum/subsystem/objects/SSobj
|
||||
/datum/subsystem/objects/New()
|
||||
NEW_SS_GLOBAL(SSobj)
|
||||
|
||||
/datum/subsystem/objects/Initialize()
|
||||
/datum/subsystem/objects/Initialize(timeofday, zlevel)
|
||||
for(var/atom/movable/AM in world)
|
||||
if (zlevel && AM.z != zlevel)
|
||||
continue
|
||||
AM.initialize()
|
||||
if (zlevel)
|
||||
return ..()
|
||||
for(var/turf/simulated/floor/F in world)
|
||||
F.MakeDirty()
|
||||
..()
|
||||
|
||||
|
||||
/datum/subsystem/objects/stat_entry()
|
||||
stat(name, "[round(cost,0.001)]ds\t(CPU:[round(cpu,1)]%)\t[processing.len]")
|
||||
..("P:[processing.len]")
|
||||
|
||||
|
||||
/datum/subsystem/objects/fire()
|
||||
@@ -35,12 +39,3 @@ var/datum/subsystem/objects/SSobj
|
||||
SSobj.processing.Cut(i, i+1)
|
||||
|
||||
|
||||
/* This is FPSS13 code, has not yet been ported/implemented
|
||||
/obj/New()
|
||||
..()
|
||||
if(map_ready)
|
||||
spawn(0)
|
||||
if(garbage_collecting)
|
||||
return
|
||||
initialize()
|
||||
*/
|
||||
@@ -1,36 +0,0 @@
|
||||
var/datum/subsystem/pipenets/SSpipe
|
||||
|
||||
/datum/subsystem/pipenets
|
||||
name = "Pipenets"
|
||||
priority = 11
|
||||
|
||||
var/list/networks = list()
|
||||
|
||||
/datum/subsystem/pipenets/New()
|
||||
NEW_SS_GLOBAL(SSpipe)
|
||||
|
||||
/datum/subsystem/pipenets/Initialize()
|
||||
set background = BACKGROUND_ENABLED
|
||||
|
||||
//is it possible to combine all these procs into initialize() ??
|
||||
for(var/obj/machinery/atmospherics/M in world)
|
||||
M.build_network()
|
||||
|
||||
for(var/obj/machinery/atmospherics/unary/U in world)
|
||||
if(istype(U, /obj/machinery/atmospherics/unary/vent_pump))
|
||||
var/obj/machinery/atmospherics/unary/vent_pump/V = U
|
||||
V.broadcast_status()
|
||||
else if(istype(U, /obj/machinery/atmospherics/unary/vent_scrubber))
|
||||
var/obj/machinery/atmospherics/unary/vent_scrubber/V = U
|
||||
V.broadcast_status()
|
||||
|
||||
..()
|
||||
|
||||
/datum/subsystem/pipenets/fire()
|
||||
var/i=1
|
||||
for(var/thing in networks)
|
||||
if(thing)
|
||||
thing:process()
|
||||
++i
|
||||
continue
|
||||
networks.Cut(i, i+1)
|
||||
@@ -9,10 +9,25 @@ var/datum/subsystem/power/SSpower
|
||||
/datum/subsystem/power/New()
|
||||
NEW_SS_GLOBAL(SSpower)
|
||||
|
||||
/datum/subsystem/power/Initialize()
|
||||
makepowernets()
|
||||
/datum/subsystem/power/stat_entry(msg)
|
||||
..("P:[powernets.len]")
|
||||
|
||||
/datum/subsystem/power/Initialize(timeofday, zlevel)
|
||||
makepowernets(zlevel)
|
||||
..()
|
||||
|
||||
// rebuild all power networks from scratch - only called at world creation or by the admin verb
|
||||
/datum/subsystem/power/proc/makepowernets(zlevel)
|
||||
for(var/datum/powernet/PN in powernets)
|
||||
qdel(PN)
|
||||
powernets.Cut()
|
||||
|
||||
for(var/obj/structure/cable/PC in cable_list)
|
||||
if(!PC.powernet)
|
||||
var/datum/powernet/NewPN = new()
|
||||
NewPN.add_cable(PC)
|
||||
propagate_network(PC,PC.powernet)
|
||||
|
||||
/datum/subsystem/power/fire()
|
||||
for(var/datum/powernet/Powernet in powernets)
|
||||
Powernet.reset()
|
||||
@@ -39,7 +39,9 @@ var/datum/subsystem/shuttle/SSshuttle
|
||||
NEW_SS_GLOBAL(SSshuttle)
|
||||
|
||||
|
||||
/datum/subsystem/shuttle/Initialize()
|
||||
/datum/subsystem/shuttle/Initialize(timeofday, zlevel)
|
||||
if (zlevel)
|
||||
return ..()
|
||||
if(!emergency)
|
||||
WARNING("No /obj/docking_port/mobile/emergency placed on the map!")
|
||||
if(!supply)
|
||||
|
||||
@@ -43,7 +43,10 @@
|
||||
else
|
||||
return
|
||||
|
||||
SSshuttle.emergencyLastCallLoc = signalOrigin
|
||||
if(prob(70))
|
||||
SSshuttle.emergencyLastCallLoc = signalOrigin
|
||||
else
|
||||
SSshuttle.emergencyLastCallLoc = null
|
||||
|
||||
priority_announce("The emergency shuttle has been called. [redAlert ? "Red Alert state confirmed: Dispatching priority shuttle. " : "" ]It will arrive in [timeLeft(600)] minutes.[reason][SSshuttle.emergencyLastCallLoc ? "\n\nCall signal traced. Results can be viewed on any communications console." : "" ]", null, 'sound/AI/shuttlecalled.ogg', "Priority")
|
||||
|
||||
@@ -56,6 +59,8 @@
|
||||
|
||||
if(prob(70))
|
||||
SSshuttle.emergencyLastCallLoc = signalOrigin
|
||||
else
|
||||
SSshuttle.emergencyLastCallLoc = null
|
||||
priority_announce("The emergency shuttle has been recalled.[SSshuttle.emergencyLastCallLoc ? " Recall signal traced. Results can be viewed on any communications console." : "" ]", null, 'sound/AI/shuttlerecalled.ogg', "Priority")
|
||||
|
||||
/*
|
||||
|
||||
@@ -19,6 +19,9 @@ var/datum/subsystem/sun/SSsun
|
||||
if(prob(50)) // same chance to rotate clockwise than counter-clockwise
|
||||
rate = -rate
|
||||
|
||||
/datum/subsystem/sun/stat_entry(msg)
|
||||
..("P:[solars.len]")
|
||||
|
||||
/datum/subsystem/sun/fire()
|
||||
angle = (360 + angle + rate * 6) % 360 // increase/decrease the angle to the sun, adjusted by the rate
|
||||
|
||||
|
||||
@@ -51,9 +51,9 @@ var/datum/subsystem/ticker/ticker
|
||||
if(SSevent.holidays && SSevent.holidays[APRIL_FOOLS])
|
||||
login_music = 'sound/ambience/clown.ogg'
|
||||
|
||||
round_end_sound = pick('sound/AI/newroundsexy.ogg','sound/misc/apcdestroyed.ogg','sound/misc/bangindonk.ogg','sound/misc/leavingtg.ogg')
|
||||
|
||||
/datum/subsystem/ticker/Initialize()
|
||||
/datum/subsystem/ticker/Initialize(timeofday, zlevel)
|
||||
if (zlevel)
|
||||
return ..()
|
||||
if(!syndicate_code_phrase) syndicate_code_phrase = generate_code_phrase()
|
||||
if(!syndicate_code_response) syndicate_code_response = generate_code_phrase()
|
||||
setupGenetics()
|
||||
@@ -78,6 +78,8 @@ var/datum/subsystem/ticker/ticker
|
||||
++totalPlayersReady
|
||||
|
||||
//countdown
|
||||
if(timeLeft < 0)
|
||||
return
|
||||
timeLeft -= wait
|
||||
|
||||
if(timeLeft <= 30 && !tipped)
|
||||
|
||||
@@ -2,17 +2,20 @@
|
||||
|
||||
/datum/subsystem
|
||||
//things you will want to define
|
||||
var/name //name of the subsystem
|
||||
var/priority = 0 //priority affects order of initialization. Higher priorities are initialized first, lower priorities later. Can be decimal and negative values.
|
||||
var/wait = 20 //time to wait (in deciseconds) between each call to fire(). Must be a positive integer.
|
||||
var/name //name of the subsystem
|
||||
var/priority = 0 //priority affects order of initialization. Higher priorities are initialized first, lower priorities later. Can be decimal and negative values.
|
||||
var/wait = 20 //time to wait (in deciseconds) between each call to fire(). Must be a positive integer.
|
||||
var/dynamic_wait = 0 //changes the wait based on the amount of time it took to process
|
||||
var/dwait_upper = 20 //longest wait can be under dynamic_wait
|
||||
var/dwait_lower = 5 //shortest wait can be under dynamic_wait
|
||||
var/dwait_delta = 3 //How much should processing time effect dwait. or basically: wait = cost*dwait_delta
|
||||
|
||||
//things you will probably want to leave alone
|
||||
var/can_fire = 0 //prevent fire() calls
|
||||
var/last_fire = 0 //last world.time we called fire()
|
||||
var/next_fire = 0 //scheduled world.time for next fire()
|
||||
var/cpu = 0 //cpu-usage stats (somewhat vague)
|
||||
var/cost = 0 //average time to execute
|
||||
var/times_fired = 0 //number of times we have called fire()
|
||||
var/can_fire = 0 //prevent fire() calls
|
||||
var/last_fire = 0 //last world.time we called fire()
|
||||
var/next_fire = 0 //scheduled world.time for next fire()
|
||||
var/cost = 0 //average time to execute
|
||||
var/times_fired = 0 //number of times we have called fire()
|
||||
|
||||
//used to initialize the subsystem BEFORE the map has loaded
|
||||
/datum/subsystem/New()
|
||||
@@ -25,15 +28,22 @@
|
||||
can_fire = 0
|
||||
|
||||
//used to initialize the subsystem AFTER the map has loaded
|
||||
/datum/subsystem/proc/Initialize(start_timeofday)
|
||||
/datum/subsystem/proc/Initialize(start_timeofday, zlevel)
|
||||
var/time = (world.timeofday - start_timeofday) / 10
|
||||
var/msg = "Initialized [name] SubSystem within [time] seconds"
|
||||
if (zlevel)
|
||||
testing(msg)
|
||||
return
|
||||
world << "<span class='boldannounce'>[msg]</span>"
|
||||
world.log << msg
|
||||
|
||||
//hook for printing stats to the "MC" statuspanel for admins to see performance and related stats etc.
|
||||
/datum/subsystem/proc/stat_entry()
|
||||
stat(name, "[round(cost,0.001)]ds\t(CPU:[round(cpu,1)]%)")
|
||||
/datum/subsystem/proc/stat_entry(msg)
|
||||
var/dwait = ""
|
||||
if (dynamic_wait)
|
||||
dwait = "DWait:[wait]ds "
|
||||
|
||||
stat(name, "[round(cost,0.001)]ds\t[dwait][msg]")
|
||||
|
||||
//could be used to postpone a costly subsystem for one cycle
|
||||
//for instance, during cpu intensive operations like explosions
|
||||
|
||||
@@ -790,7 +790,7 @@ body
|
||||
|
||||
if(result)
|
||||
var/newtype = species_list[result]
|
||||
H.dna.species = new newtype()
|
||||
hardset_dna(H, null, null, null, null, newtype)
|
||||
H.regenerate_icons()
|
||||
|
||||
else if(href_list["adjustDamage"] && href_list["mobToDamage"])
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
/datum/debug
|
||||
var/list/debuglist
|
||||
@@ -202,7 +202,7 @@
|
||||
if(ishuman(affected_mob))
|
||||
var/mob/living/carbon/human/human = affected_mob
|
||||
if(human.dna && human.dna.species.id != "slime")
|
||||
human.dna.species = new /datum/species/slime()
|
||||
hardset_dna(human, null, null, null, null, /datum/species/slime)
|
||||
human.regenerate_icons()
|
||||
|
||||
/datum/disease/transformation/corgi
|
||||
|
||||
@@ -39,4 +39,6 @@ client/verb/showrevinfo()
|
||||
src << "Enforce Human Authority: [config.enforce_human_authority]"
|
||||
src << "Allow Latejoin Antagonists: [config.allow_latejoin_antagonists]"
|
||||
src << "Protect Assistant From Antagonist: [config.protect_assistant_from_antagonist]"
|
||||
src << "Enforce Continuous Rounds: [config.continuous.len] of [config.modes.len] roundtypes"
|
||||
src << "Allow Midround Antagonists: [config.midround_antag.len] of [config.modes.len] roundtypes"
|
||||
return
|
||||
|
||||
@@ -455,6 +455,25 @@
|
||||
|
||||
sections["shadowling"] = text
|
||||
|
||||
/** Abductors **/
|
||||
|
||||
text = "Abductor"
|
||||
if(ticker.mode.config_tag == "abductor")
|
||||
text = uppertext(text)
|
||||
text = "<i><b>[text]</b></i>: "
|
||||
if(src in ticker.mode.abductors)
|
||||
text += "<b>Abductor</b>|<a href='?src=\ref[src];abductor=clear'>human</a>"
|
||||
text += "|<a href='?src=\ref[src];common=undress'>undress</a>|<a href='?src=\ref[src];abductor=equip'>equip</a>"
|
||||
else
|
||||
text += "<a href='?src=\ref[src];abductor=abductor'>Abductor</a>|<b>human</b>"
|
||||
|
||||
if(current && current.client && current.client.prefs.be_special & BE_ABDUCTOR)
|
||||
text += "|Enabled in Prefs"
|
||||
else
|
||||
text += "|Disabled in Prefs"
|
||||
|
||||
sections["abductor"] = text
|
||||
|
||||
/** MONKEY ***/
|
||||
if (istype(current, /mob/living/carbon))
|
||||
text = "monkey"
|
||||
@@ -1074,6 +1093,26 @@
|
||||
message_admins("[key_name_admin(usr)] has thrall'ed [current].")
|
||||
log_admin("[key_name(usr)] has thrall'ed [current].")
|
||||
|
||||
else if(href_list["abductor"])
|
||||
switch(href_list["abductor"])
|
||||
if("clear")
|
||||
usr << "Not implemented yet. Sorry!"
|
||||
if("abductor")
|
||||
if(!ishuman(current))
|
||||
usr << "<span class='warning'>This only works on humans!</span>"
|
||||
return
|
||||
make_Abductor()
|
||||
log_admin("[key_name(usr)] turned [current] into abductor.")
|
||||
if("equip")
|
||||
var/gear = alert("Agent or Scientist Gear","Gear","Agent","Scientist")
|
||||
if(gear)
|
||||
var/datum/game_mode/abduction/temp = new
|
||||
temp.equip_common(current)
|
||||
if(gear=="Agent")
|
||||
temp.equip_agent(current)
|
||||
else
|
||||
temp.equip_scientist(current)
|
||||
|
||||
else if (href_list["monkey"])
|
||||
var/mob/living/L = current
|
||||
if (L.notransform)
|
||||
@@ -1349,6 +1388,57 @@
|
||||
ticker.mode.greet_gang(src)
|
||||
ticker.mode.equip_gang(current)
|
||||
|
||||
/datum/mind/proc/make_Abductor()
|
||||
var/role = alert("Abductor Role ?","Role","Agent","Scientist")
|
||||
var/team = input("Abductor Team ?","Team ?") in list(1,2,3,4)
|
||||
var/teleport = alert("Teleport to ship ?","Teleport","Yes","No")
|
||||
|
||||
if(!role || !team || !teleport)
|
||||
return
|
||||
|
||||
if(!ishuman(current))
|
||||
return
|
||||
|
||||
ticker.mode.abductors |= src
|
||||
|
||||
var/datum/objective/experiment/O = new
|
||||
O.owner = src
|
||||
objectives += O
|
||||
|
||||
var/mob/living/carbon/human/H = current
|
||||
|
||||
hardset_dna(H,null,null,null,null,/datum/species/abductor,null)
|
||||
var/datum/species/abductor/S = H.dna.species
|
||||
|
||||
switch(role)
|
||||
if("Agent")
|
||||
S.agent = 1
|
||||
if("Scientist")
|
||||
S.scientist = 1
|
||||
S.team = team
|
||||
|
||||
var/list/obj/effect/landmark/abductor/agent_landmarks = new
|
||||
var/list/obj/effect/landmark/abductor/scientist_landmarks = new
|
||||
agent_landmarks.len = 4
|
||||
scientist_landmarks.len = 4
|
||||
for(var/obj/effect/landmark/abductor/A in landmarks_list)
|
||||
if(istype(A,/obj/effect/landmark/abductor/agent))
|
||||
agent_landmarks[text2num(A.team)] = A
|
||||
else if(istype(A,/obj/effect/landmark/abductor/scientist))
|
||||
scientist_landmarks[text2num(A.team)] = A
|
||||
|
||||
var/obj/effect/landmark/L
|
||||
if(teleport=="Yes")
|
||||
switch(role)
|
||||
if("Agent")
|
||||
S.agent = 1
|
||||
L = agent_landmarks[team]
|
||||
H.loc = L.loc
|
||||
if("Scientist")
|
||||
S.scientist = 1
|
||||
L = agent_landmarks[team]
|
||||
H.loc = L.loc
|
||||
|
||||
|
||||
|
||||
/datum/mind/proc/AddSpell(var/obj/effect/proc_holder/spell/spell)
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
/datum/powernet
|
||||
var/list/cables = list() // all cables & junctions
|
||||
var/list/nodes = list() // all connected machines
|
||||
|
||||
var/load = 0 // the current load on the powernet, increased by each machine at processing
|
||||
var/newavail = 0 // what available power was gathered last tick, then becomes...
|
||||
var/avail = 0 //...the current available power in the powernet
|
||||
var/viewload = 0 // the load as it appears on the power console (gradually updated)
|
||||
var/number = 0 // Unused //TODEL
|
||||
var/netexcess = 0 // excess power on the powernet (typically avail-load)
|
||||
|
||||
/*Powernet procs :
|
||||
|
||||
In modules/power/power.dm :
|
||||
|
||||
/datum/powernet/New()
|
||||
/datum/powernet/Destroy()
|
||||
/datum/powernet/proc/is_empty()
|
||||
/datum/powernet/proc/remove_cable(var/obj/structure/cable/C)
|
||||
/datum/powernet/proc/add_cable(var/obj/structure/cable/C)
|
||||
/datum/powernet/proc/remove_machine(var/obj/machinery/power/M)
|
||||
/datum/powernet/proc/add_machine(var/obj/machinery/power/M)
|
||||
/datum/powernet/proc/reset()
|
||||
/datum/powernet/proc/get_electrocute_damage()
|
||||
|
||||
|
||||
*/
|
||||
|
||||
/datum/debug
|
||||
var/list/debuglist
|
||||
@@ -12,10 +12,11 @@
|
||||
var/spell_to_add = text2path(spell)
|
||||
new spell_to_add(src) //should result in adding to contents, needs testing
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/trigger/Destroy() //I think this entire proc is unnecessary but ok
|
||||
/obj/effect/proc_holder/spell/targeted/trigger/Destroy()
|
||||
for(var/spell in contents)
|
||||
qdel(spell)
|
||||
|
||||
linked_spells = null
|
||||
starting_spells = null
|
||||
..()
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/trigger/cast(list/targets)
|
||||
|
||||
@@ -82,6 +82,11 @@
|
||||
qdel(AM)
|
||||
loc = null
|
||||
invisibility = 101
|
||||
if (pulledby)
|
||||
if (pulledby.pulling == src)
|
||||
pulledby.pulling = null
|
||||
pulledby = null
|
||||
|
||||
|
||||
// Previously known as HasEntered()
|
||||
// This is automatically called when something enters your square
|
||||
|
||||
+5
-2
@@ -35,7 +35,7 @@
|
||||
destination.dna.unique_enzymes = unique_enzymes
|
||||
destination.dna.uni_identity = uni_identity
|
||||
destination.dna.blood_type = blood_type
|
||||
destination.dna.species = species
|
||||
hardset_dna(destination, null, null, null, null, species)
|
||||
destination.dna.mutant_color = mutant_color
|
||||
destination.dna.real_name = real_name
|
||||
destination.dna.mutations = mutations
|
||||
@@ -78,7 +78,7 @@
|
||||
if(istype(character, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = character
|
||||
if(!H.dna.species)
|
||||
H.dna.species = new /datum/species/human()
|
||||
hardset_dna(H, null, null, null, null, /datum/species/human)
|
||||
if(!hair_styles_list.len)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/hair, hair_styles_list, hair_styles_male_list, hair_styles_female_list)
|
||||
L[DNA_HAIR_STYLE_BLOCK] = construct_block(hair_styles_list.Find(H.hair_style), hair_styles_list.len)
|
||||
@@ -138,6 +138,9 @@
|
||||
create_dna(owner, mrace)
|
||||
|
||||
if(mrace)
|
||||
if(owner.dna.species.exotic_blood)
|
||||
var/datum/reagent/exotic_blood = owner.dna.species.exotic_blood
|
||||
owner.reagents.del_reagent(exotic_blood.id)
|
||||
owner.dna.species = new mrace()
|
||||
|
||||
if(mcolor)
|
||||
|
||||
@@ -102,7 +102,7 @@
|
||||
H = agent.current
|
||||
L = agent_landmarks[team_number]
|
||||
H.loc = L.loc
|
||||
H.dna.species = new /datum/species/abductor()
|
||||
hardset_dna(H, null, null, null, null, /datum/species/abductor)
|
||||
S = H.dna.species
|
||||
S.agent = 1
|
||||
S.team = team_number
|
||||
@@ -116,7 +116,7 @@
|
||||
H = scientist.current
|
||||
L = scientist_landmarks[team_number]
|
||||
H.loc = L.loc
|
||||
H.dna.species = new /datum/species/abductor()
|
||||
hardset_dna(H, null, null, null, null, /datum/species/abductor)
|
||||
S = H.dna.species
|
||||
S.scientist = 1
|
||||
S.team = team_number
|
||||
@@ -151,7 +151,7 @@
|
||||
H = agent.current
|
||||
L = agent_landmarks[team_number]
|
||||
H.loc = L.loc
|
||||
H.dna.species = new /datum/species/abductor()
|
||||
hardset_dna(H, null, null, null, null, /datum/species/abductor)
|
||||
S = H.dna.species
|
||||
S.agent = 1
|
||||
S.team = team_number
|
||||
@@ -165,7 +165,7 @@
|
||||
H = scientist.current
|
||||
L = scientist_landmarks[team_number]
|
||||
H.loc = L.loc
|
||||
H.dna.species = new /datum/species/abductor()
|
||||
hardset_dna(H, null, null, null, null, /datum/species/abductor)
|
||||
S = H.dna.species
|
||||
S.scientist = 1
|
||||
S.team = team_number
|
||||
@@ -223,6 +223,10 @@
|
||||
return console
|
||||
|
||||
/datum/game_mode/abduction/proc/equip_agent(var/mob/living/carbon/human/agent,var/team_number)
|
||||
if(!team_number)
|
||||
var/datum/species/abductor/S = agent.dna.species
|
||||
team_number = S.team
|
||||
|
||||
var/obj/machinery/abductor/console/console = get_team_console(team_number)
|
||||
var/obj/item/clothing/suit/armor/abductor/vest/V = new /obj/item/clothing/suit/armor/abductor/vest(agent)
|
||||
if(console!=null)
|
||||
@@ -236,6 +240,10 @@
|
||||
|
||||
|
||||
/datum/game_mode/abduction/proc/equip_scientist(var/mob/living/carbon/human/scientist,var/team_number)
|
||||
if(!team_number)
|
||||
var/datum/species/abductor/S = scientist.dna.species
|
||||
team_number = S.team
|
||||
|
||||
var/obj/machinery/abductor/console/console = get_team_console(team_number)
|
||||
var/obj/item/device/abductor/gizmo/G = new /obj/item/device/abductor/gizmo(scientist)
|
||||
if(console!=null)
|
||||
@@ -259,6 +267,7 @@
|
||||
return ..()
|
||||
|
||||
/datum/game_mode/abduction/declare_completion()
|
||||
world << "<br><font size=3><b>The Abductors were:</b></font>"
|
||||
for(var/team_number=1,team_number<=teams,team_number++)
|
||||
var/obj/machinery/abductor/console/console = get_team_console(team_number)
|
||||
var/datum/objective/objective = team_objectives[team_number]
|
||||
@@ -274,7 +283,7 @@
|
||||
world << "<font size = 3 color='red'><b>[team_name] team failed its mission! </b></font>"
|
||||
world << "<b>Team Members</b>: [agent.name]([agent.ckey])<br>[scientist.name]([scientist.ckey])"
|
||||
|
||||
world << "<b>Abductees:</b>"
|
||||
world << "<br><font size=2><b>The Abductees were:</b></font>"
|
||||
display_abductees(console)
|
||||
|
||||
..()
|
||||
@@ -285,20 +294,24 @@
|
||||
for(var/mob/living/abductee in abductees)
|
||||
if(!abductee.mind)
|
||||
continue
|
||||
world << "[abductee.name]([abductee.ckey]))"
|
||||
var/count = 1
|
||||
for(var/datum/objective/objective in abductee.mind.objectives)
|
||||
if(objective.check_completion())
|
||||
world << "<br><b>Objective #[count]</b>: [objective.explanation_text] <font color='green'><b>Success!</b></font>"
|
||||
else
|
||||
world << "<br><b>Objective #[count]</b>: [objective.explanation_text] <span class='danger'>Fail.</span>"
|
||||
count++
|
||||
world << printplayer(abductee.mind)
|
||||
world << printobjectives(abductee.mind)
|
||||
|
||||
/datum/game_mode/proc/auto_declare_completion_abduction()
|
||||
if(abductors.len)
|
||||
world << "Abductors:"
|
||||
world << "<br><font size=3><b>The Abductors were:</b></font>"
|
||||
for(var/datum/mind/M in abductors)
|
||||
world << "<font size = 2><b>Abductor [M.current ? M.current.name : "Abductor"]([M.key])</b></font>"
|
||||
world << printobjectives(M)
|
||||
world << "<br><font size=3><b>The Abductees were:</b></font>"
|
||||
var/list/full_history = list()
|
||||
for(var/obj/machinery/abductor/console/C in machines)
|
||||
full_history |= C.experiment.history
|
||||
for(var/mob/living/abductee in full_history)
|
||||
if(!abductee.mind)
|
||||
continue
|
||||
world << printplayer(abductee.mind)
|
||||
world << printobjectives(abductee.mind)
|
||||
return
|
||||
|
||||
//Landmarks
|
||||
@@ -329,6 +342,19 @@ datum/objective/experiment/New()
|
||||
explanation_text = "Experiment on [target_amount] humans"
|
||||
|
||||
datum/objective/experiment/check_completion()
|
||||
if(!owner.current || !ishuman(owner.current))
|
||||
return 0
|
||||
var/mob/living/carbon/human/H = owner.current
|
||||
if(!H.dna || !H.dna.species || !(H.dna.species.id == "abductor"))
|
||||
return 0
|
||||
var/datum/species/abductor/S = H.dna.species
|
||||
var/ab_team = S.team
|
||||
for(var/obj/machinery/abductor/experiment/E in machines)
|
||||
if(E.team == ab_team)
|
||||
if(E.points >= target_amount)
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
return 0
|
||||
|
||||
datum/objective/abductee
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
icon_state = "vest_stealth"
|
||||
item_state = "armor"
|
||||
blood_overlay_type = "armor"
|
||||
origin_tech = "materials=5;biotech=4;powerstorage=5"
|
||||
armor = list(melee = 15, bullet = 15, laser = 15, energy = 15, bomb = 15, bio = 15, rad = 15)
|
||||
action_button_name = "Activate"
|
||||
action_button_is_hands_free = 1
|
||||
@@ -147,6 +148,7 @@
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
icon_state = "gizmo_scan"
|
||||
item_state = "silencer"
|
||||
origin_tech = "materials=5;magnets=5;bluespace=6"
|
||||
var/mode = GIZMO_SCAN
|
||||
var/mob/living/marked = null
|
||||
var/obj/machinery/abductor/console/console
|
||||
@@ -208,6 +210,8 @@
|
||||
user << "<span class='notice'>You mark the target for future retrieval.</span>"
|
||||
else
|
||||
prepare(target,user)
|
||||
else
|
||||
prepare(target,user)
|
||||
|
||||
/obj/item/device/abductor/gizmo/proc/prepare(var/atom/target, var/mob/living/user)
|
||||
if(get_dist(target,user)>1)
|
||||
@@ -225,6 +229,7 @@
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
icon_state = "silencer"
|
||||
item_state = "gizmo"
|
||||
origin_tech = "materials=5;magnets=5"
|
||||
|
||||
/obj/item/device/abductor/silencer/attack(mob/living/M, mob/user)
|
||||
if(!AbductorCheck(user))
|
||||
@@ -246,6 +251,8 @@
|
||||
|
||||
var/mob/living/carbon/human/M
|
||||
for(M in view(2,targloc))
|
||||
if(M == user)
|
||||
continue
|
||||
user << "<span class='notice'>You silence [M.name] radio devices.</span>"
|
||||
radio_off_mob(M)
|
||||
|
||||
@@ -327,7 +334,8 @@ Congratulations! You are now trained for xenobiology research!"}
|
||||
#define BATON_STUN 0
|
||||
#define BATON_SLEEP 1
|
||||
#define BATON_CUFF 2
|
||||
#define BATON_MODES 3
|
||||
#define BATON_PROBE 3
|
||||
#define BATON_MODES 4
|
||||
|
||||
/obj/item/weapon/abductor_baton
|
||||
name = "Advanced Baton"
|
||||
@@ -336,6 +344,7 @@ Congratulations! You are now trained for xenobiology research!"}
|
||||
icon_state = "wonderprod"
|
||||
item_state = "wonderprod"
|
||||
slot_flags = SLOT_BELT
|
||||
origin_tech = "materials=6;combat=5;biotech=7"
|
||||
force = 7
|
||||
w_class = 3
|
||||
action_button_name = "Toggle Mode"
|
||||
@@ -350,6 +359,8 @@ Congratulations! You are now trained for xenobiology research!"}
|
||||
txt = "sleep inducment"
|
||||
if(BATON_CUFF)
|
||||
txt = "restraining"
|
||||
if(BATON_PROBE)
|
||||
txt = "probing"
|
||||
|
||||
usr << "<span class='notice'>You switch the baton to [txt] mode</span>"
|
||||
update_icon()
|
||||
@@ -362,6 +373,8 @@ Congratulations! You are now trained for xenobiology research!"}
|
||||
icon_state = "wonderprod"
|
||||
if(BATON_CUFF)
|
||||
icon_state = "wonderprod"
|
||||
if(BATON_PROBE)
|
||||
icon_state = "wonderprod"
|
||||
|
||||
/obj/item/weapon/abductor_baton/proc/IsAbductor(var/mob/living/user)
|
||||
if(!ishuman(user))
|
||||
@@ -384,11 +397,6 @@ Congratulations! You are now trained for xenobiology research!"}
|
||||
if(!isliving(target))
|
||||
return
|
||||
|
||||
if(user.a_intent == "help")
|
||||
target.visible_message("<span class='danger'>[user] probes [target] with [src]!</span>", \
|
||||
"<span class='userdanger'>[user] probed [target]!</span>")
|
||||
return
|
||||
|
||||
var/mob/living/L = target
|
||||
|
||||
user.do_attack_animation(L)
|
||||
@@ -399,6 +407,8 @@ Congratulations! You are now trained for xenobiology research!"}
|
||||
SleepAttack(L,user)
|
||||
if(BATON_CUFF)
|
||||
CuffAttack(L,user)
|
||||
if(BATON_PROBE)
|
||||
ProbeAttack(L,user)
|
||||
|
||||
/obj/item/weapon/abductor_baton/attack_self(mob/living/user)
|
||||
toggle(user)
|
||||
@@ -450,6 +460,19 @@ Congratulations! You are now trained for xenobiology research!"}
|
||||
user << "<span class='warning'>You fail to handcuff [C].</span>"
|
||||
return
|
||||
|
||||
/obj/item/weapon/abductor_baton/proc/ProbeAttack(mob/living/L,mob/living/user)
|
||||
L.visible_message("<span class='danger'>[user] probes [L] with [src]!</span>", \
|
||||
"<span class='userdanger'>[user] probed [L]!</span>")
|
||||
|
||||
var/species = "<span class='warning'>Unknown Species</span>"
|
||||
if(ishuman(L))
|
||||
var/mob/living/carbon/human/H = L
|
||||
if(H.dna && H.dna.species)
|
||||
species = "<span clas=='notice'>[H.dna.species.name]</span>"
|
||||
if(L.mind && L.mind.changeling)
|
||||
species = "<span class='warning'>Changeling Lifeform</span>"
|
||||
user << "<span class='notice'>Probing Result:</span>[species]"
|
||||
|
||||
/obj/item/weapon/restraints/handcuffs/energy
|
||||
name = "energy cuffs"
|
||||
desc = "Energy field restraining the hands."
|
||||
@@ -505,10 +528,11 @@ Congratulations! You are now trained for xenobiology research!"}
|
||||
|
||||
/obj/item/clothing/head/helmet/abductor
|
||||
name = "Agent Headgear"
|
||||
desc = "Abducting with style. Spiky style."
|
||||
desc = "Abducting with style. Spiky style. Prevents digital tracking."
|
||||
icon_state = "alienhelmet"
|
||||
item_state = "alienhelmet"
|
||||
blockTracking = 1
|
||||
origin_tech = "materials=6;magnets=5"
|
||||
|
||||
// Operating Table / Beds / Lockers
|
||||
|
||||
|
||||
@@ -104,7 +104,7 @@ obj/item/gland/slime/activate()
|
||||
/obj/item/gland/pop/activate()
|
||||
host << "<span class='notice'>You feel weird.</span>"
|
||||
var/species = pick(list(/datum/species/lizard,/datum/species/slime,/datum/species/plant/pod,/datum/species/fly))
|
||||
host.dna.species = new species()
|
||||
hardset_dna(host, null, null, null, null, species)
|
||||
host.regenerate_icons()
|
||||
return
|
||||
|
||||
@@ -252,4 +252,4 @@ obj/item/gland/slime/activate()
|
||||
if(istype(T))
|
||||
T.atmos_spawn_air(SPAWN_TOXINS|SPAWN_20C,300)
|
||||
host.gib()
|
||||
return
|
||||
return
|
||||
|
||||
@@ -51,6 +51,11 @@
|
||||
if(experiment != null)
|
||||
var/points = experiment.points
|
||||
dat += "Collected Samples : [points] <br>"
|
||||
dat += "<b>Transfer data in exchange for supplies:</b><br>"
|
||||
dat += "<a href='?src=\ref[src];dispense=baton'>Advanced Baton</A><br>"
|
||||
dat += "<a href='?src=\ref[src];dispense=helmet'>Agent Helmet</A><br>"
|
||||
dat += "<a href='?src=\ref[src];dispense=silencer'>Radio Silencer</A><br>"
|
||||
dat += "<a href='?src=\ref[src];dispense=tool'>Science Tool</A><br>"
|
||||
else
|
||||
dat += "<span class='bad'>NO EXPERIMENT MACHINE DETECTED</span> <br>"
|
||||
|
||||
@@ -101,6 +106,16 @@
|
||||
FlipVest()
|
||||
else if(href_list["select_disguise"])
|
||||
SelectDisguise()
|
||||
else if(href_list["dispense"])
|
||||
switch(href_list["dispense"])
|
||||
if("baton")
|
||||
Dispense(/obj/item/weapon/abductor_baton,cost=2)
|
||||
if("helmet")
|
||||
Dispense(/obj/item/clothing/head/helmet/abductor)
|
||||
if("silencer")
|
||||
Dispense(/obj/item/device/abductor/silencer)
|
||||
if("tool")
|
||||
Dispense(/obj/item/device/abductor/gizmo)
|
||||
src.updateUsrDialog()
|
||||
|
||||
/obj/machinery/abductor/console/proc/TeleporterSet()
|
||||
@@ -181,4 +196,17 @@
|
||||
user << "<span class='notice'>You link the vest to the console.</span>"
|
||||
vest = V
|
||||
else
|
||||
..()
|
||||
..()
|
||||
|
||||
/obj/machinery/abductor/console/proc/Dispense(var/item,var/cost=1)
|
||||
if(experiment && experiment.points >= cost)
|
||||
experiment.points-=cost
|
||||
say("Incoming supply!")
|
||||
if(pad)
|
||||
flick("alien-pad", pad)
|
||||
new item(pad.loc)
|
||||
else
|
||||
new item(src.loc)
|
||||
else
|
||||
say("Insufficent data!")
|
||||
return
|
||||
@@ -49,7 +49,7 @@
|
||||
spawn(0)
|
||||
anim(target.loc,target,'icons/mob/mob.dmi',,"uncloak",,target.dir)
|
||||
|
||||
/obj/machinery/abductor/pad/proc/Retrieve(var/mob/living/carbon/human/target)
|
||||
/obj/machinery/abductor/pad/proc/Retrieve(var/mob/living/target)
|
||||
flick("alien-pad", src)
|
||||
spawn(0)
|
||||
anim(target.loc,target,'icons/mob/mob.dmi',,"uncloak",,target.dir)
|
||||
|
||||
@@ -113,6 +113,7 @@
|
||||
/mob/living/simple_animal/hostile/blob/blobspore/Destroy()
|
||||
if(factory)
|
||||
factory.spores -= src
|
||||
factory = null
|
||||
if(contents)
|
||||
for(var/mob/M in contents)
|
||||
M.loc = src.loc
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
blob_cores -= src
|
||||
if(overmind)
|
||||
overmind.blob_core = null
|
||||
overmind = null
|
||||
SSobj.processing.Remove(src)
|
||||
..()
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
for(var/mob/living/simple_animal/hostile/blob/blobspore/spore in spores)
|
||||
if(spore.factory == src)
|
||||
spore.factory = null
|
||||
spores = null
|
||||
..()
|
||||
|
||||
/obj/effect/blob/factory/PulseAnimation(var/activate = 0)
|
||||
|
||||
@@ -192,7 +192,7 @@
|
||||
|
||||
var/mob/living/simple_animal/hostile/blob/blobbernaut/blobber = new /mob/living/simple_animal/hostile/blob/blobbernaut (get_turf(B))
|
||||
if(blobber)
|
||||
B.Destroy()
|
||||
qdel(B)
|
||||
blobber.color = blob_reagent_datum.color
|
||||
blobber.overmind = src
|
||||
blob_mobs.Add(blobber)
|
||||
@@ -243,7 +243,7 @@
|
||||
src << "Unable to remove this blob."
|
||||
return
|
||||
|
||||
B.Destroy()
|
||||
qdel(B)
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -82,9 +82,9 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
|
||||
|
||||
/datum/game_mode/changeling/make_antag_chance(var/mob/living/carbon/human/character) //Assigns changeling to latejoiners
|
||||
var/changelingcap = min( round(joined_player_list.len/(config.changeling_scaling_coeff*2))+2, round(joined_player_list.len/config.changeling_scaling_coeff) )
|
||||
if(changelings.len >= changelingcap) //Caps number of latejoin antagonists
|
||||
if(ticker.mode.changelings.len >= changelingcap) //Caps number of latejoin antagonists
|
||||
return
|
||||
if(changelings.len <= (changelingcap - 2) || prob(100 - (config.changeling_scaling_coeff*2)))
|
||||
if(ticker.mode.changelings.len <= (changelingcap - 2) || prob(100 - (config.changeling_scaling_coeff*2)))
|
||||
if(character.client.prefs.be_special & BE_CHANGELING)
|
||||
if(!jobban_isbanned(character.client, "changeling") && !jobban_isbanned(character.client, "Syndicate"))
|
||||
if(age_check(character.client))
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
user.dna = chosen_dna
|
||||
user.real_name = chosen_dna.real_name
|
||||
user.dna.species = new chosen_dna.species.type(user)
|
||||
hardset_dna(user, null, null, null, null, chosen_dna.species.type)
|
||||
user.dna.mutant_color = chosen_dna.mutant_color
|
||||
updateappearance(user)
|
||||
domutcheck(user)
|
||||
|
||||
@@ -66,10 +66,10 @@
|
||||
|
||||
/datum/game_mode/traitor/changeling/make_antag_chance(var/mob/living/carbon/human/character) //Assigns changeling to latejoiners
|
||||
var/changelingcap = min( round(joined_player_list.len/(config.changeling_scaling_coeff*4))+2, round(joined_player_list.len/(config.changeling_scaling_coeff*2)) )
|
||||
if(changelings.len >= changelingcap) //Caps number of latejoin antagonists
|
||||
if(ticker.mode.changelings.len >= changelingcap) //Caps number of latejoin antagonists
|
||||
..()
|
||||
return
|
||||
if(changelings.len <= (changelingcap - 2) || prob(100 / (config.changeling_scaling_coeff * 4)))
|
||||
if(ticker.mode.changelings.len <= (changelingcap - 2) || prob(100 / (config.changeling_scaling_coeff * 4)))
|
||||
if(character.client.prefs.be_special & BE_CHANGELING)
|
||||
if(!jobban_isbanned(character.client, "changeling") && !jobban_isbanned(character.client, "Syndicate"))
|
||||
if(age_check(character.client))
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
var/list/datum/game_mode/replacementmode = null
|
||||
var/round_converted = 0 //0: round not converted, 1: round going to convert, 2: round converted
|
||||
var/reroll_friendly //During mode conversion only these are in the running
|
||||
var/continuous_sanity_checked //Catches some cases where config options could be used to suggest that modes without antagonists should end when all antagonists die
|
||||
var/enemy_minimum_age = 7 //How many days must players have been playing before they can play this antagonist
|
||||
|
||||
var/const/waittime_l = 600
|
||||
@@ -174,6 +175,19 @@
|
||||
if(SSshuttle.emergency.mode >= SHUTTLE_ENDGAME || station_was_nuked)
|
||||
return 1
|
||||
if(!round_converted && (!config.continuous[config_tag] || (config.continuous[config_tag] && config.midround_antag[config_tag]))) //Non-continuous or continous with replacement antags
|
||||
if(!continuous_sanity_checked) //make sure we have antags to be checking in the first place
|
||||
for(var/mob/living/Player in mob_list)
|
||||
if(Player.mind)
|
||||
if(Player.mind.special_role)
|
||||
continuous_sanity_checked = 1
|
||||
return 0
|
||||
if(!continuous_sanity_checked)
|
||||
message_admins("The roundtype ([config_tag]) has no antagonists, continuous round has been defaulted to on and midround_antag has been defaulted to off.")
|
||||
config.continuous[config_tag] = 1
|
||||
config.midround_antag[config_tag] = 0
|
||||
return 0
|
||||
|
||||
|
||||
if(living_antag_player && living_antag_player.mind && living_antag_player.stat != DEAD && !isnewplayer(living_antag_player) &&!isbrain(living_antag_player))
|
||||
return 0 //A resource saver: once we find someone who has to die for all antags to be dead, we can just keep checking them, cycling over everyone only when we lose our mark.
|
||||
|
||||
@@ -473,6 +487,17 @@ proc/display_roundstart_logout_report()
|
||||
|
||||
return text
|
||||
|
||||
/datum/game_mode/proc/printobjectives(var/datum/mind/ply)
|
||||
var/text = ""
|
||||
var/count = 1
|
||||
for(var/datum/objective/objective in ply.objectives)
|
||||
if(objective.check_completion())
|
||||
text += "<br><b>Objective #[count]</b>: [objective.explanation_text] <font color='green'><b>Success!</b></font>"
|
||||
else
|
||||
text += "<br><b>Objective #[count]</b>: [objective.explanation_text] <span class='danger'>Fail.</span>"
|
||||
count++
|
||||
return text
|
||||
|
||||
//If the configuration option is set to require players to be logged as old enough to play certain jobs, then this proc checks that they are, otherwise it just returns 1
|
||||
/datum/game_mode/proc/age_check(client/C)
|
||||
if(get_remaining_days(C) == 0)
|
||||
|
||||
@@ -258,7 +258,7 @@ This is here to make the tiles around the station mininuke change when it's arme
|
||||
var/turf/disk_loc = get_turf(src)
|
||||
if(disk_loc.z > ZLEVEL_CENTCOM)
|
||||
get(src, /mob) << "<span class='danger'>You can't help but feel that you just lost something back there...</span>"
|
||||
Destroy()
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/disk/nuclear/Destroy()
|
||||
if(blobstart.len > 0)
|
||||
@@ -267,7 +267,7 @@ This is here to make the tiles around the station mininuke change when it's arme
|
||||
var/turf/diskturf = get_turf(src)
|
||||
message_admins("[src] has been destroyed in ([diskturf.x], [diskturf.y] ,[diskturf.z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[diskturf.x];Y=[diskturf.y];Z=[diskturf.z]'>JMP</a>). Moving it to ([NEWDISK.x], [NEWDISK.y], [NEWDISK.z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[NEWDISK.x];Y=[NEWDISK.y];Z=[NEWDISK.z]'>JMP</a>).")
|
||||
log_game("[src] has been destroyed in ([diskturf.x], [diskturf.y] ,[diskturf.z]). Moving it to ([NEWDISK.x], [NEWDISK.y], [NEWDISK.z]).")
|
||||
del(src) //Needed to clear all references to it
|
||||
return QDEL_HINT_HARDDEL_NOW
|
||||
else
|
||||
ERROR("[src] was supposed to be destroyed, but we were unable to locate a blobstart landmark to spawn a new one.")
|
||||
return 1 // Cancel destruction.
|
||||
return QDEL_HINT_LETMELIVE // Cancel destruction.
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
required_players = 25
|
||||
required_enemies = 5
|
||||
recommended_enemies = 8
|
||||
reroll_friendly = 1
|
||||
|
||||
traitor_name = "double agent"
|
||||
|
||||
|
||||
@@ -75,9 +75,9 @@
|
||||
|
||||
/datum/game_mode/traitor/make_antag_chance(var/mob/living/carbon/human/character) //Assigns traitor to latejoiners
|
||||
var/traitorcap = min(round(joined_player_list.len / (config.traitor_scaling_coeff * 2)) + 2 + num_modifier, round(joined_player_list.len/config.traitor_scaling_coeff) + num_modifier )
|
||||
if(traitors.len >= traitorcap) //Upper cap for number of latejoin antagonists
|
||||
if(ticker.mode.traitors.len >= traitorcap) //Upper cap for number of latejoin antagonists
|
||||
return
|
||||
if(traitors.len <= (traitorcap - 2) || prob(100 / (config.traitor_scaling_coeff * 2)))
|
||||
if(ticker.mode.traitors.len <= (traitorcap - 2) || prob(100 / (config.traitor_scaling_coeff * 2)))
|
||||
if(character.client.prefs.be_special & BE_TRAITOR)
|
||||
if(!jobban_isbanned(character.client, "traitor") && !jobban_isbanned(character.client, "Syndicate"))
|
||||
if(age_check(character.client))
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
/obj/machinery/bluespace_beacon/Destroy()
|
||||
if(Beacon)
|
||||
qdel(Beacon)
|
||||
Beacon = null
|
||||
..()
|
||||
|
||||
// update the invisibility and icon
|
||||
|
||||
@@ -113,6 +113,7 @@
|
||||
..()
|
||||
src.updateUsrDialog()
|
||||
|
||||
|
||||
/obj/machinery/atmospherics/unary/cold_sink/freezer/power_change()
|
||||
..()
|
||||
if(stat & NOPOWER)
|
||||
|
||||
@@ -29,7 +29,7 @@ obj/machinery/air_sensor
|
||||
obj/machinery/air_sensor/update_icon()
|
||||
icon_state = "gsensor[on]"
|
||||
|
||||
obj/machinery/air_sensor/process()
|
||||
obj/machinery/air_sensor/process_atmos()
|
||||
if(on)
|
||||
var/datum/signal/signal = new
|
||||
signal.transmission_method = 1 //radio signal
|
||||
@@ -73,7 +73,7 @@ obj/machinery/air_sensor/initialize()
|
||||
|
||||
obj/machinery/air_sensor/New()
|
||||
..()
|
||||
|
||||
SSair.atmos_machinery += src
|
||||
if(radio_controller)
|
||||
set_frequency(frequency)
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
var/release_log = ""
|
||||
var/update_flag = 0
|
||||
|
||||
|
||||
/obj/machinery/portable_atmospherics/canister/sleeping_agent
|
||||
name = "canister: \[N2O\]"
|
||||
icon_state = "redws"
|
||||
@@ -123,6 +124,7 @@ update_flag
|
||||
if (src.health <= 10)
|
||||
var/atom/location = src.loc
|
||||
location.assume_air(air_contents)
|
||||
air_update_turf()
|
||||
|
||||
src.destroyed = 1
|
||||
playsound(src.loc, 'sound/effects/spray.ogg', 10, 1, -3)
|
||||
@@ -138,9 +140,9 @@ update_flag
|
||||
else
|
||||
return 1
|
||||
|
||||
/obj/machinery/portable_atmospherics/canister/process()
|
||||
/obj/machinery/portable_atmospherics/canister/process_atmos()
|
||||
if (destroyed)
|
||||
return
|
||||
return PROCESS_KILL
|
||||
|
||||
..()
|
||||
|
||||
@@ -174,9 +176,9 @@ update_flag
|
||||
can_label = 1
|
||||
else
|
||||
can_label = 0
|
||||
|
||||
/obj/machinery/portable_atmospherics/canister/process()
|
||||
src.updateDialog()
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/machinery/portable_atmospherics/canister/return_air()
|
||||
return air_contents
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
|
||||
/obj/machinery/meter/New()
|
||||
..()
|
||||
SSair.atmos_machinery += src
|
||||
src.target = locate(/obj/machinery/atmospherics/pipe) in loc
|
||||
return 1
|
||||
|
||||
@@ -21,7 +22,7 @@
|
||||
if (!target)
|
||||
src.target = locate(/obj/machinery/atmospherics/pipe) in loc
|
||||
|
||||
/obj/machinery/meter/process()
|
||||
/obj/machinery/meter/process_atmos()
|
||||
if(!target)
|
||||
icon_state = "meterX"
|
||||
return 0
|
||||
@@ -114,6 +115,7 @@
|
||||
return 1
|
||||
|
||||
// TURF METER - REPORTS A TILE'S AIR CONTENTS
|
||||
// why are you yelling?
|
||||
|
||||
/obj/machinery/meter/turf/New()
|
||||
..()
|
||||
|
||||
@@ -10,25 +10,26 @@
|
||||
var/destroyed = 0
|
||||
|
||||
var/maximum_pressure = 90*ONE_ATMOSPHERE
|
||||
var/lastupdate = 0
|
||||
|
||||
/obj/machinery/portable_atmospherics/New()
|
||||
..()
|
||||
|
||||
SSair.atmos_machinery += src
|
||||
air_contents.volume = volume
|
||||
air_contents.temperature = T20C
|
||||
|
||||
return 1
|
||||
|
||||
/obj/machinery/portable_atmospherics/process()
|
||||
if(!connected_port) //only react when pipe_network will ont it do it for you
|
||||
/obj/machinery/portable_atmospherics/process_atmos()
|
||||
if(!connected_port) //only react when pipe_network will not it do it for you
|
||||
//Allow for reactions
|
||||
air_contents.react()
|
||||
else
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/portable_atmospherics/process()
|
||||
return
|
||||
/obj/machinery/portable_atmospherics/Destroy()
|
||||
del(air_contents)
|
||||
|
||||
qdel(air_contents)
|
||||
SSair.atmos_machinery -= src
|
||||
..()
|
||||
|
||||
/obj/machinery/portable_atmospherics/update_icon()
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
|
||||
..(severity)
|
||||
|
||||
/obj/machinery/portable_atmospherics/pump/process()
|
||||
/obj/machinery/portable_atmospherics/pump/process_atmos()
|
||||
..()
|
||||
if(on)
|
||||
var/datum/gas_mixture/environment
|
||||
@@ -85,7 +85,8 @@
|
||||
|
||||
air_contents.merge(removed)
|
||||
//src.update_icon()
|
||||
|
||||
/obj/machinery/portable_atmospherics/pump/process()
|
||||
..()
|
||||
src.updateDialog()
|
||||
return
|
||||
|
||||
|
||||
@@ -89,7 +89,7 @@
|
||||
|
||||
return
|
||||
|
||||
/obj/machinery/portable_atmospherics/scrubber/process()
|
||||
/obj/machinery/portable_atmospherics/scrubber/process_atmos()
|
||||
..()
|
||||
|
||||
if(on)
|
||||
@@ -139,10 +139,15 @@
|
||||
environment.merge(removed)
|
||||
else
|
||||
loc.assume_air(removed)
|
||||
//src.update_icon()
|
||||
|
||||
/obj/machinery/portable_atmospherics/scrubber/process_atmos()
|
||||
..()
|
||||
src.updateDialog()
|
||||
return
|
||||
|
||||
|
||||
|
||||
|
||||
/obj/machinery/portable_atmospherics/scrubber/return_air()
|
||||
return air_contents
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
var/on = 0
|
||||
var/volume_rate = 800
|
||||
|
||||
/obj/machinery/zvent/process()
|
||||
/obj/machinery/zvent/process_atmos()
|
||||
|
||||
//all this object does, is make its turf share air with the ones above and below it, if they have a vent too.
|
||||
if (istype(loc,/turf/simulated)) //if we're not on a valid turf, forget it
|
||||
|
||||
@@ -113,6 +113,8 @@
|
||||
Radio.listening = 0 //Makes bot radios transmit only so no one hears things while adjacent to one.
|
||||
|
||||
/obj/machinery/bot/Destroy()
|
||||
qdel(Radio)
|
||||
qdel(botcard)
|
||||
..()
|
||||
|
||||
|
||||
|
||||
@@ -73,11 +73,10 @@
|
||||
//Cameras can't track people wearing an agent card or a ninja hood.
|
||||
if(H.wear_id && istype(H.wear_id.GetID(), /obj/item/weapon/card/id/syndicate))
|
||||
continue
|
||||
//Generic variable who's existance is to blame on shitty old ninja code
|
||||
if(istype(H.head, /obj/item/clothing/head))
|
||||
var/obj/item/clothing/head/hat = H.head
|
||||
if(hat.blockTracking)
|
||||
continue
|
||||
if(istype(H.head, /obj/item/clothing/head))
|
||||
var/obj/item/clothing/head/hat = H.head
|
||||
if(hat.blockTracking)
|
||||
continue
|
||||
|
||||
// Now, are they viewable by a camera? (This is last because it's the most intensive check)
|
||||
if(!near_camera(M))
|
||||
@@ -130,10 +129,10 @@
|
||||
U << "Follow camera mode terminated."
|
||||
U.cameraFollow = null
|
||||
return
|
||||
if(istype(H.head, /obj/item/clothing/head))
|
||||
var/obj/item/clothing/head/hat = H.head
|
||||
if(hat.blockTracking)
|
||||
U << "Follow camera mode terminated."
|
||||
if(istype(H.head, /obj/item/clothing/head))
|
||||
var/obj/item/clothing/head/hat = H.head
|
||||
if(hat.blockTracking)
|
||||
U << "Follow camera mode terminated."
|
||||
U.cameraFollow = null
|
||||
return
|
||||
if(H.digitalcamo)
|
||||
@@ -194,4 +193,4 @@
|
||||
else
|
||||
if (sorttext(a.c_tag, b.c_tag) < 0)
|
||||
L.Swap(j, j + 1)
|
||||
return L
|
||||
return L
|
||||
|
||||
@@ -130,10 +130,14 @@
|
||||
if(!M.brainmob)
|
||||
user << "<span class='warning'>Sticking an empty MMI into the frame would sort of defeat the purpose!</span>"
|
||||
return
|
||||
if(M.brainmob.stat == 2)
|
||||
if(M.brainmob.stat == DEAD)
|
||||
user << "<span class='warning'>Sticking a dead brain into the frame would sort of defeat the purpose!</span>"
|
||||
return
|
||||
|
||||
if(!M.brainmob.client)
|
||||
user << "<span class='warning'>Sticking an inactive brain into the frame would sort of defeat the purpose.</span>"
|
||||
return
|
||||
|
||||
if((config) && (!config.allow_ai))
|
||||
user << "<span class='warning'>This MMI does not seem to fit!</span>"
|
||||
return
|
||||
|
||||
+15
-13
@@ -25,7 +25,7 @@
|
||||
component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
|
||||
component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
|
||||
component_parts += new /obj/item/stack/cable_coil(null, 1)
|
||||
RefreshParts()
|
||||
|
||||
|
||||
/obj/machinery/atmospherics/unary/cryo_cell/construction()
|
||||
..(dir,dir)
|
||||
@@ -40,10 +40,19 @@
|
||||
/obj/machinery/atmospherics/unary/cryo_cell/Destroy()
|
||||
var/turf/T = loc
|
||||
T.contents += contents
|
||||
var/obj/item/weapon/reagent_containers/glass/B = beaker
|
||||
|
||||
if(beaker)
|
||||
B.loc = get_step(loc, SOUTH) //Beaker is carefully ejected from the wreckage of the cryotube
|
||||
beaker.loc = get_step(loc, SOUTH) //Beaker is carefully ejected from the wreckage of the cryotube
|
||||
beaker = null
|
||||
..()
|
||||
/obj/machinery/atmospherics/unary/cryo_cell/process_atmos()
|
||||
..()
|
||||
if(air_contents)
|
||||
temperature_archived = air_contents.temperature
|
||||
heat_gas_contents()
|
||||
expel_gas()
|
||||
if(abs(temperature_archived-air_contents.temperature) > 1)
|
||||
parent.update = 1
|
||||
|
||||
/obj/machinery/atmospherics/unary/cryo_cell/process()
|
||||
..()
|
||||
@@ -54,19 +63,13 @@
|
||||
playsound(src.loc, 'sound/machines/ding.ogg', 50, 1)
|
||||
if(!node || !is_operational())
|
||||
return
|
||||
|
||||
if(!on)
|
||||
updateDialog()
|
||||
return
|
||||
|
||||
if(air_contents)
|
||||
temperature_archived = air_contents.temperature
|
||||
heat_gas_contents()
|
||||
expel_gas()
|
||||
|
||||
if(occupant)
|
||||
process_occupant()
|
||||
if(abs(temperature_archived-air_contents.temperature) > 1)
|
||||
parent.update = 1
|
||||
if(air_contents && occupant)
|
||||
process_occupant()
|
||||
|
||||
updateDialog()
|
||||
return 1
|
||||
@@ -80,7 +83,6 @@
|
||||
return 0
|
||||
|
||||
/obj/machinery/atmospherics/unary/cryo_cell/relaymove(var/mob/user)
|
||||
..()
|
||||
open_machine()
|
||||
|
||||
/obj/machinery/atmospherics/unary/cryo_cell/container_resist()
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
/obj/machinery/door/airlock/alarmlock/Destroy()
|
||||
if(radio_controller)
|
||||
radio_controller.remove_object(src,air_frequency)
|
||||
air_connection = null
|
||||
..()
|
||||
|
||||
/obj/machinery/door/airlock/alarmlock/initialize()
|
||||
|
||||
@@ -12,6 +12,8 @@
|
||||
density = 0
|
||||
opacity = 0
|
||||
|
||||
/obj/machinery/door/poddoor/ert
|
||||
desc = "A heavy duty blast door that only opens for dire emergencies."
|
||||
|
||||
/obj/machinery/door/poddoor/Bumped(atom/AM)
|
||||
if(density)
|
||||
|
||||
@@ -22,9 +22,11 @@
|
||||
density = 0
|
||||
if(health == 0)
|
||||
playsound(src, "shatter", 70, 1)
|
||||
electronics = null
|
||||
..()
|
||||
|
||||
|
||||
|
||||
/obj/machinery/door/window/proc/open_and_close()
|
||||
open()
|
||||
if(src.check_access(null))
|
||||
|
||||
@@ -82,9 +82,12 @@ Class Procs:
|
||||
Called by machine to assign a value to the uid variable.
|
||||
|
||||
process() 'game/machinery/machine.dm'
|
||||
Called by the 'master_controller' once per game tick for each machine that is listed in the 'machines' list.
|
||||
Called by the 'machinery subsystem' once per machinery tick for each machine that is listed in its 'machines' list.
|
||||
|
||||
is_operational()
|
||||
process_atmos()
|
||||
Called by the 'air subsystem' once per atmos tick for each machine that is listed in its 'atmos_machines' list.
|
||||
|
||||
is_operational()
|
||||
Returns 0 if the machine is unpowered, broken or undergoing maintenance, something else if not
|
||||
|
||||
Compiled by Aygar
|
||||
@@ -132,6 +135,9 @@ Class Procs:
|
||||
/obj/machinery/process()//If you dont use process or power why are you here
|
||||
return PROCESS_KILL
|
||||
|
||||
/obj/machinery/proc/process_atmos()//If you dont use process why are you here
|
||||
return PROCESS_KILL
|
||||
|
||||
/obj/machinery/emp_act(severity)
|
||||
if(use_power && stat == 0)
|
||||
use_power(7500/severity)
|
||||
|
||||
@@ -46,6 +46,7 @@
|
||||
if(radio_controller)
|
||||
radio_controller.remove_object(src, freq)
|
||||
..()
|
||||
center = null
|
||||
|
||||
// update the invisibility and icon
|
||||
/obj/machinery/magnetic_module/hide(var/intact)
|
||||
@@ -244,6 +245,8 @@
|
||||
if(radio_controller)
|
||||
radio_controller.remove_object(src, frequency)
|
||||
..()
|
||||
magnets = null
|
||||
rpath = null
|
||||
|
||||
/obj/machinery/magnetic_controller/process()
|
||||
if(magnets.len == 0 && autolink)
|
||||
|
||||
@@ -184,6 +184,8 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
||||
|
||||
/obj/machinery/newscaster/Destroy()
|
||||
allCasters -= src
|
||||
viewing_channel = null
|
||||
photo = null
|
||||
..()
|
||||
|
||||
/obj/machinery/newscaster/update_icon()
|
||||
|
||||
@@ -143,6 +143,7 @@
|
||||
/obj/machinery/porta_turret/Destroy()
|
||||
//deletes its own cover with it
|
||||
qdel(cover)
|
||||
cover = null
|
||||
..()
|
||||
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user