diff --git a/aurora.dme b/aurora.dme index 652e5b0e..9f82c22e 100644 --- a/aurora.dme +++ b/aurora.dme @@ -842,6 +842,7 @@ #include "code\modules\clothing\under\ties.dm" #include "code\modules\clothing\under\jobs\civilian.dm" #include "code\modules\clothing\under\jobs\engineering.dm" +#include "code\modules\clothing\under\jobs\ert.dm" #include "code\modules\clothing\under\jobs\medsci.dm" #include "code\modules\clothing\under\jobs\security.dm" #include "code\modules\customitems\item_defines.dm" diff --git a/code/game/machinery/computer/syndicate_specops_shuttle.dm.mytry b/code/game/machinery/computer/syndicate_specops_shuttle.dm.mytry new file mode 100644 index 00000000..0dffac9c --- /dev/null +++ b/code/game/machinery/computer/syndicate_specops_shuttle.dm.mytry @@ -0,0 +1,584 @@ +//Config stuff +#define SYNDICATE_ELITE_MOVETIME 600 //Time to station is milliseconds. 60 seconds, enough time for everyone to be on the shuttle before it leaves. +#define SYNDICATE_ELITE_STATION_AREATYPE "/area/shuttle/syndicate_elite/station" //Type of the spec ops shuttle area for station +#define SYNDICATE_ELITE_DOCK_AREATYPE "/area/shuttle/syndicate_elite/mothership" //Type of the spec ops shuttle area for dock +#define SYNDICATE_ELITE_RETURN_DELAY 6000 //Time between the shuttle is capable of moving. + +var/syndicate_elite_shuttle_moving_to_station = 0 +var/syndicate_elite_shuttle_moving_to_mothership = 0 +var/syndicate_elite_shuttle_at_station = 0 +var/syndicate_elite_shuttle_can_send = 1 +var/syndicate_elite_shuttle_time = 0 +var/syndicate_elite_shuttle_timeleft = 0 + +/obj/machinery/computer/syndicate_elite_shuttle + name = "Elite Syndicate Squad Shuttle Console" + icon = 'icons/obj/computer.dmi' + icon_state = "syndishuttle" + req_access = list(access_cent_specops) + var/temp = null + var/hacked = 0 + var/allowedtocall = 0 + +/proc/syndicate_elite_return() + var/area/syndicate_mothership/control = locate()//To find announcer. This area should exist for this proc to work. + var/area/syndicate_mothership/elite_squad = locate()//Where is the specops area located? + var/mob/living/silicon/decoy/announcer = locate() in syndicate_ship//We need a fake AI to announce some stuff below. Otherwise it will be wonky. + + var/message_tracker[] = list(0,1,2,3,5,10,30,45)//Create a a list with potential time values. + var/message = "\"THE SPECIAL OPERATIONS SHUTTLE IS PREPARING TO RETURN\""//Initial message shown. + if(announcer) + announcer.autosay(message, "GLaDOS", "Syndicate Elite Team") + + while(syndicate_elite_shuttle_time - world.timeofday > 0) + var/ticksleft = syndicate_elite_shuttle_time - world.timeofday + + if(ticksleft > 1e5) + syndicate_elite_shuttle_time = world.timeofday + 10 // midnight rollover + syndicate_elite_shuttle_timeleft = (ticksleft / 10) + + //All this does is announce the time before launch. + if(announcer) + var/rounded_time_left = round(syndicate_elite_shuttle_timeleft)//Round time so that it will report only once, not in fractions. + if(rounded_time_left in message_tracker)//If that time is in the list for message announce. + message = "\"ALERT: [rounded_time_left] SECOND[(rounded_time_left!=1)?"S":""] REMAIN\"" + if(rounded_time_left==0) + message = "\"ALERT: TAKEOFF\"" + announcer.autosay(message, "GLaDOS", "Syndicate Elite Team") + message_tracker -= rounded_time_left//Remove the number from the list so it won't be called again next cycle. + //Should call all the numbers but lag could mean some issues. Oh well. Not much I can do about that. + + sleep(5) + + syndicate_elite_shuttle_moving_to_station = 0 + syndicate_elite_shuttle_moving_to_centcom = 0 + + syndicate_elite_shuttle_at_station = 1 + + var/area/start_location = locate(/area/shuttle/syndicate_elite/station) + var/area/end_location = locate(/area/shuttle/syndicate_elite/mothership) + + var/list/dstturfs = list() + var/throwy = world.maxy + + for(var/turf/T in end_location) + dstturfs += T + if(T.y < throwy) + throwy = T.y + + // hey you, get out of the way! + for(var/turf/T in dstturfs) + // find the turf to move things to + var/turf/D = locate(T.x, throwy - 1, 1) + //var/turf/E = get_step(D, SOUTH) + for(var/atom/movable/AM as mob|obj in T) + AM.Move(D) + if(istype(T, /turf/simulated)) + del(T) + + for(var/mob/living/carbon/bug in end_location) // If someone somehow is still in the shuttle's docking area... + bug.gib() + + for(var/mob/living/simple_animal/pest in end_location) // And for the other kind of bug... + pest.gib() + + start_location.move_contents_to(end_location) + + for(var/turf/T in get_area_turfs(end_location) ) + var/mob/M = locate(/mob) in T + M << "\red You have arrived at Central Command. Operation has ended!" + + syndicate_elite_shuttle_at_station = 0 + + for(var/obj/machinery/computer/syndicate_elite_shuttle/S in world) + S.syndicate_elite_shuttle_timereset = world.time + SYNDICATE_ELITE_RETURN_DELAY + + del(announcer) + +/proc/syndicate_elite_process() + var/area/syndicate_mothership/elite_squad = locate()//Where is the specops area located? + var/obj/item/device/radio/intercom/announcer = new /obj/item/device/radio/intercom(null)//We need a fake AI to announce some stuff below. Otherwise it will be wonky. + announcer.config(list("Syndicate Elite Team" = 0)) + + var/message_tracker[] = list(0,1,2,3,5,10,30,45)//Create a a list with potential time values. + var/message = "\"THE SPECIAL OPERATIONS SHUTTLE IS PREPARING FOR LAUNCH\""//Initial message shown. + if(announcer) + announcer.autosay(message, "GLaDOS", "Syndicate Elite Team") +// message = "ARMORED SQUAD TAKE YOUR POSITION ON GRAVITY LAUNCH PAD" +// announcer.autosay(message, "GLaDOS", "Syndicate Elite Team") + + while(syndicate_elite_shuttle_time - world.timeofday > 0) + var/ticksleft = syndicate_elite_shuttle_time - world.timeofday + + if(ticksleft > 1e5) + syndicate_elite_shuttle_time = world.timeofday + 10 // midnight rollover + syndicate_elite_shuttle_timeleft = (ticksleft / 10) + + //All this does is announce the time before launch. + if(announcer) + var/rounded_time_left = round(syndicate_elite_shuttle_timeleft)//Round time so that it will report only once, not in fractions. + if(rounded_time_left in message_tracker)//If that time is in the list for message announce. + message = "\"ALERT: [rounded_time_left] SECOND[(rounded_time_left!=1)?"S":""] REMAIN\"" + if(rounded_time_left==0) + message = "\"ALERT: TAKEOFF\"" + announcer.autosay(message, "GLaDOS", "Syndicate Elite Team") + message_tracker -= rounded_time_left//Remove the number from the list so it won't be called again next cycle. + //Should call all the numbers but lag could mean some issues. Oh well. Not much I can do about that. + + sleep(5) + + syndicate_elite_shuttle_moving_to_station = 0 + syndicate_elite_shuttle_moving_to_centcom = 0 + + syndicate_elite_shuttle_at_station = 1 + if (syndicate_elite_shuttle_moving_to_station || syndicate_elite_shuttle_moving_to_centcom) return + + if (!syndicate_elite_can_move()) + usr << "\red The Special Operations shuttle is unable to leave." + return + +/* Begin Marauder launchpad. + spawn(0)So it parallel processes it. + for(var/obj/machinery/door/poddoor/M in special_ops) + switch(M.id) + if("ASSAULT0") + spawn(10)1 second delay between each. + M.open() + if("ASSAULT1") + spawn(20) + M.open() + if("ASSAULT2") + spawn(30) + M.open() + if("ASSAULT3") + spawn(40) + M.open() + + sleep(10) + + var/spawn_marauder[] = new() + for(var/obj/effect/landmark/L in world) + if(L.name == "Marauder Entry") + spawn_marauder.Add(L) + for(var/obj/effect/landmark/L in world) + if(L.name == "Marauder Exit") + var/obj/effect/portal/P = new(L.loc) + P.invisibility = 101So it is not seen by anyone. + P.failchance = 0So it has no fail chance when teleporting. + P.target = pick(spawn_marauder)Where the marauder will arrive. + spawn_marauder.Remove(P.target) + + sleep(10) + + for(var/obj/machinery/mass_driver/M in special_ops) + switch(M.id) + if("ASSAULT0") + spawn(10) + M.drive() + if("ASSAULT1") + spawn(20) + M.drive() + if("ASSAULT2") + spawn(30) + M.drive() + if("ASSAULT3") + spawn(40) + M.drive() + + sleep(50)Doors remain open for 5 seconds. + + for(var/obj/machinery/door/poddoor/M in special_ops) + switch(M.id)//Doors close at the same time. + if("ASSAULT0") + spawn(0) + M.close() + if("ASSAULT1") + spawn(0) + M.close() + if("ASSAULT2") + spawn(0) + M.close() + if("ASSAULT3") + spawn(0) + M.close() + special_ops.readyreset()Reset firealarm after the team launched. + End Marauder launchpad. */ + + var/area/start_location = locate(/area/shuttle/syndicate_elite/mothership) + var/area/end_location = locate(/area/shuttle/syndicate_elite/station) + + var/list/dstturfs = list() + var/throwy = world.maxy + + for(var/turf/T in end_location) + dstturfs += T + if(T.y < throwy) + throwy = T.y + + // hey you, get out of the way! + for(var/turf/T in dstturfs) + // find the turf to move things to + var/turf/D = locate(T.x, throwy - 1, 1) + //var/turf/E = get_step(D, SOUTH) + for(var/atom/movable/AM as mob|obj in T) + AM.Move(D) + if(istype(T, /turf/simulated)) + del(T) + + start_location.move_contents_to(end_location) + + for(var/turf/T in get_area_turfs(end_location) ) + var/mob/M = locate(/mob) in T + M << "\red You have arrived to [station_name]. Commence operation!" + + for(var/obj/machinery/computer/syndicate_elite_shuttle/S in world) + S.syndicate_elite_shuttle_timereset = world.time + SYNDICATE_ELITE_RETURN_DELAY + + del(announcer) + +/proc/syndicate_elite_can_move() + if(syndicate_elite_shuttle_moving_to_station || syndicate_elite_shuttle_moving_to_centcom) + return 0 + for(var/obj/machinery/computer/syndicate_elite_shuttle/S in world) + if(world.timeofday <= S.syndicate_elite_shuttle_timereset) + return 0 + return 1 + +/obj/machinery/computer/syndicate_elite_shuttle/attack_ai(var/mob/user as mob) + return attack_hand(user) + +/obj/machinery/computer/syndicate_elite_shuttle/attack_paw(var/mob/user as mob) + return attack_hand(user) + +/obj/machinery/computer/syndicate_elite_shuttle/attackby(I as obj, user as mob) + if(istype(I,/obj/item/weapon/card/emag)) + user << "\blue The electronic systems in this console are far too advanced for your primitive hacking peripherals." + else + return attack_hand(user) + +/obj/machinery/computer/syndicate_elite_shuttle/attack_hand(var/mob/user as mob) + if(!allowed(user)) + user << "\red Access Denied." + return + +//Commented out so admins can do shenanigans at their leisure. Also makes the force-spawned admin ERTs able to use the shuttle. +// if (sent_strike_team == 0 && send_emergency_team == 0) +// usr << "\red The strike team has not yet deployed." +// return + + if(..()) + return + + user.machine = src + var/dat + if (temp) + dat = temp + else + dat += {"
Special Operations Shuttle
+ \nLocation: [syndicate_elite_shuttle_moving_to_station || syndicate_elite_shuttle_moving_to_centcom ? "Departing for [station_name] in ([syndicate_elite_shuttle_timeleft] seconds.)":syndicate_elite_shuttle_at_station ? "Station":"Dock"]
+ [syndicate_elite_shuttle_moving_to_station || syndicate_elite_shuttle_moving_to_centcom ? "\n*The Special Ops. shuttle is already leaving.*
\n
":syndicate_elite_shuttle_at_station ? "\nShuttle standing by...
\n
":"\nDepart to [station_name]
\n
"] + \nClose"} + + user << browse(dat, "window=computer;size=575x450") + onclose(user, "computer") + return + +/obj/machinery/computer/syndicate_elite_shuttle/Topic(href, href_list) + if(..()) + return + + if ((usr.contents.Find(src) || (in_range(src, usr) && istype(loc, /turf))) || (istype(usr, /mob/living/silicon))) + usr.machine = src + + if (href_list["sendtodock"]) + if(!syndicate_elite_shuttle_at_station|| syndicate_elite_shuttle_moving_to_station || syndicate_elite_shuttle_moving_to_centcom) return + + if (!syndicate_elite_can_move()) + usr << "\blue Central Command will not allow the Special Operations shuttle to return yet." + if(world.timeofday <= syndicate_elite_shuttle_timereset) + if (((world.timeofday - syndicate_elite_shuttle_timereset)/10) > 60) + usr << "\blue [-((world.timeofday - syndicate_elite_shuttle_timereset)/10)/60] minutes remain!" + usr << "\blue [-(world.timeofday - syndicate_elite_shuttle_timereset)/10] seconds remain!" + return + + usr << "\blue The Special Operations shuttle will arrive at Central Command in [(SYNDICATE_ELITE_MOVETIME/10)] seconds." + + temp += "Shuttle departing.

OK" + updateUsrDialog() + + syndicate_elite_shuttle_moving_to_centcom = 1 + syndicate_elite_shuttle_time = world.timeofday + SYNDICATE_ELITE_MOVETIME + spawn(0) + syndicate_elite_return() + + else if (href_list["sendtostation"]) + if(syndicate_elite_shuttle_at_station || syndicate_elite_shuttle_moving_to_station || syndicate_elite_shuttle_moving_to_centcom) return + + if (!syndicate_elite_can_move()) + usr << "\red The Special Operations shuttle is unable to leave." + return + + usr << "\blue The Special Operations shuttle will arrive on [station_name] in [(SYNDICATE_ELITE_MOVETIME/10)] seconds." + + temp += "Shuttle departing.

OK" + updateUsrDialog() + + var/area/centcom/specops/special_ops = locate() + if(special_ops) + special_ops.readyalert()//Trigger alarm for the spec ops area. + syndicate_elite_shuttle_moving_to_station = 1 + + syndicate_elite_shuttle_time = world.timeofday + SYNDICATE_ELITE_MOVETIME + spawn(0) + specops_process() + + else if (href_list["mainmenu"]) + temp = null + + add_fingerprint(usr) + updateUsrDialog() + return + +/*Config stuff +#define SYNDICATE_ELITE_MOVETIME 600 //Time to station is milliseconds. 60 seconds, enough time for everyone to be on the shuttle before it leaves. +#define SYNDICATE_ELITE_STATION_AREATYPE "/area/shuttle/syndicate_elite/station" //Type of the spec ops shuttle area for station +#define SYNDICATE_ELITE_DOCK_AREATYPE "/area/shuttle/syndicate_elite/mothership" //Type of the spec ops shuttle area for dock + +var/syndicate_elite_shuttle_moving_to_station = 0 +var/syndicate_elite_shuttle_moving_to_centcom = 0 +var/syndicate_elite_shuttle_at_station = 0 +var/syndicate_elite_shuttle_can_send = 1 +var/syndicate_elite_shuttle_time = 0 +var/syndicate_elite_shuttle_timeleft = 0 + +/obj/machinery/computer/syndicate_elite_shuttle + name = "Spec. Ops. Shuttle Console" + icon = 'icons/obj/computer.dmi' + icon_state = "shuttle" + req_access = list(access_cent_specops) + var/temp = null + var/hacked = 0 + var/allowedtocall = 0 + +/proc/syndicate_elite_process() + area/syndicate_mothership/control = locate()//To find announcer. This area should exist for this proc to work. + var/area/syndicate_mothership/elite_squad = locate()//Where is the specops area located? + var/mob/living/silicon/decoy/announcer = locate() in cent_com//We need a fake AI to announce some stuff below. Otherwise it will be wonky. + + var/message_tracker[] = list(0,1,2,3,5,10,30,45)//Create a a list with potential time values. + var/message = "THE SPECIAL OPERATIONS SHUTTLE IS PREPARING FOR LAUNCH"//Initial message shown. + if(announcer) + announcer.say(message) + message = "ARMORED SQUAD TAKE YOUR POSITION ON GRAVITY LAUNCH PAD" + announcer.say(message) + + while(syndicate_elite_shuttle_time - world.timeofday > 0) + var/ticksleft = syndicate_elite_shuttle_time - world.timeofday + + if(ticksleft > 1e5) + syndicate_elite_shuttle_time = world.timeofday + 10 // midnight rollover + syndicate_elite_shuttle_timeleft = (ticksleft / 10) + + //All this does is announce the time before launch. + if(announcer) + var/rounded_time_left = round(syndicate_elite_shuttle_timeleft)//Round time so that it will report only once, not in fractions. + if(rounded_time_left in message_tracker)//If that time is in the list for message announce. + message = "ALERT: [rounded_time_left] SECOND[(rounded_time_left!=1)?"S":""] REMAIN" + if(rounded_time_left==0) + message = "ALERT: TAKEOFF" + announcer.say(message) + message_tracker -= rounded_time_left//Remove the number from the list so it won't be called again next cycle. + //Should call all the numbers but lag could mean some issues. Oh well. Not much I can do about that. + + sleep(5) + + syndicate_elite_shuttle_moving_to_station = 0 + syndicate_elite_shuttle_moving_to_centcom = 0 + + syndicate_elite_shuttle_at_station = 1 + if (syndicate_elite_shuttle_moving_to_station || syndicate_elite_shuttle_moving_to_centcom) return + + if (!syndicate_elite_can_move()) + usr << "\red The Special Operations shuttle is unable to leave." + return + + //Begin Marauder launchpad. + spawn(0)//So it parallel processes it. + for(var/obj/machinery/door/poddoor/M in special_ops) + switch(M.id) + if("ASSAULT0") + spawn(10)//1 second delay between each. + M.open() + if("ASSAULT1") + spawn(20) + M.open() + if("ASSAULT2") + spawn(30) + M.open() + if("ASSAULT3") + spawn(40) + M.open() + + sleep(10) + + var/spawn_marauder[] = new() + for(var/obj/effect/landmark/L in landmarks_list) + if(L.name == "Marauder Entry") + spawn_marauder.Add(L) + for(var/obj/effect/landmark/L in landmarks_list) + if(L.name == "Marauder Exit") + var/obj/effect/portal/P = new(L.loc) + P.invisibility = 101//So it is not seen by anyone. + P.failchance = 0//So it has no fail chance when teleporting. + P.target = pick(spawn_marauder)//Where the marauder will arrive. + spawn_marauder.Remove(P.target) + + sleep(10) + + for(var/obj/machinery/mass_driver/M in special_ops) + switch(M.id) + if("ASSAULT0") + spawn(10) + M.drive() + if("ASSAULT1") + spawn(20) + M.drive() + if("ASSAULT2") + spawn(30) + M.drive() + if("ASSAULT3") + spawn(40) + M.drive() + + sleep(50)//Doors remain open for 5 seconds. + + for(var/obj/machinery/door/poddoor/M in special_ops) + switch(M.id)//Doors close at the same time. + if("ASSAULT0") + spawn(0) + M.close() + if("ASSAULT1") + spawn(0) + M.close() + if("ASSAULT2") + spawn(0) + M.close() + if("ASSAULT3") + spawn(0) + M.close() + special_ops.readyreset()//Reset firealarm after the team launched. + //End Marauder launchpad. + + var/area/start_location = locate(/area/shuttle/syndicate_elite/mothership) + var/area/end_location = locate(/area/shuttle/syndicate_elite/station) + + var/list/dstturfs = list() + var/throwy = world.maxy + + for(var/turf/T in end_location) + dstturfs += T + if(T.y < throwy) + throwy = T.y + + // hey you, get out of the way! + for(var/turf/T in dstturfs) + // find the turf to move things to + var/turf/D = locate(T.x, throwy - 1, 1) + //var/turf/E = get_step(D, SOUTH) + for(var/atom/movable/AM as mob|obj in T) + AM.Move(D) + if(istype(T, /turf/simulated)) + del(T) + + start_location.move_contents_to(end_location) + + for(var/turf/T in get_area_turfs(end_location) ) + var/mob/M = locate(/mob) in T + M << "\red You have arrived to [station_name]. Commence operation!" + +/proc/syndicate_elite_can_move() + if(syndicate_elite_shuttle_moving_to_station || syndicate_elite_shuttle_moving_to_centcom) return 0 + else return 1 + +/obj/machinery/computer/syndicate_elite_shuttle/attackby(I as obj, user as mob) + return attack_hand(user) + +/obj/machinery/computer/syndicate_elite_shuttle/attack_ai(var/mob/user as mob) + return attack_hand(user) + +/obj/machinery/computer/syndicate_elite_shuttle/attack_paw(var/mob/user as mob) + return attack_hand(user) + +/obj/machinery/computer/syndicate_elite_shuttle/attackby(I as obj, user as mob) + if(istype(I,/obj/item/weapon/card/emag)) + user << "\blue The electronic systems in this console are far too advanced for your primitive hacking peripherals." + else + return attack_hand(user) + +/obj/machinery/computer/syndicate_elite_shuttle/attack_hand(var/mob/user as mob) + if(!allowed(user)) + user << "\red Access Denied." + return + +// if (sent_strike_team == 0) +// usr << "\red The strike team has not yet deployed." +// return + + if(..()) + return + + user.set_machine(src) + var/dat + if (temp) + dat = temp + else + dat += {"
Special Operations Shuttle
+ \nLocation: [syndicate_elite_shuttle_moving_to_station || syndicate_elite_shuttle_moving_to_centcom ? "Departing for [station_name] in ([syndicate_elite_shuttle_timeleft] seconds.)":syndicate_elite_shuttle_at_station ? "Station":"Dock"]
+ [syndicate_elite_shuttle_moving_to_station || syndicate_elite_shuttle_moving_to_centcom ? "\n*The Special Ops. shuttle is already leaving.*
\n
":syndicate_elite_shuttle_at_station ? "\nShuttle Offline
\n
":"\nDepart to [station_name]
\n
"] + \nClose"} + + user << browse(dat, "window=computer;size=575x450") + onclose(user, "computer") + return + +/obj/machinery/computer/syndicate_elite_shuttle/Topic(href, href_list) + if(..()) + return + + if ((usr.contents.Find(src) || (in_range(src, usr) && istype(loc, /turf))) || (istype(usr, /mob/living/silicon))) + usr.set_machine(src) + + if (href_list["sendtodock"]) + if(!syndicate_elite_shuttle_at_station|| syndicate_elite_shuttle_moving_to_station || syndicate_elite_shuttle_moving_to_centcom) return + + usr << "\blue Central Command will not allow the Special Operations shuttle to return." + return + + else if (href_list["sendtostation"]) + if(syndicate_elite_shuttle_at_station || syndicate_elite_shuttle_moving_to_station || syndicate_elite_shuttle_moving_to_centcom) return + + if (!syndicate_elite_can_move()) + usr << "\red The Special Operations shuttle is unable to leave." + return + + usr << "\blue The Special Operations shuttle will arrive on [station_name] in [(SYNDICATE_ELITE_MOVETIME/10)] seconds." + + temp += "Shuttle departing.

OK" + updateUsrDialog() + + var/area/centcom/specops/special_ops = locate() + if(special_ops) + special_ops.readyalert()//Trigger alarm for the spec ops area. + specops_shuttle_moving_to_station = 1 + + specops_shuttle_time = world.timeofday + SYNDICATE_ELITE_MOVETIME + spawn(0) + syndicate_elite_process() + + else if (href_list["mainmenu"]) + temp = null + + add_fingerprint(usr) + updateUsrDialog() + return + */ \ No newline at end of file diff --git a/code/game/objects/structures/crates_lockers/closets/job_closets.dm b/code/game/objects/structures/crates_lockers/closets/job_closets.dm index 10d12c9d..5c58ee46 100644 --- a/code/game/objects/structures/crates_lockers/closets/job_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/job_closets.dm @@ -87,7 +87,12 @@ icon_opened = "ertopen" /obj/structure/closet/ertcloset/New() - new /obj/item/clothing/mask/balaclava(src) new /obj/item/clothing/gloves/combat(src) new /obj/item/clothing/shoes/combat(src) new /obj/item/device/radio/headset/ert(src) + new /obj/item/clothing/under/rank/ert_soldier(src) + new /obj/item/clothing/under/rank/ert_soldier(src) + new /obj/item/clothing/under/rank/ert_nco(src) + new /obj/item/clothing/under/rank/ert_nco(src) + new /obj/item/clothing/under/rank/ert_officer(src) + new /obj/item/clothing/under/rank/ert_officer(src) \ No newline at end of file diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index b2afab74..b8df2fa6 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -183,4 +183,40 @@ desc = "Pukish armor." icon_state = "tdgreen" item_state = "tdgreen" - siemens_coefficient = 1 \ No newline at end of file + siemens_coefficient = 1 + +/obj/item/clothing/suit/armor/vest/ert_soldier + name = "ERT trooper vest" + desc = "A platecarrier worns by the troopers of NanoTrasen's Emergency Response Teams." + icon_state = "ert_soldier" + item_state = "ert_soldier" + blood_overlay_type = "armor" + flags = FPRINT | TABLEPASS | ONESIZEFITSALL + armor = list(melee = 65, bullet = 25, laser = 65, energy = 25, bomb = 35, bio = 0, rad = 0) + +/obj/item/clothing/suit/armor/vest/ert_nco + name = "ERT leading trooper vest" + desc = "A platecarrier worns by the leading troopers of NanoTrasen's Emergency Response Teams." + icon_state = "ert_nco" + item_state = "ert_nco" + blood_overlay_type = "armor" + flags = FPRINT | TABLEPASS | ONESIZEFITSALL + armor = list(melee = 65, bullet = 25, laser = 65, energy = 25, bomb = 35, bio = 0, rad = 0) + +/obj/item/clothing/suit/armor/vest/ert_officer + name = "ERT sub-officer vest" + desc = "A platecarrier worns by the sub-officers of NanoTrasen's Emergency Response Teams." + icon_state = "ert_officer" + item_state = "ert_ófficer" + blood_overlay_type = "armor" + flags = FPRINT | TABLEPASS | ONESIZEFITSALL + armor = list(melee = 65, bullet = 25, laser = 65, energy = 25, bomb = 35, bio = 0, rad = 0) + +/obj/item/clothing/suit/armor/vest/ert_commander + name = "ERT commander vest" + desc = "A platecarrier worns by the commanders of NanoTrasen's Emergency Response Teams." + icon_state = "ert_cdr" + item_state = "ert_cdr" + blood_overlay_type = "armor" + flags = FPRINT | TABLEPASS | ONESIZEFITSALL + armor = list(melee = 65, bullet = 25, laser = 65, energy = 25, bomb = 35, bio = 0, rad = 0) \ No newline at end of file diff --git a/code/modules/clothing/under/jobs/ert.dm b/code/modules/clothing/under/jobs/ert.dm new file mode 100644 index 00000000..63e32955 --- /dev/null +++ b/code/modules/clothing/under/jobs/ert.dm @@ -0,0 +1,40 @@ +/obj/item/clothing/under/rank/ert_soldier + desc = "An under-armour combat shirt worn by troopers of the NanoTrasen Emergency Response Teams." + name = "ERT trooper jumpsuit" + icon_state = "ert_soldier" + item_state = "ert_soldier" + item_color = "ert_soldier" + armor = list(melee = 10, bullet = 0, laser = 10,energy = 0, bomb = 0, bio = 0, rad = 0) + flags = FPRINT | TABLEPASS + siemens_coefficient = 0.8 + +/obj/item/clothing/under/rank/ert_nco + desc = "An under-armour combat shirt worn by the leading troopers of the NanoTrasen Emergency Response Teams." + name = "ERT leading trooper jumpsuit" + icon_state = "ert_nco" + item_state = "ert_nco" + item_color = "ert_nco" + armor = list(melee = 10, bullet = 0, laser = 10,energy = 0, bomb = 0, bio = 0, rad = 0) + flags = FPRINT | TABLEPASS + siemens_coefficient = 0.8 + +/obj/item/clothing/under/rank/ert_officer + desc = "An under-armour combat shirt worn by the sub-officers of the NanoTrasen Emergency Response Teams." + name = "ERT sub-officer jumpsuit" + icon_state = "ert_officer" + item_state = "ert_officer" + item_color = "ert_officer" + armor = list(melee = 10, bullet = 0, laser = 10,energy = 0, bomb = 0, bio = 0, rad = 0) + flags = FPRINT | TABLEPASS + siemens_coefficient = 0.8 + +/obj/item/clothing/under/rank/ert_commander + desc = "An under-armour combat shirt worn by the commanders of the NanoTrasen Emergency Response Teams." + name = "ERT commander jumpsuit" + icon_state = "ert_cdr" + item_state = "ert_cdr" + item_color = "ert_cdr" + armor = list(melee = 10, bullet = 0, laser = 10,energy = 0, bomb = 0, bio = 0, rad = 0) + flags = FPRINT | TABLEPASS + siemens_coefficient = 0.8 + diff --git a/icons/mob/back.dmi b/icons/mob/back.dmi index 95a7a85e..16ff016c 100644 Binary files a/icons/mob/back.dmi and b/icons/mob/back.dmi differ diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi index 00188b87..4c4b3653 100644 Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi index 03418ee8..3ddbc967 100644 Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi index 0421e18a..6aa198de 100644 Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi index 2ccda9b5..19ebaaac 100644 Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ