From 424f3ac200697bf2f027bcbd1fd7bd073f9f2455 Mon Sep 17 00:00:00 2001 From: Birdtalon Date: Sat, 22 Sep 2018 14:00:41 +0100 Subject: [PATCH] changes to ERT equipment datums, organises some files a little clearer --- code/game/objects/items/devices/scanners.dm | 10 +- .../objects/items/weapons/storage/belt.dm | 7 + .../objects/items/weapons/storage/lockbox.dm | 10 + .../rig/suits/{ert.dm => ert_suits.dm} | 0 code/modules/response_team/ert.dm | 375 ++++++++++++++ .../response_team/ert_outfits.dm} | 457 +++--------------- code/modules/surgery/organs/augments_arms.dm | 4 +- paradise.dme | 5 +- 8 files changed, 473 insertions(+), 395 deletions(-) rename code/modules/clothing/spacesuits/rig/suits/{ert.dm => ert_suits.dm} (100%) create mode 100644 code/modules/response_team/ert.dm rename code/{game/response_team.dm => modules/response_team/ert_outfits.dm} (50%) diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index c429e40cce4..aa084b42614 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -652,13 +652,11 @@ REAGENT SCANNER var/time_to_use = 0 // How much time remaining before next scan is available. var/usecharge = 750 -/obj/item/bodyanalyzer/New(cell) +/obj/item/bodyanalyzer/advanced + cell_type = /obj/item/stock_parts/cell/upgraded/plus + +/obj/item/bodyanalyzer/New() ..() - if(cell && istype(cell, /obj/item/stock_parts/cell)) - power_supply = new cell(src) - else - power_supply = new cell_type(src) - power_supply.give(power_supply.maxcharge) update_icon() /obj/item/bodyanalyzer/proc/setReady() diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index 9d4481952f5..b1694c6435f 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -210,6 +210,13 @@ new /obj/item/grenade/flashbang(src) update_icon() +/obj/item/storage/belt/security/response_team/gamma/New() + new /obj/item/melee/classic_baton(src) + new /obj/item/reagent_containers/spray/pepper(src) + new /obj/item/flash(src) + new /obj/item/grenade/flashbang(src) + new /obj/item/grenade/flashbang(src) + /obj/item/storage/belt/soulstone name = "soul stone belt" desc = "Designed for ease of access to the shards during a fight, as to not let a single enemy spirit slip away" diff --git a/code/game/objects/items/weapons/storage/lockbox.dm b/code/game/objects/items/weapons/storage/lockbox.dm index d4482c55f14..d461700695d 100644 --- a/code/game/objects/items/weapons/storage/lockbox.dm +++ b/code/game/objects/items/weapons/storage/lockbox.dm @@ -123,3 +123,13 @@ new /obj/item/clothing/accessory/medal/conduct(src) new /obj/item/clothing/accessory/medal/conduct(src) new /obj/item/clothing/accessory/medal/gold/captain(src) + +/obj/item/storage/lockbox/t4 + name = "lockbox (T4)" + desc = "Contains three T4 breaching charges." + req_access = list(access_cent_specops) + +/obj/item/storage/lockbox/t4/New() + ..() + for(var/i = 0, i < 3, i++) + new /obj/item/grenade/plastic/x4/thermite(src) \ No newline at end of file diff --git a/code/modules/clothing/spacesuits/rig/suits/ert.dm b/code/modules/clothing/spacesuits/rig/suits/ert_suits.dm similarity index 100% rename from code/modules/clothing/spacesuits/rig/suits/ert.dm rename to code/modules/clothing/spacesuits/rig/suits/ert_suits.dm diff --git a/code/modules/response_team/ert.dm b/code/modules/response_team/ert.dm new file mode 100644 index 00000000000..b9d8782a8c5 --- /dev/null +++ b/code/modules/response_team/ert.dm @@ -0,0 +1,375 @@ +// ERTs + +#define ERT_TYPE_AMBER 1 +#define ERT_TYPE_RED 2 +#define ERT_TYPE_GAMMA 3 + +/datum/game_mode + var/list/datum/mind/ert = list() + +var/list/response_team_members = list() +var/responseteam_age = 21 // Minimum account age to play as an ERT member +var/datum/response_team/active_team = null +var/send_emergency_team = 0 +var/ert_request_answered = 0 + +/client/proc/response_team() + set name = "Dispatch CentComm Response Team" + set category = "Event" + set desc = "Send an CentComm response team to the station." + + if(!check_rights(R_EVENT)) + return + + if(!ticker) + to_chat(usr, "The game hasn't started yet!") + return + + if(ticker.current_state == 1) + to_chat(usr, "The round hasn't started yet!") + return + + if(send_emergency_team) + to_chat(usr, "Central Command has already dispatched an emergency response team!") + return + + var/datum/nano_module/ert_manager/E = new() + E.ui_interact(usr) + + +/mob/dead/observer/proc/JoinResponseTeam() + if(!send_emergency_team) + to_chat(src, "No emergency response team is currently being sent.") + return 0 + + if(jobban_isbanned(src, ROLE_ERT)) + to_chat(src, "You are jobbanned from the emergency reponse team!") + return 0 + + var/player_age_check = check_client_age(client, responseteam_age) + if(player_age_check && config.use_age_restriction_for_antags) + to_chat(src, "This role is not yet available to you. You need to wait another [player_age_check] days.") + return 0 + + if(cannotPossess(src)) + to_chat(src, "Upon using the antagHUD you forfeited the ability to join the round.") + return 0 + + if(response_team_members.len > 6) + to_chat(src, "The emergency response team is already full!") + return 0 + + return 1 + +/proc/trigger_armed_response_team(var/datum/response_team/response_team_type, commander_slots, security_slots, medical_slots, engineering_slots, janitor_slots, paranormal_slots, cyborg_slots) + response_team_members = list() + active_team = response_team_type + active_team.setSlots(commander_slots, security_slots, medical_slots, engineering_slots, janitor_slots, paranormal_slots, cyborg_slots) + + send_emergency_team = 1 + var/list/ert_candidates = pollCandidates("Join the Emergency Response Team?",, responseteam_age, 600, 1, role_playtime_requirements[ROLE_ERT]) + if(!ert_candidates.len) + active_team.cannot_send_team() + send_emergency_team = 0 + return 0 + + // Respawnable players get first dibs + for(var/mob/dead/observer/M in ert_candidates) + if(jobban_isbanned(M, ROLE_TRAITOR) || jobban_isbanned(M, "Security Officer") || jobban_isbanned(M, "Captain") || jobban_isbanned(M, "Cyborg")) + continue + if((M in respawnable_list) && M.JoinResponseTeam()) + response_team_members |= M + // If there's still open slots, non-respawnable players can fill them + for(var/mob/dead/observer/M in (ert_candidates - respawnable_list)) + if(M.JoinResponseTeam()) + response_team_members |= M + + if(!response_team_members.len) + active_team.cannot_send_team() + send_emergency_team = 0 + return 0 + + var/index = 1 + var/ert_spawn_seconds = 120 + spawn(ert_spawn_seconds * 10) // to account for spawn() using deciseconds + var/list/unspawnable_ert = list() + for(var/mob/M in response_team_members) + if(M) + unspawnable_ert |= M + if(unspawnable_ert.len) + message_admins("ERT SPAWN: The following ERT members could not be spawned within [ert_spawn_seconds] seconds:") + for(var/mob/M in unspawnable_ert) + message_admins("- Unspawned ERT: [ADMIN_FULLMONTY(M)]") + for(var/mob/M in response_team_members) + if(index > emergencyresponseteamspawn.len) + index = 1 + + if(!M || !M.client) + continue + var/client/C = M.client + var/mob/living/new_commando = C.create_response_team(emergencyresponseteamspawn[index]) + if(!M || !new_commando) + continue + new_commando.mind.key = M.key + new_commando.key = M.key + new_commando.update_icons() + index++ + + send_emergency_team = 0 + active_team.announce_team() + return 1 + +/client/proc/create_response_team(var/turf/spawn_location) + var/class = 0 + while(!class) + class = input(src, "Which loadout would you like to choose?") in active_team.get_slot_list() + if(!active_team.check_slot_available(class)) // Because the prompt does not update automatically when a slot gets filled. + class = 0 + + if(class == "Cyborg") + active_team.reduceCyborgSlots() + var/cyborg_unlock = active_team.getCyborgUnlock() + var/mob/living/silicon/robot/ert/R = new /mob/living/silicon/robot/ert(spawn_location, cyborg_unlock) + return R + + var/mob/living/carbon/human/M = new(null) + var/obj/item/organ/external/head/head_organ = M.get_organ("head") + + var/new_gender = alert(src, "Please select your gender.", "ERT Character Generation", "Male", "Female") + + if(new_gender) + if(new_gender == "Male") + M.change_gender(MALE) + else + M.change_gender(FEMALE) + + M.set_species(/datum/species/human, TRUE) + M.dna.ready_dna(M) + M.reagents.add_reagent("mutadone", 1) //No fat/blind/colourblind/epileptic/whatever ERT. + M.overeatduration = 0 + + var/hair_c = pick("#8B4513","#000000","#FF4500","#FFD700") // Brown, black, red, blonde + var/eye_c = pick("#000000","#8B4513","1E90FF") // Black, brown, blue + var/skin_tone = rand(-120, 20) // A range of skin colors + + head_organ.facial_colour = hair_c + head_organ.sec_facial_colour = hair_c + head_organ.hair_colour = hair_c + head_organ.sec_hair_colour = hair_c + M.change_eye_color(eye_c) + M.s_tone = skin_tone + head_organ.h_style = random_hair_style(M.gender, head_organ.dna.species.name) + head_organ.f_style = random_facial_hair_style(M.gender, head_organ.dna.species.name) + + M.rename_character(null, "[pick("Corporal", "Sergeant", "Staff Sergeant", "Sergeant First Class", "Master Sergeant", "Sergeant Major")] [pick(last_names)]") + M.age = rand(23,35) + M.regenerate_icons() + M.update_body() + M.update_dna() + + //Creates mind stuff. + M.mind = new + M.mind.current = M + M.mind.original = M + M.mind.assigned_role = SPECIAL_ROLE_ERT + M.mind.special_role = SPECIAL_ROLE_ERT + if(!(M.mind in ticker.minds)) + ticker.minds += M.mind //Adds them to regular mind list. + ticker.mode.ert += M.mind + M.forceMove(spawn_location) + + job_master.CreateMoneyAccount(M, class, null) + + active_team.equip_officer(class, M) + + return M + + +/datum/response_team + var/command_slots = 1 + var/engineer_slots = 3 + var/medical_slots = 3 + var/security_slots = 3 + var/janitor_slots = 0 + var/paranormal_slots = 0 + var/cyborg_slots = 0 + + var/command_outfit + var/engineering_outfit + var/medical_outfit + var/security_outfit + var/janitor_outfit + var/paranormal_outfit + var/cyborg_unlock = 0 + +/datum/response_team/proc/setSlots(com, sec, med, eng, jan, par, cyb) + command_slots = com == null ? command_slots : com + security_slots = sec == null ? security_slots : sec + medical_slots = med == null ? medical_slots : med + engineer_slots = eng == null ? engineer_slots : eng + janitor_slots = jan == null ? janitor_slots : jan + paranormal_slots = par == null ? paranormal_slots : par + cyborg_slots = cyb == null ? cyborg_slots : cyb + +/datum/response_team/proc/reduceCyborgSlots() + cyborg_slots-- + +/datum/response_team/proc/getCyborgUnlock() + return cyborg_unlock + +/datum/response_team/proc/get_slot_list() + var/list/slots_available = list() + if(command_slots) + slots_available |= "Commander" + if(security_slots) + slots_available |= "Security" + if(engineer_slots) + slots_available |= "Engineer" + if(medical_slots) + slots_available |= "Medic" + if(janitor_slots) + slots_available |= "Janitor" + if(paranormal_slots) + slots_available |= "Paranormal" + if(cyborg_slots) + slots_available |= "Cyborg" + return slots_available + +/datum/response_team/proc/check_slot_available(var/slot) + switch(slot) + if("Commander") + return command_slots + if("Security") + return security_slots + if("Engineer") + return engineer_slots + if("Medic") + return medical_slots + if("Janitor") + return janitor_slots + if("Paranormal") + return paranormal_slots + if("Cyborg") + return cyborg_slots + return 0 + +/datum/response_team/proc/equip_officer(var/officer_type, var/mob/living/carbon/human/M) + switch(officer_type) + if("Engineer") + engineer_slots -= 1 + M.equipOutfit(engineering_outfit) + M.job = "ERT Engineering" + + if("Security") + security_slots -= 1 + M.equipOutfit(security_outfit) + M.job = "ERT Security" + + if("Medic") + medical_slots -= 1 + M.equipOutfit(medical_outfit) + M.job = "ERT Medical" + + if("Janitor") + janitor_slots -= 1 + M.equipOutfit(janitor_outfit) + M.job = "ERT Janitor" + + if("Paranormal") + paranormal_slots -= 1 + M.equipOutfit(paranormal_outfit) + M.job = "ERT Paranormal" + + if("Commander") + command_slots = 0 + + // Override name and age for the commander + M.rename_character(null, "[pick("Lieutenant", "Captain", "Major")] [pick(last_names)]") + M.age = rand(35,45) + + M.equipOutfit(command_outfit) + M.job = "ERT Commander" + +/datum/response_team/proc/cannot_send_team() + event_announcement.Announce("[station_name()], we are unfortunately unable to send you an Emergency Response Team at this time.", "ERT Unavailable") + +/datum/response_team/proc/announce_team() + event_announcement.Announce("Attention, [station_name()]. We are sending a team of highly trained assistants to aid(?) you. Standby.", "ERT En-Route") + +// -- AMBER TEAM -- + +/datum/response_team/amber + engineering_outfit = /datum/outfit/job/centcom/response_team/engineer/amber + security_outfit = /datum/outfit/job/centcom/response_team/security/amber + medical_outfit = /datum/outfit/job/centcom/response_team/medic/amber + command_outfit = /datum/outfit/job/centcom/response_team/commander/amber + janitor_outfit = /datum/outfit/job/centcom/response_team/janitorial/amber + paranormal_outfit = /datum/outfit/job/centcom/response_team/paranormal/amber + +/datum/response_team/amber/announce_team() + event_announcement.Announce("Attention, [station_name()]. We are sending a code AMBER light Emergency Response Team. Standby.", "ERT En-Route") + +// -- RED TEAM -- + +/datum/response_team/red + engineering_outfit = /datum/outfit/job/centcom/response_team/engineer/red + security_outfit = /datum/outfit/job/centcom/response_team/security/red + medical_outfit = /datum/outfit/job/centcom/response_team/medic/red + command_outfit = /datum/outfit/job/centcom/response_team/commander/red + janitor_outfit = /datum/outfit/job/centcom/response_team/janitorial/red + paranormal_outfit = /datum/outfit/job/centcom/response_team/paranormal/red + +/datum/response_team/red/announce_team() + event_announcement.Announce("Attention, [station_name()]. We are sending a code RED Emergency Response Team. Standby.", "ERT En-Route") + +// -- GAMMA TEAM -- + +/datum/response_team/gamma + engineering_outfit = /datum/outfit/job/centcom/response_team/engineer/gamma + security_outfit = /datum/outfit/job/centcom/response_team/security/gamma + medical_outfit = /datum/outfit/job/centcom/response_team/medic/gamma + command_outfit = /datum/outfit/job/centcom/response_team/commander/gamma + janitor_outfit = /datum/outfit/job/centcom/response_team/janitorial/gamma + paranormal_outfit = /datum/outfit/job/centcom/response_team/paranormal/gamma + cyborg_unlock = 1 + +/datum/response_team/gamma/announce_team() + event_announcement.Announce("Attention, [station_name()]. We are sending a code GAMMA elite Emergency Response Team. Standby.", "ERT En-Route") + +/datum/outfit/job/centcom/response_team + name = "Response team" + var/rt_assignment = "Emergency Response Team Member" + var/rt_job = "This is a bug" + allow_backbag_choice = FALSE + allow_loadout = FALSE + pda = /obj/item/pda/heads/ert + id = /obj/item/card/id/ert + l_ear = /obj/item/radio/headset/ert/alt + + implants = list(/obj/item/implant/mindshield) + +/datum/outfit/job/centcom/response_team/pre_equip() + . = ..() + backpack_contents.Insert(1, /obj/item/storage/box/responseteam) + backpack_contents[/obj/item/storage/box/responseteam] = 1 + +/obj/item/radio/centcom + name = "centcomm bounced radio" + frequency = ERT_FREQ + icon_state = "radio" + +/obj/item/storage/box/responseteam/ + name = "boxed survival kit" + +/obj/item/storage/box/responseteam/New() + ..() + contents = list() + sleep(1) + new /obj/item/clothing/mask/breath( src ) + new /obj/item/tank/emergency_oxygen/engi( src ) + new /obj/item/flashlight/flare( src ) + new /obj/item/kitchen/knife/combat( src ) + new /obj/item/radio/centcom( src ) + new /obj/item/reagent_containers/food/pill/salicylic( src ) + new /obj/item/reagent_containers/food/pill/patch/synthflesh( src ) + return diff --git a/code/game/response_team.dm b/code/modules/response_team/ert_outfits.dm similarity index 50% rename from code/game/response_team.dm rename to code/modules/response_team/ert_outfits.dm index 646adfa2038..b7a85700cf7 100644 --- a/code/game/response_team.dm +++ b/code/modules/response_team/ert_outfits.dm @@ -1,357 +1,4 @@ -// ERTs - -#define ERT_TYPE_AMBER 1 -#define ERT_TYPE_RED 2 -#define ERT_TYPE_GAMMA 3 - -/datum/game_mode - var/list/datum/mind/ert = list() - -var/list/response_team_members = list() -var/responseteam_age = 21 // Minimum account age to play as an ERT member -var/datum/response_team/active_team = null -var/send_emergency_team = 0 -var/ert_request_answered = 0 - -/client/proc/response_team() - set name = "Dispatch CentComm Response Team" - set category = "Event" - set desc = "Send an CentComm response team to the station." - - if(!check_rights(R_EVENT)) - return - - if(!ticker) - to_chat(usr, "The game hasn't started yet!") - return - - if(ticker.current_state == 1) - to_chat(usr, "The round hasn't started yet!") - return - - if(send_emergency_team) - to_chat(usr, "Central Command has already dispatched an emergency response team!") - return - - var/datum/nano_module/ert_manager/E = new() - E.ui_interact(usr) - - -/mob/dead/observer/proc/JoinResponseTeam() - if(!send_emergency_team) - to_chat(src, "No emergency response team is currently being sent.") - return 0 - - if(jobban_isbanned(src, ROLE_ERT)) - to_chat(src, "You are jobbanned from the emergency reponse team!") - return 0 - - var/player_age_check = check_client_age(client, responseteam_age) - if(player_age_check && config.use_age_restriction_for_antags) - to_chat(src, "This role is not yet available to you. You need to wait another [player_age_check] days.") - return 0 - - if(cannotPossess(src)) - to_chat(src, "Upon using the antagHUD you forfeited the ability to join the round.") - return 0 - - if(response_team_members.len > 6) - to_chat(src, "The emergency response team is already full!") - return 0 - - return 1 - -/proc/trigger_armed_response_team(var/datum/response_team/response_team_type, commander_slots, security_slots, medical_slots, engineering_slots, janitor_slots, paranormal_slots, cyborg_slots) - response_team_members = list() - active_team = response_team_type - active_team.setSlots(commander_slots, security_slots, medical_slots, engineering_slots, janitor_slots, paranormal_slots, cyborg_slots) - - send_emergency_team = 1 - var/list/ert_candidates = pollCandidates("Join the Emergency Response Team?",, responseteam_age, 600, 1, role_playtime_requirements[ROLE_ERT]) - if(!ert_candidates.len) - active_team.cannot_send_team() - send_emergency_team = 0 - return 0 - - // Respawnable players get first dibs - for(var/mob/dead/observer/M in ert_candidates) - if(jobban_isbanned(M, ROLE_TRAITOR) || jobban_isbanned(M, "Security Officer") || jobban_isbanned(M, "Captain") || jobban_isbanned(M, "Cyborg")) - continue - if((M in respawnable_list) && M.JoinResponseTeam()) - response_team_members |= M - // If there's still open slots, non-respawnable players can fill them - for(var/mob/dead/observer/M in (ert_candidates - respawnable_list)) - if(M.JoinResponseTeam()) - response_team_members |= M - - if(!response_team_members.len) - active_team.cannot_send_team() - send_emergency_team = 0 - return 0 - - var/index = 1 - var/ert_spawn_seconds = 120 - spawn(ert_spawn_seconds * 10) // to account for spawn() using deciseconds - var/list/unspawnable_ert = list() - for(var/mob/M in response_team_members) - if(M) - unspawnable_ert |= M - if(unspawnable_ert.len) - message_admins("ERT SPAWN: The following ERT members could not be spawned within [ert_spawn_seconds] seconds:") - for(var/mob/M in unspawnable_ert) - message_admins("- Unspawned ERT: [ADMIN_FULLMONTY(M)]") - for(var/mob/M in response_team_members) - if(index > emergencyresponseteamspawn.len) - index = 1 - - if(!M || !M.client) - continue - var/client/C = M.client - var/mob/living/new_commando = C.create_response_team(emergencyresponseteamspawn[index]) - if(!M || !new_commando) - continue - new_commando.mind.key = M.key - new_commando.key = M.key - new_commando.update_icons() - index++ - - send_emergency_team = 0 - active_team.announce_team() - return 1 - -/client/proc/create_response_team(var/turf/spawn_location) - var/class = 0 - while(!class) - class = input(src, "Which loadout would you like to choose?") in active_team.get_slot_list() - if(!active_team.check_slot_available(class)) // Because the prompt does not update automatically when a slot gets filled. - class = 0 - - if(class == "Cyborg") - active_team.reduceCyborgSlots() - var/cyborg_unlock = active_team.getCyborgUnlock() - var/mob/living/silicon/robot/ert/R = new /mob/living/silicon/robot/ert(spawn_location, cyborg_unlock) - return R - - var/mob/living/carbon/human/M = new(null) - var/obj/item/organ/external/head/head_organ = M.get_organ("head") - - var/new_gender = alert(src, "Please select your gender.", "ERT Character Generation", "Male", "Female") - - if(new_gender) - if(new_gender == "Male") - M.change_gender(MALE) - else - M.change_gender(FEMALE) - - M.set_species(/datum/species/human, TRUE) - M.dna.ready_dna(M) - M.reagents.add_reagent("mutadone", 1) //No fat/blind/colourblind/epileptic/whatever ERT. - M.overeatduration = 0 - - var/hair_c = pick("#8B4513","#000000","#FF4500","#FFD700") // Brown, black, red, blonde - var/eye_c = pick("#000000","#8B4513","1E90FF") // Black, brown, blue - var/skin_tone = rand(-120, 20) // A range of skin colors - - head_organ.facial_colour = hair_c - head_organ.sec_facial_colour = hair_c - head_organ.hair_colour = hair_c - head_organ.sec_hair_colour = hair_c - M.change_eye_color(eye_c) - M.s_tone = skin_tone - head_organ.h_style = random_hair_style(M.gender, head_organ.dna.species.name) - head_organ.f_style = random_facial_hair_style(M.gender, head_organ.dna.species.name) - - M.rename_character(null, "[pick("Corporal", "Sergeant", "Staff Sergeant", "Sergeant First Class", "Master Sergeant", "Sergeant Major")] [pick(last_names)]") - M.age = rand(23,35) - M.regenerate_icons() - M.update_body() - M.update_dna() - - //Creates mind stuff. - M.mind = new - M.mind.current = M - M.mind.original = M - M.mind.assigned_role = SPECIAL_ROLE_ERT - M.mind.special_role = SPECIAL_ROLE_ERT - if(!(M.mind in ticker.minds)) - ticker.minds += M.mind //Adds them to regular mind list. - ticker.mode.ert += M.mind - M.forceMove(spawn_location) - - job_master.CreateMoneyAccount(M, class, null) - - active_team.equip_officer(class, M) - - return M - - -/datum/response_team - var/command_slots = 1 - var/engineer_slots = 3 - var/medical_slots = 3 - var/security_slots = 3 - var/janitor_slots = 0 - var/paranormal_slots = 0 - var/cyborg_slots = 0 - - var/command_outfit - var/engineering_outfit - var/medical_outfit - var/security_outfit - var/janitor_outfit - var/paranormal_outfit - var/cyborg_unlock = 0 - -/datum/response_team/proc/setSlots(com, sec, med, eng, jan, par, cyb) - command_slots = com == null ? command_slots : com - security_slots = sec == null ? security_slots : sec - medical_slots = med == null ? medical_slots : med - engineer_slots = eng == null ? engineer_slots : eng - janitor_slots = jan == null ? janitor_slots : jan - paranormal_slots = par == null ? paranormal_slots : par - cyborg_slots = cyb == null ? cyborg_slots : cyb - -/datum/response_team/proc/reduceCyborgSlots() - cyborg_slots-- - -/datum/response_team/proc/getCyborgUnlock() - return cyborg_unlock - -/datum/response_team/proc/get_slot_list() - var/list/slots_available = list() - if(command_slots) - slots_available |= "Commander" - if(security_slots) - slots_available |= "Security" - if(engineer_slots) - slots_available |= "Engineer" - if(medical_slots) - slots_available |= "Medic" - if(janitor_slots) - slots_available |= "Janitor" - if(paranormal_slots) - slots_available |= "Paranormal" - if(cyborg_slots) - slots_available |= "Cyborg" - return slots_available - -/datum/response_team/proc/check_slot_available(var/slot) - switch(slot) - if("Commander") - return command_slots - if("Security") - return security_slots - if("Engineer") - return engineer_slots - if("Medic") - return medical_slots - if("Janitor") - return janitor_slots - if("Paranormal") - return paranormal_slots - if("Cyborg") - return cyborg_slots - return 0 - -/datum/response_team/proc/equip_officer(var/officer_type, var/mob/living/carbon/human/M) - switch(officer_type) - if("Engineer") - engineer_slots -= 1 - M.equipOutfit(engineering_outfit) - M.job = "ERT Engineering" - - if("Security") - security_slots -= 1 - M.equipOutfit(security_outfit) - M.job = "ERT Security" - - if("Medic") - medical_slots -= 1 - M.equipOutfit(medical_outfit) - M.job = "ERT Medical" - - if("Janitor") - janitor_slots -= 1 - M.equipOutfit(janitor_outfit) - M.job = "ERT Janitor" - - if("Paranormal") - paranormal_slots -= 1 - M.equipOutfit(paranormal_outfit) - M.job = "ERT Paranormal" - - if("Commander") - command_slots = 0 - - // Override name and age for the commander - M.rename_character(null, "[pick("Lieutenant", "Captain", "Major")] [pick(last_names)]") - M.age = rand(35,45) - - M.equipOutfit(command_outfit) - M.job = "ERT Commander" - -/datum/response_team/proc/cannot_send_team() - event_announcement.Announce("[station_name()], we are unfortunately unable to send you an Emergency Response Team at this time.", "ERT Unavailable") - -/datum/response_team/proc/announce_team() - event_announcement.Announce("Attention, [station_name()]. We are sending a team of highly trained assistants to aid(?) you. Standby.", "ERT En-Route") - -// -- AMBER TEAM -- - -/datum/response_team/amber - engineering_outfit = /datum/outfit/job/centcom/response_team/engineer/amber - security_outfit = /datum/outfit/job/centcom/response_team/security/amber - medical_outfit = /datum/outfit/job/centcom/response_team/medic/amber - command_outfit = /datum/outfit/job/centcom/response_team/commander/amber - janitor_outfit = /datum/outfit/job/centcom/response_team/janitorial/amber - paranormal_outfit = /datum/outfit/job/centcom/response_team/paranormal/amber - -/datum/response_team/amber/announce_team() - event_announcement.Announce("Attention, [station_name()]. We are sending a code AMBER light Emergency Response Team. Standby.", "ERT En-Route") - -// -- RED TEAM -- - -/datum/response_team/red - engineering_outfit = /datum/outfit/job/centcom/response_team/engineer/red - security_outfit = /datum/outfit/job/centcom/response_team/security/red - medical_outfit = /datum/outfit/job/centcom/response_team/medic/red - command_outfit = /datum/outfit/job/centcom/response_team/commander/red - janitor_outfit = /datum/outfit/job/centcom/response_team/janitorial/red - paranormal_outfit = /datum/outfit/job/centcom/response_team/paranormal/red - -/datum/response_team/red/announce_team() - event_announcement.Announce("Attention, [station_name()]. We are sending a code RED Emergency Response Team. Standby.", "ERT En-Route") - -// -- GAMMA TEAM -- - -/datum/response_team/gamma - engineering_outfit = /datum/outfit/job/centcom/response_team/engineer/gamma - security_outfit = /datum/outfit/job/centcom/response_team/security/gamma - medical_outfit = /datum/outfit/job/centcom/response_team/medic/gamma - command_outfit = /datum/outfit/job/centcom/response_team/commander/gamma - janitor_outfit = /datum/outfit/job/centcom/response_team/janitorial/gamma - paranormal_outfit = /datum/outfit/job/centcom/response_team/paranormal/gamma - cyborg_unlock = 1 - -/datum/response_team/gamma/announce_team() - event_announcement.Announce("Attention, [station_name()]. We are sending a code GAMMA elite Emergency Response Team. Standby.", "ERT En-Route") - -/datum/outfit/job/centcom/response_team - name = "Response team" - var/rt_assignment = "Emergency Response Team Member" - var/rt_job = "This is a bug" - allow_backbag_choice = FALSE - allow_loadout = FALSE - pda = /obj/item/pda/heads/ert - id = /obj/item/card/id/ert - l_ear = /obj/item/radio/headset/ert/alt - - implants = list(/obj/item/implant/mindshield) - -/datum/outfit/job/centcom/response_team/pre_equip() - . = ..() - backpack_contents.Insert(1, /obj/item/storage/box/responseteam) - backpack_contents[/obj/item/storage/box/responseteam] = 1 +/* ERT OUTFIT DATUMS */ /datum/outfit/job/centcom/response_team/imprint_idcard(mob/living/carbon/human/H) var/obj/item/card/id/W = H.wear_id @@ -376,6 +23,9 @@ var/ert_request_answered = 0 PDA.ownrank = rt_assignment PDA.name = "PDA-[H.real_name] ([PDA.ownjob])" + +//////////////////// COMMANDER /////////////////// + /datum/outfit/job/centcom/response_team/commander name = "RT Commander" rt_assignment = "Emergency Response Team Leader" @@ -427,18 +77,30 @@ var/ert_request_answered = 0 shoes = /obj/item/clothing/shoes/magboots/advance gloves = /obj/item/clothing/gloves/combat suit = /obj/item/clothing/suit/space/hardsuit/ert/commander - glasses = /obj/item/clothing/glasses/hud/security/night + glasses = /obj/item/clothing/glasses/night + suit_store = /obj/item/gun/energy/gun/blueshield/pdw9 - belt = /obj/item/gun/energy/gun/nuclear + belt = /obj/item/gun/projectile/automatic/pistol/enforcer backpack_contents = list( + /obj/item/storage/box/responseteam/ = 1, /obj/item/clothing/head/helmet/space/hardsuit/ert/commander = 1, /obj/item/clothing/mask/gas/sechailer/swat = 1, /obj/item/restraints/handcuffs = 1, /obj/item/storage/lockbox/mindshield = 1, - /obj/item/gun/energy/pulse/pistol = 1 + /obj/item/gun/energy/ionrifle/carbine = 1, + /obj/item/ammo_box/magazine/m45/enforcer45/lethal = 2, ) + cybernetic_implants = list( + /obj/item/organ/internal/cyberimp/chest/nutriment/plus, + /obj/item/organ/internal/cyberimp/eyes/hud/security, + /obj/item/organ/internal/cyberimp/brain/anti_stun, + /obj/item/organ/internal/cyberimp/arm/flash + ) + +//////////////////// SECURITY /////////////////// + /datum/outfit/job/centcom/response_team/security name = "RT Security" rt_job = "Emergency Response Team Officer" @@ -500,18 +162,35 @@ var/ert_request_answered = 0 shoes = /obj/item/clothing/shoes/magboots/advance gloves = /obj/item/clothing/gloves/combat suit = /obj/item/clothing/suit/space/hardsuit/ert/security + belt = /obj/item/storage/belt/security/response_team/gamma suit_store = /obj/item/gun/energy/gun/nuclear - glasses = /obj/item/clothing/glasses/hud/security/night + glasses = /obj/item/clothing/glasses/night + l_pocket = /obj/item/restraints/legcuffs/bola/energy + r_pocket = /obj/item/extinguisher/mini - r_hand = /obj/item/gun/energy/pulse/carbine + r_hand = /obj/item/gun/energy/immolator/multi backpack_contents = list( /obj/item/clothing/head/helmet/space/hardsuit/ert/security = 1, /obj/item/clothing/mask/gas/sechailer/swat = 1, /obj/item/storage/box/handcuffs = 1, - /obj/item/gun/energy/ionrifle/carbine = 1 + /obj/item/storage/box/flashbangs = 1, + /obj/item/storage/box/responseteam/ = 1, + /obj/item/whetstone = 1, + /obj/item/storage/lockbox/t4 = 1, ) + cybernetic_implants = list( + /obj/item/organ/internal/cyberimp/chest/nutriment/plus, + /obj/item/organ/internal/cyberimp/eyes/hud/security, + /obj/item/organ/internal/cyberimp/brain/anti_stun, + /obj/item/organ/internal/cyberimp/arm/telebaton, + /obj/item/organ/internal/cyberimp/chest/reviver, + ) + + +//////////////////// ENGINEER /////////////////// + /datum/outfit/job/centcom/response_team/engineer name = "RT Engineer" rt_job = "Emergency Response Team Engineer" @@ -563,8 +242,9 @@ var/ert_request_answered = 0 name = "RT Engineer (Gamma)" shoes = /obj/item/clothing/shoes/magboots/advance gloves = /obj/item/clothing/gloves/color/yellow + belt = /obj/item/storage/belt/utility/chief/full suit = /obj/item/clothing/suit/space/hardsuit/ert/engineer - suit_store = /obj/item/tank/emergency_oxygen/double/full + suit_store = /obj/item/gun/energy/gun/blueshield/pdw9 glasses = /obj/item/clothing/glasses/meson/night l_pocket = /obj/item/t_scanner/extended_range @@ -575,9 +255,19 @@ var/ert_request_answered = 0 /obj/item/clothing/mask/gas/sechailer/swat = 1, /obj/item/rcd/combat = 1, /obj/item/rcd_ammo/large = 3, - /obj/item/gun/energy/pulse/pistol = 1 + /obj/item/storage/box/responseteam/ = 1 ) + cybernetic_implants = list( + /obj/item/organ/internal/cyberimp/chest/nutriment/plus, + /obj/item/organ/internal/cyberimp/eyes/hud/security, + /obj/item/organ/internal/cyberimp/brain/anti_stun, + /obj/item/organ/internal/cyberimp/eyes/shield, + /obj/item/organ/internal/cyberimp/arm/toolset, + ) + +//////////////////// MEDIC /////////////////// + /datum/outfit/job/centcom/response_team/medic name = "RT Medic" rt_job = "Emergency Response Team Medic" @@ -636,20 +326,35 @@ var/ert_request_answered = 0 shoes = /obj/item/clothing/shoes/magboots/advance gloves = /obj/item/clothing/gloves/combat suit = /obj/item/clothing/suit/space/hardsuit/ert/medical - glasses = /obj/item/clothing/glasses/hud/health/night + glasses = /obj/item/clothing/glasses/night + suit_store = /obj/item/gun/energy/gun/blueshield/pdw9 belt = /obj/item/defibrillator/compact/loaded l_pocket = /obj/item/reagent_containers/hypospray/combat/nanites + r_pocket = /obj/item/reagent_containers/hypospray/autoinjector r_hand = /obj/item/gun/medbeam backpack_contents = list( /obj/item/clothing/head/helmet/space/hardsuit/ert/medical = 1, /obj/item/clothing/mask/gas/sechailer/swat = 1, - /obj/item/storage/firstaid/surgery = 1, - /obj/item/gun/energy/pulse/pistol = 1 + /obj/item/storage/box/responseteam/ = 1, + /obj/item/bodyanalyzer/advanced = 1, + /obj/item/extinguisher/mini = 1, + /obj/item/storage/belt/medical/response_team = 1, + /obj/structure/stool/bed/roller = 1, + ) + + cybernetic_implants = list( + /obj/item/organ/internal/cyberimp/chest/nutriment/plus, + /obj/item/organ/internal/cyberimp/eyes/hud/medical, + /obj/item/organ/internal/cyberimp/brain/anti_stun, + /obj/item/organ/internal/cyberimp/arm/surgery, + /obj/item/organ/internal/cyberimp/arm/medibeam ) +//////////////////// PARANORMAL /////////////////// + /datum/outfit/job/centcom/response_team/paranormal name = "RT Paranormal" rt_job = "Emergency Response Team Inquisitor" @@ -689,6 +394,8 @@ var/ert_request_answered = 0 l_pocket = /obj/item/grenade/clusterbuster/holy shoes = /obj/item/clothing/shoes/magboots/advance +//////////////////// JANITORIAL /////////////////// + /datum/outfit/job/centcom/response_team/janitorial name = "RT Janitor" rt_job = "Emergency Response Team Janitor" @@ -732,23 +439,3 @@ var/ert_request_answered = 0 r_pocket = /obj/item/grenade/clusterbuster/antiweed shoes = /obj/item/clothing/shoes/magboots/advance -/obj/item/radio/centcom - name = "centcomm bounced radio" - frequency = ERT_FREQ - icon_state = "radio" - -/obj/item/storage/box/responseteam/ - name = "boxed survival kit" - -/obj/item/storage/box/responseteam/New() - ..() - contents = list() - sleep(1) - new /obj/item/clothing/mask/breath( src ) - new /obj/item/tank/emergency_oxygen/engi( src ) - new /obj/item/flashlight/flare( src ) - new /obj/item/kitchen/knife/combat( src ) - new /obj/item/radio/centcom( src ) - new /obj/item/reagent_containers/food/pill/salicylic( src ) - new /obj/item/reagent_containers/food/pill/patch/synthflesh( src ) - return diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm index 8ac3c2b82f6..3354f20c2f6 100644 --- a/code/modules/surgery/organs/augments_arms.dm +++ b/code/modules/surgery/organs/augments_arms.dm @@ -323,6 +323,6 @@ /obj/item/organ/internal/cyberimp/arm/telebaton name = "telebaton implant" - desc = "Telescopic baton implant." + desc = "Telescopic baton implant. Does what it says on the tin" // A better description - var/list/items_list = list(/obj/item/melee/classic_baton/telescopic) \ No newline at end of file + contents = newlist(/obj/item/melee/classic_baton/telescopic) \ No newline at end of file diff --git a/paradise.dme b/paradise.dme index 7c4deb70dd2..5668eb0d1bc 100644 --- a/paradise.dme +++ b/paradise.dme @@ -389,7 +389,6 @@ #include "code\game\atoms.dm" #include "code\game\atoms_movable.dm" #include "code\game\data_huds.dm" -#include "code\game\response_team.dm" #include "code\game\shuttle_engines.dm" #include "code\game\sound.dm" #include "code\game\world.dm" @@ -1278,7 +1277,7 @@ #include "code\modules\clothing\spacesuits\rig\modules\vision.dm" #include "code\modules\clothing\spacesuits\rig\suits\alien.dm" #include "code\modules\clothing\spacesuits\rig\suits\combat.dm" -#include "code\modules\clothing\spacesuits\rig\suits\ert.dm" +#include "code\modules\clothing\spacesuits\rig\suits\ert_suits.dm" #include "code\modules\clothing\spacesuits\rig\suits\light.dm" #include "code\modules\clothing\spacesuits\rig\suits\merc.dm" #include "code\modules\clothing\spacesuits\rig\suits\station.dm" @@ -2150,6 +2149,8 @@ #include "code\modules\research\designs\weapon_designs.dm" #include "code\modules\research\xenobiology\xenobio_camera.dm" #include "code\modules\research\xenobiology\xenobiology.dm" +#include "code\modules\response_team\ert.dm" +#include "code\modules\response_team\ert_outfits.dm" #include "code\modules\ruins\ruin_areas.dm" #include "code\modules\scripting\__defines.dm" #include "code\modules\scripting\Errors.dm"