diff --git a/code/__DEFINES/~skyrat_defines/solfed.dm b/code/__DEFINES/~skyrat_defines/solfed.dm new file mode 100644 index 00000000000..30aef1f464d --- /dev/null +++ b/code/__DEFINES/~skyrat_defines/solfed.dm @@ -0,0 +1,5 @@ +#define RADIO_CHANNEL_SOLFED "SolFed" +#define RADIO_KEY_SOLFED "l" +#define RADIO_TOKEN_SOLFED ":l" + +#define FREQ_SOLFED 1377 diff --git a/code/game/communications.dm b/code/game/communications.dm index 7284d4606c1..cbcb3e65ba2 100644 --- a/code/game/communications.dm +++ b/code/game/communications.dm @@ -104,6 +104,7 @@ GLOBAL_LIST_INIT(radiochannels, list( RADIO_CHANNEL_INTERDYNE = FREQ_INTERDYNE, //SKYRAT EDIT ADDITION - MAPPING RADIO_CHANNEL_GUILD = FREQ_GUILD, //SKYRAT EDIT ADDITION - ASSAULT OPS RADIO_CHANNEL_TARKON = FREQ_TARKON, //SKYRAT EDIT ADDITION - MAPPING + RADIO_CHANNEL_SOLFED = FREQ_SOLFED, //SKYRAT EDIT ADDITION - SOLFED RADIO_CHANNEL_SYNDICATE = FREQ_SYNDICATE, RADIO_CHANNEL_UPLINK = FREQ_UPLINK, RADIO_CHANNEL_SUPPLY = FREQ_SUPPLY, @@ -127,6 +128,7 @@ GLOBAL_LIST_INIT(reverseradiochannels, list( "[FREQ_CYBERSUN]" = RADIO_CHANNEL_CYBERSUN, //SKYRAT EDIT ADDITION - MAPPING "[FREQ_INTERDYNE]" = RADIO_CHANNEL_INTERDYNE, //SKYRAT EDIT ADDITION - MAPPING "[FREQ_TARKON]" = RADIO_CHANNEL_TARKON, //SKYRAT EDIT ADDITION - MAPPING + "[FREQ_SOLFED]" = RADIO_CHANNEL_SOLFED, //SKYRAT EDIT ADDITION - SOLFED "[FREQ_SYNDICATE]" = RADIO_CHANNEL_SYNDICATE, "[FREQ_UPLINK]" = RADIO_CHANNEL_UPLINK, "[FREQ_SUPPLY]" = RADIO_CHANNEL_SUPPLY, diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index cf9811207b7..53d9ddd4c78 100755 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -468,10 +468,10 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) if(!pre_911_check(usr)) return calling_911(usr, "Marshals", EMERGENCY_RESPONSE_POLICE) - if ("callBreachControl") + if ("callTheCatmos") if(!pre_911_check(usr)) return - calling_911(usr, "Breach Control", EMERGENCY_RESPONSE_ATMOS) + calling_911(usr, "Advanced Atmospherics", EMERGENCY_RESPONSE_ATMOS) if ("callTheParameds") if(!pre_911_check(usr)) return diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index 7e2bf2fc6ab..f83602e1913 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -12,6 +12,7 @@ GLOBAL_LIST_INIT(channel_tokens, list( RADIO_CHANNEL_INTERDYNE = RADIO_TOKEN_INTERDYNE, //SKYRAT EDIT ADDITION - Mapping RADIO_CHANNEL_GUILD = RADIO_TOKEN_GUILD, //SKYRAT EDIT ADDITION - Mapping RADIO_CHANNEL_TARKON = RADIO_TOKEN_TARKON, //SKYRAT EDIT ADDITION - MAPPING + RADIO_CHANNEL_SOLFED = RADIO_TOKEN_SOLFED, //SKYRAT EDIT ADDITION - SOLFED RADIO_CHANNEL_SYNDICATE = RADIO_TOKEN_SYNDICATE, RADIO_CHANNEL_SUPPLY = RADIO_TOKEN_SUPPLY, RADIO_CHANNEL_SERVICE = RADIO_TOKEN_SERVICE, diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 56146980891..7ad01075992 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -317,7 +317,7 @@ var/datum/signal/subspace/vocal/signal = new(src, freq, speaker, language, message, spans, message_mods) // Independent radios, on the CentCom frequency, reach all independent radios - if (independent && (freq == FREQ_CENTCOM || freq == FREQ_CTF_RED || freq == FREQ_CTF_BLUE || freq == FREQ_CTF_GREEN || freq == FREQ_CTF_YELLOW || freq == FREQ_FACTION || freq == FREQ_CYBERSUN || freq == FREQ_INTERDYNE || freq == FREQ_GUILD || freq == FREQ_TARKON)) //SKYRAT EDIT CHANGE - FACTION, MAPPING + if (independent && (freq == FREQ_CENTCOM || freq == FREQ_CTF_RED || freq == FREQ_CTF_BLUE || freq == FREQ_CTF_GREEN || freq == FREQ_CTF_YELLOW || freq == FREQ_FACTION || freq == FREQ_CYBERSUN || freq == FREQ_INTERDYNE || freq == FREQ_GUILD || freq == FREQ_TARKON || freq == FREQ_SOLFED)) //SKYRAT EDIT CHANGE - FACTION, MAPPING, SOLFED signal.data["compression"] = 0 signal.transmission_method = TRANSMISSION_SUPERSPACE signal.levels = list(0) diff --git a/code/game/say.dm b/code/game/say.dm index 1828e5fdc9a..814036301f1 100644 --- a/code/game/say.dm +++ b/code/game/say.dm @@ -20,6 +20,7 @@ GLOBAL_LIST_INIT(freqtospan, list( "[FREQ_INTERDYNE]" = "syndradio", //SKYRAT EDIT ADDITION - MAPPING "[FREQ_GUILD]" = "syndradio", //SKYRAT EDIT ADDITION - MAPPING "[FREQ_TARKON]" = "engradio", //SKYRAT EDIT ADDITION - MAPPING + "[FREQ_SOLFED]" = "medradio", //SKYRAT EDIT ADDITION - SOLFED "[FREQ_CTF_RED]" = "redteamradio", "[FREQ_CTF_BLUE]" = "blueteamradio", "[FREQ_CTF_GREEN]" = "greenteamradio", diff --git a/modular_skyrat/master_files/code/modules/clothing/under/jobs/engineering.dm b/modular_skyrat/master_files/code/modules/clothing/under/jobs/engineering.dm index c799aca2997..1df34638f4b 100644 --- a/modular_skyrat/master_files/code/modules/clothing/under/jobs/engineering.dm +++ b/modular_skyrat/master_files/code/modules/clothing/under/jobs/engineering.dm @@ -9,7 +9,9 @@ icon = 'modular_skyrat/master_files/icons/obj/clothing/under/engineering.dmi' worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/engineering.dmi' -// Add a /obj/item/clothing/under/rank/engineering/atmospheric_technician/skyrat if you add uniforms for it +/obj/item/clothing/under/rank/engineering/atmospheric_technician/skyrat + icon = 'modular_skyrat/master_files/icons/obj/clothing/under/engineering.dmi' + worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/engineering.dmi' /* * ENGINEER @@ -65,3 +67,19 @@ desc = "A gray naval suit with a lead-lined vest and a rank badge denoting the Officer of the Internal Engineering Division. Doesn't come with a death machine building guide." name = "chief engineer's naval jumpsuit" icon_state = "impce" + +/* +* ATMOS TECH +*/ +/datum/armor/atmos_adv + bio = 40 + fire = 70 + acid = 70 + +/obj/item/clothing/under/rank/engineering/atmospheric_technician/skyrat/utility/advanced + name = "advanced atmospherics uniform" + desc = "A jumpsuit worn by advanced atmospherics crews." + icon_state = "util_atmos" + armor_type = /datum/armor/atmos_adv + icon_state = "util_eng" + can_adjust = FALSE diff --git a/modular_skyrat/modules/advanced_engineering/code/adv_engineering.dm b/modular_skyrat/modules/advanced_engineering/code/adv_engineering.dm new file mode 100644 index 00000000000..962cafe1bef --- /dev/null +++ b/modular_skyrat/modules/advanced_engineering/code/adv_engineering.dm @@ -0,0 +1,47 @@ +/obj/item/storage/belt/utility/full/powertools/ircd/PopulateContents() + new /obj/item/screwdriver/power(src) + new /obj/item/crowbar/power(src) + new /obj/item/weldingtool/electric(src) + new /obj/item/construction/rcd/combat(src) + new /obj/item/pipe_dispenser(src) + new /obj/item/wrench/bolter(src) + new /obj/item/analyzer/ranged(src) + +/obj/item/mod/control/pre_equipped/advanced/atmos + theme = /datum/mod_theme/advanced/atmos + applied_cell = /obj/item/stock_parts/cell/hyper + applied_modules = list( + /obj/item/mod/module/storage/large_capacity, + /obj/item/mod/module/welding, + /obj/item/mod/module/rad_protection, + /obj/item/mod/module/flashlight, + /obj/item/mod/module/t_ray, + /obj/item/mod/module/jetpack/advanced, + /obj/item/mod/module/visor/meson, + ) + default_pins = list( + /obj/item/mod/module/jetpack/advanced, + /obj/item/mod/module/magboot/advanced, + ) + +/datum/mod_theme/advanced/atmos //Implement a unique skin for this eventually + ui_theme = "neutral" + +/obj/item/rcd_ammo/combat + name = "industrial RCD matter cartridge" + desc = "A cartridge with one complete refill for an industrial RCD." + w_class = WEIGHT_CLASS_SMALL + custom_materials = list(/datum/material/iron=120000, /datum/material/glass=80000) + ammoamt = 440 + +/obj/item/storage/box/rcd_ammo + name = "industrial RCD matter box" + icon = 'modular_skyrat/modules/aesthetics/storage/storage.dmi' + desc = "A durable box with refill cartridges for an industrial RCD." + icon_state = "engibox" + illustration = "rcd" + custom_materials = list(/datum/material/plastic = 1000) + +/obj/item/storage/box/rcd_ammo/PopulateContents() + for(var/i in 1 to 4) + new/obj/item/rcd_ammo/combat(src) diff --git a/modular_skyrat/modules/advanced_engineering/readme.md b/modular_skyrat/modules/advanced_engineering/readme.md new file mode 100644 index 00000000000..933b4456bc0 --- /dev/null +++ b/modular_skyrat/modules/advanced_engineering/readme.md @@ -0,0 +1,20 @@ +https://github.com/Skyrat-SS13/Skyrat-tg/pull/20040/ + +## Title: +MODULE ID: ADVANCED_ENGINEERING + +### Description: +Adds some new high tier engineering gear for use by ERTs. + +### TG Proc/File Changes: +None + +### Defines +#define RADIO_CHANNEL_SOLFED "SolFed" +#define RADIO_KEY_SOLFED "l" +#define RADIO_TOKEN_SOLFED ":l" + +#define FREQ_SOLFED 1377 + +### Credits: +LT3 diff --git a/modular_skyrat/modules/aesthetics/storage/storage.dm b/modular_skyrat/modules/aesthetics/storage/storage.dm index 2dbfd991152..a3293a2c024 100644 --- a/modular_skyrat/modules/aesthetics/storage/storage.dm +++ b/modular_skyrat/modules/aesthetics/storage/storage.dm @@ -85,6 +85,18 @@ /obj/item/storage/box/silver_sulf icon_state = "medbox" +/* +// Engineering +*/ +/obj/item/storage/box/metalfoam + icon_state = "engibox" + +/obj/item/storage/box/smart_metal_foam + icon_state = "engibox" + +/obj/item/storage/box/material + icon_state = "engibox" + /* // Security */ diff --git a/modular_skyrat/modules/aesthetics/storage/storage.dmi b/modular_skyrat/modules/aesthetics/storage/storage.dmi index 7921f657597..b3f46c9d58a 100644 Binary files a/modular_skyrat/modules/aesthetics/storage/storage.dmi and b/modular_skyrat/modules/aesthetics/storage/storage.dmi differ diff --git a/modular_skyrat/modules/alerts/code/security_level_procs.dm b/modular_skyrat/modules/alerts/code/security_level_procs.dm new file mode 100644 index 00000000000..b984a61dd5d --- /dev/null +++ b/modular_skyrat/modules/alerts/code/security_level_procs.dm @@ -0,0 +1,16 @@ +/** + * Called to check/change security level. + * Checks if the station security level is at least minimum_level, and if not, sets it to that level. + * Arguments determine if engineering override or maint access is granted. + * Arguments: min_level: number, eng_access: boolean, maint_access: boolean +*/ +/datum/controller/subsystem/security_level/proc/minimum_security_level(min_level = SEC_LEVEL_ORANGE, eng_access = TRUE, maint_access = FALSE) + if(SSsecurity_level.get_current_level_as_number() < min_level) + SSsecurity_level.set_level(min_level) + + if(eng_access) + GLOB.force_eng_override = TRUE + SEND_GLOBAL_SIGNAL(COMSIG_GLOB_FORCE_ENG_OVERRIDE, TRUE) + + if(maint_access) + make_maint_all_access() diff --git a/modular_skyrat/modules/biohazard_blob/code/mold_event.dm b/modular_skyrat/modules/biohazard_blob/code/mold_event.dm index ec4ac4d1797..7c0544bf97a 100644 --- a/modular_skyrat/modules/biohazard_blob/code/mold_event.dm +++ b/modular_skyrat/modules/biohazard_blob/code/mold_event.dm @@ -35,7 +35,7 @@ /datum/round_event/mold/announce(fake) if(!fake) - event_minimum_security_level(SEC_LEVEL_VIOLET, FALSE, FALSE) + INVOKE_ASYNC(SSsecurity_level, TYPE_PROC_REF(/datum/controller/subsystem/security_level/, minimum_security_level), SEC_LEVEL_VIOLET, FALSE, FALSE) priority_announce("Confirmed outbreak of level 6 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", ANNOUNCER_OUTBREAK6) /datum/round_event/mold/start() diff --git a/modular_skyrat/modules/cme/code/cme.dm b/modular_skyrat/modules/cme/code/cme.dm index 1ccf5ac9795..bb84ff4ef1c 100644 --- a/modular_skyrat/modules/cme/code/cme.dm +++ b/modular_skyrat/modules/cme/code/cme.dm @@ -133,12 +133,12 @@ All synthetic and non-organic lifeforms should seek shelter immediately! \ Neutralize magnetic field bubbles at all costs.", "Solar Event", sound('modular_skyrat/modules/cme/sound/cme_warning.ogg')) if(CME_EXTREME) - addtimer(CALLBACK(src, PROC_REF(event_minimum_security_level), SEC_LEVEL_ORANGE, TRUE, FALSE), (round((start_when * SSevents.wait) * 0.1, 0.1)) SECONDS) + addtimer(CALLBACK(src, PROC_REF(cme_level_callback), SEC_LEVEL_ORANGE, TRUE, FALSE), (round((start_when * SSevents.wait) * 0.1, 0.1)) SECONDS) priority_announce("Critical Coronal mass ejection detected! Expected intensity: [uppertext(cme_intensity)]. Impact in: [round((start_when * SSevents.wait) * 0.1, 0.1)] seconds. \ All synthetic and non-organic lifeforms should seek shelter immediately! \ Neutralize magnetic field bubbles at all costs.", "Solar Event", sound('modular_skyrat/modules/cme/sound/cme_warning.ogg')) if(CME_ARMAGEDDON) - addtimer(CALLBACK(src, PROC_REF(event_minimum_security_level), SEC_LEVEL_GAMMA, TRUE, TRUE), (round((start_when * SSevents.wait) * 0.1, 0.1)) SECONDS) + addtimer(CALLBACK(src, PROC_REF(cme_level_callback), SEC_LEVEL_GAMMA, TRUE, TRUE), (round((start_when * SSevents.wait) * 0.1, 0.1)) SECONDS) priority_announce("Neutron Mass Ejection Detected! Expected intensity: [uppertext(cme_intensity)]. Impact in: [round((start_when * SSevents.wait) * 0.1, 0.1)] seconds. \ All personnel should proceed to their nearest warpgate for evacuation, the Solar Federation has issued this mandatory alert.", "Solar Event", sound('modular_skyrat/modules/cme/sound/cme_warning.ogg')) @@ -147,11 +147,14 @@ var/turf/spawnpoint = pick(cme_start_locs) spawn_cme(spawnpoint, cme_intensity) +/datum/round_event/cme/proc/cme_level_callback(sec_level = SEC_LEVEL_ORANGE, engi = TRUE, maint = FALSE) + INVOKE_ASYNC(SSsecurity_level, TYPE_PROC_REF(/datum/controller/subsystem/security_level/, minimum_security_level), sec_level, engi, maint) + /datum/round_event/cme/proc/spawn_cme(turf/spawnpoint, intensity) if(intensity == CME_UNKNOWN) intensity = pick(CME_MINIMAL, CME_MODERATE, CME_EXTREME) if(intensity == CME_EXTREME) - event_minimum_security_level(SEC_LEVEL_ORANGE, TRUE, FALSE) + INVOKE_ASYNC(SSsecurity_level, TYPE_PROC_REF(/datum/controller/subsystem/security_level/, minimum_security_level), SEC_LEVEL_ORANGE, TRUE, FALSE) var/area/loc_area_name = get_area(spawnpoint) minor_announce("WARNING! [uppertext(intensity)] PULSE EXPECTED IN: [loc_area_name.name]", "Solar Flare Log:") diff --git a/modular_skyrat/modules/custom_meteors/code/custom_meteors.dm b/modular_skyrat/modules/custom_meteors/code/custom_meteors.dm index feb31f3781e..f1d2d7271a2 100644 --- a/modular_skyrat/modules/custom_meteors/code/custom_meteors.dm +++ b/modular_skyrat/modules/custom_meteors/code/custom_meteors.dm @@ -56,7 +56,7 @@ /datum/round_event/meteor_wave/announce(fake) priority_announce("Meteors have been detected on collision course with the station. The energy field generator is disabled or missing. First collision in approximately [start_when * 2] seconds. Ensure all sensitive areas and equipment are shielded.", "Meteor Alert", ANNOUNCER_METEORS) if(wave_name == "threatening" || wave_name == "spooky") - event_minimum_security_level(SEC_LEVEL_ORANGE, TRUE, FALSE) + INVOKE_ASYNC(SSsecurity_level, TYPE_PROC_REF(/datum/controller/subsystem/security_level/, minimum_security_level), SEC_LEVEL_ORANGE, TRUE, FALSE) /datum/round_event/meteor_wave/tick() if(ISMULTIPLE(activeFor, METEOR_TICKS_BETWEEN_WAVES)) diff --git a/modular_skyrat/modules/customization/modules/clothing/masks/gasmask.dm b/modular_skyrat/modules/customization/modules/clothing/masks/gasmask.dm index f4e9534cfa3..75bd6b05d4a 100644 --- a/modular_skyrat/modules/customization/modules/clothing/masks/gasmask.dm +++ b/modular_skyrat/modules/customization/modules/clothing/masks/gasmask.dm @@ -6,6 +6,14 @@ icon_state = "gas_clear" flags_inv = NONE +/obj/item/clothing/mask/gas/atmos/glass + icon = 'modular_skyrat/master_files/icons/obj/clothing/masks.dmi' + worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/mask.dmi' + name = "advanced gas mask" + desc = "A face-covering mask that can be connected to an air supply. This one doesn't obscure your face however." + icon_state = "gas_clear" + flags_inv = NONE + /obj/item/clothing/mask/gas/alt icon = 'modular_skyrat/master_files/icons/obj/clothing/masks.dmi' icon_state = "gas_alt2" @@ -129,7 +137,7 @@ update_item_action_buttons() to_chat(user, span_notice("Your Clown Mask has now morphed into [choice], all praise the Honkmother!")) return TRUE - + /obj/item/clothing/mask/gas/mime/vox desc = "The traditional mime's mask. It has an eerie facial posture. This one's got an easily accessible feeding port to be more suitable for the Vox crewmembers." icon = 'modular_skyrat/master_files/icons/mob/clothing/species/vox/mask.dmi' @@ -137,7 +145,7 @@ worn_icon_vox = 'modular_skyrat/master_files/icons/mob/clothing/species/vox/mask.dmi' worn_icon_better_vox = 'modular_skyrat/master_files/icons/mob/clothing/species/vox/mask.dmi' starting_filter_type = /obj/item/gas_filter/vox - + /obj/item/clothing/mask/gas/mime/vox/Initialize(mapload) .=..() mimemask_designs = list( @@ -174,7 +182,7 @@ worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/species/vox/mask.dmi' icon_state = options[choice] icon_state = options[choice] - + user.update_worn_mask() update_item_action_buttons() to_chat(user, span_notice("Your Mime Mask has now morphed into [choice]!")) diff --git a/modular_skyrat/modules/events/code/event_seclevel.dm b/modular_skyrat/modules/events/code/event_seclevel.dm deleted file mode 100644 index dacc9ccffa4..00000000000 --- a/modular_skyrat/modules/events/code/event_seclevel.dm +++ /dev/null @@ -1,15 +0,0 @@ -/// Called by events to check/change security level. -/// Checks if the station security level is at least minimum_level, and if not, sets it to that level. -/// If orange, also sends the engineering override signal to airlocks to enable additional access. -/// Arguments: min_level: number, eng_access: boolean, maint_access: boolean -/datum/round_event/proc/event_minimum_security_level(min_level = SEC_LEVEL_ORANGE, eng_access = TRUE, maint_access = FALSE) - var/sec_level = SSsecurity_level.get_current_level_as_number() - if(sec_level < min_level) - SSsecurity_level.set_level(min_level) - - if(eng_access) - GLOB.force_eng_override = TRUE - SEND_GLOBAL_SIGNAL(COMSIG_GLOB_FORCE_ENG_OVERRIDE, TRUE) - - if(maint_access) - make_maint_all_access() diff --git a/modular_skyrat/modules/goofsec/code/sol_fed.dm b/modular_skyrat/modules/goofsec/code/sol_fed.dm index c517f59c4f0..c79701c5090 100644 --- a/modular_skyrat/modules/goofsec/code/sol_fed.dm +++ b/modular_skyrat/modules/goofsec/code/sol_fed.dm @@ -6,6 +6,7 @@ GLOBAL_VAR(caller_of_911) GLOBAL_VAR(call_911_msg) GLOBAL_VAR(pizza_order) +GLOBAL_VAR_INIT(solfed_tech_charge, -15000) GLOBAL_LIST_INIT(pizza_names, list( "Dixon Buttes", "I. C. Weiner", @@ -74,11 +75,12 @@ GLOBAL_LIST_INIT(call911_do_and_do_not, list( You SHOULD NOT call Marshals for:\n\ Corporate affairs, manhunts, settling arguments, etc.\n\ Are you sure you want to call Marshals?", - EMERGENCY_RESPONSE_ATMOS = "You SHOULD call Breach Control for:\n\ - Stationwide atmospherics loss, unending fires filling the hallways, or department-sized breaches with Engineering and Atmospherics unable to handle it, etc. \n\ - You SHOULD NOT call Breach Control for:\n\ + EMERGENCY_RESPONSE_ATMOS = "You SHOULD call Advanced Atmospherics for:\n\ + Stationwide atmospherics loss, wide-scale supermatter delamination related repairs, unending fires filling the hallways, or department-sized breaches with Engineering and Atmospherics unable to handle it, etc. \n\ + You SHOULD NOT call Advanced Atmospherics for:\n\ A trashcan on fire in the library, a single breached room, heating issues, etc. - especially with capable Engineers/Atmos Techs.\n\ - Are you sure you want to call Breach Control?" + There is a response fee of [abs(GLOB.solfed_tech_charge)] credits per emergency responder.\n\ + Are you sure you want to call Advanced Atmospherics?" )) /// Internal. Polls ghosts and sends in a team of space cops according to the alert level, accompanied by an announcement. @@ -103,16 +105,14 @@ GLOBAL_LIST_INIT(call911_do_and_do_not, list( announcer = "Sol Federation Marshal Department" poll_question = "The station has called for the Marshals. Will you respond?" if(EMERGENCY_RESPONSE_ATMOS) - team_size = 8 + team_size = tgui_input_number(usr, "How many techs would you like dispatched?", "How badly did you screw up?", 3, 3, 1) cops_to_send = /datum/antagonist/ert/request_911/atmos announcement_message = "Crewmembers of [station_name()]. this is the Sol Federation's 811 dispatch. We've recieved a report of stationwide structural damage, atmospherics loss, fire, or otherwise, and we are \ - sending a Breach Control team to support your station.\n\n\ - If the Breach Control team requests that they need SWAT protection to do their job, or to report a faulty 811 call, we will send them in at additional cost to your station to the \ - tune of $20,000.\n\n\ + sending an Advanced Atmospherics team to support your station.\n\n\ The transcript of the call is as follows:\n\ [GLOB.call_911_msg]" - announcer = "Sol Federation 811 Dispatch - Breach Control" - poll_question = "The station has called for a Breach Control team. Will you respond?" + announcer = "Sol Federation 811 Dispatch - Advanced Atmospherics" + poll_question = "The station has called for an advanced engineering support team. Will you respond?" cell_phone_number = "911" //This needs to stay so they can communicate with SWAT if(EMERGENCY_RESPONSE_EMT) team_size = 8 @@ -169,17 +169,23 @@ GLOBAL_LIST_INIT(call911_do_and_do_not, list( SSjob.SendToLateJoin(cop) cop.grant_language(/datum/language/common, TRUE, TRUE, LANGUAGE_SPAWNER) - var/obj/item/gangster_cellphone/phone = new() // biggest gang in the city - phone.gang_id = cell_phone_number - phone.name = "[cell_phone_number] branded cell phone" - phone.w_class = WEIGHT_CLASS_SMALL //They get that COMPACT phone hell yea - var/phone_equipped = phone.equip_to_best_slot(cop) - if(!phone_equipped) - to_chat(cop, "Your [phone.name] has been placed at your feet.") - phone.forceMove(get_turf(cop)) + if(cops_to_send == /datum/antagonist/ert/request_911/atmos) // charge for atmos techs + var/datum/bank_account/station_balance = SSeconomy.get_dep_account(ACCOUNT_CAR) + station_balance?._adjust_money(GLOB.solfed_tech_charge) + else + var/obj/item/gangster_cellphone/phone = new() // biggest gang in the city + phone.gang_id = cell_phone_number + phone.name = "[cell_phone_number] branded cell phone" + phone.w_class = WEIGHT_CLASS_SMALL //They get that COMPACT phone hell yea + var/phone_equipped = phone.equip_to_best_slot(cop) + if(!phone_equipped) + to_chat(cop, "Your [phone.name] has been placed at your feet.") + phone.forceMove(get_turf(cop)) //Logging and cleanup log_game("[key_name(cop)] has been selected as an [ert_antag.name]") + if(cops_to_send == /datum/antagonist/ert/request_911/atmos) + log_game("[abs(GLOB.solfed_tech_charge)] has been charged from the station budget for [key_name(cop)]") agents_number-- GLOB.cops_arrived = TRUE return TRUE @@ -330,49 +336,49 @@ GLOBAL_LIST_INIT(call911_do_and_do_not, list( id_trim = /datum/id_trim/solfed /* -* BREACH CONTROL +* ADVANCED ATMOSPHERICS */ /datum/antagonist/ert/request_911/atmos - name = "Breach Control Technician" - role = "Breach Control Technician" - department = "Breach Control" + name = "Advanced Atmospherics Technician" + role = "Advanced Atmospherics Technician" + department = "Advanced Atmospherics" outfit = /datum/outfit/request_911/atmos /datum/outfit/request_911/atmos - name = "811 Response: Breach Control" - back = /obj/item/mod/control/pre_equipped/atmospheric/breach_control - uniform = /obj/item/clothing/under/rank/engineering/engineer/hazard - shoes = /obj/item/clothing/shoes/workboots - ears = /obj/item/radio/headset/headset_eng - mask = /obj/item/clothing/mask/gas/atmos - belt = /obj/item/storage/belt/utility/full + name = "811 Response: Advanced Atmospherics" + back = /obj/item/mod/control/pre_equipped/advanced/atmos + uniform = /obj/item/clothing/under/rank/engineering/atmospheric_technician/skyrat/utility/advanced + shoes = /obj/item/clothing/shoes/jackboots/peacekeeper + ears = /obj/item/radio/headset/headset_solfed/atmos + mask = /obj/item/clothing/mask/gas/atmos/glass + belt = /obj/item/storage/belt/utility/full/powertools/ircd suit_store = /obj/item/tank/internals/oxygen/yellow id = /obj/item/card/id/advanced/solfed - l_pocket = /obj/item/extinguisher/mini - backpack_contents = list(/obj/item/storage/box/survival = 1, - /obj/item/extinguisher = 1, - /obj/item/storage/box/smart_metal_foam = 2, + backpack_contents = list(/obj/item/storage/box/rcd_ammo = 1, + /obj/item/storage/box/smart_metal_foam = 1, + /obj/item/multitool = 1, + /obj/item/extinguisher/advanced = 1, + /obj/item/rwd/loaded = 1, + /obj/item/beamout_tool = 1, /obj/item/solfed_reporter/swat_caller = 1, - /obj/item/beamout_tool = 1) + ) id_trim = /datum/id_trim/solfed -// Breach control MODsuit -/obj/item/mod/control/pre_equipped/atmospheric/breach_control //Just a different kit as 811 wont be raiding Robotics; otherwise the same look (For now???) - theme = /datum/mod_theme/atmospheric/breach_control - applied_cell = /obj/item/stock_parts/cell/super - applied_modules = list( - /obj/item/mod/module/storage/large_capacity, - /obj/item/mod/module/welding, - /obj/item/mod/module/rad_protection, - /obj/item/mod/module/flashlight, - /obj/item/mod/module/t_ray, - /obj/item/mod/module/tether, - /obj/item/mod/module/visor/meson, - ) +/obj/item/radio/headset/headset_solfed/atmos + name = "\improper SolFed advanced atmos headset" + desc = "A headset used by the Solar Federation response teams." + icon_state = "med_headset" + keyslot = /obj/item/encryptionkey/headset_solfed/atmos + radiosound = 'modular_skyrat/modules/radiosound/sound/radio/security.ogg' -/datum/mod_theme/atmospheric/breach_control //Implement a unique skin for this eventually - ui_theme = "neutral" //Le yellow Sol +/obj/item/encryptionkey/headset_solfed/atmos + name = "\improper SolFed advanced atmos encryption key" + icon_state = "cypherkey_medical" + independent = TRUE + channels = list(RADIO_CHANNEL_SOLFED = 1, RADIO_CHANNEL_ENGINEERING = 1, RADIO_CHANNEL_COMMAND = 1) + greyscale_config = /datum/greyscale_config/encryptionkey_medical + greyscale_colors = "#ebebeb#2b2793" /* * EMT diff --git a/tgstation.dme b/tgstation.dme index f8a6eb2d551..2dd2a83a1da 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -378,6 +378,7 @@ #include "code\__DEFINES\~skyrat_defines\say.dm" #include "code\__DEFINES\~skyrat_defines\security_alerts.dm" #include "code\__DEFINES\~skyrat_defines\signals.dm" +#include "code\__DEFINES\~skyrat_defines\solfed.dm" #include "code\__DEFINES\~skyrat_defines\sound.dm" #include "code\__DEFINES\~skyrat_defines\span.dm" #include "code\__DEFINES\~skyrat_defines\species_clothing_paths.dm" @@ -5433,6 +5434,7 @@ #include "modular_skyrat\modules\admin\code\manage_player_ranks.dm" #include "modular_skyrat\modules\admin\code\sooc.dm" #include "modular_skyrat\modules\admin\code\smites\pie.dm" +#include "modular_skyrat\modules\advanced_engineering\code\adv_engineering.dm" #include "modular_skyrat\modules\advanced_shuttles\code\closet.dm" #include "modular_skyrat\modules\advanced_shuttles\code\computer.dm" #include "modular_skyrat\modules\advanced_shuttles\code\decals.dm" @@ -5500,6 +5502,7 @@ #include "modular_skyrat\modules\alerts\code\default_announcer.dm" #include "modular_skyrat\modules\alerts\code\priority_announce.dm" #include "modular_skyrat\modules\alerts\code\security_level_datums.dm" +#include "modular_skyrat\modules\alerts\code\security_level_procs.dm" #include "modular_skyrat\modules\alt_vox\code\voc_sounds_mil.dm" #include "modular_skyrat\modules\alt_vox\code\vox_procs.dm" #include "modular_skyrat\modules\alt_vox\code\vox_sounds_bms.dm" @@ -6027,7 +6030,6 @@ #include "modular_skyrat\modules\event_vote\code\event_vote.dm" #include "modular_skyrat\modules\events\code\_event_globalvars.dm" #include "modular_skyrat\modules\events\code\event_overrides.dm" -#include "modular_skyrat\modules\events\code\event_seclevel.dm" #include "modular_skyrat\modules\events\code\event_spawner.dm" #include "modular_skyrat\modules\events\code\event_spawner_menu.dm" #include "modular_skyrat\modules\examinemore\code\examine_more.dm" diff --git a/tgui/packages/tgui/interfaces/CommunicationsConsole.js b/tgui/packages/tgui/interfaces/CommunicationsConsole.js index d27090a57d7..9783fd86432 100644 --- a/tgui/packages/tgui/interfaces/CommunicationsConsole.js +++ b/tgui/packages/tgui/interfaces/CommunicationsConsole.js @@ -471,8 +471,8 @@ const PageMain = (props, context) => { {!!canMakeAnnouncement && (