diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 3cc4b8e28cb..739c4370d6b 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -5137,6 +5137,7 @@ "bUO" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'BOMB RANGE"; name = "BOMB RANGE"},/turf/simulated/wall/r_wall,/area/toxins/test_area) "bUP" = (/turf/simulated/shuttle/floor,/area/shuttle/mining/station) "bUQ" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/mining/station) +"bUR" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/autolathe{pixel_x = 3; pixel_y = -3},/obj/item/weapon/circuitboard/bodyscanner,/obj/item/weapon/circuitboard/bodyscanner_console,/obj/item/weapon/circuitboard/sleeper{pixel_x = 3},/obj/item/weapon/circuitboard/sleep_console{pixel_x = 3},/turf/simulated/floor/plating,/area/storage/tech) "bUS" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1380; id_tag = "mining_dock_pump"},/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/quartermaster/miningdock) "bUT" = (/obj/machinery/light/small{dir = 4; pixel_y = 8},/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1380; id_tag = "mining_dock_airlock"; pixel_x = 25; pixel_y = -5; req_access_txt = "0"; req_one_access_txt = "13;48"; tag_airpump = "mining_dock_pump"; tag_chamber_sensor = "mining_dock_sensor"; tag_exterior_door = "mining_dock_outer"; tag_interior_door = "mining_dock_inner"},/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "mining_dock_sensor"; pixel_x = 25; pixel_y = 8},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1},/obj/item/weapon/ore/iron,/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/quartermaster/miningdock) "bUU" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/wall,/area/quartermaster/miningdock) @@ -5901,7 +5902,6 @@ "cki" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"},/turf/simulated/wall/r_wall,/area/storage/tech) "ckj" = (/obj/structure/table,/obj/item/device/aicard,/obj/item/weapon/aiModule/reset,/turf/simulated/floor/plating,/area/storage/tech) "ckk" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/rdconsole{pixel_x = -4},/obj/item/weapon/circuitboard/rdserver{pixel_x = 4; pixel_y = -2},/obj/item/weapon/circuitboard/destructive_analyzer,/obj/item/weapon/circuitboard/protolathe{pixel_x = -2; pixel_y = 3},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/item/weapon/circuitboard/circuit_imprinter{pixel_x = -4; pixel_y = -3},/turf/simulated/floor/plating,/area/storage/tech) -"ckl" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/autolathe{pixel_x = 3; pixel_y = -3},/obj/item/weapon/circuitboard/pandemic{pixel_x = -3; pixel_y = 3},/obj/item/weapon/circuitboard/bodyscanner,/obj/item/weapon/circuitboard/bodyscanner_console,/obj/item/weapon/circuitboard/sleeper{pixel_x = 3},/obj/item/weapon/circuitboard/sleep_console{pixel_x = 3},/turf/simulated/floor/plating,/area/storage/tech) "ckm" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/message_monitor{pixel_y = -5},/obj/item/weapon/circuitboard/arcade/battle,/obj/item/weapon/circuitboard/arcade/orion_trail{pixel_x = -4; pixel_y = 2},/turf/simulated/floor/plating,/area/storage/tech) "ckn" = (/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = 27},/turf/simulated/floor/plating,/area/storage/tech) "cko" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 8; icon_state = "cautioncorner"},/area/hallway/primary/aft) @@ -8118,7 +8118,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccZcgfcgecggbTCceIcghcghcghcghcghcghbTIbTIbTIbTIbTIbTIbTIcgicgjcgkcglcgmcgncgocgocgpcgqcfbbHTbHTcgrcgscgtbHTbHTbHTcgucgvcgwcdEcgxcgycgzcfucgAcgBcgCbQWcgBcgDcdTcdTcdTcdTcdTcdTcgBcdTcdTcdTbQWcgEcgFcgGcgHcgIcgJcgKcgLcaAcgMcgNcehcgOcehcgPcgQcgRcgScgTcgUcgVbzwcgWceobXVcgXbDbbDicgYcgZchabumbvWbvWbThchbchcchdchechfchgchhchichjchkchlbThchmchnchochpaacaacaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaachqbWFbWFbWFbWFbWFbWFbWFchrchsbWHbWHbWHbWHchtbdqbUNaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccZccZccZccZbTCceIccZaaaaaaaaaaaachuchvchwchxchychzchAchBchCchDchEbhrchGchHchIchIchJchKchLchMchMchMchMchNchMbHTbHTbNRchOchPchQchRchSchTcgIchUchVchWchXchYchZciacdTcdTcibcicbhsciebhscicbEDcifcigcigcihciicijcakcikcilcaAcimcinciocipciqcirciscaAcaAbDbcitbDbbDbbDbciucivciwbDbbvWcgYcixciybumbumbumbThbThbThbThbThbThbThbThbThbThbThbThbThbThbThbThbThaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaabUNcbicbicbicbicbicbicizbWHcbhcbiciAbWHbWHbWHbWHbUNaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaciBaaaaabaabciCciCciCciCciCciCciDciCbTCcdbbhtaaabhubjJbhYbjYciJciKciLciMciNciOciPciQciRciSciTciUciVciWciXciYciZchLcjacjbcjbcjbcjcchMbHTbHTcjdcjdcjdcjdcjecjdcjfcjfcjgcjdcjdcjhcjdcjicjjbkycjlbkycjmcjncjocjpcjqbuXbuXcjrcjscjtcjucjvcjwcjxcbScaAcaAcjycaAcjzcaAcjAcjBcjCcfdcjDcjFcjGcjHcjIcjJcjKcjLcjIbvWcgYcjMbvWcjNcjOcjPcjQcfQbvWbvWbvWbvWbvWbvWbvWcjRcjEaZCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUNbWHbWHbWHbWHbWHbWHceDbWHciAbWHbWHbWHbWHbWHbUNbUNaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacjTcjUcjUcjUbkzcjWcjXcjYcjZckackbckccjScdbbhtaaabmZckgckhckickjciKckkcklckmcknchBckoceTbZUbhrckpcgockqcgockrcksbneckuckvckvckvckwchMbHTbHTcjdckxckyckzckAckBckCckCckDckEckFckGckHckIckJckKcdXcdXckLckMckNckOckPaaaaaacjvckQckRckScjrckdckUckVckWckWckXbGickYckZclaclbckZckZckZclcckZckZcldcleclfclgclhclicljclkbWycllclmbWybWybWybWyclnclobWybWybWybWyclpbvWaZCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUNbUNccYbWHbWHbWHbWHbWHbWHbWHbWHbWHbWHbWHbUNbUNaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacjTcjUcjUcjUbkzcjWcjXcjYcjZckackbckccjScdbbhtaaabmZckgckhckickjciKckkbURckmcknchBckoceTbZUbhrckpcgockqcgockrcksbneckuckvckvckvckwchMbHTbHTcjdckxckyckzckAckBckCckCckDckEckFckGckHckIckJckKcdXcdXckLckMckNckOckPaaaaaacjvckQckRckScjrckdckUckVckWckWckXbGickYckZclaclbckZckZckZclcckZckZcldcleclfclgclhclicljclkbWycllclmbWybWybWybWyclnclobWybWybWybWyclpbvWaZCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUNbUNccYbWHbWHbWHbWHbWHbWHbWHbWHbWHbWHbWHbUNbUNaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaclrclsclsclsclscltcluclvclwclxclxclyclzclAceIbhtaaabmZclBclCclDclEclFclGclHclEclEclIclJclKclLclMclMclNclOcgoclPclQbneckvckvckvckvclSchMbHTbHTcjdclTclUclVclWclXclYclYclZcmacmbcmccmdcmecjdcmfcdTcmgbEDcmhckNcmickPaaaaaacjvcmjcmkcmlcjvbHUcmmcmncmncmncmncmncmnckTcmpcmqcmocmscmsbnfbnfcmscmvcmwcmxcmycmzcmAcmBcmCcmAcmAcmAcmAcmAcmAcmAcmAcmAcmAcmAcmAbvWcmDcmraZCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZEbUNbUNcgbcgbbWHbWHbWHbWHbWHbWHbWHbWHbUNbUNaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmEcmFcmGcmHcmGcmIcmJcmKcmLbRSbGWclzcmNcdbbhtaaabmZcmOcmPcmQcmRciKcmScmTcmUcmVchBckoceTcmWcmXceVcmYcmZbhrbhrbhrcndcneckvckvcnfcngchMbHTcnhcjdcnicnjcnkcnlcnlcnlcnmcnncnlcnlcnocnkcnpcnqcnrcdTcnsbEDcntckNcnuckPaaaaaacjvcnvcnwcnxcjvcnybHTcnhcnzcnzcnzcnzcnzbngbnkbnjcnzcnzaaaaaaaaaaaacjIcnDcnEcnFcmAcnGcnIcnHcnKcnJcnMcnLcnOcnNcnQcnPcoXcnRcpacmAcnScnTcnUcnVcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnXcnYbUNbYcbUNbWHbWHbWHbWHbWHbWHbWHbUNbUNaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaacmEcnZcoacobcocclwcodclwcoeclwcofcogcohcoibhtaaabnlbjJbnIbjYcomciKciKconcoocopcoqcorcoscotcouceVcovcowcoxcoycozchLcoAckvckvckvcoBchMbHTbHTcoCcoCcoDcoEboQboQboQcoCbpobpobpocoLcoMcoDcoNcmfcdTcmgbEDcoOckNckOckPaaaaaacjvcoPcoQcoRcjvbHTbHTbHTcnzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpPcoTcoUcoVbqlcpbcoYcoYcoZcoYcoYcoYcoYcoYcpdcpccpfcpecphcpjcpjcpkcplcpjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUNcpmcpncpobUNbUNbWHbWHcppbWHbWHbUNbUNaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/code/ATMOSPHERICS/components/omni_devices/_omni_extras.dm b/code/ATMOSPHERICS/components/omni_devices/_omni_extras.dm index b48c2f40333..edb59c9cc7c 100644 --- a/code/ATMOSPHERICS/components/omni_devices/_omni_extras.dm +++ b/code/ATMOSPHERICS/components/omni_devices/_omni_extras.dm @@ -8,13 +8,13 @@ #define ATM_O2 3 #define ATM_N2 4 #define ATM_CO2 5 -#define ATM_P 6 //Phoron +#define ATM_P 6 //Plasma #define ATM_N2O 7 //-------------------------------------------- // Omni port datum // -// Used by omni devices to manage connections +// Used by omni devices to manage connections // to other atmospheric objects. //-------------------------------------------- /datum/omni_port @@ -70,10 +70,10 @@ string = "East" if(WEST) string = "West" - + if(!capitalize && string) string = lowertext(string) - + return string //returns a direction flag based on the string passed to it diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index e0649723e01..85a1c2b0215 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -519,29 +519,30 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine access = access_eva /datum/supply_packs/engineering/inflatable - name = "Inflatable barriers" + name = "Inflatable barriers Crate" contains = list(/obj/item/weapon/storage/briefcase/inflatable, /obj/item/weapon/storage/briefcase/inflatable, /obj/item/weapon/storage/briefcase/inflatable) cost = 20 containername = "Inflatable Barrier Crate" -/datum/supply_packs/engineering/supermatter - name = "Supermatter Crystal Crate" - contains = list(/obj/machinery/power/supermatter) - cost = 50 //Yes that's a fucking lot. - containername = "Supermatter Shard Crate" - containertype = /obj/structure/closet/crate/secure/large/reinforced +/datum/supply_packs/engineering/engine/supermatter_shard + name = "Supermatter Shard Crate" + contains = list(/obj/machinery/power/supermatter_shard) + cost = 50 //So cargo thinks twice before killing themselves with it + containertype = /obj/structure/closet/crate/secure + containername = "supermatter shard crate" access = access_ce -/datum/supply_packs/engineering/teg - name = "Thermo-Electric Generator" +/datum/supply_packs/engineering/engine/teg + name = "Thermo-Electric Generator Crate" contains = list( /obj/machinery/power/generator, /obj/machinery/atmospherics/binary/circulator, /obj/machinery/atmospherics/binary/circulator ) cost = 25 + containertype = /obj/structure/closet/crate/secure containername = "Thermo-Electric Generator Components" access = access_ce @@ -592,7 +593,7 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine /obj/item/weapon/storage/firstaid/adv) cost = 10 containername = "advaced first aid kits crate" - + /datum/supply_packs/medical/firstaibrute name = "Brute Trauma Treatment Kits Crate" contains = list(/obj/item/weapon/storage/firstaid/brute, diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm index 41963473640..8864fa8bba2 100644 --- a/code/game/machinery/computer/buildandrepair.dm +++ b/code/game/machinery/computer/buildandrepair.dm @@ -53,10 +53,6 @@ /obj/item/weapon/circuitboard/med_data name = "Circuit board (Medical Records)" build_path = "/obj/machinery/computer/med_data" -/obj/item/weapon/circuitboard/pandemic - name = "Circuit board (PanD.E.M.I.C. 2200)" - build_path = "/obj/machinery/computer/pandemic" - origin_tech = "programming=2;biotech=2" /obj/item/weapon/circuitboard/scan_consolenew name = "Circuit board (DNA Machine)" build_path = "/obj/machinery/computer/scan_consolenew" diff --git a/code/game/machinery/embedded_controller/docking_program.dm b/code/game/machinery/embedded_controller/docking_program.dm index dc316e525e0..932562e39ab 100644 --- a/code/game/machinery/embedded_controller/docking_program.dm +++ b/code/game/machinery/embedded_controller/docking_program.dm @@ -51,7 +51,7 @@ *** Override, what is it? *** The purpose of enabling the override is to prevent the docking program from automatically doing things with the docking port when docking or undocking. - Maybe the shuttle is full of plamsa/phoron for some reason, and you don't want the door to automatically open, or the airlock to cycle. + Maybe the shuttle is full of plasma for some reason, and you don't want the door to automatically open, or the airlock to cycle. This means that the prepare_for_docking/undocking and finish_docking/undocking procs don't get called. The docking controller will still check the state of the docking port, and thus prevent the shuttle from launching unless they force the launch (handling forced diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index 4017d1f3be1..a4a785baa00 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -585,7 +585,7 @@ var/active = 0 // PLEASE HOLD. var/safeties = 1 // The cycler won't start with a living thing inside it unless safeties are off. var/irradiating = 0 // If this is > 0, the cycler is decontaminating whatever is inside it. - var/radiation_level = 2 // 1 is removing germs, 2 is removing blood, 3 is removing phoron. + var/radiation_level = 2 // 1 is removing germs, 2 is removing blood, 3 is removing plasma. var/model_text = "" // Some flavour text for the topic box. var/locked = 1 // If locked, nothing can be taken from or added to the cycler. diff --git a/code/game/smoothwall.dm b/code/game/smoothwall.dm index 75cb92b774b..3c55255eb78 100644 --- a/code/game/smoothwall.dm +++ b/code/game/smoothwall.dm @@ -86,12 +86,12 @@ shroom.icon_state = "glowshroomf" shroom.pixel_x = 0 shroom.pixel_y = 0 - for(var/obj/effect/supermatter_crystal/crystal in get_step(src,direction)) +/* for(var/obj/effect/supermatter_crystal/crystal in get_step(src,direction)) if(!crystal.floor) //crystals drop to the floor crystal.floor = 1 crystal.icon_state = "supermatter_crystalf" crystal.pixel_x = 0 - crystal.pixel_y = 0 + crystal.pixel_y = 0 */ return ..() // DE-HACK diff --git a/code/game/supplyshuttle.dm b/code/game/supplyshuttle.dm index dd371817dca..6aefe7468db 100644 --- a/code/game/supplyshuttle.dm +++ b/code/game/supplyshuttle.dm @@ -222,7 +222,7 @@ var/list/mechtoys = list( points += points_per_slip find_slip = 0 - // Sell phoron + // Sell plasma else if(istype(A, /obj/item/stack/sheet/mineral/plasma)) var/obj/item/stack/sheet/mineral/plasma/P = A plasma_count += P.amount diff --git a/code/modules/awaymissions/zlevel.dm b/code/modules/awaymissions/zlevel.dm index 59892c62ad7..51b66024215 100644 --- a/code/modules/awaymissions/zlevel.dm +++ b/code/modules/awaymissions/zlevel.dm @@ -43,6 +43,7 @@ proc/createRandomZlevel() // Initialize air for the away mission's turfs if(air_master) air_master.setup_allturfs(block(locate(1, 1, world.maxz), locate(world.maxx, world.maxy, world.maxz))) + create_lighting_overlays(world.maxz) world.log << "away mission loaded: [map]" for(var/obj/effect/landmark/L in landmarks_list) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 6f0f19b0b31..4f56edeff9d 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -18,7 +18,8 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set "vampire" = IS_MODE_COMPILED("vampire"), // 2048 / 12 "mutineer" = IS_MODE_COMPILED("mutiny"), // 4096 / 13 "blob" = IS_MODE_COMPILED("blob"), // 8192 / 14 - "shadowling" = IS_MODE_COMPILED("shadowling") //16384 / 15 + "shadowling" = IS_MODE_COMPILED("shadowling"), //16384 / 15 + "Revenant" = 1 //32768 / 16 ) var/global/list/special_role_times = list( //minimum age (in days) for accounts to play these roles num2text(BE_PAI) = 0, @@ -35,7 +36,8 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts num2text(BE_ALIEN) = 21, num2text(BE_NINJA) = 21, num2text(BE_MUTINEER) = 21, - num2text(BE_MALF) = 30 + num2text(BE_MALF) = 30, + num2text(BE_REVENANT) = 7 ) /proc/player_old_enough_antag(client/C, role) diff --git a/code/modules/flufftext/Dreaming.dm b/code/modules/flufftext/Dreaming.dm index 5e204987af6..420b110080d 100644 --- a/code/modules/flufftext/Dreaming.dm +++ b/code/modules/flufftext/Dreaming.dm @@ -3,7 +3,7 @@ var/list/dreams = list( "an ID card","a bottle","a familiar face","a crewmember","a toolbox","a security officer","the captain", "voices from all around","deep space","a doctor","the engine","a traitor","an ally","darkness", "light","a scientist","a monkey","a catastrophe","a loved one","a gun","warmth","freezing","the sun", - "a hat","the Luna","a ruined station","a planet","phoron","air","the medical bay","the bridge","blinking lights", + "a hat","the Luna","a ruined station","a planet","plasma","air","the medical bay","the bridge","blinking lights", "a blue light","an abandoned laboratory","Nanotrasen","The Syndicate","blood","healing","power","respect", "riches","space","a crash","happiness","pride","a fall","water","flames","ice","melons","flying","the eggs","money", "the head of personnel","the head of security","a chief engineer","a research director","a chief medical officer", diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index c2fcb54de8c..04f4ab47ee4 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -29,7 +29,7 @@ sleep(250) // ugly hack, should mean roundstart plants are fine. if(!plant_controller) world << "Plant controller does not exist and [src] requires it. Aborting." - del(src) + qdel(src) return seed = plant_controller.seeds[plantname] @@ -80,7 +80,7 @@ sleep(250) // ugly hack, should mean roundstart plants are fine. if(!plant_controller) world << "Plant controller does not exist and [src] requires it. Aborting." - del(src) + qdel(src) return if(plant_controller.product_descs["[seed.uid]"]) @@ -178,7 +178,7 @@ M.Weaken(5) seed.thrown_at(src,M) sleep(-1) - if(src) del(src) + if(src) qdel(src) return /obj/item/weapon/reagent_containers/food/snacks/grown/throw_impact(atom/hit_atom) @@ -198,7 +198,7 @@ user.put_in_hands(pocell) pocell.maxcharge = src.potency * 10 pocell.charge = pocell.maxcharge - del(src) + qdel(src) return else if(W.sharp) var/reagents_per_slice @@ -206,21 +206,21 @@ if(seed.kitchen_tag == "pumpkin") // Ugggh these checks are awful. user.show_message("You carve a face into [src]!", 1) new /obj/item/clothing/head/hardhat/pumpkinhead (user.loc) - del(src) + qdel(src) return else if(seed.kitchen_tag == "potato") user << "You slice \the [src] into sticks." reagents_per_slice = reagents.total_volume slice = new /obj/item/weapon/reagent_containers/food/snacks/rawsticks(get_turf(src)) reagents.trans_to(slice, reagents_per_slice) - del(src) + qdel(src) return else if(seed.kitchen_tag == "carrot") user << "You slice \the [src] into sticks." reagents_per_slice = reagents.total_volume slice = new /obj/item/weapon/reagent_containers/food/snacks/carrotfries(get_turf(src)) reagents.trans_to(slice, reagents_per_slice) - del(src) + qdel(src) return else if(seed.kitchen_tag == "watermelon") user << "You slice \the [src] into large slices." @@ -228,14 +228,14 @@ for(var/i=0,i<5,i++) slice = new /obj/item/weapon/reagent_containers/food/snacks/watermelonslice(get_turf(src)) reagents.trans_to(slice, reagents_per_slice) - del(src) + qdel(src) return else if(seed.kitchen_tag == "soybeans") user << "You roughly chop up \the [src]." reagents_per_slice = reagents.total_volume slice = new /obj/item/weapon/reagent_containers/food/snacks/soydope(get_turf(src)) reagents.trans_to(slice, reagents_per_slice) - del(src) + qdel(src) return else if(seed.chems) if(istype(W,/obj/item/weapon/hatchet) && !isnull(seed.chems["woodpulp"])) @@ -250,7 +250,7 @@ continue G.attackby(NG, user) user << "You add the newly-formed wood to the stack. It now contains [NG.amount] planks." - del(src) + qdel(src) return else if(istype(W, /obj/item/weapon/rollingpaper)) if(seed.kitchen_tag == "ambrosia" || seed.kitchen_tag == "ambrosiadeus" || seed.kitchen_tag == "tobacco" || seed.kitchen_tag == "stobacco") @@ -259,22 +259,22 @@ var/obj/item/clothing/mask/cigarette/joint/J = new /obj/item/clothing/mask/cigarette/joint(user.loc) J.chem_volume = src.reagents.total_volume src.reagents.trans_to(J, J.chem_volume) - del(W) + qdel(W) user.put_in_active_hand(J) else if(seed.kitchen_tag == "ambrosiadeus") var/obj/item/clothing/mask/cigarette/joint/deus/J = new /obj/item/clothing/mask/cigarette/joint/deus(user.loc) J.chem_volume = src.reagents.total_volume src.reagents.trans_to(J, J.chem_volume) - del(W) + qdel(W) user.put_in_active_hand(J) else if(seed.kitchen_tag == "tobacco" || seed.kitchen_tag == "stobacco") var/obj/item/clothing/mask/cigarette/handroll/J = new /obj/item/clothing/mask/cigarette/handroll(user.loc) J.chem_volume = src.reagents.total_volume src.reagents.trans_to(J, J.chem_volume) - del(W) + qdel(W) user.put_in_active_hand(J) user << "\blue You roll the [src] into a rolling paper." - del(src) + qdel(src) else user << "\red You can't roll a smokable from the [src]." @@ -333,7 +333,7 @@ if(user) user << "\The [src] has fallen to bits." //user.drop_from_inventory(src) - del(src) + qdel(src) add_fingerprint(user) return 1 @@ -353,7 +353,7 @@ user.visible_message("\The [user] squashes \the [src]!") seed.thrown_at(src,user) sleep(-1) - if(src) del(src) + if(src) qdel(src) return if(seed.kitchen_tag == "grass") @@ -368,14 +368,14 @@ continue NG.attackby(G, user) user << "You add the newly-formed grass to the stack. It now contains [G.amount] tiles." - del(src) + qdel(src) return if(seed.get_trait(TRAIT_SPREAD) > 0) user << "You plant the [src.name]." new /obj/machinery/portable_atmospherics/hydroponics/soil/invisible(get_turf(user),src.seed) new /obj/effect/plant(get_turf(user), src.seed) - del(src) + qdel(src) return /* diff --git a/code/modules/hydroponics/grown_inedible.dm b/code/modules/hydroponics/grown_inedible.dm index 8c23033a586..a5497298947 100644 --- a/code/modules/hydroponics/grown_inedible.dm +++ b/code/modules/hydroponics/grown_inedible.dm @@ -71,7 +71,7 @@ if(istype(W, /obj/item/weapon/circular_saw) || istype(W, /obj/item/weapon/hatchet) || istype(W, /obj/item/weapon/kitchen/utensil/knife) || istype(W, /obj/item/weapon/kitchenknife) || istype(W, /obj/item/weapon/kitchenknife/ritual)) user << "You use [W] to fashion a pipe out of the corn cob!" new /obj/item/clothing/mask/cigarette/pipe/cobpipe (user.loc) - del(src) + qdel(src) return /obj/item/weapon/bananapeel diff --git a/code/modules/hydroponics/seed.dm b/code/modules/hydroponics/seed.dm index 2a4cade7c0c..5d90f365029 100644 --- a/code/modules/hydroponics/seed.dm +++ b/code/modules/hydroponics/seed.dm @@ -103,7 +103,7 @@ if(!istype(target)) if(istype(target, /mob/living/simple_animal/mouse) || istype(target, /mob/living/simple_animal/lizard)) new /obj/effect/decal/cleanable/blood/splatter(get_turf(target)) - del(target) + qdel(target) return @@ -228,7 +228,7 @@ apply_special_effect(M) splatter(T,thrown) origin_turf.visible_message("The [thrown.name] explodes!") - del(thrown) + qdel(thrown) return if(istype(target,/mob/living)) @@ -241,7 +241,7 @@ if(get_trait(TRAIT_JUICY) && splatted) splatter(origin_turf,thrown) origin_turf.visible_message("The [thrown.name] splatters against [target]!") - del(thrown) + qdel(thrown) /datum/seed/proc/handle_environment(var/turf/current_turf, var/datum/gas_mixture/environment, var/light_supplied, var/obj/item/weapon/tank/holding, var/check_only) diff --git a/code/modules/hydroponics/seed_controller.dm b/code/modules/hydroponics/seed_controller.dm index 6a329b9d974..9a0db47790c 100644 --- a/code/modules/hydroponics/seed_controller.dm +++ b/code/modules/hydroponics/seed_controller.dm @@ -37,7 +37,7 @@ var/global/datum/controller/plants/plant_controller // Set in New(). /datum/controller/plants/New() if(plant_controller && plant_controller != src) log_debug("Rebuilding plant controller.") - del(plant_controller) + qdel(plant_controller) plant_controller = src setup() process() @@ -136,7 +136,7 @@ var/global/datum/controller/plants/plant_controller // Set in New(). break var/obj/effect/plant/plant = pick(plant_queue) plant_queue -= plant - if(!istype(plant)) + if(!istype(plant) || !isnull(plant.gcDestroyed)) continue plant.process() processed++ diff --git a/code/modules/hydroponics/seed_machines.dm b/code/modules/hydroponics/seed_machines.dm index cce982372c0..550a1935a02 100644 --- a/code/modules/hydroponics/seed_machines.dm +++ b/code/modules/hydroponics/seed_machines.dm @@ -224,7 +224,7 @@ genetics = seed.seed degradation = 0 - del(seed) + qdel(seed) seed = null if(href_list["get_gene"]) diff --git a/code/modules/hydroponics/seed_storage.dm b/code/modules/hydroponics/seed_storage.dm index e64ad1e8131..9b3797af6b5 100644 --- a/code/modules/hydroponics/seed_storage.dm +++ b/code/modules/hydroponics/seed_storage.dm @@ -188,16 +188,16 @@ N.seeds -= O if (N.amount <= 0 || N.seeds.len <= 0) piles -= N - del(N) + qdel(N) O.loc = src.loc else piles -= N - del(N) + qdel(N) else if (task == "purge") for (var/obj/O in N.seeds) - del(O) + qdel(O) piles -= N - del(N) + qdel(N) break updateUsrDialog() diff --git a/code/modules/hydroponics/spreading/spreading.dm b/code/modules/hydroponics/spreading/spreading.dm index b99e2ccf6b8..d4ed8c17e81 100644 --- a/code/modules/hydroponics/spreading/spreading.dm +++ b/code/modules/hydroponics/spreading/spreading.dm @@ -32,13 +32,13 @@ color = DEAD_PLANT_COLOUR /obj/effect/dead_plant/attack_hand() - del(src) + qdel(src) /obj/effect/dead_plant/attackby() ..() for(var/obj/effect/plant/neighbor in range(1)) neighbor.update_neighbors() - del(src) + qdel(src) /obj/effect/plant name = "plant" @@ -70,12 +70,12 @@ var/mob/living/buckled_mob = null var/movable = 0 -/obj/effect/plant/Del() +/obj/effect/plant/Destroy() if(plant_controller) plant_controller.remove_plant(src) for(var/obj/effect/plant/neighbor in range(1,src)) plant_controller.add_plant(neighbor) - ..() + return ..() /obj/effect/plant/single spread_chance = 0 @@ -91,14 +91,14 @@ sleep(250) // ugly hack, should mean roundstart plants are fine. if(!plant_controller) world << "Plant controller does not exist and [src] requires it. Aborting." - del(src) + qdel(src) return if(!istype(newseed)) newseed = plant_controller.seeds[DEFAULT_SEED] seed = newseed if(!seed) - del(src) + qdel(src) return name = seed.display_name diff --git a/code/modules/hydroponics/spreading/spreading_growth.dm b/code/modules/hydroponics/spreading/spreading_growth.dm index c360ba5c0e1..b86c3966aa8 100644 --- a/code/modules/hydroponics/spreading/spreading_growth.dm +++ b/code/modules/hydroponics/spreading/spreading_growth.dm @@ -104,6 +104,6 @@ for(var/obj/effect/plant/neighbor in check_turf.contents) neighbor.neighbors |= check_turf plant_controller.add_plant(neighbor) - spawn(1) if(src) del(src) + spawn(1) if(src) qdel(src) #undef NEIGHBOR_REFRESH_TIME \ No newline at end of file diff --git a/code/modules/hydroponics/trays/tray.dm b/code/modules/hydroponics/trays/tray.dm index b142a1fa9b1..c7c6b2201f0 100644 --- a/code/modules/hydroponics/trays/tray.dm +++ b/code/modules/hydroponics/trays/tray.dm @@ -574,7 +574,7 @@ weedlevel -= P.weed_kill_str user << "You spray [src] with [O]." playsound(loc, 'sound/effects/spray3.ogg', 50, 1, -6) - del(O) + qdel(O) check_level_sanity() update_icon() @@ -587,7 +587,7 @@ weedlevel -= W.weed_kill_str user << "You spray [src] with [O]." playsound(loc, 'sound/effects/spray3.ogg', 50, 1, -6) - del(O) + qdel(O) check_level_sanity() update_icon() @@ -682,7 +682,7 @@ if(!S.seed) user << "The packet seems to be empty. You throw it away." - del(O) + qdel(O) return user << "You plant the [S.seed.seed_name] [S.seed.seed_noun]." @@ -693,7 +693,7 @@ health = (istype(S, /obj/item/seeds/cutting) ? round(seed.get_trait(TRAIT_ENDURANCE)/rand(2,5)) : seed.get_trait(TRAIT_ENDURANCE)) lastcycle = world.time - del(O) + qdel(O) check_health() @@ -735,13 +735,13 @@ user << "[src] is already occupied!" else user.drop_item() - del(O) + qdel(O) var/obj/machinery/apiary/A = new(src.loc) A.icon = src.icon A.icon_state = src.icon_state A.hydrotray_type = src.type - del(src) + qdel(src) else if ((istype(O, /obj/item/weapon/tank) && !( src.destroyed ))) if (src.holding) user << "\blue There is alreadu a tank loaded into the [src]." diff --git a/code/modules/hydroponics/trays/tray_apiary.dm b/code/modules/hydroponics/trays/tray_apiary.dm index f2098e7481c..4ac67613a6c 100644 --- a/code/modules/hydroponics/trays/tray_apiary.dm +++ b/code/modules/hydroponics/trays/tray_apiary.dm @@ -51,7 +51,7 @@ health = 10 nutrilevel += 10 user.drop_item() - del(O) + qdel(O) user << "\blue You carefully insert the queen into [src], she gets busy making a hive." bees_in_hive = 0 else if(istype(O, /obj/item/beezeez)) @@ -62,7 +62,7 @@ user << "\blue You insert [O] into [src]. A relaxed humming appears to pick up." else user << "\blue You insert [O] into [src]. Now it just needs some bees." - del(O) + qdel(O) else if(istype(O, /obj/item/weapon/minihoe)) if(health > 0) user << "\red You begin to dislodge the apiary from the tray, the bees don't like that." @@ -73,7 +73,7 @@ new hydrotray_type(src.loc) new /obj/item/apiary(src.loc) user << "\red You dislodge the apiary from the tray." - del(src) + qdel(src) else if(istype(O, /obj/item/weapon/bee_net)) var/obj/item/weapon/bee_net/N = O if(N.caught_bees > 0) @@ -115,11 +115,11 @@ if(swarming <= 0) for(var/mob/living/simple_animal/bee/B in src.loc) bees_in_hive += B.strength - del(B) + qdel(B) else if(bees_in_hive < 10) for(var/mob/living/simple_animal/bee/B in src.loc) bees_in_hive += B.strength - del(B) + qdel(B) if(world.time > (lastcycle + cycledelay)) lastcycle = world.time @@ -199,7 +199,7 @@ B.target_turf = get_turf(src) B.strength -= 1 if(B.strength <= 0) - del(B) + qdel(B) else if(B.strength <= 5) B.icon_state = "bees[B.strength]" bees_in_hive = 0 diff --git a/code/modules/hydroponics/trays/tray_soil.dm b/code/modules/hydroponics/trays/tray_soil.dm index ff47f069707..d8c207c1c67 100644 --- a/code/modules/hydroponics/trays/tray_soil.dm +++ b/code/modules/hydroponics/trays/tray_soil.dm @@ -44,27 +44,27 @@ /obj/machinery/portable_atmospherics/hydroponics/soil/invisible/remove_dead() ..() - del(src) + qdel(src) /obj/machinery/portable_atmospherics/hydroponics/soil/invisible/harvest() ..() if(!seed) // Repeat harvests are a thing. - del(src) + qdel(src) /obj/machinery/portable_atmospherics/hydroponics/soil/invisible/die() - del(src) + qdel(src) /obj/machinery/portable_atmospherics/hydroponics/soil/invisible/process() if(!seed) - del(src) + qdel(src) return else if(name=="plant") name = seed.display_name ..() -/obj/machinery/portable_atmospherics/hydroponics/soil/invisible/Del() +/obj/machinery/portable_atmospherics/hydroponics/soil/invisible/Destroy() // Check if we're masking a decal that needs to be visible again. for(var/obj/effect/plant/plant in get_turf(src)) if(plant.invisibility == INVISIBILITY_MAXIMUM) plant.invisibility = initial(plant.invisibility) - ..() + return ..() diff --git a/code/modules/mining/drilling/distribution.dm b/code/modules/mining/drilling/distribution.dm index 629d9ad234d..707973fd386 100644 --- a/code/modules/mining/drilling/distribution.dm +++ b/code/modules/mining/drilling/distribution.dm @@ -37,7 +37,7 @@ Rare minerals: diamond Deep minerals: - phoron + plasma xerxium (adamantine) fulgurium (mythril) */ @@ -178,7 +178,7 @@ Deep minerals: target_turf.resources["silver"] = rand(RESOURCE_LOW_MIN,RESOURCE_LOW_MAX) target_turf.resources["uranium"] = rand(RESOURCE_LOW_MIN,RESOURCE_LOW_MAX) target_turf.resources["diamond"] = 0 - target_turf.resources["phoron"] = 0 + target_turf.resources["plasma"] = 0 target_turf.resources["osmium"] = 0 target_turf.resources["hydrogen"] = 0 if(100 to 124) @@ -187,7 +187,7 @@ Deep minerals: target_turf.resources["silver"] = rand(RESOURCE_MID_MIN,RESOURCE_MID_MAX) target_turf.resources["uranium"] = rand(RESOURCE_MID_MIN,RESOURCE_MID_MAX) target_turf.resources["diamond"] = 0 - target_turf.resources["phoron"] = rand(RESOURCE_MID_MIN,RESOURCE_MID_MAX) + target_turf.resources["plasma"] = rand(RESOURCE_MID_MIN,RESOURCE_MID_MAX) target_turf.resources["osmium"] = rand(RESOURCE_MID_MIN,RESOURCE_MID_MAX) target_turf.resources["hydrogen"] = 0 if(125 to 255) @@ -196,7 +196,7 @@ Deep minerals: target_turf.resources["silver"] = 0 target_turf.resources["uranium"] = rand(RESOURCE_LOW_MIN,RESOURCE_LOW_MAX) target_turf.resources["diamond"] = rand(RESOURCE_LOW_MIN,RESOURCE_LOW_MAX) - target_turf.resources["phoron"] = rand(RESOURCE_HIGH_MIN,RESOURCE_HIGH_MAX) + target_turf.resources["plasma"] = rand(RESOURCE_HIGH_MIN,RESOURCE_HIGH_MAX) target_turf.resources["osmium"] = rand(RESOURCE_HIGH_MIN,RESOURCE_HIGH_MAX) target_turf.resources["hydrogen"] = rand(RESOURCE_MID_MIN,RESOURCE_MID_MAX) diff --git a/code/modules/mining/drilling/drill.dm b/code/modules/mining/drilling/drill.dm index 7732e622cbf..09888cdb3fa 100644 --- a/code/modules/mining/drilling/drill.dm +++ b/code/modules/mining/drilling/drill.dm @@ -22,7 +22,7 @@ "gold" = /obj/item/weapon/ore/gold, "silver" = /obj/item/weapon/ore/silver, "diamond" = /obj/item/weapon/ore/diamond, - "phoron" = /obj/item/weapon/ore/plasma, + "plasma" = /obj/item/weapon/ore/plasma, "osmium" = /obj/item/weapon/ore/osmium, "hydrogen" = /obj/item/weapon/ore/hydrogen, "silicates" = /obj/item/weapon/ore/glass, diff --git a/code/modules/mining/drilling/scanner.dm b/code/modules/mining/drilling/scanner.dm index 89c77c97502..56cff6e71e8 100644 --- a/code/modules/mining/drilling/scanner.dm +++ b/code/modules/mining/drilling/scanner.dm @@ -36,7 +36,7 @@ if("silicates" || "carbonaceous rock" || "iron") ore_type = "surface minerals" if("gold" || "silver" || "diamond") ore_type = "precious metals" if("uranium") ore_type = "nuclear fuel" - if("phoron" || "osmium" || "hydrogen") ore_type = "exotic matter" + if("plasma" || "osmium" || "hydrogen") ore_type = "exotic matter" if(ore_type) metals[ore_type] += T.resources[metal] diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm index dccf5715bf9..6f37a1279b3 100644 --- a/code/modules/mining/machine_processing.dm +++ b/code/modules/mining/machine_processing.dm @@ -99,7 +99,7 @@ /obj/machinery/mineral/processing_unit - name = "material processor" //This isn't actually a goddamn furnace, we're in space and it's processing platinum and flammable phoron... + name = "material processor" //This isn't actually a goddamn furnace, we're in space and it's processing platinum and flammable plasma... icon = 'icons/obj/machines/mining_machines.dmi' icon_state = "furnace" density = 1 diff --git a/code/modules/mob/holder.dm b/code/modules/mob/holder.dm index a6c0ce6614d..a441cfcf5b6 100644 --- a/code/modules/mob/holder.dm +++ b/code/modules/mob/holder.dm @@ -24,7 +24,7 @@ mob_container.forceMove(get_turf(src)) M.reset_view() - del(src) + qdel(src) /obj/item/weapon/holder/attackby(obj/item/weapon/W as obj, mob/user as mob, params) for(var/mob/M in src.contents) @@ -34,6 +34,23 @@ for(var/mob/living/M in contents) M.show_message(message,m_type) +//Mob procs and vars for scooping up +/mob/living/var/holder_type + +/mob/living/proc/get_scooped(var/mob/living/carbon/grabber) + if(!holder_type) return + + var/obj/item/weapon/holder/H = new holder_type(loc) + src.forceMove(H) + H.name = name + if(desc) H.desc = desc + H.attack_hand(grabber) + + grabber << "You scoop up \the [src]." + src << "\The [grabber] scoops you up." + grabber.status_flags |= PASSEMOTES + return + //Mob specific holders. /obj/item/weapon/holder/diona diff --git a/code/modules/mob/living/carbon/human/species/apollo.dm b/code/modules/mob/living/carbon/human/species/apollo.dm index 3acc2e08a90..1528307d566 100644 --- a/code/modules/mob/living/carbon/human/species/apollo.dm +++ b/code/modules/mob/living/carbon/human/species/apollo.dm @@ -108,6 +108,6 @@ /datum/species/nucleation/handle_death(var/mob/living/carbon/human/H) var/turf/T = get_turf(H) H.visible_message("\red[H]'s body explodes, leaving behind a pile of microscopic crystals!") - supermatter_delamination(T, 2, 0, 0) // Create a small supermatter burst upon death - new /obj/item/weapon/shard/supermatter( T ) + explosion(T, 0, 0, 2, 2) // Create a small explosion burst upon death +// new /obj/item/weapon/shard/supermatter( T ) del(H) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/primitive/dionaold.dm b/code/modules/mob/living/carbon/primitive/dionaold.dm index 47f9ce3981f..a14fd3bdb50 100644 --- a/code/modules/mob/living/carbon/primitive/dionaold.dm +++ b/code/modules/mob/living/carbon/primitive/dionaold.dm @@ -13,6 +13,7 @@ var/ready_evolve = 0 ventcrawler = 1 var/environment_smash = 0 // This is a sloppy way to solve attack_animal runtimes. Stupid nymphs... + holder_type = /obj/item/weapon/holder/diona /mob/living/carbon/primitive/diona/New() @@ -30,16 +31,9 @@ src << "You feel your being twine with that of [M] as you merge with its biomass." src.verbs += /mob/living/carbon/primitive/diona/proc/split src.verbs -= /mob/living/carbon/primitive/diona/proc/merge - src.loc = M + src.forceMove(M) else - var/obj/item/weapon/holder/diona/D = new(loc) - src.loc = D - D.name = loc.name - D.attack_hand(M) - M << "You scoop up [src]." - src << "[M] scoops you up." - M.status_flags |= PASSEMOTES - return + get_scooped(M) ..() diff --git a/code/modules/mob/living/silicon/robot/drone/drone.dm b/code/modules/mob/living/silicon/robot/drone/drone.dm index 12c5548f51c..524268be43e 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone.dm @@ -25,6 +25,8 @@ //Used for self-mailing. var/mail_destination = 0 + + holder_type = /obj/item/weapon/holder/drone // var/sprite[0] diff --git a/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm b/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm index 8ed8db27fcf..93a5b2c46f2 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm @@ -45,14 +45,7 @@ //Actual picking-up event. /mob/living/silicon/robot/drone/attack_hand(mob/living/carbon/human/M as mob) - if(M.a_intent == "help") - var/obj/item/weapon/holder/drone/D = new(loc) - src.loc = D - D.attack_hand(M) - M << "You scoop up [src]." - src << "[M] scoops you up." - M.status_flags |= PASSEMOTES - return + get_scooped(M) ..() \ No newline at end of file diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 7973f3b6277..52d82c47d0a 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -470,7 +470,7 @@ /obj/item/weapon/paper/Toxin name = "Chemical Information" - info = "Known Onboard Toxins:
\n\tGrade A Semi-Liquid Phoron:
\n\t\tHighly poisonous. You cannot sustain concentrations above 15 units.
\n\t\tA gas mask fails to filter phoron after 50 units.
\n\t\tWill attempt to diffuse like a gas.
\n\t\tFiltered by scrubbers.
\n\t\tThere is a bottled version which is very different
\n\t\t\tfrom the version found in canisters!
\n
\n\t\tWARNING: Highly Flammable. Keep away from heat sources
\n\t\texcept in a enclosed fire area!
\n\t\tWARNING: It is a crime to use this without authorization.
\nKnown Onboard Anti-Toxin:
\n\tAnti-Toxin Type 01P: Works against Grade A Phoron.
\n\t\tBest if injected directly into bloodstream.
\n\t\tA full injection is in every regular Med-Kit.
\n\t\tSpecial toxin Kits hold around 7.
\n
\nKnown Onboard Chemicals (other):
\n\tRejuvenation T#001:
\n\t\tEven 1 unit injected directly into the bloodstream
\n\t\t\twill cure paralysis and sleep phoron.
\n\t\tIf administered to a dying patient it will prevent
\n\t\t\tfurther damage for about units*3 seconds.
\n\t\t\tit will not cure them or allow them to be cured.
\n\t\tIt can be administeredd to a non-dying patient
\n\t\t\tbut the chemicals disappear just as fast.
\n\tSoporific T#054:
\n\t\t5 units wilkl induce precisely 1 minute of sleep.
\n\t\t\tThe effect are cumulative.
\n\t\tWARNING: It is a crime to use this without authorization" + info = "Known Onboard Toxins:
\n\tGrade A Semi-Liquid Plasma:
\n\t\tHighly poisonous. You cannot sustain concentrations above 15 units.
\n\t\tA gas mask fails to filter plasma after 50 units.
\n\t\tWill attempt to diffuse like a gas.
\n\t\tFiltered by scrubbers.
\n\t\tThere is a bottled version which is very different
\n\t\t\tfrom the version found in canisters!
\n
\n\t\tWARNING: Highly Flammable. Keep away from heat sources
\n\t\texcept in a enclosed fire area!
\n\t\tWARNING: It is a crime to use this without authorization.
\nKnown Onboard Anti-Toxin:
\n\tAnti-Toxin Type 01P: Works against Grade A Plasma.
\n\t\tBest if injected directly into bloodstream.
\n\t\tA full injection is in every regular Med-Kit.
\n\t\tSpecial toxin Kits hold around 7.
\n
\nKnown Onboard Chemicals (other):
\n\tRejuvenation T#001:
\n\t\tEven 1 unit injected directly into the bloodstream
\n\t\t\twill cure paralysis and sleep plasma.
\n\t\tIf administered to a dying patient it will prevent
\n\t\t\tfurther damage for about units*3 seconds.
\n\t\t\tit will not cure them or allow them to be cured.
\n\t\tIt can be administeredd to a non-dying patient
\n\t\t\tbut the chemicals disappear just as fast.
\n\tSoporific T#054:
\n\t\t5 units wilkl induce precisely 1 minute of sleep.
\n\t\t\tThe effect are cumulative.
\n\t\tWARNING: It is a crime to use this without authorization" /obj/item/weapon/paper/courtroom name = "A Crash Course in Legal SOP on SS13" @@ -491,7 +491,7 @@ /obj/item/weapon/paper/jobs name = "Job Information" - info = "Information on all formal jobs that can be assigned on Space Station 13 can be found on this document.
\nThe data will be in the following form.
\nGenerally lower ranking positions come first in this list.
\n
\nJob Name general access>lab access-engine access-systems access (atmosphere control)
\n\tJob Description
\nJob Duties (in no particular order)
\nTips (where applicable)
\n
\nResearch Assistant 1>1-0-0
\n\tThis is probably the lowest level position. Anyone who enters the space station after the initial job\nassignment will automatically receive this position. Access with this is restricted. Head of Personnel should\nappropriate the correct level of assistance.
\n1. Assist the researchers.
\n2. Clean up the labs.
\n3. Prepare materials.
\n
\nStaff Assistant 2>0-0-0
\n\tThis position assists the security officer in his duties. The staff assisstants should primarily br\npatrolling the ship waiting until they are needed to maintain ship safety.\n(Addendum: Updated/Elevated Security Protocols admit issuing of low level weapons to security personnel)
\n1. Patrol ship/Guard key areas
\n2. Assist security officer
\n3. Perform other security duties.
\n
\nTechnical Assistant 1>0-0-1
\n\tThis is yet another low level position. The technical assistant helps the engineer and the statian\ntechnician with the upkeep and maintenance of the station. This job is very important because it usually\ngets to be a heavy workload on station technician and these helpers will alleviate that.
\n1. Assist Station technician and Engineers.
\n2. Perform general maintenance of station.
\n3. Prepare materials.
\n
\nMedical Assistant 1>1-0-0
\n\tThis is the fourth position yet it is slightly less common. This position doesn't have much power\noutside of the med bay. Consider this position like a nurse who helps to upkeep medical records and the\nmaterials (filling syringes and checking vitals)
\n1. Assist the medical personnel.
\n2. Update medical files.
\n3. Prepare materials for medical operations.
\n
\nResearch Technician 2>3-0-0
\n\tThis job is primarily a step up from research assistant. These people generally do not get their own lab\nbut are more hands on in the experimentation process. At this level they are permitted to work as consultants to\nthe others formally.
\n1. Inform superiors of research.
\n2. Perform research alongside of official researchers.
\n
\nDetective 3>2-0-0
\n\tThis job is in most cases slightly boring at best. Their sole duty is to\nperform investigations of crine scenes and analysis of the crime scene. This\nalleviates SOME of the burden from the security officer. This person's duty\nis to draw conclusions as to what happened and testify in court. Said person\nalso should stroe the evidence ly.
\n1. Perform crime-scene investigations/draw conclusions.
\n2. Store and catalogue evidence properly.
\n3. Testify to superiors/inquieries on findings.
\n
\nStation Technician 2>0-2-3
\n\tPeople assigned to this position must work to make sure all the systems aboard Space Station 13 are operable.\nThey should primarily work in the computer lab and repairing faulty equipment. They should work with the\natmospheric technician.
\n1. Maintain SS13 systems.
\n2. Repair equipment.
\n
\nAtmospheric Technician 3>0-0-4
\n\tThese people should primarily work in the atmospheric control center and lab. They have the very important\njob of maintaining the delicate atmosphere on SS13.
\n1. Maintain atmosphere on SS13
\n2. Research atmospheres on the space station. (safely please!)
\n
\nEngineer 2>1-3-0
\n\tPeople working as this should generally have detailed knowledge as to how the propulsion systems on SS13\nwork. They are one of the few classes that have unrestricted access to the engine area.
\n1. Upkeep the engine.
\n2. Prevent fires in the engine.
\n3. Maintain a safe orbit.
\n
\nMedical Researcher 2>5-0-0
\n\tThis position may need a little clarification. Their duty is to make sure that all experiments are safe and\nto conduct experiments that may help to improve the station. They will be generally idle until a new laboratory\nis constructed.
\n1. Make sure the station is kept safe.
\n2. Research medical properties of materials studied of Space Station 13.
\n
\nScientist 2>5-0-0
\n\tThese people study the properties, particularly the toxic properties, of materials handled on SS13.\nTechnically they can also be called Phoron Technicians as phoron is the material they routinly handle.
\n1. Research phoron
\n2. Make sure all phoron is properly handled.
\n
\nMedical Doctor (Officer) 2>0-0-0
\n\tPeople working this job should primarily stay in the medical area. They should make sure everyone goes to\nthe medical bay for treatment and examination. Also they should make sure that medical supplies are kept in\norder.
\n1. Heal wounded people.
\n2. Perform examinations of all personnel.
\n3. Moniter usage of medical equipment.
\n
\nSecurity Officer 3>0-0-0
\n\tThese people should attempt to keep the peace inside the station and make sure the station is kept safe. One\nside duty is to assist in repairing the station. They also work like general maintenance personnel. They are not\ngiven a weapon and must use their own resources.
\n(Addendum: Updated/Elevated Security Protocols admit issuing of weapons to security personnel)
\n1. Maintain order.
\n2. Assist others.
\n3. Repair structural problems.
\n
\nHead of Security 4>5-2-2
\n\tPeople assigned as Head of Security should issue orders to the security staff. They should\nalso carefully moderate the usage of all security equipment. All security matters should be reported to this person.
\n1. Oversee security.
\n2. Assign patrol duties.
\n3. Protect the station and staff.
\n
\nHead of Personnel 4>4-2-2
\n\tPeople assigned as head of personnel will find themselves moderating all actions done by personnel. \nAlso they have the ability to assign jobs and access levels.
\n1. Assign duties.
\n2. Moderate personnel.
\n3. Moderate research.
\n
\nCaptain 5>5-5-5 (unrestricted station wide access)
\n\tThis is the highest position youi can aquire on Space Station 13. They are allowed anywhere inside the\nspace station and therefore should protect their ID card. They also have the ability to assign positions\nand access levels. They should not abuse their power.
\n1. Assign all positions on SS13
\n2. Inspect the station for any problems.
\n3. Perform administrative duties.
\n" + info = "Information on all formal jobs that can be assigned on Space Station 13 can be found on this document.
\nThe data will be in the following form.
\nGenerally lower ranking positions come first in this list.
\n
\nJob Name general access>lab access-engine access-systems access (atmosphere control)
\n\tJob Description
\nJob Duties (in no particular order)
\nTips (where applicable)
\n
\nResearch Assistant 1>1-0-0
\n\tThis is probably the lowest level position. Anyone who enters the space station after the initial job\nassignment will automatically receive this position. Access with this is restricted. Head of Personnel should\nappropriate the correct level of assistance.
\n1. Assist the researchers.
\n2. Clean up the labs.
\n3. Prepare materials.
\n
\nStaff Assistant 2>0-0-0
\n\tThis position assists the security officer in his duties. The staff assisstants should primarily br\npatrolling the ship waiting until they are needed to maintain ship safety.\n(Addendum: Updated/Elevated Security Protocols admit issuing of low level weapons to security personnel)
\n1. Patrol ship/Guard key areas
\n2. Assist security officer
\n3. Perform other security duties.
\n
\nTechnical Assistant 1>0-0-1
\n\tThis is yet another low level position. The technical assistant helps the engineer and the statian\ntechnician with the upkeep and maintenance of the station. This job is very important because it usually\ngets to be a heavy workload on station technician and these helpers will alleviate that.
\n1. Assist Station technician and Engineers.
\n2. Perform general maintenance of station.
\n3. Prepare materials.
\n
\nMedical Assistant 1>1-0-0
\n\tThis is the fourth position yet it is slightly less common. This position doesn't have much power\noutside of the med bay. Consider this position like a nurse who helps to upkeep medical records and the\nmaterials (filling syringes and checking vitals)
\n1. Assist the medical personnel.
\n2. Update medical files.
\n3. Prepare materials for medical operations.
\n
\nResearch Technician 2>3-0-0
\n\tThis job is primarily a step up from research assistant. These people generally do not get their own lab\nbut are more hands on in the experimentation process. At this level they are permitted to work as consultants to\nthe others formally.
\n1. Inform superiors of research.
\n2. Perform research alongside of official researchers.
\n
\nDetective 3>2-0-0
\n\tThis job is in most cases slightly boring at best. Their sole duty is to\nperform investigations of crine scenes and analysis of the crime scene. This\nalleviates SOME of the burden from the security officer. This person's duty\nis to draw conclusions as to what happened and testify in court. Said person\nalso should stroe the evidence ly.
\n1. Perform crime-scene investigations/draw conclusions.
\n2. Store and catalogue evidence properly.
\n3. Testify to superiors/inquieries on findings.
\n
\nStation Technician 2>0-2-3
\n\tPeople assigned to this position must work to make sure all the systems aboard Space Station 13 are operable.\nThey should primarily work in the computer lab and repairing faulty equipment. They should work with the\natmospheric technician.
\n1. Maintain SS13 systems.
\n2. Repair equipment.
\n
\nAtmospheric Technician 3>0-0-4
\n\tThese people should primarily work in the atmospheric control center and lab. They have the very important\njob of maintaining the delicate atmosphere on SS13.
\n1. Maintain atmosphere on SS13
\n2. Research atmospheres on the space station. (safely please!)
\n
\nEngineer 2>1-3-0
\n\tPeople working as this should generally have detailed knowledge as to how the propulsion systems on SS13\nwork. They are one of the few classes that have unrestricted access to the engine area.
\n1. Upkeep the engine.
\n2. Prevent fires in the engine.
\n3. Maintain a safe orbit.
\n
\nMedical Researcher 2>5-0-0
\n\tThis position may need a little clarification. Their duty is to make sure that all experiments are safe and\nto conduct experiments that may help to improve the station. They will be generally idle until a new laboratory\nis constructed.
\n1. Make sure the station is kept safe.
\n2. Research medical properties of materials studied of Space Station 13.
\n
\nScientist 2>5-0-0
\n\tThese people study the properties, particularly the toxic properties, of materials handled on SS13.\nTechnically they can also be called Plasma Technicians as plasma is the material they routinly handle.
\n1. Research plasma
\n2. Make sure all plasma is properly handled.
\n
\nMedical Doctor (Officer) 2>0-0-0
\n\tPeople working this job should primarily stay in the medical area. They should make sure everyone goes to\nthe medical bay for treatment and examination. Also they should make sure that medical supplies are kept in\norder.
\n1. Heal wounded people.
\n2. Perform examinations of all personnel.
\n3. Moniter usage of medical equipment.
\n
\nSecurity Officer 3>0-0-0
\n\tThese people should attempt to keep the peace inside the station and make sure the station is kept safe. One\nside duty is to assist in repairing the station. They also work like general maintenance personnel. They are not\ngiven a weapon and must use their own resources.
\n(Addendum: Updated/Elevated Security Protocols admit issuing of weapons to security personnel)
\n1. Maintain order.
\n2. Assist others.
\n3. Repair structural problems.
\n
\nHead of Security 4>5-2-2
\n\tPeople assigned as Head of Security should issue orders to the security staff. They should\nalso carefully moderate the usage of all security equipment. All security matters should be reported to this person.
\n1. Oversee security.
\n2. Assign patrol duties.
\n3. Protect the station and staff.
\n
\nHead of Personnel 4>4-2-2
\n\tPeople assigned as head of personnel will find themselves moderating all actions done by personnel. \nAlso they have the ability to assign jobs and access levels.
\n1. Assign duties.
\n2. Moderate personnel.
\n3. Moderate research.
\n
\nCaptain 5>5-5-5 (unrestricted station wide access)
\n\tThis is the highest position youi can aquire on Space Station 13. They are allowed anywhere inside the\nspace station and therefore should protect their ID card. They also have the ability to assign positions\nand access levels. They should not abuse their power.
\n1. Assign all positions on SS13
\n2. Inspect the station for any problems.
\n3. Perform administrative duties.
\n" /obj/item/weapon/paper/photograph name = "photo" @@ -521,7 +521,7 @@ /obj/item/weapon/paper/Toxin name = "Chemical Information" - info = "Known Onboard Toxins:
\n\tGrade A Semi-Liquid Phoron:
\n\t\tHighly poisonous. You cannot sustain concentrations above 15 units.
\n\t\tA gas mask fails to filter phoron after 50 units.
\n\t\tWill attempt to diffuse like a gas.
\n\t\tFiltered by scrubbers.
\n\t\tThere is a bottled version which is very different
\n\t\t\tfrom the version found in canisters!
\n
\n\t\tWARNING: Highly Flammable. Keep away from heat sources
\n\t\texcept in a enclosed fire area!
\n\t\tWARNING: It is a crime to use this without authorization.
\nKnown Onboard Anti-Toxin:
\n\tAnti-Toxin Type 01P: Works against Grade A Phoron.
\n\t\tBest if injected directly into bloodstream.
\n\t\tA full injection is in every regular Med-Kit.
\n\t\tSpecial toxin Kits hold around 7.
\n
\nKnown Onboard Chemicals (other):
\n\tRejuvenation T#001:
\n\t\tEven 1 unit injected directly into the bloodstream
\n\t\t\twill cure paralysis and sleep phoron.
\n\t\tIf administered to a dying patient it will prevent
\n\t\t\tfurther damage for about units*3 seconds.
\n\t\t\tit will not cure them or allow them to be cured.
\n\t\tIt can be administeredd to a non-dying patient
\n\t\t\tbut the chemicals disappear just as fast.
\n\tSoporific T#054:
\n\t\t5 units wilkl induce precisely 1 minute of sleep.
\n\t\t\tThe effect are cumulative.
\n\t\tWARNING: It is a crime to use this without authorization" + info = "Known Onboard Toxins:
\n\tGrade A Semi-Liquid Plasma:
\n\t\tHighly poisonous. You cannot sustain concentrations above 15 units.
\n\t\tA gas mask fails to filter plasma after 50 units.
\n\t\tWill attempt to diffuse like a gas.
\n\t\tFiltered by scrubbers.
\n\t\tThere is a bottled version which is very different
\n\t\t\tfrom the version found in canisters!
\n
\n\t\tWARNING: Highly Flammable. Keep away from heat sources
\n\t\texcept in a enclosed fire area!
\n\t\tWARNING: It is a crime to use this without authorization.
\nKnown Onboard Anti-Toxin:
\n\tAnti-Toxin Type 01P: Works against Grade A Plasma.
\n\t\tBest if injected directly into bloodstream.
\n\t\tA full injection is in every regular Med-Kit.
\n\t\tSpecial toxin Kits hold around 7.
\n
\nKnown Onboard Chemicals (other):
\n\tRejuvenation T#001:
\n\t\tEven 1 unit injected directly into the bloodstream
\n\t\t\twill cure paralysis and sleep plasma.
\n\t\tIf administered to a dying patient it will prevent
\n\t\t\tfurther damage for about units*3 seconds.
\n\t\t\tit will not cure them or allow them to be cured.
\n\t\tIt can be administeredd to a non-dying patient
\n\t\t\tbut the chemicals disappear just as fast.
\n\tSoporific T#054:
\n\t\t5 units wilkl induce precisely 1 minute of sleep.
\n\t\t\tThe effect are cumulative.
\n\t\tWARNING: It is a crime to use this without authorization" /obj/item/weapon/paper/courtroom name = "A Crash Course in Legal SOP on SS13" @@ -542,7 +542,7 @@ /obj/item/weapon/paper/jobs name = "Job Information" - info = "Information on all formal jobs that can be assigned on Space Station 13 can be found on this document.
\nThe data will be in the following form.
\nGenerally lower ranking positions come first in this list.
\n
\nJob Name general access>lab access-engine access-systems access (atmosphere control)
\n\tJob Description
\nJob Duties (in no particular order)
\nTips (where applicable)
\n
\nResearch Assistant 1>1-0-0
\n\tThis is probably the lowest level position. Anyone who enters the space station after the initial job\nassignment will automatically receive this position. Access with this is restricted. Head of Personnel should\nappropriate the correct level of assistance.
\n1. Assist the researchers.
\n2. Clean up the labs.
\n3. Prepare materials.
\n
\nStaff Assistant 2>0-0-0
\n\tThis position assists the security officer in his duties. The staff assisstants should primarily br\npatrolling the ship waiting until they are needed to maintain ship safety.\n(Addendum: Updated/Elevated Security Protocols admit issuing of low level weapons to security personnel)
\n1. Patrol ship/Guard key areas
\n2. Assist security officer
\n3. Perform other security duties.
\n
\nTechnical Assistant 1>0-0-1
\n\tThis is yet another low level position. The technical assistant helps the engineer and the statian\ntechnician with the upkeep and maintenance of the station. This job is very important because it usually\ngets to be a heavy workload on station technician and these helpers will alleviate that.
\n1. Assist Station technician and Engineers.
\n2. Perform general maintenance of station.
\n3. Prepare materials.
\n
\nMedical Assistant 1>1-0-0
\n\tThis is the fourth position yet it is slightly less common. This position doesn't have much power\noutside of the med bay. Consider this position like a nurse who helps to upkeep medical records and the\nmaterials (filling syringes and checking vitals)
\n1. Assist the medical personnel.
\n2. Update medical files.
\n3. Prepare materials for medical operations.
\n
\nResearch Technician 2>3-0-0
\n\tThis job is primarily a step up from research assistant. These people generally do not get their own lab\nbut are more hands on in the experimentation process. At this level they are permitted to work as consultants to\nthe others formally.
\n1. Inform superiors of research.
\n2. Perform research alongside of official researchers.
\n
\nDetective 3>2-0-0
\n\tThis job is in most cases slightly boring at best. Their sole duty is to\nperform investigations of crine scenes and analysis of the crime scene. This\nalleviates SOME of the burden from the security officer. This person's duty\nis to draw conclusions as to what happened and testify in court. Said person\nalso should stroe the evidence ly.
\n1. Perform crime-scene investigations/draw conclusions.
\n2. Store and catalogue evidence properly.
\n3. Testify to superiors/inquieries on findings.
\n
\nStation Technician 2>0-2-3
\n\tPeople assigned to this position must work to make sure all the systems aboard Space Station 13 are operable.\nThey should primarily work in the computer lab and repairing faulty equipment. They should work with the\natmospheric technician.
\n1. Maintain SS13 systems.
\n2. Repair equipment.
\n
\nAtmospheric Technician 3>0-0-4
\n\tThese people should primarily work in the atmospheric control center and lab. They have the very important\njob of maintaining the delicate atmosphere on SS13.
\n1. Maintain atmosphere on SS13
\n2. Research atmospheres on the space station. (safely please!)
\n
\nEngineer 2>1-3-0
\n\tPeople working as this should generally have detailed knowledge as to how the propulsion systems on SS13\nwork. They are one of the few classes that have unrestricted access to the engine area.
\n1. Upkeep the engine.
\n2. Prevent fires in the engine.
\n3. Maintain a safe orbit.
\n
\nMedical Researcher 2>5-0-0
\n\tThis position may need a little clarification. Their duty is to make sure that all experiments are safe and\nto conduct experiments that may help to improve the station. They will be generally idle until a new laboratory\nis constructed.
\n1. Make sure the station is kept safe.
\n2. Research medical properties of materials studied of Space Station 13.
\n
\nScientist 2>5-0-0
\n\tThese people study the properties, particularly the toxic properties, of materials handled on SS13.\nTechnically they can also be called Phoron Technicians as phoron is the material they routinly handle.
\n1. Research phoron
\n2. Make sure all phoron is properly handled.
\n
\nMedical Doctor (Officer) 2>0-0-0
\n\tPeople working this job should primarily stay in the medical area. They should make sure everyone goes to\nthe medical bay for treatment and examination. Also they should make sure that medical supplies are kept in\norder.
\n1. Heal wounded people.
\n2. Perform examinations of all personnel.
\n3. Moniter usage of medical equipment.
\n
\nSecurity Officer 3>0-0-0
\n\tThese people should attempt to keep the peace inside the station and make sure the station is kept safe. One\nside duty is to assist in repairing the station. They also work like general maintenance personnel. They are not\ngiven a weapon and must use their own resources.
\n(Addendum: Updated/Elevated Security Protocols admit issuing of weapons to security personnel)
\n1. Maintain order.
\n2. Assist others.
\n3. Repair structural problems.
\n
\nHead of Security 4>5-2-2
\n\tPeople assigned as Head of Security should issue orders to the security staff. They should\nalso carefully moderate the usage of all security equipment. All security matters should be reported to this person.
\n1. Oversee security.
\n2. Assign patrol duties.
\n3. Protect the station and staff.
\n
\nHead of Personnel 4>4-2-2
\n\tPeople assigned as head of personnel will find themselves moderating all actions done by personnel. \nAlso they have the ability to assign jobs and access levels.
\n1. Assign duties.
\n2. Moderate personnel.
\n3. Moderate research.
\n
\nCaptain 5>5-5-5 (unrestricted station wide access)
\n\tThis is the highest position youi can aquire on Space Station 13. They are allowed anywhere inside the\nspace station and therefore should protect their ID card. They also have the ability to assign positions\nand access levels. They should not abuse their power.
\n1. Assign all positions on SS13
\n2. Inspect the station for any problems.
\n3. Perform administrative duties.
\n" + info = "Information on all formal jobs that can be assigned on Space Station 13 can be found on this document.
\nThe data will be in the following form.
\nGenerally lower ranking positions come first in this list.
\n
\nJob Name general access>lab access-engine access-systems access (atmosphere control)
\n\tJob Description
\nJob Duties (in no particular order)
\nTips (where applicable)
\n
\nResearch Assistant 1>1-0-0
\n\tThis is probably the lowest level position. Anyone who enters the space station after the initial job\nassignment will automatically receive this position. Access with this is restricted. Head of Personnel should\nappropriate the correct level of assistance.
\n1. Assist the researchers.
\n2. Clean up the labs.
\n3. Prepare materials.
\n
\nStaff Assistant 2>0-0-0
\n\tThis position assists the security officer in his duties. The staff assisstants should primarily br\npatrolling the ship waiting until they are needed to maintain ship safety.\n(Addendum: Updated/Elevated Security Protocols admit issuing of low level weapons to security personnel)
\n1. Patrol ship/Guard key areas
\n2. Assist security officer
\n3. Perform other security duties.
\n
\nTechnical Assistant 1>0-0-1
\n\tThis is yet another low level position. The technical assistant helps the engineer and the statian\ntechnician with the upkeep and maintenance of the station. This job is very important because it usually\ngets to be a heavy workload on station technician and these helpers will alleviate that.
\n1. Assist Station technician and Engineers.
\n2. Perform general maintenance of station.
\n3. Prepare materials.
\n
\nMedical Assistant 1>1-0-0
\n\tThis is the fourth position yet it is slightly less common. This position doesn't have much power\noutside of the med bay. Consider this position like a nurse who helps to upkeep medical records and the\nmaterials (filling syringes and checking vitals)
\n1. Assist the medical personnel.
\n2. Update medical files.
\n3. Prepare materials for medical operations.
\n
\nResearch Technician 2>3-0-0
\n\tThis job is primarily a step up from research assistant. These people generally do not get their own lab\nbut are more hands on in the experimentation process. At this level they are permitted to work as consultants to\nthe others formally.
\n1. Inform superiors of research.
\n2. Perform research alongside of official researchers.
\n
\nDetective 3>2-0-0
\n\tThis job is in most cases slightly boring at best. Their sole duty is to\nperform investigations of crine scenes and analysis of the crime scene. This\nalleviates SOME of the burden from the security officer. This person's duty\nis to draw conclusions as to what happened and testify in court. Said person\nalso should stroe the evidence ly.
\n1. Perform crime-scene investigations/draw conclusions.
\n2. Store and catalogue evidence properly.
\n3. Testify to superiors/inquieries on findings.
\n
\nStation Technician 2>0-2-3
\n\tPeople assigned to this position must work to make sure all the systems aboard Space Station 13 are operable.\nThey should primarily work in the computer lab and repairing faulty equipment. They should work with the\natmospheric technician.
\n1. Maintain SS13 systems.
\n2. Repair equipment.
\n
\nAtmospheric Technician 3>0-0-4
\n\tThese people should primarily work in the atmospheric control center and lab. They have the very important\njob of maintaining the delicate atmosphere on SS13.
\n1. Maintain atmosphere on SS13
\n2. Research atmospheres on the space station. (safely please!)
\n
\nEngineer 2>1-3-0
\n\tPeople working as this should generally have detailed knowledge as to how the propulsion systems on SS13\nwork. They are one of the few classes that have unrestricted access to the engine area.
\n1. Upkeep the engine.
\n2. Prevent fires in the engine.
\n3. Maintain a safe orbit.
\n
\nMedical Researcher 2>5-0-0
\n\tThis position may need a little clarification. Their duty is to make sure that all experiments are safe and\nto conduct experiments that may help to improve the station. They will be generally idle until a new laboratory\nis constructed.
\n1. Make sure the station is kept safe.
\n2. Research medical properties of materials studied of Space Station 13.
\n
\nScientist 2>5-0-0
\n\tThese people study the properties, particularly the toxic properties, of materials handled on SS13.\nTechnically they can also be called Plasma Technicians as plasma is the material they routinly handle.
\n1. Research plasma
\n2. Make sure all plasma is properly handled.
\n
\nMedical Doctor (Officer) 2>0-0-0
\n\tPeople working this job should primarily stay in the medical area. They should make sure everyone goes to\nthe medical bay for treatment and examination. Also they should make sure that medical supplies are kept in\norder.
\n1. Heal wounded people.
\n2. Perform examinations of all personnel.
\n3. Moniter usage of medical equipment.
\n
\nSecurity Officer 3>0-0-0
\n\tThese people should attempt to keep the peace inside the station and make sure the station is kept safe. One\nside duty is to assist in repairing the station. They also work like general maintenance personnel. They are not\ngiven a weapon and must use their own resources.
\n(Addendum: Updated/Elevated Security Protocols admit issuing of weapons to security personnel)
\n1. Maintain order.
\n2. Assist others.
\n3. Repair structural problems.
\n
\nHead of Security 4>5-2-2
\n\tPeople assigned as Head of Security should issue orders to the security staff. They should\nalso carefully moderate the usage of all security equipment. All security matters should be reported to this person.
\n1. Oversee security.
\n2. Assign patrol duties.
\n3. Protect the station and staff.
\n
\nHead of Personnel 4>4-2-2
\n\tPeople assigned as head of personnel will find themselves moderating all actions done by personnel. \nAlso they have the ability to assign jobs and access levels.
\n1. Assign duties.
\n2. Moderate personnel.
\n3. Moderate research.
\n
\nCaptain 5>5-5-5 (unrestricted station wide access)
\n\tThis is the highest position youi can aquire on Space Station 13. They are allowed anywhere inside the\nspace station and therefore should protect their ID card. They also have the ability to assign positions\nand access levels. They should not abuse their power.
\n1. Assign all positions on SS13
\n2. Inspect the station for any problems.
\n3. Perform administrative duties.
\n" /obj/item/weapon/paper/photograph name = "photo" diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index 3075773e553..96f943f05f2 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -256,7 +256,7 @@ use_power = 1 set_light(0) - active_power_usage = ((light_range + light_power) * 10) + active_power_usage = brightness_range * 10 if(on != on_gs) on_gs = on @@ -564,11 +564,11 @@ #define LIGHTING_POWER_FACTOR 20 //20W per unit luminosity -/* + /obj/machinery/light/process()//TODO: remove/add this from machines to save on processing as needed ~Carn PRIORITY if(on) - use_power(light_range * LIGHTING_POWER_FACTOR, LIGHT) -*/ + use_power(brightness_range * LIGHTING_POWER_FACTOR, LIGHT) + // called when area power state changes /obj/machinery/light/power_change() diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index efc75eae0c6..a1d86e5f6dd 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -244,7 +244,7 @@ /obj/singularity/proc/consume(var/atom/A) var/gain = A.singularity_act(current_size) src.energy += gain - if(istype(A, /obj/machinery/power/supermatter) && !consumedSupermatter) + if(istype(A, /obj/machinery/power/supermatter_shard) && !consumedSupermatter) desc = "[initial(desc)] It glows fiercely with inner fire." name = "supermatter-charged [initial(name)]" consumedSupermatter = 1 diff --git a/code/game/objects/effects/sm_crystals.dm b/code/modules/power/supermatter/sm_crystals.dm similarity index 100% rename from code/game/objects/effects/sm_crystals.dm rename to code/modules/power/supermatter/sm_crystals.dm diff --git a/code/game/objects/items/weapons/sm_shard.dm b/code/modules/power/supermatter/sm_shard.dm similarity index 100% rename from code/game/objects/items/weapons/sm_shard.dm rename to code/modules/power/supermatter/sm_shard.dm diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm new file mode 100644 index 00000000000..482395a852d --- /dev/null +++ b/code/modules/power/supermatter/supermatter.dm @@ -0,0 +1,299 @@ +//Ported from /vg/station13, which was in turn forked from baystation12; +//Please do not bother them with bugs from this port, however, as it has been modified quite a bit. +//Modifications include removing the world-ending full supermatter variation, and leaving only the shard. + +#define NITROGEN_RETARDATION_FACTOR 2 //Higher == N2 slows reaction more +#define THERMAL_RELEASE_MODIFIER 5 //Higher == less heat released during reaction +#define PLASMA_RELEASE_MODIFIER 750 //Higher == less plasma released by reaction +#define OXYGEN_RELEASE_MODIFIER 325 //Higher == less oxygen released at high temperature/power +#define REACTION_POWER_MODIFIER 0.55 //Higher == more overall power + + +//These would be what you would get at point blank, decreases with distance +#define DETONATION_RADS 200 +#define DETONATION_HALLUCINATION 600 + + +#define WARNING_DELAY 30 //seconds between warnings. + +/obj/machinery/power/supermatter_shard + name = "supermatter shard" + desc = "A strangely translucent and iridescent crystal that looks like it used to be part of a larger structure. You get headaches just from looking at it." + icon = 'icons/obj/supermatter.dmi' + icon_state = "darkmatter_shard" + density = 1 + anchored = 0 + light_range = 4 + + + var/gasefficency = 0.125 + + var/base_icon_state = "darkmatter_shard" + + var/damage = 0 + var/damage_archived = 0 + var/safe_alert = "Crystalline hyperstructure returning to safe operating levels." + var/warning_point = 50 + var/warning_alert = "Danger! Crystal hyperstructure instability!" + var/emergency_point = 500 + var/emergency_alert = "CRYSTAL DELAMINATION IMMINENT." + var/explosion_point = 900 + + var/emergency_issued = 0 + + var/explosion_power = 8 + + var/lastwarning = 0 // Time in 1/10th of seconds since the last sent warning + var/power = 0 + + var/oxygen = 0 // Moving this up here for easier debugging. + + //Temporary values so that we can optimize this + //How much the bullets damage should be multiplied by when it is added to the internal variables + var/config_bullet_energy = 2 + //How much of the power is left after processing is finished? +// var/config_power_reduction_per_tick = 0.5 + //How much hallucination should it produce per unit of power? + var/config_hallucination_power = 0.1 + + var/obj/item/device/radio/radio + + //for logging + var/has_been_powered = 0 + var/has_reached_emergency = 0 + +/obj/machinery/power/supermatter_shard/New() + . = ..() + radio = new(src) + radio.listening = 0 + investigate_log("has been created.", "supermatter") + + +/obj/machinery/power/supermatter_shard/Destroy() + investigate_log("has been destroyed.", "supermatter") + qdel(radio) + . = ..() + +/obj/machinery/power/supermatter_shard/proc/explode() + investigate_log("has exploded.", "supermatter") + explosion(get_turf(src), explosion_power, explosion_power * 2, explosion_power * 3, explosion_power * 4, 1) + qdel(src) + return + +/obj/machinery/power/supermatter_shard/process() + var/turf/L = loc + + if(isnull(L)) // We have a null turf...something is wrong, stop processing this entity. + return PROCESS_KILL + + if(!istype(L)) //We are in a crate or somewhere that isn't turf, if we return to turf resume processing but for now. + return //Yeah just stop. + + if(istype(L, /turf/space)) // Stop processing this stuff if we've been ejected. + return + + if(damage > warning_point) // while the core is still damaged and it's still worth noting its status + if((world.timeofday - lastwarning) / 10 >= WARNING_DELAY) + var/stability = num2text(round((damage / explosion_point) * 100)) + + if(damage > emergency_point) + radio.autosay("[emergency_alert] Instability: [stability]%", src) + lastwarning = world.timeofday + if(!has_reached_emergency) + investigate_log("has reached the emergency point for the first time.", "supermatter") + message_admins("[src] has reached the emergency point (JMP).") + has_reached_emergency = 1 + + else if(damage >= damage_archived) // The damage is still going up + radio.autosay("[warning_alert] Instability: [stability]%", src) + lastwarning = world.timeofday - 150 + + else // Phew, we're safe + radio.autosay("[safe_alert]", src) + lastwarning = world.timeofday + + if(damage > explosion_point) + for(var/mob/living/mob in living_mob_list) + if(istype(mob, /mob/living/carbon/human)) + //Hilariously enough, running into a closet should make you get hit the hardest. + var/mob/living/carbon/human/H = mob + H.hallucination += max(50, min(300, DETONATION_HALLUCINATION * sqrt(1 / (get_dist(mob, src) + 1)) ) ) + var/rads = DETONATION_RADS * sqrt( 1 / (get_dist(mob, src) + 1) ) + mob.apply_effect(rads, IRRADIATE) + + explode() + + //Ok, get the air from the turf + var/datum/gas_mixture/env = L.return_air() + + //Remove gas from surrounding area + var/datum/gas_mixture/removed = env.remove(gasefficency * env.total_moles()) + + if(!removed || !removed.total_moles()) + damage += max((power-1600)/10, 0) + power = min(power, 1600) + return 1 + + damage_archived = damage + damage = max( damage + ( (removed.temperature - 800) / 150 ) , 0 ) + //Ok, 100% oxygen atmosphere = best reaction + //Maxes out at 100% oxygen pressure + oxygen = max(min((removed.oxygen - (removed.nitrogen * NITROGEN_RETARDATION_FACTOR)) / MOLES_CELLSTANDARD, 1), 0) + + var/temp_factor = 50 + + if(oxygen > 0.8) + // with a perfect gas mix, make the power less based on heat + icon_state = "[base_icon_state]_glow" + else + // in normal mode, base the produced energy around the heat + temp_factor = 30 + icon_state = base_icon_state + + power = max( (removed.temperature * temp_factor / T0C) * oxygen + power, 0) //Total laser power plus an overload + + //We've generated power, now let's transfer it to the collectors for storing/usage + transfer_energy() + + var/device_energy = power * REACTION_POWER_MODIFIER + + //To figure out how much temperature to add each tick, consider that at one atmosphere's worth + //of pure oxygen, with all four lasers firing at standard energy and no N2 present, at room temperature + //that the device energy is around 2140. At that stage, we don't want too much heat to be put out + //Since the core is effectively "cold" + + //Also keep in mind we are only adding this temperature to (efficiency)% of the one tile the rock + //is on. An increase of 4*C @ 25% efficiency here results in an increase of 1*C / (#tilesincore) overall. + removed.temperature += (device_energy / THERMAL_RELEASE_MODIFIER) + + removed.temperature = max(0, min(removed.temperature, 2500)) + + //Calculate how much gas to release + removed.toxins += max(device_energy / PLASMA_RELEASE_MODIFIER, 0) + + removed.oxygen += max((device_energy + removed.temperature - T0C) / OXYGEN_RELEASE_MODIFIER, 0) + + env.merge(removed) + + for(var/mob/living/carbon/human/l in view(src, min(7, round(power ** 0.25)))) // If they can see it without mesons on. Bad on them. + if(!istype(l.glasses, /obj/item/clothing/glasses/meson)) + l.hallucination = max(0, min(200, l.hallucination + power * config_hallucination_power * sqrt( 1 / max(1, get_dist(l, src)) ) ) ) + + for(var/mob/living/l in range(src, round((power / 100) ** 0.25))) + var/rads = (power / 10) * sqrt( 1 / max(get_dist(l, src),1) ) + l.apply_effect(rads, IRRADIATE) + + power -= (power/500)**3 + + return 1 + +/obj/machinery/power/supermatter_shard + +/obj/machinery/power/supermatter_shard/bullet_act(var/obj/item/projectile/Proj) + var/turf/L = loc + if(!istype(L)) // We don't run process() when we are in space + return 0 // This stops people from being able to really power up the supermatter + // Then bring it inside to explode instantly upon landing on a valid turf. + + + if(Proj.flag != "bullet") + power += Proj.damage * config_bullet_energy + if(!has_been_powered) + investigate_log("has been powered for the first time.", "supermatter") + message_admins("[src] has been powered for the first time (JMP).") + has_been_powered = 1 + else + damage += Proj.damage * config_bullet_energy + return 0 + +/obj/machinery/power/supermatter_shard/singularity_act() + var/gain = 100 + investigate_log("Supermatter shard consumed by singularity.","singulo") + message_admins("Singularity has consumed a supermatter shard and can now become stage six.") + visible_message("[src] is consumed by the singularity!") + for(var/mob/M in mob_list) + M << 'sound/effects/supermatter.ogg' //everyone goan know bout this + M << "A horrible screeching fills your ears, and a wave of dread washes over you..." + qdel(src) + return(gain) + +/obj/machinery/power/supermatter_shard/attack_robot(mob/user as mob) + if(Adjacent(user)) + return attack_hand(user) + else + user << "You attempt to interface with the control circuits but find they are not connected to your network. Maybe in a future firmware update." + return + +/obj/machinery/power/supermatter_shard/attack_ai(mob/user as mob) + user << "You attempt to interface with the control circuits but find they are not connected to your network. Maybe in a future firmware update." + +/obj/machinery/power/supermatter_shard/attack_hand(mob/living/user as mob) + if(!istype(user)) + return + user.visible_message("\The [user] reaches out and touches \the [src], inducing a resonance... \his body starts to glow and bursts into flames before flashing into ash.",\ + "You reach out and touch \the [src]. Everything starts burning and all you can hear is ringing. Your last thought is \"That was not a wise decision.\"",\ + "You hear an unearthly noise as a wave of heat washes over you.") + + playsound(get_turf(src), 'sound/effects/supermatter.ogg', 50, 1) + + Consume(user) + +/obj/machinery/power/supermatter_shard/proc/transfer_energy() + for(var/obj/machinery/power/rad_collector/R in rad_collectors) + if(get_dist(R, src) <= 15) // Better than using orange() every process + R.receive_pulse(power/10) + return + +/obj/machinery/power/supermatter_shard/attackby(obj/item/W as obj, mob/living/user as mob, params) + if(!istype(W) || (W.flags & ABSTRACT) || !istype(user)) + return + if(user.drop_item(W)) + Consume(W) + user.visible_message("As [user] touches \the [src] with \a [W], silence fills the room...",\ + "You touch \the [src] with \the [W], and everything suddenly goes silent.\"\n\The [W] flashes into dust as you flinch away from \the [src].",\ + "Everything suddenly goes silent.") + + playsound(get_turf(src), 'sound/effects/supermatter.ogg', 50, 1) + + user.apply_effect(150, IRRADIATE) + + +/obj/machinery/power/supermatter_shard/Bumped(atom/AM as mob|obj) + if(istype(AM, /mob/living)) + AM.visible_message("\The [AM] slams into \the [src] inducing a resonance... \his body starts to glow and catch flame before flashing into ash.",\ + "You slam into \the [src] as your ears are filled with unearthly ringing. Your last thought is \"Oh, fuck.\"",\ + "You hear an unearthly noise as a wave of heat washes over you.") + else if(isobj(AM) && !istype(AM, /obj/effect)) + AM.visible_message("\The [AM] smacks into \the [src] and rapidly flashes to ash.",\ + "You hear a loud crack as you are washed with a wave of heat.") + else + return + + playsound(get_turf(src), 'sound/effects/supermatter.ogg', 50, 1) + + Consume(AM) + + +/obj/machinery/power/supermatter_shard/proc/Consume(atom/movable/AM) + if(istype(AM, /mob/living)) + var/mob/living/user = AM + user.dust() + power += 200 + message_admins("[src] has consumed [key_name_admin(user)]? (FLW) (JMP).") + investigate_log("has consumed [key_name(user)].", "supermatter") + else if(isobj(AM) && !istype(AM, /obj/effect)) + investigate_log("has consumed [AM].", "supermatter") + qdel(AM) + + power += 200 + + //Some poor sod got eaten, go ahead and irradiate people nearby. + for(var/mob/living/L in range(10)) + var/rads = 500 * sqrt( 1 / (get_dist(L, src) + 1) ) + L.apply_effect(rads, IRRADIATE) + investigate_log("has irradiated [L] after consuming [AM].", "supermatter") + if(L in view()) + L.show_message("As \the [src] slowly stops resonating, you find your skin covered in new radiation burns.", 1,\ + "The unearthly ringing subsides and you notice you have new radiation burns.", 2) + else + L.show_message("You hear an uneartly ringing and notice your skin is covered in fresh radiation burns.", 2) diff --git a/code/modules/supermatter/wall.dm b/code/modules/power/supermatter/wall.dm similarity index 100% rename from code/modules/supermatter/wall.dm rename to code/modules/power/supermatter/wall.dm diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index 44e077013bd..634519a7b83 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -705,273 +705,10 @@ return 0 - /obj/machinery/chem_master/condimaster name = "CondiMaster 3000" condi = 1 -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// - -/* - -/obj/machinery/computer/pandemic - name = "PanD.E.M.I.C 2200" - density = 1 - anchored = 1 - icon = 'icons/obj/chemical.dmi' - icon_state = "mixer0" - circuit = /obj/item/weapon/circuitboard/pandemic - //use_power = 1 - //idle_power_usage = 20 //defaults make more sense. - var/temphtml = "" - var/wait = null - var/obj/item/weapon/reagent_containers/glass/beaker = null - - -/obj/machinery/computer/pandemic/set_broken() - icon_state = (src.beaker?"mixer1_b":"mixer0_b") - stat |= BROKEN - - -/obj/machinery/computer/pandemic/power_change() - - if(stat & BROKEN) - icon_state = (src.beaker?"mixer1_b":"mixer0_b") - - else if(powered()) - icon_state = (src.beaker?"mixer1":"mixer0") - stat &= ~NOPOWER - - else - spawn(rand(0, 15)) - src.icon_state = (src.beaker?"mixer1_nopower":"mixer0_nopower") - stat |= NOPOWER - - -/obj/machinery/computer/pandemic/Topic(href, href_list) - if(stat & (NOPOWER|BROKEN)) return - if(usr.stat || usr.restrained()) return - if(!in_range(src, usr)) return - - usr.set_machine(src) - if(!beaker) return - - if (href_list["create_vaccine"]) - if(!src.wait) - var/obj/item/weapon/reagent_containers/glass/bottle/B = new/obj/item/weapon/reagent_containers/glass/bottle(src.loc) - if(B) - var/path = href_list["create_vaccine"] - var/vaccine_type = text2path(path) - var/datum/disease/D = null - - if(!vaccine_type) - D = archive_diseases[path] - vaccine_type = path - else - if(vaccine_type in diseases) - D = new vaccine_type(0, null) - - if(D) - B.name = "[D.name] vaccine bottle" - B.reagents.add_reagent("vaccine",15,vaccine_type) - wait = 1 - var/datum/reagents/R = beaker.reagents - var/datum/reagent/blood/Blood = null - for(var/datum/reagent/blood/L in R.reagent_list) - if(L) - Blood = L - break - var/list/res = Blood.data["resistances"] - spawn(res.len*200) - src.wait = null - else - src.temphtml = "The replicator is not ready yet." - src.updateUsrDialog() - return - else if (href_list["create_virus_culture"]) - if(!wait) - var/obj/item/weapon/reagent_containers/glass/bottle/B = new/obj/item/weapon/reagent_containers/glass/bottle(src.loc) - B.icon_state = "bottle3" - var/type = text2path(href_list["create_virus_culture"])//the path is received as string - converting - var/datum/disease/D = null - if(!type) - var/datum/disease/advance/A = archive_diseases[href_list["create_virus_culture"]] - if(A) - D = new A.type(0, A) - else - if(type in diseases) // Make sure this is a disease - D = new type(0, null) - var/list/data = list("viruses"=list(D)) - var/name = sanitize(input(usr,"Name:","Name the culture",D.name)) - if(!name || name == " ") name = D.name - B.name = "[name] culture bottle" - B.desc = "A small bottle. Contains [D.agent] culture in synthblood medium." - B.reagents.add_reagent("blood",20,data) - src.updateUsrDialog() - wait = 1 - spawn(1000) - src.wait = null - else - src.temphtml = "The replicator is not ready yet." - src.updateUsrDialog() - return - else if (href_list["empty_beaker"]) - beaker.reagents.clear_reagents() - src.updateUsrDialog() - return - else if (href_list["eject"]) - beaker:loc = src.loc - beaker = null - icon_state = "mixer0" - src.updateUsrDialog() - return - else if(href_list["clear"]) - src.temphtml = "" - src.updateUsrDialog() - return - else if(href_list["name_disease"]) - var/new_name = stripped_input(usr, "Name the Disease", "New Name", "", MAX_NAME_LEN) - if(stat & (NOPOWER|BROKEN)) return - if(usr.stat || usr.restrained()) return - if(!in_range(src, usr)) return - var/id = href_list["name_disease"] - if(archive_diseases[id]) - var/datum/disease/advance/A = archive_diseases[id] - A.AssignName(new_name) - for(var/datum/disease/advance/AD in active_diseases) - AD.Refresh() - src.updateUsrDialog() - - - else - usr << browse(null, "window=pandemic") - src.updateUsrDialog() - return - - src.add_fingerprint(usr) - return - -/obj/machinery/computer/pandemic/attack_ai(mob/user as mob) - return src.attack_hand(user) - -/obj/machinery/computer/pandemic/attack_paw(mob/user as mob) - return src.attack_hand(user) - -/obj/machinery/computer/pandemic/attack_hand(mob/user as mob) - if(stat & (NOPOWER|BROKEN)) - return - user.set_machine(src) - var/dat = "" - if(src.temphtml) - dat = "[src.temphtml]

Main Menu" - else if(!beaker) - dat += "Please insert beaker.
" - dat += "Close" - else - var/datum/reagents/R = beaker.reagents - var/datum/reagent/blood/Blood = null - for(var/datum/reagent/blood/B in R.reagent_list) - if(B) - Blood = B - break - if(!R.total_volume||!R.reagent_list.len) - dat += "The beaker is empty
" - else if(!Blood) - dat += "No blood sample found in beaker" - else if(!Blood.data) - dat += "No blood data found in beaker." - else - dat += "

Blood sample data:

" - dat += "Blood DNA: [(Blood.data["blood_DNA"]||"none")]
" - dat += "Blood Type: [(Blood.data["blood_type"]||"none")]
" - - - if(Blood.data["viruses"]) - var/list/vir = Blood.data["viruses"] - if(vir.len) - for(var/datum/disease/D in Blood.data["viruses"]) - if(!D.hidden[PANDEMIC]) - - - var/disease_creation = D.type - if(istype(D, /datum/disease/advance)) - - var/datum/disease/advance/A = D - D = archive_diseases[A.GetDiseaseID()] - disease_creation = A.GetDiseaseID() - if(D.name == "Unknown") - dat += "Name Disease
" - - if(!D) - CRASH("We weren't able to get the advance disease from the archive.") - - dat += "Disease Agent: [D?"[D.agent] - Create virus culture bottle":"none"]
" - dat += "Common name: [(D.name||"none")]
" - dat += "Description: [(D.desc||"none")]
" - dat += "Spread: [(D.spread||"none")]
" - dat += "Possible cure: [(D.cure||"none")]

" - - if(istype(D, /datum/disease/advance)) - var/datum/disease/advance/A = D - dat += "Symptoms: " - var/english_symptoms = list() - for(var/datum/symptom/S in A.symptoms) - english_symptoms += S.name - dat += english_list(english_symptoms) - - - dat += "
Contains antibodies to: " - if(Blood.data["resistances"]) - var/list/res = Blood.data["resistances"] - if(res.len) - dat += "
" - else - dat += "nothing
" - else - dat += "nothing
" - dat += "
Eject beaker[((R.total_volume&&R.reagent_list.len) ? "-- Empty beaker":"")]
" - dat += "Close" - - user << browse("[src.name]
[dat]", "window=pandemic;size=575x400") - onclose(user, "pandemic") - return - - -/obj/machinery/computer/pandemic/attackby(var/obj/I as obj, var/mob/user as mob, params) - if(istype(I, /obj/item/weapon/reagent_containers/glass)) - if(stat & (NOPOWER|BROKEN)) return - if(src.beaker) - user << "A beaker is already loaded into the machine." - return - - src.beaker = I - user.drop_item() - I.loc = src - user << "You add the beaker to the machine!" - src.updateUsrDialog() - icon_state = "mixer1" - - else - ..() - return - -*/ -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// /obj/machinery/reagentgrinder name = "All-In-One Grinder" @@ -986,6 +723,8 @@ var/inuse = 0 var/obj/item/weapon/reagent_containers/beaker = null var/limit = 10 + + //IMPORTANT NOTE! A negative number is a multiplier, a positive number is a flat amount to add. 0 means equal to the amount of the original reagent var/list/blend_items = list ( //Sheets @@ -996,12 +735,10 @@ /obj/item/stack/sheet/mineral/gold = list("gold" = 20), /obj/item/weapon/grown/novaflower = list("capsaicin" = 0), - //archaeology! /obj/item/weapon/rocksliver = list("ground_rock" = 50), - //All types that you can put into the grinder to transfer the reagents to the beaker. !Put all recipes above this.! /obj/item/weapon/reagent_containers/pill = list(), /obj/item/weapon/reagent_containers/food = list() @@ -1013,9 +750,8 @@ "soybeans" = list("soymilk" = 0), "tomato" = list("ketchup" = 0), ///obj/item/weapon/reagent_containers/food/snacks/grown/wheat = list("flour" = -5), - "ricestalk" = list("rice" = 5), + "rice" = list("rice" = -5), "cherries" = list("cherryjelly" = 0), - "plastellium" = list("plasticide" = 5), ) var/list/juice_items = list ( @@ -1036,9 +772,6 @@ "corn" = list("cornoil" = 0), ) - - - var/list/holdingitems = list() /obj/machinery/reagentgrinder/New() @@ -1050,10 +783,8 @@ icon_state = "juicer"+num2text(!isnull(beaker)) return - /obj/machinery/reagentgrinder/attackby(var/obj/item/O as obj, var/mob/user as mob, params) - if (istype(O,/obj/item/weapon/reagent_containers/glass) || \ istype(O,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass) || \ istype(O,/obj/item/weapon/reagent_containers/food/drinks/shaker)) @@ -1152,7 +883,6 @@ onclose(user, "reagentgrinder") return - /obj/machinery/reagentgrinder/Topic(href, href_list) if(..()) return @@ -1313,15 +1043,21 @@ var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume var/amount = allowed[r_id] - if(amount <= 0) + if(amount <= 0) //Negative amounts are multipliers for the reagent amount (Example: "amount = -5" means "reagent_amount * 5") if(amount == 0) if (O.reagents != null && O.reagents.has_reagent("nutriment")) beaker.reagents.add_reagent(r_id, min(O.reagents.get_reagent_amount("nutriment"), space)) O.reagents.remove_reagent("nutriment", min(O.reagents.get_reagent_amount("nutriment"), space)) + if (O.reagents != null && O.reagents.has_reagent("plantmatter")) + beaker.reagents.add_reagent(r_id, min(O.reagents.get_reagent_amount("plantmatter"), space)) + O.reagents.remove_reagent("plantmatter", min(O.reagents.get_reagent_amount("plantmatter"), space)) else if (O.reagents != null && O.reagents.has_reagent("nutriment")) beaker.reagents.add_reagent(r_id, min(round(O.reagents.get_reagent_amount("nutriment")*abs(amount)), space)) O.reagents.remove_reagent("nutriment", min(O.reagents.get_reagent_amount("nutriment"), space)) + if (O.reagents != null && O.reagents.has_reagent("plantmatter")) + beaker.reagents.add_reagent(r_id, min(round(O.reagents.get_reagent_amount("plantmatter")*abs(amount)), space)) + O.reagents.remove_reagent("plantmatter", min(O.reagents.get_reagent_amount("plantmatter"), space)) else O.reagents.trans_id_to(beaker, r_id, min(amount, space)) diff --git a/code/modules/research/designs/comp_board_designs.dm b/code/modules/research/designs/comp_board_designs.dm index 03596510279..7318429f7e7 100644 --- a/code/modules/research/designs/comp_board_designs.dm +++ b/code/modules/research/designs/comp_board_designs.dm @@ -182,16 +182,6 @@ build_path = /obj/item/weapon/circuitboard/operating category = list("Computer Boards") -/datum/design/pandemic - name = "Console Board (PanD.E.M.I.C. 2200)" - desc = "Allows for the construction of circuit boards used to build a PanD.E.M.I.C. 2200 console." - id = "pandemic" - req_tech = list("programming" = 2, "biotech" = 2) - build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/pandemic - category = list("Computer Boards") - /datum/design/powermonitor name = "Console Board (Power Monitor)" desc = "Allows for the construction of circuit boards used to build a new power monitor" diff --git a/code/modules/research/xenoarchaeology/artifact/artifact.dm b/code/modules/research/xenoarchaeology/artifact/artifact.dm index 2c3946b0428..8730b04e063 100644 --- a/code/modules/research/xenoarchaeology/artifact/artifact.dm +++ b/code/modules/research/xenoarchaeology/artifact/artifact.dm @@ -13,10 +13,9 @@ artifact_id = "[pick("kappa","sigma","antaeres","beta","omicron","iota","epsilon","omega","gamma","delta","tau","alpha")]-[rand(100,999)]" artifact_find_type = pick(\ - 5;/obj/machinery/power/supermatter,\ 5;/obj/structure/constructshell,\ 5;/obj/machinery/wish_granter,\ - 25;/obj/machinery/power/supermatter/shard,\ + 25;/obj/machinery/power/supermatter_shard,\ 50;/obj/structure/cult/pylon,\ 100;/obj/machinery/auto_cloner,\ 100;/obj/machinery/giga_drill,\ diff --git a/code/modules/research/xenoarchaeology/machinery/artifact_analyser.dm b/code/modules/research/xenoarchaeology/machinery/artifact_analyser.dm index 3d2ec6c32c1..cbc755e2c22 100644 --- a/code/modules/research/xenoarchaeology/machinery/artifact_analyser.dm +++ b/code/modules/research/xenoarchaeology/machinery/artifact_analyser.dm @@ -135,10 +135,7 @@ ecosystem involving self cannibalism and a symbiotic relationship with the contained liquid.

\ Structure is composed of a carbo-titanium alloy with interlaced reinforcing energy fields, and the contained liquid \ resembles proto-plasmic residue supportive of single cellular developmental conditions." - if(/obj/machinery/power/supermatter) - return "Super dense plasma clump - Appears to have been shaped or hewn, structure is composed of matter 2000% denser than ordinary carbon matter residue.\ - Potential application as unrefined plasma source." - if(/obj/machinery/power/supermatter) + if(/obj/machinery/power/supermatter_shard) return "Super dense plasma clump - Appears to have been shaped or hewn, structure is composed of matter 2000% denser than ordinary carbon matter residue.\ Potential application as unrefined plasma source." if(/obj/structure/constructshell) diff --git a/code/modules/supermatter/supermatter.dm b/code/modules/supermatter/supermatter.dm deleted file mode 100644 index 92264de763a..00000000000 --- a/code/modules/supermatter/supermatter.dm +++ /dev/null @@ -1,473 +0,0 @@ - -#define NITROGEN_RETARDATION_FACTOR 0.15 //Higher == N2 slows reaction more -#define THERMAL_RELEASE_MODIFIER 750 //Higher == more heat released during reaction -#define PLASMA_RELEASE_MODIFIER 1500 //Higher == less plasma released by reaction -#define OXYGEN_RELEASE_MODIFIER 1500 //Higher == less oxygen released at high temperature/power -#define REACTION_POWER_MODIFIER 1.1 //Higher == more overall power - -/* - How to tweak the SM - - POWER_FACTOR directly controls how much power the SM puts out at a given level of excitation (power var). Making this lower means you have to work the SM harder to get the same amount of power. - CRITICAL_TEMPERATURE The temperature at which the SM starts taking damage. - - CHARGING_FACTOR Controls how much emitter shots excite the SM. - DAMAGE_RATE_LIMIT Controls the maximum rate at which the SM will take damage due to high temperatures. -*/ - -//Controls how much power is produced by each collector in range - this is the main parameter for tweaking SM balance, as it basically controls how the power variable relates to the rest of the game. -#define POWER_FACTOR 1.0 -#define DECAY_FACTOR 700 //Affects how fast the supermatter power decays -#define CRITICAL_TEMPERATURE 5000 //K -#define CHARGING_FACTOR 0.05 -#define DAMAGE_RATE_LIMIT 3 //damage rate cap at power = 300, scales linearly with power - - -//These would be what you would get at point blank, decreases with distance -#define DETONATION_RADS 200 -#define DETONATION_HALLUCINATION 600 - -#define TRANSFORM_DISTANCE_MOD 2 // Size/this is maximum distance from SM during burst for transformation to Nucleation - -#define WARNING_DELAY 30 //seconds between warnings. - -/obj/machinery/power/supermatter - name = "Supermatter" - desc = "A strangely translucent and iridescent crystal. \red You get headaches just from looking at it." - icon = 'icons/obj/engine.dmi' - icon_state = "darkmatter" - density = 1 - anchored = 0 - light_range = 4 - - var/gasefficency = 0.25 - - var/base_icon_state = "darkmatter" - - var/damage = 0 - var/damage_archived = 0 - var/safe_alert = "Crystaline hyperstructure returning to safe operating levels." - var/safe_warned = 0 - var/warning_point = 100 - var/warning_alert = "Danger! Crystal hyperstructure instability!" - var/emergency_point = 700 - var/emergency_alert = "CRYSTAL DELAMINATION IMMINENT." - var/explosion_point = 1000 - - light_color = "#8A8A00" - var/warning_color = "#B8B800" - var/emergency_color = "#D9D900" - - var/grav_pulling = 0 - var/pull_radius = 14 - // Time in ticks between delamination ('exploding') and exploding (as in the actual boom) - var/pull_time = 100 - var/explosion_power = 8 - - var/emergency_issued = 0 - - // Time in 1/10th of seconds since the last sent warning - var/lastwarning = 0 - - // This stops spawning redundand explosions. Also incidentally makes supermatter unexplodable if set to 1. - var/exploded = 0 - - var/power = 0 - var/oxygen = 0 - - //Temporary values so that we can optimize this - //How much the bullets damage should be multiplied by when it is added to the internal variables - var/config_bullet_energy = 2 - //How much of the power is left after processing is finished? -// var/config_power_reduction_per_tick = 0.5 - //How much hallucination should it produce per unit of power? - var/config_hallucination_power = 0.1 - - var/obj/item/device/radio/radio - - var/debug = 0 - var/uneatable = list(/turf/space, /obj/effect/overlay, /atom/movable/lighting_overlay, /mob/dead, /mob/camera, /mob/new_player) - -/obj/machinery/power/supermatter/New() - . = ..() - radio = new (src) - - -/obj/machinery/power/supermatter/Del() - del radio - . = ..() - -/obj/machinery/power/supermatter/proc/explode() - message_admins("Supermatter exploded at ([x],[y],[z] - JMP)",0,1) - log_game("Supermatter exploded at ([x],[y],[z])") - anchored = 1 - grav_pulling = 1 - exploded = 1 - spawn(pull_time) - var/turf/epicenter = get_turf(src) - explosion(epicenter, explosion_power, explosion_power*2, explosion_power*3, explosion_power*4, 1) - supermatter_delamination( epicenter, explosion_power*4, 1 ) - del src - return - -//Changes color and light_range of the light to these values if they were not already set -/obj/machinery/power/supermatter/proc/shift_light(var/lum, var/clr) - if(light_color != clr) - light_color = clr - if(light_range != lum) - set_light(lum) - -/obj/machinery/power/supermatter/proc/announce_warning() - var/integrity = damage / explosion_point - integrity = round(100 - integrity * 100) - integrity = integrity < 0 ? 0 : integrity - var/alert_msg = " Integrity at [integrity]%" - - if(damage > emergency_point) - alert_msg = emergency_alert + alert_msg - lastwarning = world.timeofday - WARNING_DELAY * 4 - else if(damage >= damage_archived) // The damage is still going up - safe_warned = 0 - alert_msg = warning_alert + alert_msg - lastwarning = world.timeofday - else if(!safe_warned) - safe_warned = 1 // We are safe, warn only once - alert_msg = safe_alert - lastwarning = world.timeofday - else - alert_msg = null - if(alert_msg) - radio.autosay(alert_msg, "Supermatter Monitor") - -/obj/machinery/power/supermatter/process() - - var/turf/L = loc - - if(isnull(L)) // We have a null turf...something is wrong, stop processing this entity. - return PROCESS_KILL - - if(!istype(L)) //We are in a crate or somewhere that isn't turf, if we return to turf resume processing but for now. - return //Yeah just stop. - - if(damage > explosion_point) - if(!exploded) - if(!istype(L, /turf/space)) - announce_warning() - explode() - else if(damage > warning_point) // while the core is still damaged and it's still worth noting its status - shift_light(5, warning_color) - if(damage > emergency_point) - shift_light(7, emergency_color) - if(!istype(L, /turf/space) && (world.timeofday - lastwarning) >= WARNING_DELAY * 10) - announce_warning() - else - shift_light(4,initial(light_color)) - if(grav_pulling) - supermatter_pull() - - //Ok, get the air from the turf - var/datum/gas_mixture/removed = null - var/datum/gas_mixture/env = null - - //ensure that damage doesn't increase too quickly due to super high temperatures resulting from no coolant, for example. We dont want the SM exploding before anyone can react. - //We want the cap to scale linearly with power (and explosion_point). Let's aim for a cap of 5 at power = 300 (based on testing, equals roughly 5% per SM alert announcement). - var/damage_inc_limit = (power/300)*(explosion_point/1000)*DAMAGE_RATE_LIMIT - - if(!istype(L, /turf/space)) - env = L.return_air() - removed = env.remove(gasefficency * env.total_moles()) //Remove gas from surrounding area - - if(!env || !removed || !removed.total_moles()) - damage += max((power - 15*POWER_FACTOR)/10, 0) - else if (grav_pulling) //If supermatter is detonating, remove all air from the zone - env.remove(env.total_moles()) - else - damage_archived = damage - - damage = max( damage + min( ( (removed.temperature - CRITICAL_TEMPERATURE) / 150 ), damage_inc_limit ) , 0 ) - //Ok, 100% oxygen atmosphere = best reaction - //Maxes out at 100% oxygen pressure - oxygen = max(min((removed.oxygen - (removed.nitrogen * NITROGEN_RETARDATION_FACTOR)) / removed.total_moles(), 1), 0) - - //calculate power gain for oxygen reaction - var/temp_factor - var/equilibrium_power - if (oxygen > 0.8) - //If chain reacting at oxygen == 1, we want the power at 800 K to stabilize at a power level of 400 - equilibrium_power = 400 - icon_state = "[base_icon_state]_glow" - else - //If chain reacting at oxygen == 1, we want the power at 800 K to stabilize at a power level of 250 - equilibrium_power = 250 - icon_state = base_icon_state - - temp_factor = ( (equilibrium_power/DECAY_FACTOR)**3 )/800 - power = max( (removed.temperature * temp_factor) * oxygen + power, 0) - - //We've generated power, now let's transfer it to the collectors for storing/usage - transfer_energy() - - var/device_energy = power * REACTION_POWER_MODIFIER - - - //Calculate how much gas to release - removed.toxins += max(device_energy / PLASMA_RELEASE_MODIFIER, 0) - - removed.oxygen += max((device_energy + removed.temperature - T0C) / OXYGEN_RELEASE_MODIFIER, 0) - - env.merge(removed) - - - for(var/mob/living/carbon/human/l in view(src, min(7, round(sqrt(power/6))))) // If they can see it without mesons on. Bad on them. - if(!istype(l.glasses, /obj/item/clothing/glasses/meson)) - l.hallucination = max(0, min(200, l.hallucination + power * config_hallucination_power * sqrt( 1 / max(1,get_dist(l, src)) ) ) ) - - //adjusted range so that a power of 300 (pretty high) results in 8 tiles, roughly the distance from the core to the engine monitoring room. - for(var/mob/living/l in range(src, round(sqrt(power / 5)))) - var/rads = (power / 10) * sqrt( 1 / get_dist(l, src) ) - l.apply_effect(rads, IRRADIATE) - - power -= (power/DECAY_FACTOR)**3 //energy losses due to radiation - - return 1 - - -/obj/machinery/power/supermatter/bullet_act(var/obj/item/projectile/Proj) - var/turf/L = loc - if(!istype(L)) // We don't run process() when we are in space - return 0 // This stops people from being able to really power up the supermatter - // Then bring it inside to explode instantly upon landing on a valid turf. - - - if(istype(Proj, /obj/item/projectile/beam)) - power += Proj.damage * config_bullet_energy * CHARGING_FACTOR / POWER_FACTOR - else - damage += Proj.damage * config_bullet_energy - return 0 - -/obj/machinery/power/supermatter/singularity_act() - var/gain = 100 - investigate_log("Supermatter shard consumed by singularity.","singulo") - message_admins("Singularity has consumed a supermatter shard and can now become stage six.") - visible_message("[src] is consumed by the singularity!") - for(var/mob/M in mob_list) - M << 'sound/effects/supermatter.ogg' //everyone goan know bout this - M << "A horrible screeching fills your ears, and a wave of dread washes over you..." - qdel(src) - return(gain) - -/obj/machinery/power/supermatter/attack_robot(mob/user as mob) - if(Adjacent(user)) - return attack_hand(user) - else - user << "You attempt to interface with the control circuits but find they are not connected to your network. Maybe in a future firmware update." - return - -/obj/machinery/power/supermatter/attack_ai(mob/user as mob) - user << "You attempt to interface with the control circuits but find they are not connected to your network. Maybe in a future firmware update." - -/obj/machinery/power/supermatter/attack_hand(mob/user as mob) - if(istype(user,/mob/living/carbon/human/nucleation)) // Nucleation's biology doesn't react to this - return - - user.visible_message("\The [user] reaches out and touches \the [src], inducing a resonance... \his body starts to glow and bursts into flames before flashing into ash.",\ - "You reach out and touch \the [src]. Everything starts burning and all you can hear is ringing. Your last thought is \"That was not a wise decision.\"",\ - "You hear an uneartly ringing, then what sounds like a shrilling kettle as you are washed with a wave of heat.") - - Consume(user) - -/obj/machinery/power/supermatter/proc/transfer_energy() - for(var/obj/machinery/power/rad_collector/R in rad_collectors) - var/distance = get_dist(R, src) - if(distance <= 15) - //for collectors using standard plasma tanks at 1013 kPa, the actual power generated will be this power*POWER_FACTOR*20*29 = power*POWER_FACTOR*580 - R.receive_pulse(power * POWER_FACTOR * (min(3/distance, 1))**2) - return - -/obj/machinery/power/supermatter/attackby(obj/item/weapon/W as obj, mob/living/carbon/user as mob) - user.visible_message("\The [user] touches \a [W] to \the [src] as a silence fills the room...",\ - "You touch \the [W] to \the [src] when everything suddenly goes silent.\"\n\The [W] flashes into dust as you flinch away from \the [src].",\ - "Everything suddenly goes silent.") - - user.unEquip(W) - Consume(W) - - user.apply_effect(150, IRRADIATE) - - -/obj/machinery/power/supermatter/Bumped(atom/AM as mob|obj) - if(istype(AM, /mob/living)) - if(istype(AM,/mob/living/carbon/human/nucleation)) // Nucleation's biology doesn't react to this - return - AM.visible_message("\The [AM] slams into \the [src] inducing a resonance... \his body starts to glow and catch flame before flashing into ash.",\ - "You slam into \the [src] as your ears are filled with unearthly ringing. Your last thought is \"Oh, fuck.\"",\ - "You hear an uneartly ringing, then what sounds like a shrilling kettle as you are washed with a wave of heat.") - else if(!grav_pulling) //To prevent spam, detonating supermatter does not indicate non-mobs being destroyed - AM.visible_message("\The [AM] smacks into \the [src] and rapidly flashes to ash.",\ - "You hear a loud crack as you are washed with a wave of heat.") - - Consume(AM) - - -/obj/machinery/power/supermatter/proc/Consume(var/mob/living/user) - if(istype(user,/mob/living/carbon/human/nucleation)) // Nucleation's biology doesn't react to this - return - - if(istype(user)) - user.dust() - power += 200 - else - del user - - power += 200 - - //Some poor sod got eaten, go ahead and irradiate people nearby. - for(var/mob/living/l in range(10)) - if(l in view()) - l.show_message("As \the [src] slowly stops resonating, you find your skin covered in new radiation burns.", 1,\ - "The unearthly ringing subsides and you notice you have new radiation burns.", 2) - else - l.show_message("You hear an uneartly ringing and notice your skin is covered in fresh radiation burns.", 2) - var/rads = 500 * sqrt( 1 / (get_dist(l, src) + 1) ) - l.apply_effect(rads, IRRADIATE) - - -/obj/machinery/power/supermatter/proc/supermatter_pull() - //following is adapted from singulo code - if(defer_powernet_rebuild != 2) - defer_powernet_rebuild = 1 - // Let's just make this one loop. - for(var/atom/X in orange(pull_radius,src)) - // Movable atoms only - if(istype(X, /atom/movable)) - if(is_type_in_list(X, uneatable)) continue - if(((X) && (!istype(X,/mob/living/carbon/human)))) - step_towards(X,src) - if(istype(X, /obj)) //unanchored objects pulled twice as fast - var/obj/O = X - if(!O.anchored) - step_towards(X,src) - else - step_towards(X,src) - if(istype(X, /obj/structure/window)) //shatter windows - var/obj/structure/window/W = X - W.ex_act(2.0) - else if(istype(X,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = X - if(istype(H.shoes,/obj/item/clothing/shoes/magboots)) - var/obj/item/clothing/shoes/magboots/M = H.shoes - if(M.magpulse) - step_towards(H,src) //step just once with magboots - continue - step_towards(H,src) //step twice - step_towards(H,src) - - if(defer_powernet_rebuild != 2) - defer_powernet_rebuild = 0 - return - - -proc/supermatter_delamination(var/turf/epicenter, var/size, var/transform_mobs = 0, var/adminlog = 1) - spawn(0) - var/start = world.timeofday - epicenter = get_turf(epicenter) - if(!epicenter) return - - if(adminlog) - message_admins("Supermatter delamination with size ([size]) in area [epicenter.loc.name] ([epicenter.x],[epicenter.y],[epicenter.z] - JMP)") - log_game("Supermatter delamination with size ([size]) in area [epicenter.loc.name] ") - - playsound(epicenter, 'sound/effects/explosionfar.ogg', 100, 1, round(size*2,1) ) - playsound(epicenter, "explosion", 100, 1, round(size,1) ) - - if(defer_powernet_rebuild != 2) - defer_powernet_rebuild = 1 - - var/x = epicenter.x - var/y = epicenter.y - var/z = epicenter.z - - epicenter.ChangeTurf( /turf/simulated/floor/plating/smatter ) - - for(var/mob/living/mob in orange( epicenter, size*2 )) // Irradiate area twice the size of the main blast - if(epicenter.z == mob.loc.z) - if( ishuman(mob) ) - //Hilariously enough, running into a closet should make you get hit the hardest. - var/mob/living/carbon/human/H = mob - H.hallucination += max(50, min(size*10, DETONATION_HALLUCINATION * sqrt(1 / (get_dist(mob, epicenter) + 1)) ) ) - var/rads = size*10 * sqrt( 1 / (get_dist(mob, epicenter) + 1) ) - mob.apply_effect(rads, IRRADIATE) - - for(var/i=0, i