diff --git a/code/datums/outfits/outfit.dm b/code/datums/outfits/outfit.dm index 842e162517c..8c172f3592f 100644 --- a/code/datums/outfits/outfit.dm +++ b/code/datums/outfits/outfit.dm @@ -90,7 +90,7 @@ for(var/path in backpack_contents) var/number = backpack_contents[path] for(var/i in 1 to number) - H.equip_to_slot_or_del(new path(H), slot_in_backpack) + H.equip_or_collect(new path(H), slot_in_backpack) for(var/path in cybernetic_implants) var/obj/item/organ/internal/O = new path(H) diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index 8c061800020..019d9a2319e 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -8,7 +8,7 @@ idle_power_usage = 4 active_power_usage = 250 var/obj/item/charging = null - var/list/allowed_devices = list(/obj/item/gun/energy, /obj/item/melee/baton, /obj/item/modular_computer, /obj/item/rcs) + var/list/allowed_devices = list(/obj/item/gun/energy, /obj/item/melee/baton, /obj/item/modular_computer, /obj/item/rcs, /obj/item/bodyanalyzer) var/icon_state_off = "rechargeroff" var/icon_state_charged = "recharger2" var/icon_state_charging = "recharger1" @@ -115,6 +115,13 @@ if(R.rcell.give(R.rcell.chargerate)) use_power(200) using_power = 1 + + if(istype(charging, /obj/item/bodyanalyzer)) + var/obj/item/bodyanalyzer/B = charging + if(B.power_supply) + if(B.power_supply.give(B.power_supply.chargerate)) + use_power(200) + using_power = 1 update_icon(using_power) diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 2a398363c7f..98e217d25fa 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -632,3 +632,253 @@ REAGENT SCANNER if(T.cores > 1) user.show_message("Anomalous slime core amount detected", 1) user.show_message("Growth progress: [T.amount_grown]/10", 1) + +/obj/item/bodyanalyzer + name = "handheld body analyzer" + icon = 'icons/obj/device.dmi' + icon_state = "bodyanalyzer_0" + item_state = "healthanalyser" + desc = "A handheld scanner capable of deep-scanning an entire body." + slot_flags = SLOT_BELT + throwforce = 3 + w_class = WEIGHT_CLASS_TINY + throw_speed = 5 + throw_range = 10 + origin_tech = "magnets=6;biotech=6" + var/obj/item/stock_parts/cell/power_supply + var/cell_type = /obj/item/stock_parts/cell/upgraded + var/ready = TRUE // Ready to scan + var/time_to_use = 0 // How much time remaining before next scan is available. + var/usecharge = 750 + +/obj/item/bodyanalyzer/advanced + cell_type = /obj/item/stock_parts/cell/upgraded/plus + +/obj/item/bodyanalyzer/New() + ..() + power_supply = new cell_type(src) + power_supply.give(power_supply.maxcharge) + update_icon() + +/obj/item/bodyanalyzer/proc/setReady() + ready = TRUE + playsound(src, 'sound/machines/defib_saftyOn.ogg', 50, 0) + update_icon() + +/obj/item/bodyanalyzer/update_icon(printing = FALSE) + overlays.Cut() + var/percent = power_supply.percent() + if(ready) + icon_state = "bodyanalyzer_1" + else + icon_state = "bodyanalyzer_2" + + var/overlayid = round(percent / 10) + overlayid = "bodyanalyzer_charge[overlayid]" + overlays += icon(icon, overlayid) + + if(printing) + overlays += icon(icon, "bodyanalyzer_printing") + +/obj/item/bodyanalyzer/attack(mob/living/M, mob/living/carbon/human/user) + if(user.incapacitated() || !user.Adjacent(M)) + return + + if(!ready) + to_chat(user, "The scanner beeps angrily at you! It's currently recharging - [round((time_to_use - world.time) * 0.1)] seconds remaining.") + playsound(user.loc, 'sound/machines/buzz-sigh.ogg', 50, 1) + return + + if(power_supply.charge >= usecharge) + mobScan(M, user) + else + to_chat(user, "The scanner beeps angrily at you! It's out of charge!") + playsound(user.loc, 'sound/machines/buzz-sigh.ogg', 50, 1) + +/obj/item/bodyanalyzer/proc/mobScan(mob/living/M, mob/user) + if(ishuman(M)) + var/report = generate_printing_text(M, user) + user.visible_message("[user] begins scanning [M] with [src].", "You begin scanning [M].") + if(do_after(user, 100, target = M)) + var/obj/item/paper/printout = new + printout.info = report + printout.name = "Scan report - [M.name]" + playsound(user.loc, 'sound/goonstation/machines/printer_dotmatrix.ogg', 50, 1) + user.put_in_hands(printout) + time_to_use = world.time + 600 + power_supply.use(usecharge) + ready = FALSE + update_icon(TRUE) + addtimer(CALLBACK(src, /obj/item/bodyanalyzer/.proc/setReady), 600) + addtimer(CALLBACK(src, /obj/item/bodyanalyzer/.proc/update_icon), 20) + + else if(iscorgi(M) && M.stat == DEAD) + to_chat(user, "You wonder if [M.p_they()] was a good dog. [src] tells you they were the best...") // :'( + playsound(loc, 'sound/machines/ping.ogg', 50, 0) + ready = FALSE + addtimer(CALLBACK(src, /obj/item/bodyanalyzer/.proc/setReady), 600) + time_to_use = world.time + 600 + else + to_chat(user, "Scanning error detected. Invalid specimen.") + +//Unashamedly ripped from adv_med.dm +/obj/item/bodyanalyzer/proc/generate_printing_text(mob/living/M, mob/user) + var/dat = "" + var/mob/living/carbon/human/target = M + + dat = "Target Statistics:
" + var/t1 + switch(target.stat) // obvious, see what their status is + if(CONSCIOUS) + t1 = "Conscious" + if(UNCONSCIOUS) + t1 = "Unconscious" + else + t1 = "*dead*" + dat += "[target.health > 50 ? "" : ""]\tHealth %: [target.health], ([t1])
" + + var/found_disease = FALSE + for(var/thing in target.viruses) + var/datum/disease/D = thing + if(D.visibility_flags) //If any visibility flags are on. + continue + found_disease = TRUE + break + if(found_disease) + dat += "Disease detected in target.
" + + var/extra_font = null + extra_font = (target.getBruteLoss() < 60 ? "" : "") + dat += "[extra_font]\t-Brute Damage %: [target.getBruteLoss()]
" + + extra_font = (target.getOxyLoss() < 60 ? "" : "") + dat += "[extra_font]\t-Respiratory Damage %: [target.getOxyLoss()]
" + + extra_font = (target.getToxLoss() < 60 ? "" : "") + dat += "[extra_font]\t-Toxin Content %: [target.getToxLoss()]
" + + extra_font = (target.getFireLoss() < 60 ? "" : "") + dat += "[extra_font]\t-Burn Severity %: [target.getFireLoss()]
" + + extra_font = (target.radiation < 10 ?"" : "") + dat += "[extra_font]\tRadiation Level %: [target.radiation]
" + + extra_font = (target.getCloneLoss() < 1 ?"" : "") + dat += "[extra_font]\tGenetic Tissue Damage %: [target.getCloneLoss()]
" + + extra_font = (target.getBrainLoss() < 1 ?"" : "") + dat += "[extra_font]\tApprox. Brain Damage %: [target.getBrainLoss()]
" + + dat += "Paralysis Summary %: [target.paralysis] ([round(target.paralysis / 4)] seconds left!)
" + dat += "Body Temperature: [target.bodytemperature-T0C]°C ([target.bodytemperature*1.8-459.67]°F)
" + + dat += "
" + + if(target.has_brain_worms()) + dat += "Large growth detected in frontal lobe, possibly cancerous. Surgical removal is recommended.
" + + var/blood_percent = round((target.blood_volume / BLOOD_VOLUME_NORMAL)) + blood_percent *= 100 + + extra_font = (target.blood_volume > 448 ? "" : "") + dat += "[extra_font]\tBlood Level %: [blood_percent] ([target.blood_volume] units)
" + + if(target.reagents) + dat += "Epinephrine units: [target.reagents.get_reagent_amount("Epinephrine")] units
" + dat += "Ether: [target.reagents.get_reagent_amount("ether")] units
" + + extra_font = (target.reagents.get_reagent_amount("silver_sulfadiazine") < 30 ? "" : "") + dat += "[extra_font]\tSilver Sulfadiazine: [target.reagents.get_reagent_amount("silver_sulfadiazine")]
" + + extra_font = (target.reagents.get_reagent_amount("styptic_powder") < 30 ? "" : "") + dat += "[extra_font]\tStyptic Powder: [target.reagents.get_reagent_amount("styptic_powder")] units
" + + extra_font = (target.reagents.get_reagent_amount("salbutamol") < 30 ? "" : "") + dat += "[extra_font]\tSalbutamol: [target.reagents.get_reagent_amount("salbutamol")] units
" + + dat += "
" + dat += "" + dat += "" + dat += "" + dat += "" + dat += "" + dat += "" + + for(var/obj/item/organ/external/e in target.bodyparts) + dat += "" + var/AN = "" + var/open = "" + var/infected = "" + var/robot = "" + var/imp = "" + var/bled = "" + var/splint = "" + var/internal_bleeding = "" + var/lung_ruptured = "" + if(e.internal_bleeding) + internal_bleeding = "
Internal bleeding" + if(istype(e, /obj/item/organ/external/chest) && target.is_lung_ruptured()) + lung_ruptured = "Lung ruptured:" + if(e.status & ORGAN_SPLINTED) + splint = "Splinted:" + if(e.status & ORGAN_BROKEN) + AN = "[e.broken_description]:" + if(e.is_robotic()) + robot = "Robotic:" + if(e.open) + open = "Open:" + switch(e.germ_level) + if(INFECTION_LEVEL_ONE to INFECTION_LEVEL_ONE + 200) + infected = "Mild Infection:" + if(INFECTION_LEVEL_ONE + 200 to INFECTION_LEVEL_ONE + 300) + infected = "Mild Infection+:" + if(INFECTION_LEVEL_ONE + 300 to INFECTION_LEVEL_ONE + 400) + infected = "Mild Infection++:" + if(INFECTION_LEVEL_TWO to INFECTION_LEVEL_TWO + 200) + infected = "Acute Infection:" + if(INFECTION_LEVEL_TWO + 200 to INFECTION_LEVEL_TWO + 300) + infected = "Acute Infection+:" + if(INFECTION_LEVEL_TWO + 300 to INFECTION_LEVEL_TWO + 400) + infected = "Acute Infection++:" + if(INFECTION_LEVEL_THREE to INFINITY) + infected = "Septic:" + + var/unknown_body = 0 + for(var/I in e.embedded_objects) + unknown_body++ + + if(unknown_body || e.hidden) + imp += "Unknown body present:" + if(!AN && !open && !infected & !imp) + AN = "None:" + dat += "" + dat += "" + for(var/obj/item/organ/internal/i in target.internal_organs) + var/mech = i.desc + var/infection = "None" + switch(i.germ_level) + if(1 to INFECTION_LEVEL_ONE + 200) + infection = "Mild Infection:" + if(INFECTION_LEVEL_ONE + 200 to INFECTION_LEVEL_ONE + 300) + infection = "Mild Infection+:" + if(INFECTION_LEVEL_ONE + 300 to INFECTION_LEVEL_ONE + 400) + infection = "Mild Infection++:" + if(INFECTION_LEVEL_TWO to INFECTION_LEVEL_TWO + 200) + infection = "Acute Infection:" + if(INFECTION_LEVEL_TWO + 200 to INFECTION_LEVEL_TWO + 300) + infection = "Acute Infection+:" + if(INFECTION_LEVEL_TWO + 300 to INFINITY) + infection = "Acute Infection++:" + + dat += "" + dat += "" + dat += "" + dat += "
OrganBurn DamageBrute DamageOther Wounds
[e.name][e.burn_dam][e.brute_dam][robot][bled][AN][splint][open][infected][imp][internal_bleeding][lung_ruptured]
[i.name]N/A[i.damage][infection]:[mech]
" + if(target.disabilities & BLIND) + dat += "Cataracts detected.
" + if(target.disabilities & COLOURBLIND) + dat += "Photoreceptor abnormalities detected.
" + if(target.disabilities & NEARSIGHTED) + dat += "Retinal misalignment detected.
" + + return dat diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm index edf7e0fc32b..26639543426 100644 --- a/code/game/objects/items/weapons/explosives.dm +++ b/code/game/objects/items/weapons/explosives.dm @@ -60,7 +60,7 @@ if(nadeassembly) nadeassembly.attack_self(user) return - var/newtime = input(usr, "Please set the timer.", "Timer", 10) as num + var/newtime = input(usr, "Please set the timer.", "Timer", det_time) as num if(user.is_in_active_hand(src)) newtime = Clamp(newtime, 10, 60000) det_time = newtime @@ -231,3 +231,38 @@ CB.prime() ..() + +/obj/item/grenade/plastic/x4/thermite + name = "T4" + desc = "A wall breaching charge, containing fuel, metal oxide and metal powder mixed in just the right way. One hell of a combination. Effective against walls, ineffective against airlocks..." + det_time = 2 + icon_state = "t4breach0" + item_state = "t4breach" + +/obj/item/grenade/plastic/x4/thermite/prime() + var/turf/location + if(target) + if(!QDELETED(target)) + location = get_turf(target) + target.overlays -= image_overlay + else + location = get_turf(src) + if(location) + var/datum/effect_system/smoke_spread/smoke = new + smoke.set_up(8,0, location, aim_dir) + if(target && target.density) + var/turf/T = get_step(location, aim_dir) + for(var/turf/simulated/wall/W in range(1, location)) + W.thermitemelt(speed = 30) + addtimer(CALLBACK(null, .proc/explosion, T, 0, 0, 2), 3) + addtimer(CALLBACK(smoke, /datum/effect_system/smoke_spread/.proc/start), 3) + else + addtimer(CALLBACK(null, .proc/explosion, T, 0, 0, 2), 3) + addtimer(CALLBACK(smoke, /datum/effect_system/smoke_spread/.proc/start), 3) + + + if(isliving(target)) + var/mob/living/M = target + M.adjust_fire_stacks(2) + M.IgniteMob() + qdel(src) diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index 65524fec445..5ba58e2f313 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -246,6 +246,15 @@ new /obj/item/grenade/flashbang(src) update_icon() +/obj/item/storage/belt/security/response_team_gamma/New() + ..() + new /obj/item/melee/baton/loaded(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) + update_icon() + /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/game/response_team.dm b/code/game/response_team.dm deleted file mode 100644 index d7aa9e88504..00000000000 --- a/code/game/response_team.dm +++ /dev/null @@ -1,777 +0,0 @@ -// 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 - -/datum/outfit/job/centcom/response_team/imprint_idcard(mob/living/carbon/human/H) - var/obj/item/card/id/W = H.wear_id - if(!istype(W)) - return - W.assignment = rt_assignment - W.rank = W.assignment - W.age = H.age - W.sex = capitalize(H.gender) - W.registered_name = H.real_name - W.name = "[H.real_name]'s ID Card ([rt_job])" - W.access = get_centcom_access(W.assignment) - W.photo = get_id_photo(H) - if(H.mind && H.mind.initial_account && H.mind.initial_account.account_number) - W.associated_account_number = H.mind.initial_account.account_number - -/datum/outfit/job/centcom/response_team/imprint_pda(mob/living/carbon/human/H) - var/obj/item/pda/PDA = H.wear_pda - if(istype(PDA)) - PDA.owner = H.real_name - PDA.ownjob = rt_assignment - PDA.ownrank = rt_assignment - PDA.name = "PDA-[H.real_name] ([PDA.ownjob])" - -/datum/outfit/job/centcom/response_team/commander - name = "RT Commander" - rt_assignment = "Emergency Response Team Leader" - rt_job = "Emergency Response Team Leader" - - uniform = /obj/item/clothing/under/rank/centcom_officer - back = /obj/item/storage/backpack/ert/commander - - id = /obj/item/card/id/ert/commander - - l_pocket = /obj/item/pinpointer - r_pocket = /obj/item/melee/classic_baton/telescopic - -/datum/outfit/job/centcom/response_team/commander/amber - name = "RT Commander (Amber)" - shoes = /obj/item/clothing/shoes/combat - gloves = /obj/item/clothing/gloves/color/black - suit = /obj/item/clothing/suit/armor/vest/ert/command - glasses = /obj/item/clothing/glasses/sunglasses - - belt = /obj/item/gun/energy/gun - - backpack_contents = list( - /obj/item/clothing/head/helmet/ert/command = 1, - /obj/item/clothing/mask/gas/sechailer = 1, - /obj/item/restraints/handcuffs = 1, - /obj/item/storage/lockbox/mindshield = 1 - ) - -/datum/outfit/job/centcom/response_team/commander/red - name = "RT Commander (Red)" - shoes = /obj/item/clothing/shoes/combat - gloves = /obj/item/clothing/gloves/combat - suit = /obj/item/clothing/suit/space/hardsuit/ert/commander - glasses = /obj/item/clothing/glasses/sunglasses - cybernetic_implants = list( - /obj/item/organ/internal/cyberimp/eyes/hud/security, - /obj/item/organ/internal/cyberimp/chest/nutriment - ) - belt = /obj/item/gun/energy/gun/nuclear - - backpack_contents = list( - /obj/item/clothing/head/helmet/space/hardsuit/ert/commander = 1, - /obj/item/clothing/mask/gas/sechailer/swat = 1, - /obj/item/gun/energy/ionrifle/carbine = 1, - /obj/item/restraints/handcuffs = 1, - /obj/item/clothing/shoes/magboots = 1, - /obj/item/storage/lockbox/mindshield = 1 - ) - -/datum/outfit/job/centcom/response_team/commander/gamma - name = "RT Commander (Gamma)" - 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 - - belt = /obj/item/gun/energy/gun/nuclear - - backpack_contents = list( - /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 - ) - -/datum/outfit/job/centcom/response_team/security - name = "RT Security" - rt_job = "Emergency Response Team Officer" - uniform = /obj/item/clothing/under/rank/security - back = /obj/item/storage/backpack/ert/security - belt = /obj/item/storage/belt/security/response_team - pda = /obj/item/pda/heads/ert/security - id = /obj/item/card/id/ert/security - var/has_grenades = FALSE - -/datum/outfit/job/centcom/response_team/security/amber - name = "RT Security (Amber)" - shoes = /obj/item/clothing/shoes/combat - gloves = /obj/item/clothing/gloves/color/black - suit = /obj/item/clothing/suit/armor/vest/ert/security - suit_store = /obj/item/gun/energy/gun/advtaser - glasses = /obj/item/clothing/glasses/hud/security/sunglasses - - r_hand = /obj/item/gun/energy/laser - - backpack_contents = list( - /obj/item/clothing/head/helmet/ert/security = 1, - /obj/item/clothing/mask/gas/sechailer = 1, - /obj/item/storage/box/zipties = 1, - /obj/item/storage/box/teargas = 1, - /obj/item/flashlight/seclite = 1 - ) - -/datum/outfit/job/centcom/response_team/security/red - name = "RT Security (Red)" - has_grenades = TRUE - - shoes = /obj/item/clothing/shoes/combat - gloves = /obj/item/clothing/gloves/color/black - suit = /obj/item/clothing/suit/space/hardsuit/ert/security - suit_store = /obj/item/gun/energy/gun/blueshield - glasses = /obj/item/clothing/glasses/hud/security/sunglasses - cybernetic_implants = list( - /obj/item/organ/internal/cyberimp/arm/flash, - /obj/item/organ/internal/cyberimp/chest/nutriment - ) - r_hand = /obj/item/gun/projectile/automatic/lasercarbine - - backpack_contents = list( - /obj/item/clothing/head/helmet/space/hardsuit/ert/security = 1, - /obj/item/clothing/mask/gas/sechailer = 1, - /obj/item/clothing/shoes/magboots = 1, - /obj/item/storage/box/handcuffs = 1, - /obj/item/storage/box/teargas = 1, - /obj/item/grenade/flashbang = 1, - /obj/item/ammo_box/magazine/laser = 2 - ) - -/datum/outfit/job/centcom/response_team/security/gamma - name = "RT Security (Gamma)" - has_grenades = TRUE - shoes = /obj/item/clothing/shoes/magboots/advance - gloves = /obj/item/clothing/gloves/combat - suit = /obj/item/clothing/suit/space/hardsuit/ert/security - suit_store = /obj/item/gun/energy/gun/nuclear - glasses = /obj/item/clothing/glasses/hud/security/night - - r_hand = /obj/item/gun/energy/pulse/carbine - - 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 - ) - -/datum/outfit/job/centcom/response_team/engineer - name = "RT Engineer" - rt_job = "Emergency Response Team Engineer" - back = /obj/item/storage/backpack/ert/engineer - uniform = /obj/item/clothing/under/rank/engineer - - belt = /obj/item/storage/belt/utility/full/multitool - pda = /obj/item/pda/heads/ert/engineering - id = /obj/item/card/id/ert/engineering - -/datum/outfit/job/centcom/response_team/engineer/amber - name = "RT Engineer (Amber)" - shoes = /obj/item/clothing/shoes/magboots - gloves = /obj/item/clothing/gloves/color/yellow - suit = /obj/item/clothing/suit/space/hardsuit/ert/engineer - suit_store = /obj/item/tank/emergency_oxygen/engi - glasses = /obj/item/clothing/glasses/meson - - l_pocket = /obj/item/gun/energy/gun/mini - r_pocket = /obj/item/melee/classic_baton/telescopic - - backpack_contents = list( - /obj/item/clothing/head/helmet/space/hardsuit/ert/engineer = 1, - /obj/item/clothing/mask/gas = 1, - /obj/item/t_scanner = 1, - /obj/item/stack/sheet/glass/fifty = 1, - /obj/item/stack/sheet/metal/fifty = 1 - ) - -/datum/outfit/job/centcom/response_team/engineer/red - name = "RT Engineer (Red)" - 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/engi - glasses = /obj/item/clothing/glasses/meson - cybernetic_implants = list( - /obj/item/organ/internal/cyberimp/eyes/shield, - /obj/item/organ/internal/cyberimp/chest/nutriment - ) - l_pocket = /obj/item/t_scanner/extended_range - r_pocket = /obj/item/melee/classic_baton/telescopic - - backpack_contents = list( - /obj/item/clothing/head/helmet/space/hardsuit/ert/engineer = 1, - /obj/item/clothing/mask/gas = 1, - /obj/item/rcd/preloaded = 1, - /obj/item/rcd_ammo = 3, - /obj/item/gun/energy/gun = 1 - ) - -/datum/outfit/job/centcom/response_team/engineer/gamma - name = "RT Engineer (Gamma)" - shoes = /obj/item/clothing/shoes/magboots/advance - gloves = /obj/item/clothing/gloves/color/yellow - suit = /obj/item/clothing/suit/space/hardsuit/ert/engineer - suit_store = /obj/item/tank/emergency_oxygen/double/full - glasses = /obj/item/clothing/glasses/meson/night - - l_pocket = /obj/item/t_scanner/extended_range - r_pocket = /obj/item/melee/classic_baton/telescopic - - backpack_contents = list( - /obj/item/clothing/head/helmet/space/hardsuit/ert/engineer = 1, - /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 - ) - -/datum/outfit/job/centcom/response_team/medic - name = "RT Medic" - rt_job = "Emergency Response Team Medic" - uniform = /obj/item/clothing/under/rank/medical - back = /obj/item/storage/backpack/ert/medical - pda = /obj/item/pda/heads/ert/medical - id = /obj/item/card/id/ert/medic - -/datum/outfit/job/centcom/response_team/medic/amber - name = "RT Medic (Amber)" - - shoes = /obj/item/clothing/shoes/white - gloves = /obj/item/clothing/gloves/color/latex - suit = /obj/item/clothing/suit/armor/vest/ert/medical - suit_store = /obj/item/gun/energy/gun/mini - glasses = /obj/item/clothing/glasses/hud/health - - belt = /obj/item/storage/belt/medical/surgery/loaded - - l_pocket = /obj/item/reagent_containers/hypospray/safety/ert - r_pocket = /obj/item/melee/classic_baton/telescopic - - backpack_contents = list( - /obj/item/clothing/head/helmet/ert/medical = 1, - /obj/item/clothing/mask/surgical = 1, - /obj/item/storage/firstaid/adv = 1, - /obj/item/storage/firstaid/regular = 1, - /obj/item/storage/box/autoinjectors = 1, - /obj/item/roller = 1, - /obj/item/storage/pill_bottle/ert = 1 - ) - -/datum/outfit/job/centcom/response_team/medic/red - name = "RT Medic (Red)" - shoes = /obj/item/clothing/shoes/white - gloves = /obj/item/clothing/gloves/color/latex/nitrile - suit = /obj/item/clothing/suit/space/hardsuit/ert/medical - glasses = /obj/item/clothing/glasses/hud/health/health_advanced - suit_store = /obj/item/gun/energy/gun - cybernetic_implants = list( - /obj/item/organ/internal/cyberimp/arm/surgery, - /obj/item/organ/internal/cyberimp/chest/nutriment - ) - belt = /obj/item/defibrillator/compact/loaded - - l_pocket = /obj/item/reagent_containers/hypospray/safety/ert - r_pocket = /obj/item/melee/classic_baton/telescopic - - backpack_contents = list( - /obj/item/clothing/head/helmet/space/hardsuit/ert/medical = 1, - /obj/item/clothing/mask/surgical = 1, - /obj/item/storage/firstaid/toxin = 1, - /obj/item/storage/firstaid/brute = 1, - /obj/item/storage/firstaid/fire = 1, - /obj/item/storage/box/autoinjectors = 1, - /obj/item/roller = 1, - /obj/item/clothing/shoes/magboots = 1 - ) - -/datum/outfit/job/centcom/response_team/medic/gamma - name = "RT Medic (Gamma)" - 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 - cybernetic_implants = list( - /obj/item/organ/internal/cyberimp/arm/surgery - ) - - belt = /obj/item/defibrillator/compact/loaded - - l_pocket = /obj/item/reagent_containers/hypospray/combat/nanites - - 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 - ) - -/datum/outfit/job/centcom/response_team/paranormal - name = "RT Paranormal" - rt_job = "Emergency Response Team Inquisitor" - uniform = /obj/item/clothing/under/rank/chaplain - back = /obj/item/storage/backpack/ert/security - gloves = /obj/item/clothing/gloves/color/black - shoes = /obj/item/clothing/shoes/combat - l_ear = /obj/item/radio/headset/ert/alt - glasses = /obj/item/clothing/glasses/hud/security/sunglasses - belt = /obj/item/storage/belt/security/response_team - id = /obj/item/card/id/centcom - pda = /obj/item/pda/centcom - backpack_contents = list( - /obj/item/clothing/mask/gas/sechailer/swat = 1, - /obj/item/storage/box/zipties = 1, - /obj/item/flashlight = 1) - -/datum/outfit/job/centcom/response_team/paranormal/amber - name = "RT Paranormal (Amber)" - suit = /obj/item/clothing/suit/armor/vest/ert/security - suit_store = /obj/item/gun/energy/gun/advtaser - r_pocket = /obj/item/nullrod - -/datum/outfit/job/centcom/response_team/paranormal/red - name = "RT Paranormal (Red)" - suit = /obj/item/clothing/suit/space/hardsuit/ert/paranormal/inquisitor - head = /obj/item/clothing/head/helmet/space/hardsuit/ert/paranormal/inquisitor - suit_store = /obj/item/gun/energy/gun/nuclear - r_pocket = /obj/item/nullrod - -/datum/outfit/job/centcom/response_team/paranormal/gamma - name = "RT Paranormal (Gamma)" - suit = /obj/item/clothing/suit/space/hardsuit/ert/paranormal/inquisitor - head = /obj/item/clothing/head/helmet/space/hardsuit/ert/paranormal/inquisitor - suit_store = /obj/item/gun/energy/gun/nuclear - r_pocket = /obj/item/gun/energy/pulse/pistol - l_pocket = /obj/item/grenade/clusterbuster/holy - shoes = /obj/item/clothing/shoes/magboots/advance - -/datum/outfit/job/centcom/response_team/janitorial - name = "RT Janitor" - rt_job = "Emergency Response Team Janitor" - uniform = /obj/item/clothing/under/color/purple - back = /obj/item/storage/backpack/ert/janitor - belt = /obj/item/storage/belt/janitor/full - gloves = /obj/item/clothing/gloves/color/yellow - shoes = /obj/item/clothing/shoes/galoshes - l_ear = /obj/item/radio/headset/ert/alt - id = /obj/item/card/id/centcom - pda = /obj/item/pda/centcom - l_pocket = /obj/item/melee/classic_baton/telescopic - backpack_contents = list( - /obj/item/grenade/chem_grenade/antiweed = 2, - /obj/item/reagent_containers/spray/cleaner = 1, - /obj/item/storage/bag/trash = 1, - /obj/item/storage/box/lights/mixed = 1, - /obj/item/holosign_creator = 1, - /obj/item/flashlight = 1) - -/datum/outfit/job/centcom/response_team/janitorial/amber - name = "RT Janitor (Amber)" - suit = /obj/item/clothing/suit/armor/vest/ert/janitor - head = /obj/item/clothing/head/helmet/ert/janitor - glasses = /obj/item/clothing/glasses/sunglasses - - r_hand = /obj/item/gun/energy/disabler - -/datum/outfit/job/centcom/response_team/janitorial/red - name = "RT Janitor (Red)" - suit = /obj/item/clothing/suit/space/hardsuit/ert/janitor - head = /obj/item/clothing/head/helmet/space/hardsuit/ert/janitor - glasses = /obj/item/clothing/glasses/hud/security/sunglasses - cybernetic_implants = list( - /obj/item/organ/internal/cyberimp/chest/nutriment - ) - r_pocket = /obj/item/scythe/tele - l_pocket = /obj/item/gun/energy/gun/mini - -/datum/outfit/job/centcom/response_team/janitorial/gamma - name = "RT Janitor (Gamma)" - suit = /obj/item/clothing/suit/space/hardsuit/ert/janitor - head = /obj/item/clothing/head/helmet/space/hardsuit/ert/janitor - glasses = /obj/item/clothing/glasses/hud/security/sunglasses - gloves = /obj/item/clothing/gloves/combat - suit_store = /obj/item/gun/energy/pulse/pistol - l_pocket = /obj/item/grenade/clusterbuster/cleaner - 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/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index a24e6f2953f..c22c7530505 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -200,7 +200,10 @@ for(var/i=0, iThe thermite starts melting through the wall.") + if(user) + to_chat(user, "The thermite starts melting through the wall.") - spawn(100) + spawn(wait) if(O) qdel(O) return diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 6495c8fabfd..31600856238 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -2066,7 +2066,7 @@ var/input = input(src.owner, "Please enter a reason for denying [key_name(H)]'s ERT request.","Outgoing message from CentComm", "") if(!input) return - ert_request_answered = 1 + ert_request_answered = TRUE to_chat(src.owner, "You sent [input] to [H] via a secure channel.") log_admin("[src.owner] denied [key_name(H)]'s ERT request with the message [input].") to_chat(H, "You hear something crackle in your headset for a moment before a voice speaks. \"Your ERT request has been denied for the following reasons: [input]. Message ends.\"") diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index c3595288213..cbe1b1c1e62 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -238,6 +238,12 @@ obj/item/clothing/head/blob desc = "An in-atmosphere helmet worn by security members of the Nanotrasen Emergency Response Team. Has red highlights." icon_state = "erthelmet_sec" +/obj/item/clothing/head/helmet/ert/security/paranormal + name = "paranormal emergency response team helmet" + desc = "An in-atmosphere helmet worn by paranormal members of the Nanotrasen Emergency Response Team. Has crusader sigils." + icon_state = "knight_templar" + item_state = "knight_templar" + //Engineer /obj/item/clothing/head/helmet/ert/engineer name = "emergency response team engineer helmet" diff --git a/code/modules/clothing/spacesuits/ert.dm b/code/modules/clothing/spacesuits/ert.dm index 2597b3cdde7..2fbf38a7e07 100644 --- a/code/modules/clothing/spacesuits/ert.dm +++ b/code/modules/clothing/spacesuits/ert.dm @@ -40,7 +40,7 @@ allowed = list(/obj/item/flashlight, /obj/item/tank, /obj/item/t_scanner, /obj/item/rcd, /obj/item/crowbar, \ /obj/item/screwdriver, /obj/item/weldingtool, /obj/item/wirecutters, /obj/item/wrench, /obj/item/multitool, \ /obj/item/radio, /obj/item/analyzer, /obj/item/gun/energy/laser, /obj/item/gun/energy/pulse, \ - /obj/item/gun/energy/gun/advtaser, /obj/item/melee/baton, /obj/item/gun/energy/gun, /obj/item/gun/projectile/automatic/lasercarbine, /obj/item/gun/energy/gun/blueshield) + /obj/item/gun/energy/gun/advtaser, /obj/item/melee/baton, /obj/item/gun/energy/gun, /obj/item/gun/projectile/automatic/lasercarbine, /obj/item/gun/energy/gun/blueshield, /obj/item/gun/energy/immolator/multi) strip_delay = 130 species_fit = list("Drask", "Vox") sprite_sheets = list( @@ -56,12 +56,25 @@ item_state = "helm-command" item_color = "ert_commander" +/obj/item/clothing/head/helmet/space/hardsuit/ert/commander/gamma + name = "elite emergency response team commander helmet" + max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT + icon_state = "hardsuit0-gammacommander" + item_color = "gammacommander" + species_fit = null + /obj/item/clothing/suit/space/hardsuit/ert/commander name = "emergency response team commander suit" desc = "A suit worn by the commander of a Nanotrasen Emergency Response Team. Has blue highlights. Armoured, space ready, and fire resistant." icon_state = "ert_commander" item_state = "suit-command" +/obj/item/clothing/suit/space/hardsuit/ert/commander/gamma + name = "elite emergency response team commander suit" + max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT + icon_state = "ert_gcommander" + species_fit = null + //Security /obj/item/clothing/head/helmet/space/hardsuit/ert/security name = "emergency response team security helmet" @@ -70,12 +83,25 @@ item_state = "syndicate-helm-black-red" item_color = "ert_security" +/obj/item/clothing/head/helmet/space/hardsuit/ert/security/gamma + name = "elite emergency response team security helmet" + max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT + icon_state = "hardsuit0-gammasecurity" + item_color = "gammasecurity" + species_fit = null + /obj/item/clothing/suit/space/hardsuit/ert/security name = "emergency response team security suit" desc = "A suit worn by security members of a Nanotrasen Emergency Response Team. Has red highlights. Armoured, space ready, and fire resistant." icon_state = "ert_security" item_state = "syndicate-black-red" +/obj/item/clothing/suit/space/hardsuit/ert/security/gamma + name = "elite emergency response team security suit" + max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT + icon_state = "ert_gsecurity" + species_fit = null + //Engineer /obj/item/clothing/head/helmet/space/hardsuit/ert/engineer name = "emergency response team engineer helmet" @@ -84,12 +110,26 @@ item_state = "helm-orange" item_color = "ert_engineer" +//Engineer +/obj/item/clothing/head/helmet/space/hardsuit/ert/engineer/gamma + name = "elite emergency response team engineer helmet" + max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT + icon_state = "hardsuit0-gammaengineer" + item_color = "gammaengineer" + species_fit = null + /obj/item/clothing/suit/space/hardsuit/ert/engineer name = "emergency response team engineer suit" desc = "A suit worn by the engineers of a Nanotrasen Emergency Response Team. Has yellow highlights. Armoured, space ready, and fire resistant." icon_state = "ert_engineer" item_state = "suit-orange" +/obj/item/clothing/suit/space/hardsuit/ert/engineer/gamma + name = "elite emergency response team engineer suit" + max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT + icon_state = "ert_gengineer" + species_fit = null + //Medical /obj/item/clothing/head/helmet/space/hardsuit/ert/medical name = "emergency response team medical helmet" @@ -97,11 +137,24 @@ icon_state = "hardsuit0-ert_medical" item_color = "ert_medical" +/obj/item/clothing/head/helmet/space/hardsuit/ert/medical/gamma + name = "elite emergency response team medical helmet" + max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT + icon_state = "hardsuit0-gammamedical" + item_color = "gammamedical" + species_fit = null + /obj/item/clothing/suit/space/hardsuit/ert/medical name = "emergency response team medical suit" desc = "A suit worn by medical members of a Nanotrasen Emergency Response Team. Has white highlights. Armoured and space ready." icon_state = "ert_medical" +/obj/item/clothing/suit/space/hardsuit/ert/medical/gamma + name = "elite emergency response team medical suit" + max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT + icon_state = "ert_gmedical" + species_fit = null + //Janitor /obj/item/clothing/head/helmet/space/hardsuit/ert/janitor name = "emergency response team janitor helmet" @@ -109,11 +162,24 @@ icon_state = "hardsuit0-ert_janitor" item_color = "ert_janitor" +/obj/item/clothing/head/helmet/space/hardsuit/ert/janitor/gamma + name = "elite emergency response team janitor helmet" + max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT + icon_state = "hardsuit0-gammajanitor" + item_color = "gammajanitor" + species_fit = null + /obj/item/clothing/suit/space/hardsuit/ert/janitor name = "emergency response team janitor suit" desc = "A suit worn by the janitorial of a Nanotrasen Emergency Response Team. Has purple highlights. Armoured, space ready, and fire resistant." icon_state = "ert_janitor" +/obj/item/clothing/suit/space/hardsuit/ert/janitor/gamma + name = "elite emergency response team janitor suit" + max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT + icon_state = "ert_gjanitor" + species_fit = null + //Paranormal /obj/item/clothing/head/helmet/space/hardsuit/ert/paranormal name = "paranormal response unit helmet" 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/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index bda11216a06..8e91fbb2dd2 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -440,6 +440,13 @@ name = "emergency response team security armor" desc = "A set of armor worn by security members of the Nanotrasen Emergency Response Team. Has red highlights." icon_state = "ertarmor_sec" + + +/obj/item/clothing/suit/armor/vest/ert/security/paranormal + name = "emergency response team paranormal armor" + desc = "A set of armor worn by paranormal members of the Nanotrasen Emergency Response Team. Has crusader sigils." + icon_state = "knight_templar" + item_state = "knight_templar" //Engineer /obj/item/clothing/suit/armor/vest/ert/engineer diff --git a/code/modules/nano/modules/ert_manager.dm b/code/modules/nano/modules/ert_manager.dm index d954c36ee2d..1d70157f079 100644 --- a/code/modules/nano/modules/ert_manager.dm +++ b/code/modules/nano/modules/ert_manager.dm @@ -50,7 +50,7 @@ cyborg_slots = text2num(href_list["set_cyb"]) if(href_list["dispatch_ert"]) - ert_request_answered = 1 + ert_request_answered = TRUE var/slots_list = list() if(commander_slots > 0) slots_list += "commander: [commander_slots]" diff --git a/code/modules/projectiles/ammunition/energy.dm b/code/modules/projectiles/ammunition/energy.dm index 7a9441ae46c..322c0931161 100644 --- a/code/modules/projectiles/ammunition/energy.dm +++ b/code/modules/projectiles/ammunition/energy.dm @@ -67,6 +67,18 @@ fire_sound = 'sound/weapons/laser3.ogg' e_cost = 125 +/obj/item/ammo_casing/energy/immolator/strong + projectile_type = /obj/item/projectile/beam/immolator/strong + e_cost = 125 + select_name = "precise" + +/obj/item/ammo_casing/energy/immolator/scatter + projectile_type = /obj/item/projectile/beam/immolator/weak + e_cost = 125 + pellets = 6 + variance = 25 + select_name = "scatter" + /obj/item/ammo_casing/energy/electrode projectile_type = /obj/item/projectile/energy/electrode select_name = "stun" diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index 4be1f36cb22..75da1fdbedd 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -125,6 +125,19 @@ origin_tech = "combat=4;magnets=4;powerstorage=3" shaded_charge = 1 +/obj/item/gun/energy/immolator/multi + name = "multi lens immolator cannon" + desc = "A large laser cannon, similar to the Immolator Laser, with toggleable firemodes. It is frequently used by military-like forces through Nanotrasen." + icon_state = "multilensimmolator" + ammo_type = list(/obj/item/ammo_casing/energy/immolator/strong, /obj/item/ammo_casing/energy/immolator/scatter) + origin_tech = "combat=5;magnets=5;powerstorage=4" + +/obj/item/gun/energy/immolator/multi/update_icon() + ..() + var/obj/item/ammo_casing/energy/shot = ammo_type[select] + var/append = shot.select_name + overlays += image(icon = icon, icon_state = "multilensimmolator-[append]") + ////////Laser Tag//////////////////// /obj/item/gun/energy/laser/bluetag diff --git a/code/modules/projectiles/guns/energy/nuclear.dm b/code/modules/projectiles/guns/energy/nuclear.dm index 7169b3d1443..f17fe55340a 100644 --- a/code/modules/projectiles/guns/energy/nuclear.dm +++ b/code/modules/projectiles/guns/energy/nuclear.dm @@ -65,6 +65,11 @@ ammo_x_offset = 1 shaded_charge = 1 +/obj/item/gun/energy/gun/blueshield/pdw9 + name = "PDW-9 taser pistol" + desc = "A military grade sidearm, used by many militia forces throughout the local sector." + icon_state = "pdw9pistol" + /obj/item/gun/energy/gun/turret name = "hybrid turret gun" desc = "A heavy hybrid energy cannon with two settings: Stun and kill." diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm index 40e3ab36df1..f886c5e5e53 100644 --- a/code/modules/projectiles/guns/projectile/automatic.dm +++ b/code/modules/projectiles/guns/projectile/automatic.dm @@ -257,7 +257,7 @@ /obj/item/gun/projectile/automatic/lasercarbine name = "\improper IK-60 Laser Carbine" - desc = "An experimental carbine. Uses encased laser projectors as ammunition."//we need to uncouple the toroidal resistance dejammers + desc = "A short, compact carbine like rifle, relying more on battery cartridges rather than a built in power cell. Utilized by the Nanotrasen Navy for combat operations." icon_state = "lasercarbine" item_state = "laser" w_class = WEIGHT_CLASS_NORMAL diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index 761fb50179c..3cd4e888b1f 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -119,6 +119,16 @@ /obj/item/projectile/beam/immolator name = "immolation beam" +/obj/item/projectile/beam/immolator/strong + name = "heavy immolation beam" + damage = 45 + icon_state = "heavylaser" + +/obj/item/projectile/beam/immolator/weak + name = "light immolation beam" + damage = 8 + icon_state = "scatterlaser" + /obj/item/projectile/beam/immolator/on_hit(var/atom/target, var/blocked = 0) . = ..() if(istype(target, /mob/living/carbon)) diff --git a/code/modules/response_team/ert.dm b/code/modules/response_team/ert.dm new file mode 100644 index 00000000000..8614df8135b --- /dev/null +++ b/code/modules/response_team/ert.dm @@ -0,0 +1,368 @@ +// 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 = FALSE +var/ert_request_answered = FALSE + +/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 == GAME_STATE_PREGAME) + 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 playing on an emergency response 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 = TRUE + 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 = FALSE + 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 = FALSE + 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 = FALSE + 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 + box = /obj/item/storage/box/responseteam + + implants = list(/obj/item/implant/mindshield) + +/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() + ..() + 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/patch/synthflesh(src) + new /obj/item/reagent_containers/hypospray/autoinjector(src) diff --git a/code/modules/response_team/ert_outfits.dm b/code/modules/response_team/ert_outfits.dm new file mode 100644 index 00000000000..93227849f1f --- /dev/null +++ b/code/modules/response_team/ert_outfits.dm @@ -0,0 +1,485 @@ +/* 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 + if(!istype(W)) + return + W.assignment = rt_assignment + W.rank = W.assignment + W.age = H.age + W.sex = capitalize(H.gender) + W.registered_name = H.real_name + W.name = "[H.real_name]'s ID Card ([rt_job])" + W.access = get_centcom_access(W.assignment) + W.photo = get_id_photo(H) + if(H.mind && H.mind.initial_account && H.mind.initial_account.account_number) + W.associated_account_number = H.mind.initial_account.account_number + +/datum/outfit/job/centcom/response_team/imprint_pda(mob/living/carbon/human/H) + var/obj/item/pda/PDA = H.wear_pda + if(istype(PDA)) + PDA.owner = H.real_name + PDA.ownjob = rt_assignment + 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" + rt_job = "Emergency Response Team Leader" + + uniform = /obj/item/clothing/under/rank/centcom_officer + back = /obj/item/storage/backpack/ert/commander + + id = /obj/item/card/id/ert/commander + + l_pocket = /obj/item/pinpointer + r_pocket = /obj/item/melee/classic_baton/telescopic + +/datum/outfit/job/centcom/response_team/commander/amber + name = "RT Commander (Amber)" + shoes = /obj/item/clothing/shoes/combat + gloves = /obj/item/clothing/gloves/color/black + suit = /obj/item/clothing/suit/armor/vest/ert/command + glasses = /obj/item/clothing/glasses/sunglasses + + belt = /obj/item/gun/energy/gun + + backpack_contents = list( + /obj/item/clothing/head/helmet/ert/command = 1, + /obj/item/clothing/mask/gas/sechailer = 1, + /obj/item/restraints/handcuffs = 1, + /obj/item/storage/lockbox/mindshield = 1 + ) + +/datum/outfit/job/centcom/response_team/commander/red + name = "RT Commander (Red)" + shoes = /obj/item/clothing/shoes/combat + gloves = /obj/item/clothing/gloves/combat + suit = /obj/item/clothing/suit/space/hardsuit/ert/commander + glasses = /obj/item/clothing/glasses/sunglasses + cybernetic_implants = list( + /obj/item/organ/internal/cyberimp/eyes/hud/security, + /obj/item/organ/internal/cyberimp/chest/nutriment + ) + belt = /obj/item/gun/energy/gun/blueshield/pdw9 + + backpack_contents = list( + /obj/item/clothing/head/helmet/space/hardsuit/ert/commander = 1, + /obj/item/clothing/mask/gas/sechailer/swat = 1, + /obj/item/gun/energy/ionrifle/carbine = 1, + /obj/item/restraints/handcuffs = 1, + /obj/item/clothing/shoes/magboots = 1, + /obj/item/storage/lockbox/mindshield = 1 + ) + +/datum/outfit/job/centcom/response_team/commander/gamma + name = "RT Commander (Gamma)" + shoes = /obj/item/clothing/shoes/magboots/advance + gloves = /obj/item/clothing/gloves/combat + suit = /obj/item/clothing/suit/space/hardsuit/ert/commander/gamma + glasses = /obj/item/clothing/glasses/night + suit_store = /obj/item/gun/energy/gun/blueshield/pdw9 + belt = /obj/item/gun/projectile/automatic/pistol/enforcer/lethal + + backpack_contents = list( + /obj/item/clothing/head/helmet/space/hardsuit/ert/commander/gamma = 1, + /obj/item/clothing/mask/gas/sechailer/swat = 1, + /obj/item/restraints/handcuffs = 1, + /obj/item/storage/lockbox/mindshield = 1, + /obj/item/gun/energy/ionrifle/carbine = 1, + /obj/item/ammo_box/magazine/enforcer/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" + uniform = /obj/item/clothing/under/rank/security + back = /obj/item/storage/backpack/ert/security + belt = /obj/item/storage/belt/security/response_team + pda = /obj/item/pda/heads/ert/security + id = /obj/item/card/id/ert/security + +/datum/outfit/job/centcom/response_team/security/amber + name = "RT Security (Amber)" + shoes = /obj/item/clothing/shoes/combat + gloves = /obj/item/clothing/gloves/color/black + suit = /obj/item/clothing/suit/armor/vest/ert/security + suit_store = /obj/item/gun/energy/gun/advtaser + glasses = /obj/item/clothing/glasses/hud/security/sunglasses + + r_hand = /obj/item/gun/energy/laser + + backpack_contents = list( + /obj/item/clothing/head/helmet/ert/security = 1, + /obj/item/clothing/mask/gas/sechailer = 1, + /obj/item/storage/box/zipties = 1, + /obj/item/storage/box/teargas = 1, + /obj/item/flashlight/seclite = 1 + ) + +/datum/outfit/job/centcom/response_team/security/red + name = "RT Security (Red)" + + shoes = /obj/item/clothing/shoes/combat + gloves = /obj/item/clothing/gloves/color/black + suit = /obj/item/clothing/suit/space/hardsuit/ert/security + suit_store = /obj/item/gun/energy/gun/blueshield/pdw9 + glasses = /obj/item/clothing/glasses/sunglasses + + r_hand = /obj/item/gun/projectile/automatic/lasercarbine + + cybernetic_implants = list( + /obj/item/organ/internal/cyberimp/arm/flash, + /obj/item/organ/internal/cyberimp/chest/nutriment, + /obj/item/organ/internal/cyberimp/eyes/hud/security + ) + + backpack_contents = list( + /obj/item/clothing/head/helmet/space/hardsuit/ert/security = 1, + /obj/item/clothing/mask/gas/sechailer = 1, + /obj/item/clothing/shoes/magboots = 1, + /obj/item/storage/box/handcuffs = 1, + /obj/item/storage/box/teargas = 1, + /obj/item/grenade/flashbang = 1, + /obj/item/ammo_box/magazine/laser = 2 + ) + +/datum/outfit/job/centcom/response_team/security/gamma + name = "RT Security (Gamma)" + shoes = /obj/item/clothing/shoes/magboots/advance + gloves = /obj/item/clothing/gloves/combat + suit = /obj/item/clothing/suit/space/hardsuit/ert/security/gamma + belt = /obj/item/storage/belt/security/response_team_gamma + suit_store = /obj/item/gun/energy/gun/nuclear + 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/immolator/multi + + backpack_contents = list( + /obj/item/clothing/head/helmet/space/hardsuit/ert/security/gamma = 1, + /obj/item/clothing/mask/gas/sechailer/swat = 1, + /obj/item/storage/box/handcuffs = 1, + /obj/item/storage/box/flashbangs = 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" + back = /obj/item/storage/backpack/ert/engineer + uniform = /obj/item/clothing/under/rank/engineer + + belt = /obj/item/storage/belt/utility/full/multitool + pda = /obj/item/pda/heads/ert/engineering + id = /obj/item/card/id/ert/engineering + +/datum/outfit/job/centcom/response_team/engineer/amber + name = "RT Engineer (Amber)" + shoes = /obj/item/clothing/shoes/magboots + gloves = /obj/item/clothing/gloves/color/yellow + suit = /obj/item/clothing/suit/space/hardsuit/ert/engineer + suit_store = /obj/item/tank/emergency_oxygen/engi + glasses = /obj/item/clothing/glasses/meson + + l_pocket = /obj/item/gun/energy/gun/mini + r_pocket = /obj/item/melee/classic_baton/telescopic + + backpack_contents = list( + /obj/item/clothing/head/helmet/space/hardsuit/ert/engineer = 1, + /obj/item/clothing/mask/gas = 1, + /obj/item/t_scanner = 1, + /obj/item/stack/sheet/glass/fifty = 1, + /obj/item/stack/sheet/metal/fifty = 1 + ) + +/datum/outfit/job/centcom/response_team/engineer/red + name = "RT Engineer (Red)" + 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/engi + glasses = /obj/item/clothing/glasses/meson + cybernetic_implants = list( + /obj/item/organ/internal/cyberimp/eyes/shield, + /obj/item/organ/internal/cyberimp/chest/nutriment + ) + l_pocket = /obj/item/t_scanner/extended_range + r_pocket = /obj/item/melee/classic_baton/telescopic + + backpack_contents = list( + /obj/item/clothing/head/helmet/space/hardsuit/ert/engineer = 1, + /obj/item/clothing/mask/gas = 1, + /obj/item/rcd/preloaded = 1, + /obj/item/rcd_ammo = 3, + /obj/item/gun/energy/gun = 1 + ) + +/datum/outfit/job/centcom/response_team/engineer/gamma + 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/gamma + suit_store = /obj/item/gun/energy/gun/blueshield/pdw9 + glasses = /obj/item/clothing/glasses/meson/night + + l_pocket = /obj/item/t_scanner/extended_range + r_pocket = /obj/item/melee/classic_baton/telescopic + + backpack_contents = list( + /obj/item/clothing/head/helmet/space/hardsuit/ert/engineer/gamma = 1, + /obj/item/clothing/mask/gas/sechailer/swat = 1, + /obj/item/rcd/combat = 1, + /obj/item/rcd_ammo/large = 3 + ) + + 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" + uniform = /obj/item/clothing/under/rank/medical + back = /obj/item/storage/backpack/ert/medical + pda = /obj/item/pda/heads/ert/medical + id = /obj/item/card/id/ert/medic + +/datum/outfit/job/centcom/response_team/medic/amber + name = "RT Medic (Amber)" + + shoes = /obj/item/clothing/shoes/white + gloves = /obj/item/clothing/gloves/color/latex + suit = /obj/item/clothing/suit/armor/vest/ert/medical + suit_store = /obj/item/gun/energy/gun/mini + glasses = /obj/item/clothing/glasses/hud/health + + belt = /obj/item/storage/belt/medical/surgery/loaded + + l_pocket = /obj/item/reagent_containers/hypospray/safety/ert + r_pocket = /obj/item/melee/classic_baton/telescopic + + l_hand = /obj/item/defibrillator/loaded + + backpack_contents = list( + /obj/item/clothing/head/helmet/ert/medical = 1, + /obj/item/clothing/mask/surgical = 1, + /obj/item/storage/firstaid/adv = 1, + /obj/item/storage/firstaid/regular = 1, + /obj/item/storage/box/autoinjectors = 1, + /obj/item/roller = 1, + /obj/item/storage/pill_bottle/ert = 1 + ) + +/datum/outfit/job/centcom/response_team/medic/red + name = "RT Medic (Red)" + shoes = /obj/item/clothing/shoes/white + gloves = /obj/item/clothing/gloves/color/latex/nitrile + suit = /obj/item/clothing/suit/space/hardsuit/ert/medical + glasses = /obj/item/clothing/glasses/hud/health/health_advanced + suit_store = /obj/item/gun/energy/gun + cybernetic_implants = list( + /obj/item/organ/internal/cyberimp/arm/surgery, + /obj/item/organ/internal/cyberimp/chest/nutriment + ) + belt = /obj/item/defibrillator/compact/loaded + + l_pocket = /obj/item/reagent_containers/hypospray/safety/ert + r_pocket = /obj/item/melee/classic_baton/telescopic + + backpack_contents = list( + /obj/item/clothing/head/helmet/space/hardsuit/ert/medical = 1, + /obj/item/clothing/mask/surgical = 1, + /obj/item/storage/firstaid/toxin = 1, + /obj/item/storage/firstaid/brute = 1, + /obj/item/storage/firstaid/fire = 1, + /obj/item/storage/box/autoinjectors = 1, + /obj/item/roller = 1, + /obj/item/clothing/shoes/magboots = 1, + /obj/item/bodyanalyzer = 1 + ) + +/datum/outfit/job/centcom/response_team/medic/gamma + name = "RT Medic (Gamma)" + shoes = /obj/item/clothing/shoes/magboots/advance + gloves = /obj/item/clothing/gloves/combat + suit = /obj/item/clothing/suit/space/hardsuit/ert/medical/gamma + 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 + + backpack_contents = list( + /obj/item/clothing/head/helmet/space/hardsuit/ert/medical/gamma = 1, + /obj/item/clothing/mask/gas/sechailer/swat = 1, + /obj/item/bodyanalyzer/advanced = 1, + /obj/item/extinguisher/mini = 1, + /obj/item/storage/belt/medical/surgery/loaded = 1, + /obj/item/roller = 1 + ) + + cybernetic_implants = list( + /obj/item/organ/internal/cyberimp/arm/surgery/l, + /obj/item/organ/internal/cyberimp/arm/medibeam, + /obj/item/organ/internal/cyberimp/chest/nutriment/plus, + /obj/item/organ/internal/cyberimp/eyes/hud/medical, + /obj/item/organ/internal/cyberimp/brain/anti_stun + ) + +//////////////////// PARANORMAL /////////////////// + +/datum/outfit/job/centcom/response_team/paranormal + name = "RT Paranormal" + rt_job = "Emergency Response Team Inquisitor" + uniform = /obj/item/clothing/under/rank/chaplain + back = /obj/item/storage/backpack/ert/security + gloves = /obj/item/clothing/gloves/color/black + shoes = /obj/item/clothing/shoes/combat + l_ear = /obj/item/radio/headset/ert/alt + glasses = /obj/item/clothing/glasses/hud/security/sunglasses + belt = /obj/item/storage/belt/security/response_team + id = /obj/item/card/id/centcom + pda = /obj/item/pda/centcom + backpack_contents = list( + /obj/item/clothing/mask/gas/sechailer/swat = 1, + /obj/item/storage/box/zipties = 1, + /obj/item/flashlight/seclite = 1 + ) + +/datum/outfit/job/centcom/response_team/paranormal/amber + name = "RT Paranormal (Amber)" + suit = /obj/item/clothing/suit/armor/vest/ert/security/paranormal + head = /obj/item/clothing/head/helmet/ert/security/paranormal + suit_store = /obj/item/gun/energy/gun/advtaser + r_pocket = /obj/item/nullrod + +/datum/outfit/job/centcom/response_team/paranormal/red + name = "RT Paranormal (Red)" + suit = /obj/item/clothing/suit/space/hardsuit/ert/paranormal/inquisitor + head = /obj/item/clothing/head/helmet/space/hardsuit/ert/paranormal/inquisitor + suit_store = /obj/item/gun/energy/gun + r_pocket = /obj/item/nullrod + glasses = /obj/item/clothing/glasses/sunglasses + + cybernetic_implants = list( + /obj/item/organ/internal/cyberimp/eyes/hud/security, + /obj/item/organ/internal/cyberimp/chest/nutriment + ) + +/datum/outfit/job/centcom/response_team/paranormal/gamma + name = "RT Paranormal (Gamma)" + suit = /obj/item/clothing/suit/space/hardsuit/ert/paranormal/inquisitor + head = /obj/item/clothing/head/helmet/space/hardsuit/ert/paranormal/inquisitor + suit_store = /obj/item/gun/energy/gun/nuclear + l_pocket = /obj/item/grenade/clusterbuster/holy + shoes = /obj/item/clothing/shoes/magboots/advance + glasses = /obj/item/clothing/glasses/night + + 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 + ) + +//////////////////// JANITORIAL /////////////////// + +/datum/outfit/job/centcom/response_team/janitorial + name = "RT Janitor" + rt_job = "Emergency Response Team Janitor" + uniform = /obj/item/clothing/under/color/purple + back = /obj/item/storage/backpack/ert/janitor + belt = /obj/item/storage/belt/janitor/full + gloves = /obj/item/clothing/gloves/color/yellow + shoes = /obj/item/clothing/shoes/galoshes + l_ear = /obj/item/radio/headset/ert/alt + id = /obj/item/card/id/centcom + pda = /obj/item/pda/centcom + l_pocket = /obj/item/melee/classic_baton/telescopic + backpack_contents = list( + /obj/item/grenade/chem_grenade/antiweed = 2, + /obj/item/reagent_containers/spray/cleaner = 1, + /obj/item/storage/bag/trash = 1, + /obj/item/storage/box/lights/mixed = 1, + /obj/item/holosign_creator = 1, + /obj/item/flashlight = 1) + +/datum/outfit/job/centcom/response_team/janitorial/amber + name = "RT Janitor (Amber)" + suit = /obj/item/clothing/suit/armor/vest/ert/janitor + head = /obj/item/clothing/head/helmet/ert/janitor + glasses = /obj/item/clothing/glasses/sunglasses + + r_hand = /obj/item/gun/energy/disabler + +/datum/outfit/job/centcom/response_team/janitorial/red + name = "RT Janitor (Red)" + suit = /obj/item/clothing/suit/space/hardsuit/ert/janitor + head = /obj/item/clothing/head/helmet/space/hardsuit/ert/janitor + glasses = /obj/item/clothing/glasses/hud/security/sunglasses + + r_pocket = /obj/item/scythe/tele + l_pocket = /obj/item/gun/energy/gun/mini + + cybernetic_implants = list( + /obj/item/organ/internal/cyberimp/arm/advmop, + /obj/item/organ/internal/cyberimp/chest/nutriment + ) + +/datum/outfit/job/centcom/response_team/janitorial/gamma + name = "RT Janitor (Gamma)" + suit = /obj/item/clothing/suit/space/hardsuit/ert/janitor/gamma + glasses = /obj/item/clothing/glasses/hud/security/sunglasses + gloves = /obj/item/clothing/gloves/combat + suit_store = /obj/item/gun/energy/gun + l_pocket = /obj/item/grenade/clusterbuster/cleaner + r_pocket = /obj/item/scythe/tele + shoes = /obj/item/clothing/shoes/magboots/advance + + backpack_contents = list( + /obj/item/clothing/head/helmet/space/hardsuit/ert/janitor/gamma = 1, + /obj/item/grenade/chem_grenade/antiweed = 2, + /obj/item/storage/box/lights/mixed = 1, + /obj/item/storage/bag/trash/bluespace = 1, + /obj/item/reagent_containers/spray/cleaner = 1 + ) + + cybernetic_implants = list( + /obj/item/organ/internal/cyberimp/arm/advmop + ) diff --git a/code/modules/security_levels/keycard authentication.dm b/code/modules/security_levels/keycard authentication.dm index b5f7540c3f2..afe433cd0cf 100644 --- a/code/modules/security_levels/keycard authentication.dm +++ b/code/modules/security_levels/keycard authentication.dm @@ -166,7 +166,7 @@ if(check_rights(R_EVENT, 0, C.mob)) fullmin_count++ if(fullmin_count) - ert_request_answered = 0 + ert_request_answered = TRUE ERT_Announce(ert_reason , event_triggered_by, 0) ert_reason = "Reason for ERT" feedback_inc("alert_keycard_auth_ert",1) diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm index bdc5f763442..e83dc1abc44 100644 --- a/code/modules/surgery/organs/augments_arms.dm +++ b/code/modules/surgery/organs/augments_arms.dm @@ -168,7 +168,6 @@ /obj/item/organ/internal/cyberimp/arm/gun/laser/l parent_organ = "l_arm" - /obj/item/organ/internal/cyberimp/arm/gun/taser name = "arm-mounted taser implant" desc = "A variant of the arm cannon implant that fires electrodes and disabler shots. The cannon emerges from the subject's arm and remains inside when not in use." @@ -245,6 +244,10 @@ contents = newlist(/obj/item/retractor/augment, /obj/item/hemostat/augment, /obj/item/cautery/augment, /obj/item/surgicaldrill/augment, /obj/item/scalpel/augment, /obj/item/circular_saw/augment, /obj/item/bonegel/augment, /obj/item/FixOVein/augment, /obj/item/bonesetter/augment) origin_tech = "materials=3;engineering=3;biotech=3;programming=2;magnets=3" +/obj/item/organ/internal/cyberimp/arm/surgery/l + parent_organ = "l_arm" + slot = "l_arm_device" + // lets make IPCs even *more* vulnerable to EMPs! /obj/item/organ/internal/cyberimp/arm/power_cord name = "APC-compatible power adapter implant" @@ -318,4 +321,16 @@ if(H.nutrition > NUTRITION_LEVEL_WELL_FED) to_chat(H, "You are now fully charged.") break - H.visible_message("[H] unplugs from \the [A].", "You unplug from \the [A].") \ No newline at end of file + H.visible_message("[H] unplugs from \the [A].", "You unplug from \the [A].") + +/obj/item/organ/internal/cyberimp/arm/telebaton + name = "telebaton implant" + desc = "Telescopic baton implant. Does what it says on the tin" // A better description + + contents = newlist(/obj/item/melee/classic_baton) + +/obj/item/organ/internal/cyberimp/arm/advmop + name = "advanced mop implant" + desc = "Advanced mop implant. Does what it says on the tin" // A better description + + contents = newlist(/obj/item/mop/advanced) \ No newline at end of file diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index 7bc8088aa86..551a7490577 100644 Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi index c12484b28e4..b721063fcf9 100644 Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index 3d3971cb0a3..0aa2ad1f592 100644 Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi index 6c186e952e9..3651f3508cc 100644 Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index 042c10b2aed..03ea5ef9684 100644 Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ diff --git a/icons/obj/grenade.dmi b/icons/obj/grenade.dmi index f33135baec6..be866dc4275 100644 Binary files a/icons/obj/grenade.dmi and b/icons/obj/grenade.dmi differ diff --git a/icons/obj/guns/energy.dmi b/icons/obj/guns/energy.dmi index 03b8eba0f8c..1fc59f10afd 100644 Binary files a/icons/obj/guns/energy.dmi and b/icons/obj/guns/energy.dmi differ diff --git a/paradise.dme b/paradise.dme index 6a89af06354..579a8a6b8f1 100644 --- a/paradise.dme +++ b/paradise.dme @@ -392,7 +392,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" @@ -1294,7 +1293,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" @@ -2167,6 +2166,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"