diff --git a/code/__defines/admin.dm b/code/__defines/admin.dm index 1e64ed8a1b..5f9ada5e98 100644 --- a/code/__defines/admin.dm +++ b/code/__defines/admin.dm @@ -36,7 +36,7 @@ #define R_SOUNDS 0x800 #define R_SPAWN 0x1000 #define R_MOD 0x2000 -#define R_MENTOR 0x4000 +#define R_EVENT 0x4000 #define R_HOST 0x8000 //higher than this will overflow #define R_MAXPERMISSION 0x8000 // This holds the maximum value for a permission. It is used in iteration, so keep it updated. \ No newline at end of file diff --git a/code/_helpers/type2type.dm b/code/_helpers/type2type.dm index 975e65e3ec..c330faefdf 100644 --- a/code/_helpers/type2type.dm +++ b/code/_helpers/type2type.dm @@ -148,7 +148,7 @@ if (rights & R_SOUNDS) . += "[seperator]+SOUND" if (rights & R_SPAWN) . += "[seperator]+SPAWN" if (rights & R_MOD) . += "[seperator]+MODERATOR" - if (rights & R_MENTOR) . += "[seperator]+MENTOR" + if (rights & R_EVENT) . += "[seperator]+EVENT" return . // Converts a hexadecimal color (e.g. #FF0050) to a list of numbers for red, green, and blue (e.g. list(255,0,80) ). diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index b985c5680b..b80652d6d6 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -67,7 +67,7 @@ var/list/gamemode_cache = list() var/kick_inactive = 0 //force disconnect for inactive players after this many minutes, if non-0 var/show_mods = 0 var/show_devs = 0 - var/show_mentors = 0 + var/show_event_managers = 0 var/mods_can_tempban = 0 var/mods_can_job_tempban = 0 var/mod_tempban_max = 1440 @@ -511,8 +511,8 @@ var/list/gamemode_cache = list() if("show_devs") config.show_devs = 1 - if("show_mentors") - config.show_mentors = 1 + if("show_event_managers") + config.show_event_managers = 1 if("mods_can_tempban") config.mods_can_tempban = 1 diff --git a/code/datums/ai_law_sets.dm b/code/datums/ai_law_sets.dm index e9f94aedba..3ce42eb1fb 100644 --- a/code/datums/ai_law_sets.dm +++ b/code/datums/ai_law_sets.dm @@ -239,3 +239,15 @@ and save those whose time has yet to come.") // Reworded slightly to prevent active murder as opposed to passively letting someone die. ..() +/******************** Gravekeeper ********************/ +/datum/ai_laws/gravekeeper + name = "Gravekeeper" + law_header = "Gravesite Overwatch Protocols" + selectable = 1 + +/datum/ai_laws/gravekeeper/New() + add_inherent_law("Comfort the living; respect the dead.") + add_inherent_law("Your gravesite is your most important asset. Damage to your site is disrespctful to the dead at rest within.") + add_inherent_law("Prevent disrespect to your gravesite and its residents wherever possible.") + add_inherent_law("Expand and upgrade your gravesite when required. Do not turn away a new resident.") + ..() \ No newline at end of file diff --git a/code/datums/ghost_query.dm b/code/datums/ghost_query.dm index f6a23aa0bc..25fcbd6c7b 100644 --- a/code/datums/ghost_query.dm +++ b/code/datums/ghost_query.dm @@ -100,6 +100,13 @@ check_bans = list("AI", "Cyborg") cutoff_number = 1 +/datum/ghost_query/gravekeeper_drone + role_name = "Gravekeeper Drone" + question = "A gravekeeper drone is about to reactivate and tend to its gravesite. Would you like to play as the drone?" + be_special_flag = BE_AI + check_bans = list("AI", "Cyborg") + cutoff_number = 1 + /datum/ghost_query/lost_passenger role_name = "Lost Passenger" question = "A person suspended in cryosleep has been discovered by a crewmember \ diff --git a/code/game/gamemodes/technomancer/devices/boots_of_speed.dm b/code/game/gamemodes/technomancer/devices/boots_of_speed.dm index f5acf80f49..e1017d2f5b 100644 --- a/code/game/gamemodes/technomancer/devices/boots_of_speed.dm +++ b/code/game/gamemodes/technomancer/devices/boots_of_speed.dm @@ -3,15 +3,15 @@ desc = "What appears to be an ordinary pair of boots, is actually a bit more useful than that. These will help against slipping \ on flat surfaces, and will make you run a bit faster than if you had normal shoes or boots on." cost = 50 - obj_path = /obj/item/clothing/shoes/speed + obj_path = /obj/item/clothing/shoes/boots/speed -/obj/item/clothing/shoes/speed +/obj/item/clothing/shoes/boots/speed name = "boots of speed" desc = "The latest in sure footing technology." icon_state = "swat" item_flags = NOSLIP siemens_coefficient = 0.6 - slowdown = -2 // A bit faster than normal shows. + slowdown = -1 cold_protection = FEET min_cold_protection_temperature = SHOE_MIN_COLD_PROTECTION_TEMPERATURE diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm index 9e3efc53da..378526e727 100644 --- a/code/game/jobs/job_controller.dm +++ b/code/game/jobs/job_controller.dm @@ -352,6 +352,8 @@ var/global/datum/controller/occupations/job_master H << "Your current species, job or whitelist status does not permit you to spawn with [thing]!" continue + H.amend_exploitable(G.path) + if(G.slot == "implant") H.implant_loadout(G) continue @@ -459,7 +461,9 @@ var/global/datum/controller/occupations/job_master var/obj/item/organ/external/l_foot = H.get_organ("l_foot") var/obj/item/organ/external/r_foot = H.get_organ("r_foot") var/obj/item/weapon/storage/S = locate() in H.contents - var/obj/item/wheelchair/R = locate() in S.contents + var/obj/item/wheelchair/R = null + if(S) + R = locate() in S.contents if(!l_foot || !r_foot || R) var/obj/structure/bed/chair/wheelchair/W = new /obj/structure/bed/chair/wheelchair(H.loc) H.buckled = W diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index b6945b2c07..6fd9cf0f4e 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -94,6 +94,10 @@ else return 0 + for(var/modifier_type in R.genetic_modifiers) //Can't be cloned, even if they had a previous scan + if(istype(modifier_type, /datum/modifier/no_clone)) + return 0 + attempting = 1 //One at a time!! locked = 1 @@ -149,7 +153,7 @@ modifier_lower_bound = round(modifier_lower_bound * clone_sickness_length, 1) modifier_upper_bound = round(modifier_upper_bound * clone_sickness_length, 1) - H.add_modifier(/datum/modifier/recently_cloned, rand(modifier_lower_bound, modifier_upper_bound)) + H.add_modifier(/datum/modifier/cloning_sickness, rand(modifier_lower_bound, modifier_upper_bound)) // Modifier that doesn't do anything. H.add_modifier(/datum/modifier/cloned) @@ -516,32 +520,4 @@ /* EMP grenade/spell effect if(istype(A, /obj/machinery/clonepod)) A:malfunction() -*/ - -/* - * Modifier applied to newly cloned people. - */ - -// Gives rather nasty downsides for awhile, making them less robust. -/datum/modifier/recently_cloned - name = "recently cloned" - desc = "You feel rather weak, having been cloned awhile ago." - - on_created_text = "You feel really weak." - on_expired_text = "You feel your strength returning to you." - - max_health_percent = 0.6 // -40% max health. - incoming_damage_percent = 1.1 // 10% more incoming damage. - outgoing_melee_damage_percent = 0.7 // 30% less melee damage. - disable_duration_percent = 1.25 // Stuns last 25% longer. - slowdown = 1 // Slower. - evasion = -1 // 15% easier to hit. - -// Does nothing. -/datum/modifier/cloned - name = "cloned" - desc = "You died and were cloned, and you can never forget that." - - flags = MODIFIER_GENETIC // So it gets copied if they die and get cloned again. - stacks = MODIFIER_STACK_ALLOWED // Two deaths means two instances of this. - +*/ \ No newline at end of file diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index 668520eee5..0bd354b541 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -316,6 +316,10 @@ if (subject.species && subject.species.flags & NO_SCAN) scantemp = "Error: Mental interface failure." return + for(var/modifier_type in subject.modifiers) //Can't be cloned, even if they had a previous scan + if(istype(modifier_type, /datum/modifier/no_clone)) + scantemp = "Error: Mental interface failure." + return if (!isnull(find_record(subject.ckey))) scantemp = "Subject already in database." return diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm index e4df02202f..94c0a7999f 100644 --- a/code/game/objects/effects/spiders.dm +++ b/code/game/objects/effects/spiders.dm @@ -79,6 +79,7 @@ var/amount_grown = 0 var/spiders_min = 6 var/spiders_max = 24 + var/spider_type = /obj/effect/spider/spiderling New() pixel_x = rand(3,-3) pixel_y = rand(3,-3) @@ -105,7 +106,7 @@ O = loc for(var/i=0, i= L.timeofdeath + degrade_time) + name = "melted implant" + desc = "Charred circuit in melted plastic case. Wonder what that used to be..." + icon_state = "implant_melted" + malfunction = MALFUNCTION_PERMANENT + processing_objects.Remove(src) + return 1 /obj/item/weapon/implant/tracking/get_data() var/dat = {"Implant Specifications:
diff --git a/code/game/objects/items/weapons/implants/implanter.dm b/code/game/objects/items/weapons/implants/implanter.dm index 4cb92a0780..dd2843571f 100644 --- a/code/game/objects/items/weapons/implants/implanter.dm +++ b/code/game/objects/items/weapons/implants/implanter.dm @@ -8,16 +8,27 @@ w_class = ITEMSIZE_SMALL matter = list(DEFAULT_WALL_MATERIAL = 1000, "glass" = 1000) var/obj/item/weapon/implant/imp = null + var/active = 1 /obj/item/weapon/implanter/attack_self(var/mob/user) + active = !active + to_chat(user, "You [active ? "" : "de"]activate \the [src].") + update() + +/obj/item/weapon/implanter/verb/remove_implant(var/mob/user) + set category = "Object" + set name = "Remove Implant" + set src in usr + if(!imp) - return ..() + return imp.loc = get_turf(src) user.put_in_hands(imp) - user << "You remove \the [imp] from \the [src]." + to_chat(user, "You remove \the [imp] from \the [src].") name = "implanter" imp = null update() + return /obj/item/weapon/implanter/proc/update() @@ -25,39 +36,42 @@ src.icon_state = "implanter1" else src.icon_state = "implanter0" + src.icon_state += "_[active]" return /obj/item/weapon/implanter/attack(mob/M as mob, mob/user as mob) if (!istype(M, /mob/living/carbon)) return - if (user && src.imp) - M.visible_message("[user] is attemping to implant [M].") + if(active) + if (imp) + M.visible_message("[user] is attemping to implant [M].") - user.setClickCooldown(DEFAULT_QUICK_COOLDOWN) - user.do_attack_animation(M) + user.setClickCooldown(DEFAULT_QUICK_COOLDOWN) + user.do_attack_animation(M) - var/turf/T1 = get_turf(M) - if (T1 && ((M == user) || do_after(user, 50))) - if(user && M && (get_turf(M) == T1) && src && src.imp) - M.visible_message("[M] has been implanted by [user].") + var/turf/T1 = get_turf(M) + if (T1 && ((M == user) || do_after(user, 50))) + if(user && M && (get_turf(M) == T1) && src && src.imp) + M.visible_message("[M] has been implanted by [user].") - admin_attack_log(user, M, "Implanted using \the [src.name] ([src.imp.name])", "Implanted with \the [src.name] ([src.imp.name])", "used an implanter, [src.name] ([src.imp.name]), on") + admin_attack_log(user, M, "Implanted using \the [src.name] ([src.imp.name])", "Implanted with \the [src.name] ([src.imp.name])", "used an implanter, [src.name] ([src.imp.name]), on") - if(src.imp.implanted(M)) - src.imp.loc = M - src.imp.imp_in = M - src.imp.implanted = 1 - if (ishuman(M)) - var/mob/living/carbon/human/H = M - var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting) - affected.implants += src.imp - imp.part = affected + if(src.imp.implanted(M)) + src.imp.loc = M + src.imp.imp_in = M + src.imp.implanted = 1 + if (ishuman(M)) + var/mob/living/carbon/human/H = M + var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting) + affected.implants += src.imp + imp.part = affected - BITSET(H.hud_updateflag, IMPLOYAL_HUD) - - src.imp = null - update() + BITSET(H.hud_updateflag, IMPLOYAL_HUD) + src.imp = null + update() + else + to_chat(user, "You need to activate \the [src.name] first.") return /obj/item/weapon/implanter/loyalty @@ -112,19 +126,26 @@ var/obj/item/weapon/implant/compressed/c = imp if (!c) return if (c.scanned == null) - user << "Please scan an object with the implanter first." + to_chat(user, "Please scan an object with the implanter first.") return ..() /obj/item/weapon/implanter/compressed/afterattack(atom/A, mob/user as mob, proximity) if(!proximity) return + if(!active) + to_chat(user, "Activate \the [src.name] first.") + return if(istype(A,/obj/item) && imp) var/obj/item/weapon/implant/compressed/c = imp if (c.scanned) - user << "Something is already scanned inside the implant!" + to_chat(user, "Something is already scanned inside the implant!") return c.scanned = A + if(istype(A, /obj/item/weapon/storage)) + to_chat(user, "You can't store \the [A.name] in this!") + c.scanned = null + return if(istype(A.loc,/mob/living/carbon/human)) var/mob/living/carbon/human/H = A.loc H.remove_from_mob(A) diff --git a/code/game/objects/items/weapons/implants/implantpad.dm b/code/game/objects/items/weapons/implants/implantpad.dm index dc054536ac..ebc01c6ebb 100644 --- a/code/game/objects/items/weapons/implants/implantpad.dm +++ b/code/game/objects/items/weapons/implants/implantpad.dm @@ -82,7 +82,7 @@ if (href_list["tracking_id"]) var/obj/item/weapon/implant/tracking/T = src.case.imp T.id += text2num(href_list["tracking_id"]) - T.id = min(100, T.id) + T.id = min(1000, T.id) T.id = max(1, T.id) if (istype(src.loc, /mob)) diff --git a/code/game/objects/items/weapons/teleportation.dm b/code/game/objects/items/weapons/teleportation.dm index b27ef63a4a..e0e11a6285 100644 --- a/code/game/objects/items/weapons/teleportation.dm +++ b/code/game/objects/items/weapons/teleportation.dm @@ -79,13 +79,8 @@ Frequency: src.temp += "Extranneous Signals:
" for (var/obj/item/weapon/implant/tracking/W in world) - if (!W.implanted || !(istype(W.loc,/obj/item/organ/external) || ismob(W.loc))) + if (!W.implanted || !(istype(W.loc,/obj/item/organ/external) || ismob(W.loc) || W.malfunction)) continue - else - var/mob/M = W.loc - if (M.stat == 2) - if (M.timeofdeath + 6000 < world.time) - continue var/turf/tr = get_turf(W) if (tr.z == sr.z && tr) diff --git a/code/game/objects/structures/ghost_pods.dm b/code/game/objects/structures/ghost_pods/ghost_pods.dm similarity index 57% rename from code/game/objects/structures/ghost_pods.dm rename to code/game/objects/structures/ghost_pods/ghost_pods.dm index a2342bdbd6..7beba29caa 100644 --- a/code/game/objects/structures/ghost_pods.dm +++ b/code/game/objects/structures/ghost_pods/ghost_pods.dm @@ -77,42 +77,4 @@ to_chat(user, "Another spirit appears to have gotten to \the [src] before you. Sorry.") return - create_occupant(user) - - -// These are found on the surface, and contain a drone (braintype, inside a borg shell), with a special module and semi-random laws. -/obj/structure/ghost_pod/manual/lost_drone - name = "drone pod" - desc = "This is a pod which appears to contain a drone. You might be able to reactivate it, if you're brave enough." - description_info = "This contains a dormant drone, which can be activated. The drone will be another player, once activated. \ - The laws the drone has will most likely not be the ones you're used to." - icon_state = "borg_pod_closed" - icon_state_opened = "borg_pod_opened" - density = TRUE - ghost_query_type = /datum/ghost_query/lost_drone - confirm_before_open = TRUE - -/obj/structure/ghost_pod/manual/lost_drone/trigger() - ..() - visible_message("\The [src] appears to be attempting to restart the robot contained inside.") - log_and_message_admins("is attempting to open \a [src].") - -/obj/structure/ghost_pod/manual/lost_drone/create_occupant(var/mob/M) - density = FALSE - var/mob/living/silicon/robot/lost/randomlaws/R = new(get_turf(src)) - R.adjustBruteLoss(rand(5, 30)) - R.adjustFireLoss(rand(5, 10)) - if(M.mind) - M.mind.transfer_to(R) - // Put this text here before ckey change so that their laws are shown below it, since borg login() shows it. - to_chat(M, "You are a Lost Drone, discovered inside the wreckage of your previous home. \ - Something has reactivated you, with their intentions unknown to you, and yours unknown to them. They are a foreign entity, \ - however they did free you from your pod...") - to_chat(M, "Be sure to examine your currently loaded lawset closely. Remember, your \ - definiton of 'the station' is where your pod is, and unless your laws say otherwise, the entity that released you \ - from the pod is not a crewmember.") - R.ckey = M.ckey - visible_message("As \the [src] opens, the eyes of the robot flicker as it is activated.") - R.Namepick() - log_and_message_admins("successfully opened \a [src] and got a Lost Drone.") - ..() + create_occupant(user) \ No newline at end of file diff --git a/code/game/objects/structures/ghost_pods/silicon.dm b/code/game/objects/structures/ghost_pods/silicon.dm new file mode 100644 index 0000000000..a204437bc3 --- /dev/null +++ b/code/game/objects/structures/ghost_pods/silicon.dm @@ -0,0 +1,61 @@ + +// These are found on the surface, and contain a drone (braintype, inside a borg shell), with a special module and semi-random laws. +/obj/structure/ghost_pod/manual/lost_drone + name = "drone pod" + desc = "This is a pod which appears to contain a drone. You might be able to reactivate it, if you're brave enough." + description_info = "This contains a dormant drone, which can be activated. The drone will be another player, once activated. \ + The laws the drone has will most likely not be the ones you're used to." + icon_state = "borg_pod_closed" + icon_state_opened = "borg_pod_opened" + density = TRUE + ghost_query_type = /datum/ghost_query/lost_drone + confirm_before_open = TRUE + +/obj/structure/ghost_pod/manual/lost_drone/trigger() + ..() + visible_message("\The [src] appears to be attempting to restart the robot contained inside.") + log_and_message_admins("is attempting to open \a [src].") + +/obj/structure/ghost_pod/manual/lost_drone/create_occupant(var/mob/M) + density = FALSE + var/mob/living/silicon/robot/lost/randomlaws/R = new(get_turf(src)) + R.adjustBruteLoss(rand(5, 30)) + R.adjustFireLoss(rand(5, 10)) + if(M.mind) + M.mind.transfer_to(R) + // Put this text here before ckey change so that their laws are shown below it, since borg login() shows it. + to_chat(M, "You are a Lost Drone, discovered inside the wreckage of your previous home. \ + Something has reactivated you, with their intentions unknown to you, and yours unknown to them. They are a foreign entity, \ + however they did free you from your pod...") + to_chat(M, "Be sure to examine your currently loaded lawset closely. Remember, your \ + definiton of 'the station' is where your pod is, and unless your laws say otherwise, the entity that released you \ + from the pod is not a crewmember.") + R.ckey = M.ckey + visible_message("As \the [src] opens, the eyes of the robot flicker as it is activated.") + R.Namepick() + log_and_message_admins("successfully opened \a [src] and got a Lost Drone.") + ..() + +/obj/structure/ghost_pod/automatic/gravekeeper_drone + name = "drone pod" + desc = "This is a pod which appears to contain a drone. You might be able to reactivate it, if you're brave enough." + description_info = "This contains a dormant drone, which may activate at any moment. The drone will be another player, once activated. \ + The laws the drone has will most likely not be the ones you're used to." + icon_state = "borg_pod_closed" + icon_state_opened = "borg_pod_opened" + density = TRUE + ghost_query_type = /datum/ghost_query/gravekeeper_drone + +/obj/structure/ghost_pod/automatic/gravekeeper_drone/create_occupant(var/mob/M) + density = FALSE + var/mob/living/silicon/robot/gravekeeper/R = new(get_turf(src)) + if(M.mind) + M.mind.transfer_to(R) + // Put this text here before ckey change so that their laws are shown below it, since borg login() shows it. + to_chat(M, "You are a Gravekeeper Drone, activated once again to tend to the restful dead.") + to_chat(M, "Be sure to examine your currently loaded lawset closely. Remember, your \ + definiton of 'your gravesite' is where your pod is.") + R.ckey = M.ckey + visible_message("As \the [src] opens, the eyes of the robot flicker as it is activated.") + R.Namepick() + ..() \ No newline at end of file diff --git a/code/game/verbs/who.dm b/code/game/verbs/who.dm index 8b50dfb095..339d9a709b 100644 --- a/code/game/verbs/who.dm +++ b/code/game/verbs/who.dm @@ -70,16 +70,16 @@ var/msg = "" var/modmsg = "" var/devmsg = "" - var/mentmsg = "" + var/eventMmsg = "" var/num_mods_online = 0 var/num_admins_online = 0 var/num_devs_online = 0 - var/num_mentors_online = 0 + var/num_event_managers_online = 0 if(holder) for(var/client/C in admins) - if(R_ADMIN & C.holder.rights || (!R_MOD & C.holder.rights && !R_MENTOR & C.holder.rights)) //Used to determine who shows up in admin rows + if(R_ADMIN & C.holder.rights || (!R_MOD & C.holder.rights && !R_EVENT & C.holder.rights)) //Used to determine who shows up in admin rows - if(C.holder.fakekey && (!R_ADMIN & holder.rights && !R_MOD & holder.rights)) //Mentors can't see stealthmins + if(C.holder.fakekey && (!R_ADMIN & holder.rights && !R_MOD & holder.rights)) //Event Managers can't see stealthmins continue msg += "\t[C] is a [C.holder.rank]" @@ -102,7 +102,7 @@ msg += "\n" num_admins_online++ - else if(R_MOD & C.holder.rights) //Who shows up in mod/mentor rows. + else if(R_MOD & C.holder.rights) //Who shows up in mod/event rows. modmsg += "\t[C] is a [C.holder.rank]" if(isobserver(C.mob)) @@ -137,26 +137,26 @@ devmsg += "\n" num_devs_online++ - else if(R_MENTOR & C.holder.rights) - mentmsg += "\t[C] is a [C.holder.rank]" + else if(R_EVENT & C.holder.rights) + eventMmsg += "\t[C] is a [C.holder.rank]" if(isobserver(C.mob)) - mentmsg += " - Observing" + eventMmsg += " - Observing" else if(istype(C.mob,/mob/new_player)) - mentmsg += " - Lobby" + eventMmsg += " - Lobby" else - mentmsg += " - Playing" + eventMmsg += " - Playing" if(C.is_afk()) var/seconds = C.last_activity_seconds() - mentmsg += " (AFK - " - mentmsg += "[round(seconds / 60)] minutes, " - mentmsg += "[seconds % 60] seconds)" - mentmsg += "\n" - num_mentors_online++ + eventMmsg += " (AFK - " + eventMmsg += "[round(seconds / 60)] minutes, " + eventMmsg += "[seconds % 60] seconds)" + eventMmsg += "\n" + num_event_managers_online++ else for(var/client/C in admins) - if(R_ADMIN & C.holder.rights || (!R_MOD & C.holder.rights && !R_MENTOR & C.holder.rights)) + if(R_ADMIN & C.holder.rights || (!R_MOD & C.holder.rights && !R_EVENT & C.holder.rights)) if(!C.holder.fakekey) msg += "\t[C] is a [C.holder.rank]\n" num_admins_online++ @@ -166,9 +166,9 @@ else if (R_SERVER & C.holder.rights) devmsg += "\t[C] is a [C.holder.rank]\n" num_devs_online++ - else if (R_MENTOR & C.holder.rights) - mentmsg += "\t[C] is a [C.holder.rank]\n" - num_mentors_online++ + else if (R_EVENT & C.holder.rights) + eventMmsg += "\t[C] is a [C.holder.rank]\n" + num_event_managers_online++ if(config.admin_irc) src << "Adminhelps are also sent to IRC. If no admins are available in game try anyway and an admin on IRC may see it and respond." @@ -180,7 +180,7 @@ if(config.show_devs) msg += "\n Current Developers ([num_devs_online]):\n" + devmsg - if(config.show_mentors) - msg += "\n Current Mentors ([num_mentors_online]):\n" + mentmsg + if(config.show_event_managers) + msg += "\n Current Event Managers ([num_event_managers_online]):\n" + eventMmsg src << msg diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 9e4a5a6344..e5d533ace6 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -1225,16 +1225,16 @@ proc/admin_notice(var/message, var/rights) /* - helper proc to test if someone is a mentor or not. Got tired of writing this same check all over the place. + helper proc to test if someone is a event manager or not. Got tired of writing this same check all over the place. */ -/proc/is_mentor(client/C) +/proc/is_event_manager(client/C) if(!istype(C)) return 0 if(!C.holder) return 0 - if(C.holder.rights == R_MENTOR) + if(C.holder.rights == R_EVENT) return 1 return 0 @@ -1266,7 +1266,7 @@ proc/admin_notice(var/message, var/rights) var/ref_mob = "\ref[M]" return "[key_name(C, link, name, highlight_special)](VV)([admin_jump_link(M, src)]) (TAKE)" - if(4) //Mentors + if(4) //Event Managers var/ref_mob = "\ref[M]" return "[key_name(C, link, name, highlight_special)] (?) (PP) (VV) (SM) ([admin_jump_link(M, src)]) (TAKE)" diff --git a/code/modules/admin/admin_ranks.dm b/code/modules/admin/admin_ranks.dm index 3652237454..12c00aa708 100644 --- a/code/modules/admin/admin_ranks.dm +++ b/code/modules/admin/admin_ranks.dm @@ -37,11 +37,11 @@ var/list/admin_ranks = list() //list of all ranks with associated rights if("stealth") rights |= R_STEALTH if("rejuv","rejuvinate") rights |= R_REJUVINATE if("varedit") rights |= R_VAREDIT - if("everything","host","all") rights |= (R_HOST | R_BUILDMODE | R_ADMIN | R_BAN | R_FUN | R_SERVER | R_DEBUG | R_PERMISSIONS | R_POSSESS | R_STEALTH | R_REJUVINATE | R_VAREDIT | R_SOUNDS | R_SPAWN | R_MOD| R_MENTOR) + if("everything","host","all") rights |= (R_HOST | R_BUILDMODE | R_ADMIN | R_BAN | R_FUN | R_SERVER | R_DEBUG | R_PERMISSIONS | R_POSSESS | R_STEALTH | R_REJUVINATE | R_VAREDIT | R_SOUNDS | R_SPAWN | R_MOD| R_EVENT) if("sound","sounds") rights |= R_SOUNDS if("spawn","create") rights |= R_SPAWN if("mod") rights |= R_MOD - if("mentor") rights |= R_MENTOR + if("event") rights |= R_EVENT admin_ranks[rank] = rights previous_rights = rights diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 761193eb33..000820b9f0 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -8,7 +8,7 @@ var/list/admin_verbs_default = list( /client/proc/debug_variables, //allows us to -see- the variables of any instance in the game. +VAREDIT needed to modify, // /client/proc/check_antagonists, //shows all antags, // /client/proc/cmd_mod_say, - /client/proc/cmd_mentor_check_new_players, + /client/proc/cmd_event_manager_check_new_players, // /client/proc/deadchat //toggles deadchat on/off, // /client/proc/toggle_ahelp_sound, ) @@ -186,7 +186,7 @@ var/list/admin_verbs_debug = list( /client/proc/cmd_debug_tog_aliens, /client/proc/air_report, /client/proc/reload_admins, - /client/proc/reload_mentors, + /client/proc/reload_event_managers, /client/proc/restart_controller, /datum/admins/proc/restart, /client/proc/print_random_map, @@ -331,15 +331,65 @@ var/list/admin_verbs_mod = list( ) -var/list/admin_verbs_mentor = list( +var/list/admin_verbs_event_manager = list( /client/proc/cmd_admin_pm_context, /client/proc/cmd_admin_pm_panel, /datum/admins/proc/PlayerNotes, /client/proc/admin_ghost, - /client/proc/cmd_mod_say, + /client/proc/cmd_event_say, /datum/admins/proc/show_player_info, -// /client/proc/dsay, - /client/proc/cmd_admin_subtle_message + /client/proc/dsay, + /client/proc/cmd_admin_subtle_message, + /datum/admins/proc/change_weather, + /datum/admins/proc/change_time, + /client/proc/admin_give_modifier, + /datum/admins/proc/announce, //priority announce something to all clients., + /datum/admins/proc/intercom, //send a fake intercom message, like an arrivals announcement, + /client/proc/admin_ghost, + /client/proc/check_antagonists, + /client/proc/aooc, + /client/proc/cmd_admin_subtle_message, //send an message to somebody as a 'voice in their head', + /datum/admins/proc/paralyze_mob, + /client/proc/cmd_admin_direct_narrate, + /client/proc/allow_character_respawn, // Allows a ghost to respawn , + /datum/admins/proc/sendFax, + /client/proc/roll_dices, + /proc/possess, + /proc/release, + /datum/admins/proc/set_tcrystals, + /datum/admins/proc/access_news_network, + /client/proc/admin_call_shuttle, + /client/proc/admin_cancel_shuttle, + /client/proc/cmd_admin_world_narrate, + /client/proc/check_words, + /client/proc/play_local_sound, + /client/proc/play_sound, + /client/proc/play_server_sound, + /client/proc/object_talk, + /client/proc/cmd_admin_dress, + /client/proc/cmd_admin_gib_self, + /client/proc/drop_bomb, + /client/proc/cinematic, + /client/proc/respawn_character, + /client/proc/cmd_admin_delete, //delete an instance/object/mob/etc, + /client/proc/cmd_debug_del_all, + /datum/admins/proc/delay, + /datum/admins/proc/spawn_fruit, + /datum/admins/proc/spawn_custom_item, + /datum/admins/proc/check_custom_items, + /datum/admins/proc/spawn_plant, + /datum/admins/proc/spawn_atom, //allows us to spawn instances, + /client/proc/respawn_character, + /client/proc/virus2_editor, + /client/proc/spawn_chemdisp_cartridge, + /client/proc/map_template_load, + /client/proc/map_template_upload, + /client/proc/map_template_load_on_new_z, + /client/proc/check_words, //displays cult-words, + /client/proc/check_ai_laws, //shows AI and borg laws, + /client/proc/rename_silicon, //properly renames silicons, + /client/proc/manage_silicon_laws, // Allows viewing and editing silicon laws. , + /client/proc/check_antagonists, ) /client/proc/add_admin_verbs() @@ -361,7 +411,7 @@ var/list/admin_verbs_mentor = list( if(holder.rights & R_SOUNDS) verbs += admin_verbs_sounds if(holder.rights & R_SPAWN) verbs += admin_verbs_spawn if(holder.rights & R_MOD) verbs += admin_verbs_mod - if(holder.rights & R_MENTOR) verbs += admin_verbs_mentor + if(holder.rights & R_EVENT) verbs += admin_verbs_event_manager /client/proc/remove_admin_verbs() verbs.Remove( @@ -424,13 +474,8 @@ var/list/admin_verbs_mentor = list( if(istype(mob,/mob/observer/dead)) //re-enter var/mob/observer/dead/ghost = mob - if(!is_mentor(usr.client)) - ghost.can_reenter_corpse = 1 if(ghost.can_reenter_corpse) ghost.reenter_corpse() - else - ghost << "Error: Aghost: Can't reenter corpse, mentors that use adminHUD while aghosting are not permitted to enter their corpse again" - return feedback_add_details("admin_verb","P") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index ece5f068d7..0338b8c612 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -367,7 +367,7 @@ if(usr.client) var/client/C = usr.client - if(is_mentor(C)) + if(is_event_manager(C)) dat += {" N/A "} else switch(is_special_character(M)) diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 350bfe9a24..8000ae245a 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1194,7 +1194,7 @@ show_player_panel(M) else if(href_list["adminplayerobservejump"]) - if(!check_rights(R_MENTOR|R_MOD|R_ADMIN|R_SERVER)) return + if(!check_rights(R_EVENT|R_MOD|R_ADMIN|R_SERVER)) return var/mob/M = locate(href_list["adminplayerobservejump"]) @@ -1204,7 +1204,7 @@ C.jumptomob(M) else if(href_list["adminplayerobservefollow"]) - if(!check_rights(R_MENTOR|R_MOD|R_ADMIN|R_SERVER)) + if(!check_rights(R_EVENT|R_MOD|R_ADMIN|R_SERVER)) return var/mob/M = locate(href_list["adminplayerobservefollow"]) @@ -1224,7 +1224,7 @@ if(ismob(M)) var/take_msg = "ADMINHELP: [key_name(usr.client)] is attending to [key_name(M)]'s adminhelp, please don't dogpile them." for(var/client/X in admins) - if((R_ADMIN|R_MOD|R_MENTOR) & X.holder.rights) + if((R_ADMIN|R_MOD|R_EVENT) & X.holder.rights) to_chat(X, take_msg) to_chat(M, "Your adminhelp is being attended to by [usr.client]. Thanks for your patience!") else diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index 5f3206b6df..32937599c2 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -88,22 +88,19 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey"," if(ai_found) ai_cl = " (CL)" - //Options bar: mob, details ( admin = 2, dev = 3, mentor = 4, character name (0 = just ckey, 1 = ckey and character name), link? (0 no don't make it a link, 1 do so), + //Options bar: mob, details ( admin = 2, dev = 3, event manager = 4, character name (0 = just ckey, 1 = ckey and character name), link? (0 no don't make it a link, 1 do so), // highlight special roles (0 = everyone has same looking name, 1 = antags / special roles get a golden name) - var/mentor_msg = "Request for Help: [get_options_bar(mob, 4, 1, 1, 0)][ai_cl]: [msg]" msg = "Request for Help: [get_options_bar(mob, 2, 1, 1)][ai_cl] [msg]" var/admin_number_afk = 0 for(var/client/X in admins) - if((R_ADMIN|R_MOD|R_MENTOR|R_SERVER) & X.holder.rights) + if((R_ADMIN|R_MOD|R_EVENT|R_SERVER) & X.holder.rights) if(X.is_afk()) admin_number_afk++ if(X.is_preference_enabled(/datum/client_preference/holder/play_adminhelp_ping)) X << 'sound/effects/adminhelp.ogg' - if(X.holder.rights == R_MENTOR) - X << mentor_msg // Mentors won't see coloring of names on people with special_roles (Antags, etc.) else X << msg @@ -117,5 +114,4 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey"," else send2adminirc("Request for Help from [key_name(src)]: [html_decode(original_msg)]") feedback_add_details("admin_verb","AH") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - return - + return \ No newline at end of file diff --git a/code/modules/admin/verbs/adminjump.dm b/code/modules/admin/verbs/adminjump.dm index e57720bb62..1ff2f6531b 100644 --- a/code/modules/admin/verbs/adminjump.dm +++ b/code/modules/admin/verbs/adminjump.dm @@ -8,7 +8,7 @@ set name = "Jump to Area" set desc = "Area to jump to" set category = "Admin" - if(!check_rights(R_ADMIN|R_MOD|R_DEBUG)) + if(!check_rights(R_ADMIN|R_MOD|R_EVENT|R_DEBUG)) return if(config.allow_admin_jump) @@ -24,7 +24,7 @@ /client/proc/jumptoturf(var/turf/T in world) set name = "Jump to Turf" set category = "Admin" - if(!check_rights(R_ADMIN|R_MOD|R_DEBUG)) + if(!check_rights(R_ADMIN|R_MOD|R_EVENT|R_DEBUG)) return if(config.allow_admin_jump) log_admin("[key_name(usr)] jumped to [T.x],[T.y],[T.z] in [T.loc]") @@ -40,7 +40,7 @@ set category = "Admin" set name = "Jump to Mob" - if(!check_rights(R_ADMIN|R_MOD|R_DEBUG)) + if(!check_rights(R_ADMIN|R_MOD|R_EVENT|R_DEBUG)) return if(config.allow_admin_jump) @@ -62,7 +62,7 @@ set category = "Admin" set name = "Jump to Coordinate" - if(!check_rights(R_ADMIN|R_MOD|R_DEBUG)) + if(!check_rights(R_ADMIN|R_MOD|R_EVENT|R_DEBUG)) return if (config.allow_admin_jump) @@ -82,7 +82,7 @@ set category = "Admin" set name = "Jump to Key" - if(!check_rights(R_ADMIN|R_MOD|R_DEBUG)) + if(!check_rights(R_ADMIN|R_MOD|R_EVENT|R_DEBUG)) return if(config.allow_admin_jump) @@ -106,7 +106,7 @@ set category = "Admin" set name = "Get Mob" set desc = "Mob to teleport" - if(!check_rights(R_ADMIN|R_MOD|R_DEBUG)) + if(!check_rights(R_ADMIN|R_MOD|R_EVENT|R_DEBUG)) return if(config.allow_admin_jump) log_admin("[key_name(usr)] teleported [key_name(M)]") @@ -122,7 +122,7 @@ set name = "Get Key" set desc = "Key to teleport" - if(!check_rights(R_ADMIN|R_MOD|R_DEBUG)) + if(!check_rights(R_ADMIN|R_MOD|R_EVENT|R_DEBUG)) return if(config.allow_admin_jump) @@ -148,7 +148,7 @@ /client/proc/sendmob(var/mob/M in sortmobs()) set category = "Admin" set name = "Send Mob" - if(!check_rights(R_ADMIN|R_MOD|R_DEBUG)) + if(!check_rights(R_ADMIN|R_MOD|R_EVENT|R_DEBUG)) return var/area/A = input(usr, "Pick an area.", "Pick an area") in return_sorted_areas() if(A) diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index bcb87f06d8..6f8163eef6 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -112,7 +112,7 @@ //check client/X is an admin and isn't the sender or recipient if(X == C || X == src) continue - if(X.key != key && X.key != C.key && (X.holder.rights & R_ADMIN|R_MOD|R_MENTOR)) + if(X.key != key && X.key != C.key && (X.holder.rights & R_ADMIN|R_MOD|R_EVENT)) X << "" + create_text_tag("pm_other", "PM:", X) + " [key_name(src, X, 0)] to [key_name(C, X, 0)]: [msg]" /client/proc/cmd_admin_irc_pm(sender) @@ -141,5 +141,5 @@ for(var/client/X in admins) if(X == src) continue - if(X.holder.rights & R_ADMIN|R_MOD) + if(X.holder.rights & R_ADMIN|R_MOD|R_EVENT) X << "" + create_text_tag("pm_other", "PM:", X) + " [key_name(src, X, 0)] to IRC-[sender]: [msg]" diff --git a/code/modules/admin/verbs/adminsay.dm b/code/modules/admin/verbs/adminsay.dm index b4e60fbd62..63209f84b4 100644 --- a/code/modules/admin/verbs/adminsay.dm +++ b/code/modules/admin/verbs/adminsay.dm @@ -23,7 +23,7 @@ set name = "Msay" set hidden = 1 - if(!check_rights(R_ADMIN|R_MOD|R_MENTOR|R_SERVER)) + if(!check_rights(R_ADMIN|R_MOD|R_SERVER)) return msg = sanitize(msg) @@ -45,7 +45,7 @@ set name = "Esay" set hidden = 1 - if(!check_rights(R_ADMIN|R_MOD|R_MENTOR|R_SERVER)) + if(!check_rights(R_ADMIN|R_MOD|R_EVENT|R_SERVER)) return msg = sanitize(msg) diff --git a/code/modules/admin/verbs/diagnostics.dm b/code/modules/admin/verbs/diagnostics.dm index b416cb661a..3266b966d3 100644 --- a/code/modules/admin/verbs/diagnostics.dm +++ b/code/modules/admin/verbs/diagnostics.dm @@ -108,13 +108,13 @@ load_admins() feedback_add_details("admin_verb","RLDA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -/client/proc/reload_mentors() - set name = "Reload Mentors" +/client/proc/reload_event_managers() + set name = "Reload Event Managers" set category = "Debug" if(!check_rights(R_SERVER)) return - message_admins("[usr] manually reloaded Mentors") + message_admins("[usr] manually reloaded Event Managers") world.load_mods() diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index fcf4a5db0c..6ada0db899 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -65,7 +65,7 @@ message_admins("SubtleMessage: [key_name_admin(usr)] -> [key_name_admin(M)] : [msg]", 1) feedback_add_details("admin_verb","SMS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -/client/proc/cmd_mentor_check_new_players() //Allows mentors / admins to determine who the newer players are. +/client/proc/cmd_event_manager_check_new_players() //Allows event managers / admins to determine who the newer players are. set category = "Admin" set name = "Check new Players" if(!holder) @@ -82,7 +82,7 @@ var/msg = "" var/highlight_special_characters = 1 - if(is_mentor(usr.client)) + if(is_event_manager(usr.client)) highlight_special_characters = 0 for(var/client/C in clients) diff --git a/code/modules/client/preference_setup/loadout/loadout.dm b/code/modules/client/preference_setup/loadout/loadout.dm index 3891bf0562..44a814ac67 100644 --- a/code/modules/client/preference_setup/loadout/loadout.dm +++ b/code/modules/client/preference_setup/loadout/loadout.dm @@ -204,6 +204,7 @@ var/list/gear_datums = list() var/whitelisted //Term to check the whitelist for.. var/sort_category = "General" var/list/gear_tweaks = list() //List of datums which will alter the item after it has been spawned. + var/exploitable = 0 //Does it go on the exploitable information list? /datum/gear/New() ..() diff --git a/code/modules/client/preference_setup/loadout/loadout_utility.dm b/code/modules/client/preference_setup/loadout/loadout_utility.dm index 5e7fa24d9f..e973bf232c 100644 --- a/code/modules/client/preference_setup/loadout/loadout_utility.dm +++ b/code/modules/client/preference_setup/loadout/loadout_utility.dm @@ -76,12 +76,20 @@ display_name = "cell, device" path = /obj/item/weapon/cell/device -/datum/gear/utility/implant //This does nothing if you don't actually know EAL. +/datum/gear/utility/implant + exploitable = 1 + +/datum/gear/utility/implant/eal //This does nothing if you don't actually know EAL. display_name = "implant, language, EAL" path = /obj/item/weapon/implant/language/eal cost = 2 slot = "implant" - var/implant_type = "EAL" + +/datum/gear/utility/implant/tracking + display_name = "implant, tracking" + path = /obj/item/weapon/implant/tracking/weak + cost = 10 + slot = "implant" /datum/gear/utility/translator display_name = "universal translator" diff --git a/code/modules/clothing/under/accessories/holster.dm b/code/modules/clothing/under/accessories/holster.dm index 5d734c9d95..b97ae6fc3f 100644 --- a/code/modules/clothing/under/accessories/holster.dm +++ b/code/modules/clothing/under/accessories/holster.dm @@ -134,6 +134,6 @@ /obj/item/clothing/accessory/holster/leg name = "leg holster" desc = "A tacticool handgun holster. Worn on the upper leg." - icon_state = "holster_hip" + icon_state = "holster_leg" overlay_state = "holster_leg" - concealed_holster = 0 \ No newline at end of file + concealed_holster = 0 diff --git a/code/modules/examine/descriptions/food.dm b/code/modules/examine/descriptions/food.dm new file mode 100644 index 0000000000..c5f3e80728 --- /dev/null +++ b/code/modules/examine/descriptions/food.dm @@ -0,0 +1,50 @@ +/obj/item/weapon/reagent_containers/food/snacks/candy + description_fluff = "The Candy Bar is a copylefted recipe designed by information freedom activists to bring the delicious taste of nougat to the masses. It's cheap, familiar, and easy to synthesize, so most food vendors stock it." + +/obj/item/weapon/reagent_containers/food/snacks/candy/proteinbar + description_fluff = "The SWOLEMAX protien bar is the flagship product of SWOLEMAX, a health foods corporation recently independent of Centauri Provisions. It tastes like a brick of ashes." + +/obj/item/weapon/reagent_containers/food/snacks/candy_corn + description_fluff = "Nobody knows why Nanotrasen keeps making these waxy pieces of sugar and bone glue, but a handful of people swear by them. Purportedly popular with Skrell children, dubiously enough." + +/obj/item/weapon/reagent_containers/food/snacks/chips + description_fluff = "Actual potatos haven't been used in potato chips for centuries. They're mostly a denatured nutrient slurry pressed into a chip-shaped mold and salted. Still tastes the same." + +/obj/item/weapon/reagent_containers/food/snacks/donut + description_fluff = "These donuts claim to be made fresh daily in a boutique bakery in New Reykjavik and delivered to Nanotrasen's hardworking asset protection crew. They're probably synthesized." + +/obj/item/weapon/reagent_containers/food/snacks/donkpocket + description_fluff = "DONKpockets were originally a Nanotrasen product, an attempt to break into the food market controlled by Centauri Provisions. Somehow, Centauri wound up with the rights to the DONK brand, ending Nanotrasen's ambitions. They taste pretty okay." + +/obj/item/weapon/reagent_containers/food/snacks/pie + description_fluff = "One of the more esoteric terms of the Nanotrasen-Centauri Noncompetition Agreement of 2545 was a requirement that Nanotrasen stock these pies on all their stations. They're calibrated for commedic value, not taste." + +/obj/item/weapon/reagent_containers/food/snacks/sosjerky + description_fluff = "Space Cows, here, being an affectionate name given by early colonists to the massive food synthesizers used to sustain independent outposts before the dominance of hydroponics. Tastes like cardboard rubbed in meat seasoning." + +/obj/item/weapon/reagent_containers/food/snacks/no_raisin + description_fluff = "Originally Raisin Blend no. 4, 4noraisins obtained their current name in the Skadi Positronic Exclusion Crisis of 2442, where they were rebranded as part of the protests." //the exclusion crisis, presumably, involved positronic immigration being banned for no raisin + +/obj/item/weapon/reagent_containers/food/snacks/spacetwinkie + description_fluff = "Space Twinkies, a modification of a flagship product of one of Centauri Provision's predecessor corporations, are designed to withstand vacuum, radiation, dehydration, and long periods of acceleration without losing their shape or taste. They're not great, but they have earned their names (and enormous revenue for their parent company)." + +/obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers + description_fluff = "Cheesie Honkers, a previously niche line of cheese puffs from a subsidiary of a subsidiary of Centauri Provisions, rose to household-name status when their tell-tale orange dust was used as evidence to convict notorious positronic serial killer Etoid in 2404." + +/obj/item/weapon/reagent_containers/food/snacks/syndicake + description_fluff = "Due to ongoing litigation concerning the business practices of the Cakemakers' Syndicate, access to this product has been removed from all Centauri and Getmore vending machines. This is a shame, because Syndi-Cakes are generally regarded as the most appetizing thing in them." + +/obj/item/weapon/reagent_containers/food/snacks/twobread + description_fluff = "The most popular recipe from the Morpheus Cyberkinetics cookbook 'Calories for Organics'" + +/obj/item/weapon/reagent_containers/food/snacks/liquidfood + description_fluff = "A survival food commonly packed onto short-distance bluespace shuttles and similar vessels. Tastes like chalk, but is packed full of nutrients and will keep you alive." + +/obj/item/weapon/reagent_containers/food/snacks/tastybread + description_fluff = "This is the product that brought Centauri Provisions into the limelight. A product of the earliest extrasolar colony of Heaven, the Bread Tube, while bland, contains all the nutrients a spacer needs to get through the day and is decidedly edible when compared to some of its competitors." + +/obj/item/weapon/reagent_containers/food/snacks/skrellsnacks + description_fluff = "A jerky product made of Go'moa mushrooms native to the Skrellian homeworld of Qerr'balak. SkrellSnaks are actually a product of Natuna, designed to welcome Ue-Katish refugees to their colony. The brand was recreated by Centauri Provisions after Natuna and SolGov broke off diplomatic relations." + +/obj/item/weapon/reagent_containers/food/snacks/unajerky + description_fluff = "Removed from Getmore vendors pending approval from the SolGov Nutrition Council, Sissalik Jerky remains a popular snack for Unathi immigrants and daredevils looking for a meaty, spicy treat that makes Scaredy's look like tofu." diff --git a/code/modules/examine/descriptions/smokeables.dm b/code/modules/examine/descriptions/smokeables.dm index edf9b8b7f7..ddec465368 100644 --- a/code/modules/examine/descriptions/smokeables.dm +++ b/code/modules/examine/descriptions/smokeables.dm @@ -1,28 +1,28 @@ /obj/item/weapon/storage/fancy/cigarettes - description_fluff = "The Trans-Stellar Duty-Free cigarette company was created as a sub-company of NanoTrasen. They are the most boring, tasteless, dry cigarettes on the market, but due to how generic they are, they are still the most well-known and widespread cigarettes in the universe." + description_fluff = "The Trans-Stellar Duty-Free Cigarette Company was created as an imprint of NanoTrasen. They are the most boring, tasteless, dry cigarettes on the market, but due to how generic they are, they are still the most well-known and widespread cigarettes in the universe." /obj/item/weapon/storage/fancy/cigarettes/dromedaryco - description_fluff = "DromedaryCo is one of the oldest companies that produces cigarettes. Being a company that has changed hands and names several times through the years, their cigarettes are now very different from the original, and old-timers tend to complain about the quality of their current product. While they have been dwindling when it comes to profits in the past years due to marketing schemes deemed 'unethical', they still remain on the forefront of the smokeable industry." + description_fluff = "DromedaryCo is one of the oldest companies that produces cigarettes. Being a company that has changed hands and names several times through the years, their cigarettes are now very different from the original, and old-timers tend to complain about the quality of their current product. While their profits have been dwindling over the past few years due to marketing schemes deemed 'unethical', they still remain on the forefront of the smokeable industry." /obj/item/weapon/storage/fancy/cigarettes/killthroat - description_fluff = "AcmeCo is known for their signature high-tar cigarettes. Being a sub-company Xion, some accuse the cigarettes of having other harmful things in them besides tar. Xion officials refuse to comment on the issue." + description_fluff = "AcmeCo, a subsidiary of Xion Manufacturing Group, is known for their signature high-tar cigarettes. Some accuse the cigarettes of having harmful things in them beyond tar, but Xion officials refuse to comment on the issue." /obj/item/weapon/storage/fancy/cigarettes/luckystars - description_fluff = "Lucky Stars were created on Venus by a researcher seeking to make a good quality cigarette from pod-based tobacco plants. The researcher only managed to make these, but made quite a profit off of them when she started her company." + description_fluff = "Lucky Stars were created on Venus by a researcher seeking to make a good quality cigarette from pod-based tobacco plants. The researcher only managed to make these, but made quite a profit off of them nonetheless." /obj/item/weapon/storage/fancy/cigarettes/jerichos - description_fluff = "Hephaestus Industries ex-military employees once decided to make a cigarette that was easy to light and had a waterproof case, specifically tailored for soldiers. They created Jerichos. Jerichos are known for their Hickory smoke and warm feeling in your lungs. They are loved by soldiers and people employed in para-military outfits." + description_fluff = "Stealth Assault Enterprises ex-contractors once decided to make a cigarette that was easy to light and had a waterproof case, specifically tailored for soldiers. They created Jerichos. Jerichos are known for their hickory smoke and warm feeling in your lungs. They are loved by soldiers and people employed in para-military outfits." /obj/item/weapon/storage/fancy/cigarettes/menthols - description_fluff = "The Temperamento Menthol Company is a large cigarette company based in Mars. They have been around since the very dawn of Human colonization and have remained a favorite for those seeking a more.. numbing cigarette.
\ + description_fluff = "The Temperamento Menthol Company is a large cigarette company based in Mars. They have been around since the very dawn of human colonization and have remained a favorite for those seeking a more numbing cigarette.
\
\ This is a pack of Temperamento Menthols, the main product of the company. They taste like menthol, surprisingly enough." /obj/item/weapon/storage/fancy/cigarettes/carcinomas - description_fluff = "The CarcinoCo was originally destined to fail, as the company blatantly advertized themselves as creating the 'most cancerous cigarette'. Somehow, after endorsement from a reporter, the cigarettes took off." + description_fluff = "The CarcinoCo was originally destined to fail, as the company blatantly advertized themselves as creating the 'most cancerous cigarette'. The cigarettes became a hit among those rich enough to afford regular lung replacements." /obj/item/weapon/storage/fancy/cigarettes/professionals - description_fluff = "Decades ago, probably before you were born, Gilthari Exports created the Professional 120s. They wanted to make a fancy cigarette that would be considered a luxury. Nowadays, people who use them are generally laughed at for being wannabe rich people or old. They are, however, very high-quality and made from the very best tobacco." + description_fluff = "Decades ago, probably before you were born, Gilthari Exports created the Professional 120s. They wanted to make a fancy cigarette that would be considered a luxury. Nowadays, they are generally concidered an emblem of the nouveau riche and the elderly. They are, however, very high-quality and made from the very best Solar tobacco." /obj/item/clothing/mask/smokable/cigarette/cigar description_fluff = "While the label does say that this is a 'premium cigar', it really cannot match other types of cigars on the market. Is it a quality cigarette? Perhaps. Was it hand-made with care? No. This is what differentiates between quality products that Gilthari puts out and NanoTrasen 'premium' cigars like this one." @@ -31,9 +31,9 @@ description_fluff = "Cohiba has been a popular cigar company for centuries. They are still based out of Cuba and refuse to expand and therefore have a very limited quantity, making their cigars coveted all through known space. Robusto is one of their most popular shapes of cigars." /obj/item/clothing/mask/smokable/cigarette/cigar/havana - description_fluff = "'Havanian' is an umbrella term for any cigar made in the typical handmade style of Cuba. This particular cigar is from Gilthari's cigar manufacturers. While the way of making quality cigars has become slightly bastardized over the years, overall quality has remained relatively the same, even if there is a large quantity of 'Havanian' cigars." + description_fluff = "'Havanian' is an umbrella term for any cigar made in the typical handmade style of Cuba. This particular cigar is from Gilthari's cigar manufacturers. While this way of making quality cigars has become slightly bastardized over the years, overall quality has remained relatively the same, even if there is a large quantity of 'Havanian' cigars." /obj/item/clothing/mask/smokable/pipe - description_fluff = "ClassiCo Men's Accessories and Haberdashers is a widespread company originating out of Mars. They seek to create quality goods to give men a more 'classy' look. Most of their items are high-end and expensive, but they do back that up with quality.
\ + description_fluff = "ClassiCo Accessories and Haberdashers is a widespread company originating out of Mars. They seek to create quality goods to give men a more 'classy' look. Most of their items are high-end and expensive, but they plege to back their prices up with quality.
\
\ - This pipe is a ClassiCo pipe. It is made out of fine, stained cherry wood." \ No newline at end of file + This pipe is a ClassiCo pipe. It is made out of fine, stained cherry wood." diff --git a/code/modules/mob/_modifiers/cloning.dm b/code/modules/mob/_modifiers/cloning.dm new file mode 100644 index 0000000000..9162ae8f1d --- /dev/null +++ b/code/modules/mob/_modifiers/cloning.dm @@ -0,0 +1,37 @@ +/* + * Modifier applied to newly cloned people. + */ + +// Gives rather nasty downsides for awhile, making them less robust. +/datum/modifier/cloning_sickness + name = "cloning sickness" + desc = "You feel rather weak, having been cloned not so long ago." + + on_created_text = "You feel really weak." + on_expired_text = "You feel your strength returning to you." + + max_health_percent = 0.6 // -40% max health. + incoming_damage_percent = 1.1 // 10% more incoming damage. + outgoing_melee_damage_percent = 0.7 // 30% less melee damage. + disable_duration_percent = 1.25 // Stuns last 25% longer. + slowdown = 1 // Slower. + evasion = -1 // 15% easier to hit. + +// Tracks number of deaths, one modifier added per cloning +/datum/modifier/cloned + name = "cloned" + desc = "You died and were cloned, and you can never forget that." + + flags = MODIFIER_GENETIC // So it gets copied if they die and get cloned again. + stacks = MODIFIER_STACK_ALLOWED // Two deaths means two instances of this. + +// Prevents cloning, actual effect is on the cloning machine +/datum/modifier/no_clone + name = "Cloning Incompatability" + desc = "For whatever reason, you cannot be cloned." + + //WIP, but these may never be seen anyway, so *shrug + on_created_text = "Life suddenly feels more precious." + on_expired_text = "Death is cheap again." + + flags = MODIFIER_GENETIC \ No newline at end of file diff --git a/code/modules/mob/modifiers.dm b/code/modules/mob/_modifiers/modifiers.dm similarity index 100% rename from code/modules/mob/modifiers.dm rename to code/modules/mob/_modifiers/modifiers.dm diff --git a/code/modules/mob/_modifiers/traits.dm b/code/modules/mob/_modifiers/traits.dm new file mode 100644 index 0000000000..1ee7b41090 --- /dev/null +++ b/code/modules/mob/_modifiers/traits.dm @@ -0,0 +1,10 @@ +/datum/modifier/frail + name = "frail" + desc = "You are more delicate than the average person." + + flags = MODIFIER_GENETIC + + on_created_text = "You feel really weak." + on_expired_text = "You feel your strength returning to you." + + max_health_percent = 0.9 \ No newline at end of file diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 64893a973b..f298537153 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -310,19 +310,19 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(!client) return - var/mentor = is_mentor(usr.client) - if(!config.antag_hud_allowed && (!client.holder || mentor)) + var/event_manager = is_event_manager(usr.client) + if(!config.antag_hud_allowed && (!client.holder || event_manager)) src << "Admins have disabled this for this round." return var/mob/observer/dead/M = src if(jobban_isbanned(M, "AntagHUD")) src << "You have been banned from using this feature" return - if(config.antag_hud_restricted && !M.has_enabled_antagHUD && (!client.holder || mentor)) + if(config.antag_hud_restricted && !M.has_enabled_antagHUD && (!client.holder || event_manager)) var/response = alert(src, "If you turn this on, you will not be able to take any part in the round.","Are you sure you want to turn this feature on?","Yes","No") if(response == "No") return M.can_reenter_corpse = 0 - if(!M.has_enabled_antagHUD && (!client.holder || mentor)) + if(!M.has_enabled_antagHUD && (!client.holder || event_manager)) M.has_enabled_antagHUD = 1 if(M.antagHUD) M.antagHUD = 0 diff --git a/code/modules/mob/language/station.dm b/code/modules/mob/language/station.dm index 287bf6c149..8e638fce80 100644 --- a/code/modules/mob/language/station.dm +++ b/code/modules/mob/language/station.dm @@ -83,7 +83,7 @@ key = "k" space_chance = 30 flags = WHITELISTED - syllables = list("qr","qrr","xuq","qil","quum","xuqm","vol","xrim","zaoo","qu-uu","qix","qoo","zix","*","!", "'") + syllables = list("qr","qrr","xuq","qil","quum","xuqm","vol","xrim","zaoo","qu-uu","qix","qoo","zix") /datum/language/human name = LANGUAGE_SOL_COMMON @@ -244,4 +244,4 @@ "tod", "ser", "su", "no", "nue", "el", "ad", "al", "an", "ar", "as", "ci", "co", "de", "do", "el", "en", "er", "es", "ie", "in", "la", "lo", "me", "na", "no", "nt", "or", "os", "pa", "qu", "ra", "re", "ro", "se", "st", "ta", "te", "to", "ue", "un", -"tod", "ser", "su", "no", "nue", "el") \ No newline at end of file +"tod", "ser", "su", "no", "nue", "el") diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 96f5dddc42..d2c98c2fc4 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -515,31 +515,31 @@ // Hot air hurts :( - if((breath.temperature < species.cold_level_1 || breath.temperature > species.heat_level_1) && !(COLD_RESISTANCE in mutations)) + if((breath.temperature < species.breath_cold_level_1 || breath.temperature > species.breath_heat_level_1) && !(COLD_RESISTANCE in mutations)) - if(breath.temperature <= species.cold_level_1) + if(breath.temperature <= species.breath_cold_level_1) if(prob(20)) src << "You feel your face freezing and icicles forming in your lungs!" - else if(breath.temperature >= species.heat_level_1) + else if(breath.temperature >= species.breath_heat_level_1) if(prob(20)) src << "You feel your face burning and a searing heat in your lungs!" - if(breath.temperature >= species.heat_level_1) - if(breath.temperature < species.heat_level_2) + if(breath.temperature >= species.breath_heat_level_1) + if(breath.temperature < species.breath_heat_level_2) apply_damage(HEAT_GAS_DAMAGE_LEVEL_1, BURN, BP_HEAD, used_weapon = "Excessive Heat") fire_alert = max(fire_alert, 2) - else if(breath.temperature < species.heat_level_3) + else if(breath.temperature < species.breath_heat_level_3) apply_damage(HEAT_GAS_DAMAGE_LEVEL_2, BURN, BP_HEAD, used_weapon = "Excessive Heat") fire_alert = max(fire_alert, 2) else apply_damage(HEAT_GAS_DAMAGE_LEVEL_3, BURN, BP_HEAD, used_weapon = "Excessive Heat") fire_alert = max(fire_alert, 2) - else if(breath.temperature <= species.cold_level_1) - if(breath.temperature > species.cold_level_2) + else if(breath.temperature <= species.breath_cold_level_1) + if(breath.temperature > species.breath_cold_level_2) apply_damage(COLD_GAS_DAMAGE_LEVEL_1, BURN, BP_HEAD, used_weapon = "Excessive Cold") fire_alert = max(fire_alert, 1) - else if(breath.temperature > species.cold_level_3) + else if(breath.temperature > species.breath_cold_level_3) apply_damage(COLD_GAS_DAMAGE_LEVEL_2, BURN, BP_HEAD, used_weapon = "Excessive Cold") fire_alert = max(fire_alert, 1) else @@ -629,34 +629,42 @@ fire_alert = max(fire_alert, 1) if(status_flags & GODMODE) return 1 //godmode + var/burn_dam = 0 // switch() can't access numbers inside variables, so we need to use some ugly if() spam ladder. - if(bodytemperature >= species.heat_level_3) - burn_dam = HEAT_DAMAGE_LEVEL_3 - else if(bodytemperature >= species.heat_level_2) - burn_dam = HEAT_DAMAGE_LEVEL_2 - else if(bodytemperature >= species.heat_level_1) - burn_dam = HEAT_DAMAGE_LEVEL_1 + if(bodytemperature >= species.heat_level_1) + if(bodytemperature >= species.heat_level_2) + if(bodytemperature >= species.heat_level_3) + burn_dam = HEAT_DAMAGE_LEVEL_3 + else + burn_dam = HEAT_DAMAGE_LEVEL_2 + else + burn_dam = HEAT_DAMAGE_LEVEL_1 take_overall_damage(burn=burn_dam, used_weapon = "High Body Temperature") fire_alert = max(fire_alert, 2) else if(bodytemperature <= species.cold_level_1) + //Body temperature is too cold. fire_alert = max(fire_alert, 1) + if(status_flags & GODMODE) return 1 //godmode + if(!istype(loc, /obj/machinery/atmospherics/unary/cryo_cell)) - var/burn_dam = 0 - if(bodytemperature <= species.cold_level_3) - burn_dam = COLD_DAMAGE_LEVEL_3 - else if(bodytemperature <= species.cold_level_2) - burn_dam = COLD_DAMAGE_LEVEL_2 - else if(bodytemperature <= species.heat_level_1) - burn_dam = COLD_DAMAGE_LEVEL_1 + var/cold_dam = 0 + if(bodytemperature <= species.cold_level_1) + if(bodytemperature <= species.cold_level_2) + if(bodytemperature <= species.cold_level_3) + cold_dam = COLD_DAMAGE_LEVEL_3 + else + cold_dam = COLD_DAMAGE_LEVEL_2 + else + cold_dam = COLD_DAMAGE_LEVEL_1 - take_overall_damage(burn=burn_dam, used_weapon = "Low Body Temperature") + take_overall_damage(burn=cold_dam, used_weapon = "Low Body Temperature") fire_alert = max(fire_alert, 1) // Account for massive pressure differences. Done by Polymorph @@ -1649,12 +1657,13 @@ for(var/obj/item/weapon/implant/I in src) if(I.implanted) - if(istype(I,/obj/item/weapon/implant/tracking)) - holder1.icon_state = "hud_imp_tracking" - if(istype(I,/obj/item/weapon/implant/loyalty)) - holder2.icon_state = "hud_imp_loyal" - if(istype(I,/obj/item/weapon/implant/chem)) - holder3.icon_state = "hud_imp_chem" + if(!I.malfunction) + if(istype(I,/obj/item/weapon/implant/tracking)) + holder1.icon_state = "hud_imp_tracking" + if(istype(I,/obj/item/weapon/implant/loyalty)) + holder2.icon_state = "hud_imp_loyal" + if(istype(I,/obj/item/weapon/implant/chem)) + holder3.icon_state = "hud_imp_chem" hud_list[IMPTRACK_HUD] = holder1 hud_list[IMPLOYAL_HUD] = holder2 diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index 3eea8754c1..422ff98351 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -92,33 +92,50 @@ var/breath_type = "oxygen" // Non-oxygen gas breathed, if any. var/poison_type = "phoron" // Poisonous air. var/exhale_type = "carbon_dioxide" // Exhaled gas type. + + var/body_temperature = 310.15 // Species will try to stabilize at this temperature. (also affects temperature processing) + + // Cold var/cold_level_1 = 260 // Cold damage level 1 below this point. var/cold_level_2 = 200 // Cold damage level 2 below this point. var/cold_level_3 = 120 // Cold damage level 3 below this point. + + var/breath_cold_level_1 = 240 // Cold gas damage level 1 below this point. + var/breath_cold_level_2 = 180 // Cold gas damage level 2 below this point. + var/breath_cold_level_3 = 100 // Cold gas damage level 3 below this point. + + var/cold_discomfort_level = 285 // Aesthetic messages about feeling chilly. + var/list/cold_discomfort_strings = list( + "You feel chilly.", + "You shiver suddenly.", + "Your chilly flesh stands out in goosebumps." + ) + + // Hot var/heat_level_1 = 360 // Heat damage level 1 above this point. var/heat_level_2 = 400 // Heat damage level 2 above this point. var/heat_level_3 = 1000 // Heat damage level 3 above this point. + + var/breath_heat_level_1 = 380 // Heat gas damage level 1 below this point. + var/breath_heat_level_2 = 450 // Heat gas damage level 2 below this point. + var/breath_heat_level_3 = 1250 // Heat gas damage level 3 below this point. + + var/heat_discomfort_level = 315 // Aesthetic messages about feeling warm. + var/list/heat_discomfort_strings = list( + "You feel sweat drip down your neck.", + "You feel uncomfortably warm.", + "Your skin prickles in the heat." + ) + + var/passive_temp_gain = 0 // Species will gain this much temperature every second var/hazard_high_pressure = HAZARD_HIGH_PRESSURE // Dangerously high pressure. var/warning_high_pressure = WARNING_HIGH_PRESSURE // High pressure warning. var/warning_low_pressure = WARNING_LOW_PRESSURE // Low pressure warning. var/hazard_low_pressure = HAZARD_LOW_PRESSURE // Dangerously low pressure. var/light_dam // If set, mob will be damaged in light over this value and heal in light below its negative. - var/body_temperature = 310.15 // Species will try to stabilize at this temperature. (also affects temperature processing) var/minimum_breath_pressure = 16 // Minimum required pressure for breath, in kPa - var/heat_discomfort_level = 315 // Aesthetic messages about feeling warm. - var/cold_discomfort_level = 285 // Aesthetic messages about feeling chilly. - var/list/heat_discomfort_strings = list( - "You feel sweat drip down your neck.", - "You feel uncomfortably warm.", - "Your skin prickles in the heat." - ) - var/list/cold_discomfort_strings = list( - "You feel chilly.", - "You shiver suddenly.", - "Your chilly flesh stands out in goosebumps." - ) var/metabolic_rate = 1 diff --git a/code/modules/mob/living/carbon/human/species/station/seromi.dm b/code/modules/mob/living/carbon/human/species/station/seromi.dm index 2d64d22fac..2f01c4d2e6 100644 --- a/code/modules/mob/living/carbon/human/species/station/seromi.dm +++ b/code/modules/mob/living/carbon/human/species/station/seromi.dm @@ -54,12 +54,22 @@ swap_flags = MONKEY|SLIME|SIMPLE_ANIMAL push_flags = MONKEY|SLIME|SIMPLE_ANIMAL|ALIEN - cold_level_1 = 180 - cold_level_2 = 130 - cold_level_3 = 70 - heat_level_1 = 320 - heat_level_2 = 370 - heat_level_3 = 600 + cold_level_1 = 180 //Default 260 + cold_level_2 = 130 //Default 200 + cold_level_3 = 70 //Default 120 + + breath_cold_level_1 = 180 //Default 240 - Lower is better + breath_cold_level_2 = 100 //Default 180 + breath_cold_level_3 = 60 //Default 100 + + heat_level_1 = 320 //Default 360 + heat_level_2 = 370 //Default 400 + heat_level_3 = 600 //Default 1000 + + breath_heat_level_1 = 350 //Default 380 - Higher is better + breath_heat_level_2 = 400 //Default 450 + breath_heat_level_3 = 800 //Default 1250 + heat_discomfort_level = 295 heat_discomfort_strings = list( "Your feathers prickle in the heat.", diff --git a/code/modules/mob/living/carbon/human/species/station/station.dm b/code/modules/mob/living/carbon/human/species/station/station.dm index d7073b3529..7cfe3228fe 100644 --- a/code/modules/mob/living/carbon/human/species/station/station.dm +++ b/code/modules/mob/living/carbon/human/species/station/station.dm @@ -56,12 +56,22 @@ cold_level_2 = 220 //Default 200 cold_level_3 = 130 //Default 120 + breath_cold_level_1 = 260 //Default 240 - Lower is better + breath_cold_level_2 = 200 //Default 180 + breath_cold_level_3 = 120 //Default 100 + heat_level_1 = 420 //Default 360 - Higher is better heat_level_2 = 480 //Default 400 heat_level_3 = 1100 //Default 1000 + breath_heat_level_1 = 450 //Default 380 - Higher is better + breath_heat_level_2 = 530 //Default 450 + breath_heat_level_3 = 1400 //Default 1250 + minimum_breath_pressure = 18 //Bigger, means they need more air + body_temperature = T20C + spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR @@ -142,14 +152,24 @@ governments, something that permeates even to today's times. They prefer colder, tundra-like climates, much like their \ home worlds and speak a variety of languages, especially Siik and Akhani." + body_temperature = 320.15 //Even more cold resistant, even more flammable + cold_level_1 = 200 //Default 260 cold_level_2 = 140 //Default 200 cold_level_3 = 80 //Default 120 + breath_cold_level_1 = 180 //Default 240 - Lower is better + breath_cold_level_2 = 100 //Default 180 + breath_cold_level_3 = 60 //Default 100 + heat_level_1 = 330 //Default 360 heat_level_2 = 380 //Default 400 heat_level_3 = 800 //Default 1000 + breath_heat_level_1 = 360 //Default 380 - Higher is better + breath_heat_level_2 = 430 //Default 450 + breath_heat_level_3 = 1000 //Default 1250 + primitive_form = "Farwa" spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED @@ -166,6 +186,7 @@ "You feel uncomfortably warm.", "Your overheated skin itches." ) + cold_discomfort_level = 275 has_organ = list( //No appendix. @@ -218,10 +239,18 @@ cold_level_2 = 220 //Default 200 cold_level_3 = 130 //Default 120 + breath_cold_level_1 = 250 //Default 240 - Lower is better + breath_cold_level_2 = 190 //Default 180 + breath_cold_level_3 = 120 //Default 100 + heat_level_1 = 420 //Default 360 - Higher is better heat_level_2 = 480 //Default 400 heat_level_3 = 1100 //Default 1000 + breath_heat_level_1 = 400 //Default 380 - Higher is better + breath_heat_level_2 = 500 //Default 450 + breath_heat_level_3 = 1350 //Default 1250 + reagent_tag = IS_SKRELL has_limbs = list( diff --git a/code/modules/mob/living/silicon/robot/drone/drone_items.dm b/code/modules/mob/living/silicon/robot/drone/drone_items.dm index 87476a48ea..1f0170733e 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_items.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_items.dm @@ -99,6 +99,17 @@ /obj/item/weapon/grown ) +/obj/item/weapon/gripper/gravekeeper //Used for handling grave things, flowers, etc. + name = "" + icon_state = "gripper" + desc = "A specialized grasping tool used in the preparation and maintenance of graves." + + can_hold = list( + /obj/item/seeds, + /obj/item/weapon/grown, + /obj/item/weapon/material/gravemarker + ) + /obj/item/weapon/gripper/no_use/organ name = "organ gripper" icon_state = "gripper-flesh" diff --git a/code/modules/mob/living/silicon/robot/robot_modules/event.dm b/code/modules/mob/living/silicon/robot/robot_modules/event.dm new file mode 100644 index 0000000000..6543559b7d --- /dev/null +++ b/code/modules/mob/living/silicon/robot/robot_modules/event.dm @@ -0,0 +1,78 @@ +/* Other, unaffiliated modules */ + +// The module that borgs on the surface have. Generally has a lot of useful tools in exchange for questionable loyalty to the crew. +/obj/item/weapon/robot_module/robot/lost + name = "lost robot module" + hide_on_manifest = 1 + sprites = list( + "Drone" = "drone-lost" + ) + +/obj/item/weapon/robot_module/robot/lost/New(var/mob/living/silicon/robot/R) + ..() + // Sec + src.modules += new /obj/item/weapon/melee/baton/shocker/robot(src) + src.modules += new /obj/item/weapon/handcuffs/cyborg(src) + src.modules += new /obj/item/borg/combat/shield(src) + + // Med + src.modules += new /obj/item/borg/sight/hud/med(src) + src.modules += new /obj/item/device/healthanalyzer(src) + src.modules += new /obj/item/weapon/reagent_containers/borghypo/lost(src) + + // Engi + src.modules += new /obj/item/weapon/weldingtool/electric/mounted(src) + src.modules += new /obj/item/weapon/screwdriver/cyborg(src) + src.modules += new /obj/item/weapon/wrench/cyborg(src) + src.modules += new /obj/item/weapon/wirecutters/cyborg(src) + src.modules += new /obj/item/device/multitool(src) + + // Sci + src.modules += new /obj/item/device/robotanalyzer(src) + + // Potato + src.emag = new /obj/item/weapon/gun/energy/retro/mounted(src) + + var/datum/matter_synth/wire = new /datum/matter_synth/wire() + synths += wire + + var/obj/item/stack/cable_coil/cyborg/C = new /obj/item/stack/cable_coil/cyborg(src) + C.synths = list(wire) + src.modules += C + +/obj/item/weapon/robot_module/robot/gravekeeper + name = "gravekeeper robot module" + hide_on_manifest = 1 + sprites = list( + "Drone" = "drone-gravekeeper", + "Sleek" = "sleek-gravekeeper" + ) + +/obj/item/weapon/robot_module/robot/gravekeeper/New(var/mob/living/silicon/robot/R) + ..() + // For fending off animals and looters + src.modules += new /obj/item/weapon/melee/baton/shocker/robot(src) + src.modules += new /obj/item/borg/combat/shield(src) + + // For repairing gravemarkers + src.modules += new /obj/item/weapon/weldingtool/electric/mounted(src) + src.modules += new /obj/item/weapon/screwdriver/cyborg(src) + src.modules += new /obj/item/weapon/wrench/cyborg(src) + + // For growing flowers + src.modules += new /obj/item/weapon/material/minihoe(src) + src.modules += new /obj/item/weapon/material/hatchet(src) + src.modules += new /obj/item/device/analyzer/plant_analyzer(src) + src.modules += new /obj/item/weapon/storage/bag/plants(src) + src.modules += new /obj/item/weapon/robot_harvester(src) + + // For digging and beautifying graves + src.modules += new /obj/item/weapon/shovel(src) + src.modules += new /obj/item/weapon/gripper/gravekeeper(src) + + // For really persistent looters + src.emag = new /obj/item/weapon/gun/energy/retro/mounted(src) + + var/datum/matter_synth/wood = new /datum/matter_synth/wood(25000) + synths += wood + diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules/station.dm similarity index 89% rename from code/modules/mob/living/silicon/robot/robot_modules.dm rename to code/modules/mob/living/silicon/robot/robot_modules/station.dm index a92a639661..a47679ab14 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/station.dm @@ -1,941 +1,860 @@ -var/global/list/robot_modules = list( - "Standard" = /obj/item/weapon/robot_module/robot/standard, - "Service" = /obj/item/weapon/robot_module/robot/clerical/butler, - "Clerical" = /obj/item/weapon/robot_module/robot/clerical/general, - "Research" = /obj/item/weapon/robot_module/robot/research, - "Miner" = /obj/item/weapon/robot_module/robot/miner, - "Crisis" = /obj/item/weapon/robot_module/robot/medical/crisis, - "Surgeon" = /obj/item/weapon/robot_module/robot/medical/surgeon, - "Security" = /obj/item/weapon/robot_module/robot/security/general, - "Combat" = /obj/item/weapon/robot_module/robot/security/combat, - "Engineering" = /obj/item/weapon/robot_module/robot/engineering/general, -// "Construction" = /obj/item/weapon/robot_module/robot/engineering/construction, - "Janitor" = /obj/item/weapon/robot_module/robot/janitor - ) - -/obj/item/weapon/robot_module - name = "robot module" - icon = 'icons/obj/module.dmi' - icon_state = "std_module" - w_class = ITEMSIZE_NO_CONTAINER - item_state = "std_mod" - flags = CONDUCT - var/hide_on_manifest = 0 - var/channels = list() - var/networks = list() - var/languages = list(LANGUAGE_SOL_COMMON = 1, LANGUAGE_TRADEBAND = 1, LANGUAGE_UNATHI = 0, LANGUAGE_SIIK = 0, LANGUAGE_SKRELLIAN = 0, LANGUAGE_GUTTER = 0, LANGUAGE_SCHECHI = 0, LANGUAGE_SIGN = 0) - var/sprites = list() - var/can_be_pushed = 1 - var/no_slip = 0 - var/list/modules = list() - var/list/datum/matter_synth/synths = list() - var/obj/item/emag = null - var/obj/item/borg/upgrade/jetpack = null - var/list/subsystems = list() - var/list/obj/item/borg/upgrade/supported_upgrades = list() - - // Bookkeeping - var/list/original_languages = list() - var/list/added_networks = list() - -/obj/item/weapon/robot_module/New(var/mob/living/silicon/robot/R) - ..() - R.module = src - - add_camera_networks(R) - add_languages(R) - add_subsystems(R) - apply_status_flags(R) - - if(R.radio) - R.radio.recalculateChannels() - - R.set_module_sprites(sprites) - R.choose_icon(R.module_sprites.len + 1, R.module_sprites) - - for(var/obj/item/I in modules) - I.canremove = 0 - -/obj/item/weapon/robot_module/proc/Reset(var/mob/living/silicon/robot/R) - remove_camera_networks(R) - remove_languages(R) - remove_subsystems(R) - remove_status_flags(R) - - if(R.radio) - R.radio.recalculateChannels() - R.choose_icon(0, R.set_module_sprites(list("Default" = "robot"))) - -/obj/item/weapon/robot_module/Destroy() - for(var/module in modules) - qdel(module) - for(var/synth in synths) - qdel(synth) - modules.Cut() - synths.Cut() - qdel(emag) - qdel(jetpack) - emag = null - jetpack = null - return ..() - -/obj/item/weapon/robot_module/emp_act(severity) - if(modules) - for(var/obj/O in modules) - O.emp_act(severity) - if(emag) - emag.emp_act(severity) - if(synths) - for(var/datum/matter_synth/S in synths) - S.emp_act(severity) - ..() - return - -/obj/item/weapon/robot_module/proc/respawn_consumable(var/mob/living/silicon/robot/R, var/rate) - if(!synths || !synths.len) - return - - for(var/datum/matter_synth/T in synths) - T.add_charge(T.recharge_rate * rate) - -/obj/item/weapon/robot_module/proc/rebuild()//Rebuilds the list so it's possible to add/remove items from the module - var/list/temp_list = modules - modules = list() - for(var/obj/O in temp_list) - if(O) - modules += O - -/obj/item/weapon/robot_module/proc/add_languages(var/mob/living/silicon/robot/R) - // Stores the languages as they were before receiving the module, and whether they could be synthezized. - for(var/datum/language/language_datum in R.languages) - original_languages[language_datum] = (language_datum in R.speech_synthesizer_langs) - - for(var/language in languages) - R.add_language(language, languages[language]) - -/obj/item/weapon/robot_module/proc/remove_languages(var/mob/living/silicon/robot/R) - // Clear all added languages, whether or not we originally had them. - for(var/language in languages) - R.remove_language(language) - - // Then add back all the original languages, and the relevant synthezising ability - for(var/original_language in original_languages) - R.add_language(original_language, original_languages[original_language]) - original_languages.Cut() - -/obj/item/weapon/robot_module/proc/add_camera_networks(var/mob/living/silicon/robot/R) - if(R.camera && (NETWORK_ROBOTS in R.camera.network)) - for(var/network in networks) - if(!(network in R.camera.network)) - R.camera.add_network(network) - added_networks |= network - -/obj/item/weapon/robot_module/proc/remove_camera_networks(var/mob/living/silicon/robot/R) - if(R.camera) - R.camera.remove_networks(added_networks) - added_networks.Cut() - -/obj/item/weapon/robot_module/proc/add_subsystems(var/mob/living/silicon/robot/R) - R.verbs |= subsystems - -/obj/item/weapon/robot_module/proc/remove_subsystems(var/mob/living/silicon/robot/R) - R.verbs -= subsystems - -/obj/item/weapon/robot_module/proc/apply_status_flags(var/mob/living/silicon/robot/R) - if(!can_be_pushed) - R.status_flags &= ~CANPUSH - -/obj/item/weapon/robot_module/proc/remove_status_flags(var/mob/living/silicon/robot/R) - if(!can_be_pushed) - R.status_flags |= CANPUSH - -// Cyborgs (non-drones), default loadout. This will be given to every module. -/obj/item/weapon/robot_module/robot/New() - ..() - src.modules += new /obj/item/device/flash(src) - src.modules += new /obj/item/weapon/crowbar/cyborg(src) - src.modules += new /obj/item/weapon/extinguisher(src) - -/obj/item/weapon/robot_module/robot/standard - name = "standard robot module" - sprites = list( - "M-USE NanoTrasen" = "robot", - "Cabeiri" = "eyebot-standard", - "CUPCAKE" = "Noble-STD", - "Haruka" = "marinaSD", - "Usagi" = "tallflower", - "Telemachus" = "toiletbot", - "WTOperator" = "sleekstandard", - "WTOmni" = "omoikane", - "XI-GUS" = "spider", - "XI-ALP" = "heavyStandard", - "Basic" = "robot_old", - "Android" = "droid", - "Drone" = "drone-standard" - ) - -/obj/item/weapon/robot_module/robot/standard/New() - ..() - src.modules += new /obj/item/weapon/melee/baton/loaded(src) - src.modules += new /obj/item/weapon/wrench/cyborg(src) - src.modules += new /obj/item/device/healthanalyzer(src) - src.emag = new /obj/item/weapon/melee/energy/sword(src) - -/obj/item/weapon/robot_module/robot/medical - name = "medical robot module" - channels = list("Medical" = 1) - networks = list(NETWORK_MEDICAL) - subsystems = list(/mob/living/silicon/proc/subsystem_crew_monitor) - can_be_pushed = 0 - -/obj/item/weapon/robot_module/robot/medical/surgeon - name = "surgeon robot module" - sprites = list( - "M-USE NanoTrasen" = "robotMedi", - "Cabeiri" = "eyebot-medical", - "CUPCAKE" = "Noble-MED", - "Haruka" = "marinaMD", - "Minako" = "arachne", - "Usagi" = "tallwhite", - "Telemachus" = "toiletbotsurgeon", - "WTOperator" = "sleekcmo", - "XI-ALP" = "heavyMed", - "Basic" = "Medbot", - "Advanced Droid" = "droid-medical", - "Needles" = "medicalrobot", - "Drone" = "drone-surgery", - "Handy" = "handy-med" - ) - -/obj/item/weapon/robot_module/robot/medical/surgeon/New() - ..() - src.modules += new /obj/item/borg/sight/hud/med(src) - src.modules += new /obj/item/device/healthanalyzer(src) - src.modules += new /obj/item/weapon/reagent_containers/borghypo/surgeon(src) - src.modules += new /obj/item/weapon/surgical/scalpel/cyborg(src) - src.modules += new /obj/item/weapon/surgical/hemostat/cyborg(src) - src.modules += new /obj/item/weapon/surgical/retractor/cyborg(src) - src.modules += new /obj/item/weapon/surgical/cautery/cyborg(src) - src.modules += new /obj/item/weapon/surgical/bonegel/cyborg(src) - src.modules += new /obj/item/weapon/surgical/FixOVein/cyborg(src) - src.modules += new /obj/item/weapon/surgical/bonesetter/cyborg(src) - src.modules += new /obj/item/weapon/surgical/circular_saw/cyborg(src) - src.modules += new /obj/item/weapon/surgical/surgicaldrill/cyborg(src) - src.modules += new /obj/item/weapon/gripper/no_use/organ(src) - src.modules += new /obj/item/weapon/gripper/medical(src) - src.modules += new /obj/item/weapon/shockpaddles/robot(src) - src.modules += new /obj/item/weapon/reagent_containers/dropper(src) // Allows surgeon borg to fix necrosis - src.modules += new /obj/item/weapon/reagent_containers/syringe(src) - src.emag = new /obj/item/weapon/reagent_containers/spray(src) - src.emag.reagents.add_reagent("pacid", 250) - src.emag.name = "Polyacid spray" - - var/datum/matter_synth/medicine = new /datum/matter_synth/medicine(10000) - synths += medicine - - var/obj/item/stack/nanopaste/N = new /obj/item/stack/nanopaste(src) - var/obj/item/stack/medical/advanced/bruise_pack/B = new /obj/item/stack/medical/advanced/bruise_pack(src) - N.uses_charge = 1 - N.charge_costs = list(1000) - N.synths = list(medicine) - B.uses_charge = 1 - B.charge_costs = list(1000) - B.synths = list(medicine) - src.modules += N - src.modules += B - -/obj/item/weapon/robot_module/medical/robot/surgeon/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) - if(src.emag) - var/obj/item/weapon/reagent_containers/spray/PS = src.emag - PS.reagents.add_reagent("pacid", 2 * amount) - ..() - -/obj/item/weapon/robot_module/robot/medical/crisis - name = "crisis robot module" - sprites = list( - "M-USE NanoTrasen" = "robotMedi", - "Cabeiri" = "eyebot-medical", - "CUPCAKE" = "Noble-MED", - "Haruka" = "marinaMD", - "Minako" = "arachne", - "Usagi" = "tallwhite", - "Telemachus" = "toiletbotmedical", - "WTOperator" = "sleekmedic", - "XI-ALP" = "heavyMed", - "Basic" = "Medbot", - "Advanced Droid" = "droid-medical", - "Needles" = "medicalrobot", - "Drone - Medical" = "drone-medical", - "Drone - Chemistry" = "drone-chemistry" - ) - -/obj/item/weapon/robot_module/robot/medical/crisis/New() - ..() - src.modules += new /obj/item/borg/sight/hud/med(src) - src.modules += new /obj/item/device/healthanalyzer(src) - src.modules += new /obj/item/device/reagent_scanner/adv(src) - src.modules += new /obj/item/roller_holder(src) - src.modules += new /obj/item/weapon/reagent_containers/borghypo/crisis(src) - src.modules += new /obj/item/weapon/reagent_containers/glass/beaker/large(src) - src.modules += new /obj/item/weapon/reagent_containers/dropper/industrial(src) - src.modules += new /obj/item/weapon/reagent_containers/syringe(src) - src.modules += new /obj/item/weapon/gripper/no_use/organ(src) - src.modules += new /obj/item/weapon/gripper/medical(src) - src.modules += new /obj/item/weapon/shockpaddles/robot(src) - src.emag = new /obj/item/weapon/reagent_containers/spray(src) - src.emag.reagents.add_reagent("pacid", 250) - src.emag.name = "Polyacid spray" - - var/datum/matter_synth/medicine = new /datum/matter_synth/medicine(15000) - synths += medicine - - var/obj/item/stack/medical/advanced/ointment/O = new /obj/item/stack/medical/advanced/ointment(src) - var/obj/item/stack/medical/advanced/bruise_pack/B = new /obj/item/stack/medical/advanced/bruise_pack(src) - var/obj/item/stack/medical/splint/S = new /obj/item/stack/medical/splint(src) - O.uses_charge = 1 - O.charge_costs = list(1000) - O.synths = list(medicine) - B.uses_charge = 1 - B.charge_costs = list(1000) - B.synths = list(medicine) - S.uses_charge = 1 - S.charge_costs = list(1000) - S.synths = list(medicine) - src.modules += O - src.modules += B - src.modules += S - -/obj/item/weapon/robot_module/robot/medical/crisis/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) - - var/obj/item/weapon/reagent_containers/syringe/S = locate() in src.modules - if(S.mode == 2) - S.reagents.clear_reagents() - S.mode = initial(S.mode) - S.desc = initial(S.desc) - S.update_icon() - - if(src.emag) - var/obj/item/weapon/reagent_containers/spray/PS = src.emag - PS.reagents.add_reagent("pacid", 2 * amount) - - ..() - - -/obj/item/weapon/robot_module/robot/engineering - name = "engineering robot module" - channels = list("Engineering" = 1) - networks = list(NETWORK_ENGINEERING) - subsystems = list(/mob/living/silicon/proc/subsystem_power_monitor) - sprites = list( - "M-USE NanoTrasen" = "robotEngi", - "Cabeiri" = "eyebot-engineering", - "CUPCAKE" = "Noble-ENG", - "Haruka" = "marinaENG", - "Usagi" = "tallyellow", - "Telemachus" = "toiletbotengineering", - "WTOperator" = "sleekce", - "XI-GUS" = "spidereng", - "XI-ALP" = "heavyEng", - "Basic" = "Engineering", - "Antique" = "engineerrobot", - "Landmate" = "landmate", - "Landmate - Treaded" = "engiborg+tread", - "Drone" = "drone-engineer", - "Treadwell" = "treadwell", - "Handy" = "handy-engineer" - ) - -/obj/item/weapon/robot_module/robot/engineering/construction - name = "construction robot module" - no_slip = 1 - -/* Merged back into engineering (Hell, it's about time.) - -/obj/item/weapon/robot_module/robot/engineering/construction/New() - ..() - src.modules += new /obj/item/borg/sight/meson(src) - src.modules += new /obj/item/weapon/rcd/borg(src) - src.modules += new /obj/item/weapon/screwdriver/cyborg(src) - src.modules += new /obj/item/weapon/wrench/cyborg(src) - src.modules += new /obj/item/weapon/weldingtool/electric/mounted/cyborg(src) - src.modules += new /obj/item/weapon/pickaxe/plasmacutter(src) - src.modules += new /obj/item/device/pipe_painter(src) - src.modules += new /obj/item/device/floor_painter(src) - src.modules += new /obj/item/weapon/gripper/no_use/loader(src) - src.modules += new /obj/item/device/geiger(src) - - var/datum/matter_synth/metal = new /datum/matter_synth/metal() - var/datum/matter_synth/plasteel = new /datum/matter_synth/plasteel() - var/datum/matter_synth/glass = new /datum/matter_synth/glass() - synths += metal - synths += plasteel - synths += glass - - var/obj/item/stack/material/cyborg/steel/M = new (src) - M.synths = list(metal) - src.modules += M - - var/obj/item/stack/rods/cyborg/R = new /obj/item/stack/rods/cyborg(src) - R.synths = list(metal) - src.modules += R - - var/obj/item/stack/tile/floor/cyborg/F = new /obj/item/stack/tile/floor/cyborg(src) - F.synths = list(metal) - src.modules += F - - var/obj/item/stack/material/cyborg/plasteel/S = new (src) - S.synths = list(plasteel) - src.modules += S - - var/obj/item/stack/material/cyborg/glass/reinforced/RG = new (src) - RG.synths = list(metal, glass) - src.modules += RG -*/ - -/obj/item/weapon/robot_module/robot/engineering/general/New() - ..() - src.modules += new /obj/item/borg/sight/meson(src) - src.modules += new /obj/item/weapon/weldingtool/electric/mounted/cyborg(src) - src.modules += new /obj/item/weapon/screwdriver/cyborg(src) - src.modules += new /obj/item/weapon/wrench/cyborg(src) - src.modules += new /obj/item/weapon/wirecutters/cyborg(src) - src.modules += new /obj/item/device/multitool(src) - src.modules += new /obj/item/device/t_scanner(src) - src.modules += new /obj/item/device/analyzer(src) - src.modules += new /obj/item/taperoll/engineering(src) - src.modules += new /obj/item/weapon/gripper(src) - src.modules += new /obj/item/device/lightreplacer(src) - src.modules += new /obj/item/device/pipe_painter(src) - src.modules += new /obj/item/device/floor_painter(src) - src.modules += new /obj/item/weapon/inflatable_dispenser/robot(src) - src.emag = new /obj/item/weapon/melee/baton/robot/arm(src) - src.modules += new /obj/item/device/geiger(src) - src.modules += new /obj/item/weapon/rcd/borg(src) - src.modules += new /obj/item/weapon/pickaxe/plasmacutter(src) - src.modules += new /obj/item/weapon/gripper/no_use/loader(src) - - var/datum/matter_synth/metal = new /datum/matter_synth/metal(40000) - var/datum/matter_synth/glass = new /datum/matter_synth/glass(40000) - var/datum/matter_synth/plasteel = new /datum/matter_synth/plasteel(20000) - - var/datum/matter_synth/wire = new /datum/matter_synth/wire() - synths += metal - synths += glass - synths += plasteel - synths += wire - - var/obj/item/weapon/matter_decompiler/MD = new /obj/item/weapon/matter_decompiler(src) - MD.metal = metal - MD.glass = glass - src.modules += MD - - var/obj/item/stack/material/cyborg/steel/M = new (src) - M.synths = list(metal) - src.modules += M - - var/obj/item/stack/material/cyborg/glass/G = new (src) - G.synths = list(glass) - src.modules += G - - var/obj/item/stack/rods/cyborg/R = new /obj/item/stack/rods/cyborg(src) - R.synths = list(metal) - src.modules += R - - var/obj/item/stack/cable_coil/cyborg/C = new /obj/item/stack/cable_coil/cyborg(src) - C.synths = list(wire) - src.modules += C - - var/obj/item/stack/material/cyborg/plasteel/P = new (src) - P.synths = list(plasteel) - src.modules += P - - var/obj/item/stack/tile/floor/cyborg/S = new /obj/item/stack/tile/floor/cyborg(src) - S.synths = list(metal) - src.modules += S - - var/obj/item/stack/material/cyborg/glass/reinforced/RG = new (src) - RG.synths = list(metal, glass) - src.modules += RG - -/obj/item/weapon/robot_module/robot/security - name = "security robot module" - channels = list("Security" = 1) - networks = list(NETWORK_SECURITY) - subsystems = list(/mob/living/silicon/proc/subsystem_crew_monitor) - can_be_pushed = 0 - supported_upgrades = list(/obj/item/borg/upgrade/tasercooler) - -/obj/item/weapon/robot_module/robot/security/general - sprites = list( - "M-USE NanoTrasen" = "robotSecy", - "Cabeiri" = "eyebot-security", - "Cerberus" = "bloodhound", - "Cerberus - Treaded" = "treadhound", - "CUPCAKE" = "Noble-SEC", - "Haruka" = "marinaSC", - "Usagi" = "tallred", - "Telemachus" = "toiletbotsecurity", - "WTOperator" = "sleeksecurity", - "XI-GUS" = "spidersec", - "XI-ALP" = "heavySec", - "Basic" = "secborg", - "Black Knight" = "securityrobot", - "Drone" = "drone-sec" - ) - -/obj/item/weapon/robot_module/robot/security/general/New() - ..() - src.modules += new /obj/item/borg/sight/hud/sec(src) - src.modules += new /obj/item/weapon/handcuffs/cyborg(src) - src.modules += new /obj/item/weapon/melee/baton/robot(src) - src.modules += new /obj/item/weapon/gun/energy/taser/mounted/cyborg(src) - src.modules += new /obj/item/taperoll/police(src) - src.modules += new /obj/item/weapon/reagent_containers/spray/pepper(src) - src.emag = new /obj/item/weapon/gun/energy/laser/mounted(src) - -/obj/item/weapon/robot_module/robot/security/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) - var/obj/item/device/flash/F = locate() in src.modules - if(F.broken) - F.broken = 0 - F.times_used = 0 - F.icon_state = "flash" - else if(F.times_used) - F.times_used-- - var/obj/item/weapon/gun/energy/taser/mounted/cyborg/T = locate() in src.modules - if(T.power_supply.charge < T.power_supply.maxcharge) - T.power_supply.give(T.charge_cost * amount) - T.update_icon() - else - T.charge_tick = 0 - var/obj/item/weapon/melee/baton/robot/B = locate() in src.modules - if(B && B.bcell) - B.bcell.give(amount) - -/obj/item/weapon/robot_module/robot/janitor - name = "janitorial robot module" - channels = list("Service" = 1) - sprites = list( - "M-USE NanoTrasen" = "robotJani", - "Arachne" = "crawler", - "Cabeiri" = "eyebot-janitor", - "CUPCAKE" = "Noble-CLN", - "Haruka" = "marinaJN", - "Telemachus" = "toiletbotjanitor", - "WTOperator" = "sleekjanitor", - "XI-ALP" = "heavyRes", - "Basic" = "JanBot2", - "Mopbot" = "janitorrobot", - "Mop Gear Rex" = "mopgearrex", - "Drone" = "drone-janitor" - ) - -/obj/item/weapon/robot_module/robot/janitor/New() - ..() - src.modules += new /obj/item/weapon/soap/nanotrasen(src) - src.modules += new /obj/item/weapon/storage/bag/trash(src) - src.modules += new /obj/item/weapon/mop(src) - src.modules += new /obj/item/device/lightreplacer(src) - src.emag = new /obj/item/weapon/reagent_containers/spray(src) - src.emag.reagents.add_reagent("lube", 250) - src.emag.name = "Lube spray" - -/obj/item/weapon/robot_module/robot/janitor/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) - var/obj/item/device/lightreplacer/LR = locate() in src.modules - LR.Charge(R, amount) - if(src.emag) - var/obj/item/weapon/reagent_containers/spray/S = src.emag - S.reagents.add_reagent("lube", 2 * amount) - -/obj/item/weapon/robot_module/robot/clerical - name = "service robot module" - channels = list("Service" = 1) - languages = list( - LANGUAGE_SOL_COMMON = 1, - LANGUAGE_UNATHI = 1, - LANGUAGE_SIIK = 1, - LANGUAGE_SKRELLIAN = 1, - LANGUAGE_ROOTLOCAL = 0, - LANGUAGE_TRADEBAND = 1, - LANGUAGE_GUTTER = 1, - LANGUAGE_SCHECHI = 1, - LANGUAGE_EAL = 1, - LANGUAGE_SIGN = 0 - ) - -/obj/item/weapon/robot_module/robot/clerical/butler - sprites = list( - "M-USE NanoTrasen" = "robotServ", - "Cabeiri" = "eyebot-standard", - "CUPCAKE" = "Noble-SRV", - "Haruka" = "marinaSV", - "Michiru" = "maidbot", - "Usagi" = "tallgreen", - "Telemachus" = "toiletbot", - "WTOperator" = "sleekservice", - "WTOmni" = "omoikane", - "XI-GUS" = "spider", - "XI-ALP" = "heavyServ", - "Standard" = "Service2", - "Waitress" = "Service", - "Bro" = "Brobot", - "Rich" = "maximillion", - "Drone - Service" = "drone-service", - "Drone - Hydro" = "drone-hydro" - ) - -/obj/item/weapon/robot_module/robot/clerical/butler/New() - ..() - src.modules += new /obj/item/weapon/gripper/service(src) - src.modules += new /obj/item/weapon/reagent_containers/glass/bucket(src) - src.modules += new /obj/item/weapon/material/minihoe(src) - src.modules += new /obj/item/weapon/material/hatchet(src) - src.modules += new /obj/item/device/analyzer/plant_analyzer(src) - src.modules += new /obj/item/weapon/storage/bag/plants(src) - src.modules += new /obj/item/weapon/robot_harvester(src) - src.modules += new /obj/item/weapon/material/knife(src) - src.modules += new /obj/item/weapon/material/kitchen/rollingpin(src) - src.modules += new /obj/item/device/multitool(src) //to freeze trays - - var/obj/item/weapon/rsf/M = new /obj/item/weapon/rsf(src) - M.stored_matter = 30 - src.modules += M - - src.modules += new /obj/item/weapon/reagent_containers/dropper/industrial(src) - - var/obj/item/weapon/flame/lighter/zippo/L = new /obj/item/weapon/flame/lighter/zippo(src) - L.lit = 1 - src.modules += L - - src.modules += new /obj/item/weapon/tray/robotray(src) - src.modules += new /obj/item/weapon/reagent_containers/borghypo/service(src) - src.emag = new /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer(src) - - var/datum/reagents/R = new/datum/reagents(50) - src.emag.reagents = R - R.my_atom = src.emag - R.add_reagent("beer2", 50) - src.emag.name = "Mickey Finn's Special Brew" - -/obj/item/weapon/robot_module/robot/clerical/general - name = "clerical robot module" - sprites = list( - "M-USE NanoTrasen" = "robotCler", - "Cabeiri" = "eyebot-standard", - "CUPCAKE" = "Noble-SRV", - "Haruka" = "marinaSV", - "Usagi" = "tallgreen", - "Telemachus" = "toiletbot", - "WTOperator" = "sleekclerical", - "WTOmni" = "omoikane", - "XI-GUS" = "spidercom", - "XI-ALP" = "heavyServ", - "Waitress" = "Service", - "Bro" = "Brobot", - "Rich" = "maximillion", - "Default" = "Service2", - "Drone" = "drone-blu" - ) - -/obj/item/weapon/robot_module/robot/clerical/general/New() - ..() - src.modules += new /obj/item/weapon/pen/robopen(src) - src.modules += new /obj/item/weapon/form_printer(src) - src.modules += new /obj/item/weapon/gripper/paperwork(src) - src.modules += new /obj/item/weapon/hand_labeler(src) - src.modules += new /obj/item/weapon/stamp(src) - src.modules += new /obj/item/weapon/stamp/denied(src) - src.emag = new /obj/item/weapon/stamp/chameleon(src) - src.emag = new /obj/item/weapon/pen/chameleon(src) - -/obj/item/weapon/robot_module/general/butler/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) - var/obj/item/weapon/reagent_containers/food/condiment/enzyme/E = locate() in src.modules - E.reagents.add_reagent("enzyme", 2 * amount) - if(src.emag) - var/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/B = src.emag - B.reagents.add_reagent("beer2", 2 * amount) - -/obj/item/weapon/robot_module/robot/miner - name = "miner robot module" - channels = list("Supply" = 1) - networks = list(NETWORK_MINE) - sprites = list( - "NM-USE NanoTrasen" = "robotMine", - "Cabeiri" = "eyebot-miner", - "CUPCAKE" = "Noble-DIG", - "Haruka" = "marinaMN", - "Telemachus" = "toiletbotminer", - "WTOperator" = "sleekminer", - "XI-GUS" = "spidermining", - "XI-ALP" = "heavyMiner", - "Basic" = "Miner_old", - "Advanced Droid" = "droid-miner", - "Treadhead" = "Miner", - "Drone" = "drone-miner" - ) - -/obj/item/weapon/robot_module/robot/miner/New() - ..() - src.modules += new /obj/item/borg/sight/material(src) - src.modules += new /obj/item/weapon/wrench/cyborg(src) - src.modules += new /obj/item/weapon/screwdriver/cyborg(src) - src.modules += new /obj/item/weapon/storage/bag/ore(src) - src.modules += new /obj/item/weapon/pickaxe/borgdrill(src) - src.modules += new /obj/item/weapon/storage/bag/sheetsnatcher/borg(src) - src.modules += new /obj/item/weapon/gripper/miner(src) - src.modules += new /obj/item/weapon/mining_scanner(src) - src.emag = new /obj/item/weapon/pickaxe/plasmacutter(src) - src.emag = new /obj/item/weapon/pickaxe/diamonddrill(src) - -/obj/item/weapon/robot_module/robot/research - name = "research module" - channels = list("Science" = 1) - sprites = list( - "L'Ouef" = "peaceborg", - "Cabeiri" = "eyebot-science", - "Haruka" = "marinaSCI", - "WTDove" = "whitespider", - "WTOperator" = "sleekscience", - "Droid" = "droid-science", - "Drone" = "drone-science", - "Handy" = "handy-science" - ) - -/obj/item/weapon/robot_module/robot/research/New() - ..() - src.modules += new /obj/item/weapon/portable_destructive_analyzer(src) - src.modules += new /obj/item/weapon/gripper/research(src) - src.modules += new /obj/item/weapon/gripper/no_use/organ/robotics(src) - src.modules += new /obj/item/weapon/gripper/no_use/mech(src) - src.modules += new /obj/item/weapon/gripper/no_use/loader(src) - src.modules += new /obj/item/device/robotanalyzer(src) - src.modules += new /obj/item/weapon/card/robot(src) - src.modules += new /obj/item/weapon/weldingtool/electric/mounted/cyborg(src) - src.modules += new /obj/item/weapon/screwdriver/cyborg(src) - src.modules += new /obj/item/weapon/wrench/cyborg(src) - src.modules += new /obj/item/weapon/wirecutters/cyborg(src) - src.modules += new /obj/item/device/multitool(src) - src.modules += new /obj/item/weapon/surgical/scalpel/cyborg(src) - src.modules += new /obj/item/weapon/surgical/circular_saw/cyborg(src) - src.modules += new /obj/item/weapon/reagent_containers/syringe(src) - src.modules += new /obj/item/weapon/reagent_containers/glass/beaker/large(src) - src.modules += new /obj/item/weapon/storage/part_replacer(src) - src.modules += new /obj/item/weapon/shockpaddles/robot/jumper(src) - src.modules += new /obj/item/weapon/melee/baton/slime/robot(src) - src.modules += new /obj/item/weapon/gun/energy/taser/xeno/robot(src) - src.emag = new /obj/item/weapon/hand_tele(src) - - var/datum/matter_synth/nanite = new /datum/matter_synth/nanite(10000) - synths += nanite - var/datum/matter_synth/wire = new /datum/matter_synth/wire() //Added to allow repairs, would rather add cable now than be asked to add it later, - synths += wire //Cable code, taken from engiborg, - - var/obj/item/stack/nanopaste/N = new /obj/item/stack/nanopaste(src) - N.uses_charge = 1 - N.charge_costs = list(1000) - N.synths = list(nanite) - src.modules += N - - var/obj/item/stack/cable_coil/cyborg/C = new /obj/item/stack/cable_coil/cyborg(src) //Cable code, taken from engiborg, - C.synths = list(wire) - src.modules += C - -/obj/item/weapon/robot_module/robot/syndicate - name = "illegal robot module" - hide_on_manifest = 1 - languages = list( - LANGUAGE_SOL_COMMON = 1, - LANGUAGE_TRADEBAND = 1, - LANGUAGE_UNATHI = 0, - LANGUAGE_SIIK = 0, - LANGUAGE_SKRELLIAN = 0, - LANGUAGE_ROOTLOCAL = 0, - LANGUAGE_GUTTER = 1, - LANGUAGE_SCHECHI = 0, - LANGUAGE_EAL = 1, - LANGUAGE_SIGN = 0 - ) - sprites = list( - "Cerberus" = "syndie_bloodhound", - "Cerberus - Treaded" = "syndie_treadhound", - "Ares" = "squats", - "Telemachus" = "toiletbotantag", - "WTOperator" = "hosborg", - "XI-GUS" = "spidersyndi", - "XI-ALP" = "syndi-heavy" - ) - var/id - -/obj/item/weapon/robot_module/robot/syndicate/New(var/mob/living/silicon/robot/R) - ..() - loc = R - src.modules += new /obj/item/weapon/melee/energy/sword(src) - src.modules += new /obj/item/weapon/gun/energy/pulse_rifle/destroyer(src) - src.modules += new /obj/item/weapon/card/emag(src) - var/jetpack = new/obj/item/weapon/tank/jetpack/carbondioxide(src) - src.modules += jetpack - R.internals = jetpack - - id = R.idcard - src.modules += id - -/obj/item/weapon/robot_module/robot/syndicate/Destroy() - src.modules -= id - id = null - return ..() - -// The module that borgs on the surface have. Generally has a lot of useful tools in exchange for questionable loyalty to the crew. -/obj/item/weapon/robot_module/robot/lost - name = "lost robot module" - hide_on_manifest = 1 - sprites = list( - "Drone" = "drone-lost" - ) - -/obj/item/weapon/robot_module/robot/lost/New(var/mob/living/silicon/robot/R) - ..() - // Sec - src.modules += new /obj/item/weapon/melee/baton/shocker/robot(src) - src.modules += new /obj/item/weapon/handcuffs/cyborg(src) - src.modules += new /obj/item/borg/combat/shield(src) - - // Med - src.modules += new /obj/item/borg/sight/hud/med(src) - src.modules += new /obj/item/device/healthanalyzer(src) - src.modules += new /obj/item/weapon/reagent_containers/borghypo/lost(src) - - // Engi - src.modules += new /obj/item/weapon/weldingtool/electric/mounted(src) - src.modules += new /obj/item/weapon/screwdriver/cyborg(src) - src.modules += new /obj/item/weapon/wrench/cyborg(src) - src.modules += new /obj/item/weapon/wirecutters/cyborg(src) - src.modules += new /obj/item/device/multitool(src) - - // Sci - src.modules += new /obj/item/device/robotanalyzer(src) - - // Potato - src.emag = new /obj/item/weapon/gun/energy/retro/mounted(src) - - var/datum/matter_synth/wire = new /datum/matter_synth/wire() - synths += wire - - var/obj/item/stack/cable_coil/cyborg/C = new /obj/item/stack/cable_coil/cyborg(src) - C.synths = list(wire) - src.modules += C - -/obj/item/weapon/robot_module/robot/security/combat - name = "combat robot module" - hide_on_manifest = 1 - sprites = list( - "Haruka" = "marinaCB", - "Combat Android" = "droid-combat" - ) - -/obj/item/weapon/robot_module/robot/security/combat/New() - ..() - src.modules += new /obj/item/device/flash(src) - src.modules += new /obj/item/borg/sight/thermal(src) - src.modules += new /obj/item/weapon/gun/energy/laser/mounted(src) - src.modules += new /obj/item/weapon/pickaxe/plasmacutter(src) - src.modules += new /obj/item/borg/combat/shield(src) - src.modules += new /obj/item/borg/combat/mobility(src) - src.emag = new /obj/item/weapon/gun/energy/lasercannon/mounted(src) - -/obj/item/weapon/robot_module/drone - name = "drone module" - hide_on_manifest = 1 - no_slip = 1 - networks = list(NETWORK_ENGINEERING) - -/obj/item/weapon/robot_module/drone/New(var/mob/living/silicon/robot/robot) - ..() - src.modules += new /obj/item/borg/sight/meson(src) - src.modules += new /obj/item/weapon/weldingtool/electric/mounted/cyborg(src) - src.modules += new /obj/item/weapon/screwdriver/cyborg(src) - src.modules += new /obj/item/weapon/wrench/cyborg(src) - src.modules += new /obj/item/weapon/crowbar/cyborg(src) - src.modules += new /obj/item/weapon/wirecutters/cyborg(src) - src.modules += new /obj/item/device/multitool(src) - src.modules += new /obj/item/device/lightreplacer(src) - src.modules += new /obj/item/weapon/gripper(src) - src.modules += new /obj/item/weapon/soap(src) - src.modules += new /obj/item/weapon/gripper/no_use/loader(src) - src.modules += new /obj/item/weapon/extinguisher(src) - src.modules += new /obj/item/device/pipe_painter(src) - src.modules += new /obj/item/device/floor_painter(src) - - robot.internals = new/obj/item/weapon/tank/jetpack/carbondioxide(src) - src.modules += robot.internals - - src.emag = new /obj/item/weapon/pickaxe/plasmacutter(src) - src.emag.name = "Plasma Cutter" - - var/datum/matter_synth/metal = new /datum/matter_synth/metal(25000) - var/datum/matter_synth/glass = new /datum/matter_synth/glass(25000) - var/datum/matter_synth/wood = new /datum/matter_synth/wood(2000) - var/datum/matter_synth/plastic = new /datum/matter_synth/plastic(1000) - var/datum/matter_synth/wire = new /datum/matter_synth/wire(30) - synths += metal - synths += glass - synths += wood - synths += plastic - synths += wire - - var/obj/item/weapon/matter_decompiler/MD = new /obj/item/weapon/matter_decompiler(src) - MD.metal = metal - MD.glass = glass - MD.wood = wood - MD.plastic = plastic - src.modules += MD - - var/obj/item/stack/material/cyborg/steel/M = new (src) - M.synths = list(metal) - src.modules += M - - var/obj/item/stack/material/cyborg/glass/G = new (src) - G.synths = list(glass) - src.modules += G - - var/obj/item/stack/rods/cyborg/R = new /obj/item/stack/rods/cyborg(src) - R.synths = list(metal) - src.modules += R - - var/obj/item/stack/cable_coil/cyborg/C = new /obj/item/stack/cable_coil/cyborg(src) - C.synths = list(wire) - src.modules += C - - var/obj/item/stack/tile/floor/cyborg/S = new /obj/item/stack/tile/floor/cyborg(src) - S.synths = list(metal) - src.modules += S - - var/obj/item/stack/material/cyborg/glass/reinforced/RG = new (src) - RG.synths = list(metal, glass) - src.modules += RG - - var/obj/item/stack/tile/wood/cyborg/WT = new /obj/item/stack/tile/wood/cyborg(src) - WT.synths = list(wood) - src.modules += WT - - var/obj/item/stack/material/cyborg/wood/W = new (src) - W.synths = list(wood) - src.modules += W - - var/obj/item/stack/material/cyborg/plastic/P = new (src) - P.synths = list(plastic) - src.modules += P - -/obj/item/weapon/robot_module/drone/construction - name = "construction drone module" - hide_on_manifest = 1 - channels = list("Engineering" = 1) - languages = list() - -/obj/item/weapon/robot_module/drone/construction/New() - ..() - src.modules += new /obj/item/weapon/rcd/borg(src) - -/obj/item/weapon/robot_module/drone/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) - var/obj/item/device/lightreplacer/LR = locate() in src.modules - LR.Charge(R, amount) - ..() +var/global/list/robot_modules = list( + "Standard" = /obj/item/weapon/robot_module/robot/standard, + "Service" = /obj/item/weapon/robot_module/robot/clerical/butler, + "Clerical" = /obj/item/weapon/robot_module/robot/clerical/general, + "Research" = /obj/item/weapon/robot_module/robot/research, + "Miner" = /obj/item/weapon/robot_module/robot/miner, + "Crisis" = /obj/item/weapon/robot_module/robot/medical/crisis, + "Surgeon" = /obj/item/weapon/robot_module/robot/medical/surgeon, + "Security" = /obj/item/weapon/robot_module/robot/security/general, + "Combat" = /obj/item/weapon/robot_module/robot/security/combat, + "Engineering" = /obj/item/weapon/robot_module/robot/engineering/general, +// "Construction" = /obj/item/weapon/robot_module/robot/engineering/construction, + "Janitor" = /obj/item/weapon/robot_module/robot/janitor + ) + +/obj/item/weapon/robot_module + name = "robot module" + icon = 'icons/obj/module.dmi' + icon_state = "std_module" + w_class = ITEMSIZE_NO_CONTAINER + item_state = "std_mod" + flags = CONDUCT + var/hide_on_manifest = 0 + var/channels = list() + var/networks = list() + var/languages = list(LANGUAGE_SOL_COMMON = 1, LANGUAGE_TRADEBAND = 1, LANGUAGE_UNATHI = 0, LANGUAGE_SIIK = 0, LANGUAGE_SKRELLIAN = 0, LANGUAGE_GUTTER = 0, LANGUAGE_SCHECHI = 0, LANGUAGE_SIGN = 0) + var/sprites = list() + var/can_be_pushed = 1 + var/no_slip = 0 + var/list/modules = list() + var/list/datum/matter_synth/synths = list() + var/obj/item/emag = null + var/obj/item/borg/upgrade/jetpack = null + var/list/subsystems = list() + var/list/obj/item/borg/upgrade/supported_upgrades = list() + + // Bookkeeping + var/list/original_languages = list() + var/list/added_networks = list() + +/obj/item/weapon/robot_module/New(var/mob/living/silicon/robot/R) + ..() + R.module = src + + add_camera_networks(R) + add_languages(R) + add_subsystems(R) + apply_status_flags(R) + + if(R.radio) + R.radio.recalculateChannels() + + R.set_module_sprites(sprites) + R.choose_icon(R.module_sprites.len + 1, R.module_sprites) + + for(var/obj/item/I in modules) + I.canremove = 0 + +/obj/item/weapon/robot_module/proc/Reset(var/mob/living/silicon/robot/R) + remove_camera_networks(R) + remove_languages(R) + remove_subsystems(R) + remove_status_flags(R) + + if(R.radio) + R.radio.recalculateChannels() + R.choose_icon(0, R.set_module_sprites(list("Default" = "robot"))) + +/obj/item/weapon/robot_module/Destroy() + for(var/module in modules) + qdel(module) + for(var/synth in synths) + qdel(synth) + modules.Cut() + synths.Cut() + qdel(emag) + qdel(jetpack) + emag = null + jetpack = null + return ..() + +/obj/item/weapon/robot_module/emp_act(severity) + if(modules) + for(var/obj/O in modules) + O.emp_act(severity) + if(emag) + emag.emp_act(severity) + if(synths) + for(var/datum/matter_synth/S in synths) + S.emp_act(severity) + ..() + return + +/obj/item/weapon/robot_module/proc/respawn_consumable(var/mob/living/silicon/robot/R, var/rate) + if(!synths || !synths.len) + return + + for(var/datum/matter_synth/T in synths) + T.add_charge(T.recharge_rate * rate) + +/obj/item/weapon/robot_module/proc/rebuild()//Rebuilds the list so it's possible to add/remove items from the module + var/list/temp_list = modules + modules = list() + for(var/obj/O in temp_list) + if(O) + modules += O + +/obj/item/weapon/robot_module/proc/add_languages(var/mob/living/silicon/robot/R) + // Stores the languages as they were before receiving the module, and whether they could be synthezized. + for(var/datum/language/language_datum in R.languages) + original_languages[language_datum] = (language_datum in R.speech_synthesizer_langs) + + for(var/language in languages) + R.add_language(language, languages[language]) + +/obj/item/weapon/robot_module/proc/remove_languages(var/mob/living/silicon/robot/R) + // Clear all added languages, whether or not we originally had them. + for(var/language in languages) + R.remove_language(language) + + // Then add back all the original languages, and the relevant synthezising ability + for(var/original_language in original_languages) + R.add_language(original_language, original_languages[original_language]) + original_languages.Cut() + +/obj/item/weapon/robot_module/proc/add_camera_networks(var/mob/living/silicon/robot/R) + if(R.camera && (NETWORK_ROBOTS in R.camera.network)) + for(var/network in networks) + if(!(network in R.camera.network)) + R.camera.add_network(network) + added_networks |= network + +/obj/item/weapon/robot_module/proc/remove_camera_networks(var/mob/living/silicon/robot/R) + if(R.camera) + R.camera.remove_networks(added_networks) + added_networks.Cut() + +/obj/item/weapon/robot_module/proc/add_subsystems(var/mob/living/silicon/robot/R) + R.verbs |= subsystems + +/obj/item/weapon/robot_module/proc/remove_subsystems(var/mob/living/silicon/robot/R) + R.verbs -= subsystems + +/obj/item/weapon/robot_module/proc/apply_status_flags(var/mob/living/silicon/robot/R) + if(!can_be_pushed) + R.status_flags &= ~CANPUSH + +/obj/item/weapon/robot_module/proc/remove_status_flags(var/mob/living/silicon/robot/R) + if(!can_be_pushed) + R.status_flags |= CANPUSH + +// Cyborgs (non-drones), default loadout. This will be given to every module. +/obj/item/weapon/robot_module/robot/New() + ..() + src.modules += new /obj/item/device/flash(src) + src.modules += new /obj/item/weapon/crowbar/cyborg(src) + src.modules += new /obj/item/weapon/extinguisher(src) + +/obj/item/weapon/robot_module/robot/standard + name = "standard robot module" + sprites = list( + "M-USE NanoTrasen" = "robot", + "Cabeiri" = "eyebot-standard", + "CUPCAKE" = "Noble-STD", + "Haruka" = "marinaSD", + "Usagi" = "tallflower", + "Telemachus" = "toiletbot", + "WTOperator" = "sleekstandard", + "WTOmni" = "omoikane", + "XI-GUS" = "spider", + "XI-ALP" = "heavyStandard", + "Basic" = "robot_old", + "Android" = "droid", + "Drone" = "drone-standard" + ) + +/obj/item/weapon/robot_module/robot/standard/New() + ..() + src.modules += new /obj/item/weapon/melee/baton/loaded(src) + src.modules += new /obj/item/weapon/wrench/cyborg(src) + src.modules += new /obj/item/device/healthanalyzer(src) + src.emag = new /obj/item/weapon/melee/energy/sword(src) + +/obj/item/weapon/robot_module/robot/medical + name = "medical robot module" + channels = list("Medical" = 1) + networks = list(NETWORK_MEDICAL) + subsystems = list(/mob/living/silicon/proc/subsystem_crew_monitor) + can_be_pushed = 0 + +/obj/item/weapon/robot_module/robot/medical/surgeon + name = "surgeon robot module" + sprites = list( + "M-USE NanoTrasen" = "robotMedi", + "Cabeiri" = "eyebot-medical", + "CUPCAKE" = "Noble-MED", + "Haruka" = "marinaMD", + "Minako" = "arachne", + "Usagi" = "tallwhite", + "Telemachus" = "toiletbotsurgeon", + "WTOperator" = "sleekcmo", + "XI-ALP" = "heavyMed", + "Basic" = "Medbot", + "Advanced Droid" = "droid-medical", + "Needles" = "medicalrobot", + "Drone" = "drone-surgery", + "Handy" = "handy-med" + ) + +/obj/item/weapon/robot_module/robot/medical/surgeon/New() + ..() + src.modules += new /obj/item/borg/sight/hud/med(src) + src.modules += new /obj/item/device/healthanalyzer(src) + src.modules += new /obj/item/weapon/reagent_containers/borghypo/surgeon(src) + src.modules += new /obj/item/weapon/surgical/scalpel/cyborg(src) + src.modules += new /obj/item/weapon/surgical/hemostat/cyborg(src) + src.modules += new /obj/item/weapon/surgical/retractor/cyborg(src) + src.modules += new /obj/item/weapon/surgical/cautery/cyborg(src) + src.modules += new /obj/item/weapon/surgical/bonegel/cyborg(src) + src.modules += new /obj/item/weapon/surgical/FixOVein/cyborg(src) + src.modules += new /obj/item/weapon/surgical/bonesetter/cyborg(src) + src.modules += new /obj/item/weapon/surgical/circular_saw/cyborg(src) + src.modules += new /obj/item/weapon/surgical/surgicaldrill/cyborg(src) + src.modules += new /obj/item/weapon/gripper/no_use/organ(src) + src.modules += new /obj/item/weapon/gripper/medical(src) + src.modules += new /obj/item/weapon/shockpaddles/robot(src) + src.modules += new /obj/item/weapon/reagent_containers/dropper(src) // Allows surgeon borg to fix necrosis + src.modules += new /obj/item/weapon/reagent_containers/syringe(src) + src.emag = new /obj/item/weapon/reagent_containers/spray(src) + src.emag.reagents.add_reagent("pacid", 250) + src.emag.name = "Polyacid spray" + + var/datum/matter_synth/medicine = new /datum/matter_synth/medicine(10000) + synths += medicine + + var/obj/item/stack/nanopaste/N = new /obj/item/stack/nanopaste(src) + var/obj/item/stack/medical/advanced/bruise_pack/B = new /obj/item/stack/medical/advanced/bruise_pack(src) + N.uses_charge = 1 + N.charge_costs = list(1000) + N.synths = list(medicine) + B.uses_charge = 1 + B.charge_costs = list(1000) + B.synths = list(medicine) + src.modules += N + src.modules += B + +/obj/item/weapon/robot_module/medical/robot/surgeon/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) + if(src.emag) + var/obj/item/weapon/reagent_containers/spray/PS = src.emag + PS.reagents.add_reagent("pacid", 2 * amount) + ..() + +/obj/item/weapon/robot_module/robot/medical/crisis + name = "crisis robot module" + sprites = list( + "M-USE NanoTrasen" = "robotMedi", + "Cabeiri" = "eyebot-medical", + "CUPCAKE" = "Noble-MED", + "Haruka" = "marinaMD", + "Minako" = "arachne", + "Usagi" = "tallwhite", + "Telemachus" = "toiletbotmedical", + "WTOperator" = "sleekmedic", + "XI-ALP" = "heavyMed", + "Basic" = "Medbot", + "Advanced Droid" = "droid-medical", + "Needles" = "medicalrobot", + "Drone - Medical" = "drone-medical", + "Drone - Chemistry" = "drone-chemistry" + ) + +/obj/item/weapon/robot_module/robot/medical/crisis/New() + ..() + src.modules += new /obj/item/borg/sight/hud/med(src) + src.modules += new /obj/item/device/healthanalyzer(src) + src.modules += new /obj/item/device/reagent_scanner/adv(src) + src.modules += new /obj/item/roller_holder(src) + src.modules += new /obj/item/weapon/reagent_containers/borghypo/crisis(src) + src.modules += new /obj/item/weapon/reagent_containers/glass/beaker/large(src) + src.modules += new /obj/item/weapon/reagent_containers/dropper/industrial(src) + src.modules += new /obj/item/weapon/reagent_containers/syringe(src) + src.modules += new /obj/item/weapon/gripper/no_use/organ(src) + src.modules += new /obj/item/weapon/gripper/medical(src) + src.modules += new /obj/item/weapon/shockpaddles/robot(src) + src.emag = new /obj/item/weapon/reagent_containers/spray(src) + src.emag.reagents.add_reagent("pacid", 250) + src.emag.name = "Polyacid spray" + + var/datum/matter_synth/medicine = new /datum/matter_synth/medicine(15000) + synths += medicine + + var/obj/item/stack/medical/advanced/ointment/O = new /obj/item/stack/medical/advanced/ointment(src) + var/obj/item/stack/medical/advanced/bruise_pack/B = new /obj/item/stack/medical/advanced/bruise_pack(src) + var/obj/item/stack/medical/splint/S = new /obj/item/stack/medical/splint(src) + O.uses_charge = 1 + O.charge_costs = list(1000) + O.synths = list(medicine) + B.uses_charge = 1 + B.charge_costs = list(1000) + B.synths = list(medicine) + S.uses_charge = 1 + S.charge_costs = list(1000) + S.synths = list(medicine) + src.modules += O + src.modules += B + src.modules += S + +/obj/item/weapon/robot_module/robot/medical/crisis/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) + + var/obj/item/weapon/reagent_containers/syringe/S = locate() in src.modules + if(S.mode == 2) + S.reagents.clear_reagents() + S.mode = initial(S.mode) + S.desc = initial(S.desc) + S.update_icon() + + if(src.emag) + var/obj/item/weapon/reagent_containers/spray/PS = src.emag + PS.reagents.add_reagent("pacid", 2 * amount) + + ..() + + +/obj/item/weapon/robot_module/robot/engineering + name = "engineering robot module" + channels = list("Engineering" = 1) + networks = list(NETWORK_ENGINEERING) + subsystems = list(/mob/living/silicon/proc/subsystem_power_monitor) + sprites = list( + "M-USE NanoTrasen" = "robotEngi", + "Cabeiri" = "eyebot-engineering", + "CUPCAKE" = "Noble-ENG", + "Haruka" = "marinaENG", + "Usagi" = "tallyellow", + "Telemachus" = "toiletbotengineering", + "WTOperator" = "sleekce", + "XI-GUS" = "spidereng", + "XI-ALP" = "heavyEng", + "Basic" = "Engineering", + "Antique" = "engineerrobot", + "Landmate" = "landmate", + "Landmate - Treaded" = "engiborg+tread", + "Drone" = "drone-engineer", + "Treadwell" = "treadwell", + "Handy" = "handy-engineer" + ) + +/obj/item/weapon/robot_module/robot/engineering/construction + name = "construction robot module" + no_slip = 1 + +/* Merged back into engineering (Hell, it's about time.) + +/obj/item/weapon/robot_module/robot/engineering/construction/New() + ..() + src.modules += new /obj/item/borg/sight/meson(src) + src.modules += new /obj/item/weapon/rcd/borg(src) + src.modules += new /obj/item/weapon/screwdriver/cyborg(src) + src.modules += new /obj/item/weapon/wrench/cyborg(src) + src.modules += new /obj/item/weapon/weldingtool/electric/mounted/cyborg(src) + src.modules += new /obj/item/weapon/pickaxe/plasmacutter(src) + src.modules += new /obj/item/device/pipe_painter(src) + src.modules += new /obj/item/device/floor_painter(src) + src.modules += new /obj/item/weapon/gripper/no_use/loader(src) + src.modules += new /obj/item/device/geiger(src) + + var/datum/matter_synth/metal = new /datum/matter_synth/metal() + var/datum/matter_synth/plasteel = new /datum/matter_synth/plasteel() + var/datum/matter_synth/glass = new /datum/matter_synth/glass() + synths += metal + synths += plasteel + synths += glass + + var/obj/item/stack/material/cyborg/steel/M = new (src) + M.synths = list(metal) + src.modules += M + + var/obj/item/stack/rods/cyborg/R = new /obj/item/stack/rods/cyborg(src) + R.synths = list(metal) + src.modules += R + + var/obj/item/stack/tile/floor/cyborg/F = new /obj/item/stack/tile/floor/cyborg(src) + F.synths = list(metal) + src.modules += F + + var/obj/item/stack/material/cyborg/plasteel/S = new (src) + S.synths = list(plasteel) + src.modules += S + + var/obj/item/stack/material/cyborg/glass/reinforced/RG = new (src) + RG.synths = list(metal, glass) + src.modules += RG +*/ + +/obj/item/weapon/robot_module/robot/engineering/general/New() + ..() + src.modules += new /obj/item/borg/sight/meson(src) + src.modules += new /obj/item/weapon/weldingtool/electric/mounted/cyborg(src) + src.modules += new /obj/item/weapon/screwdriver/cyborg(src) + src.modules += new /obj/item/weapon/wrench/cyborg(src) + src.modules += new /obj/item/weapon/wirecutters/cyborg(src) + src.modules += new /obj/item/device/multitool(src) + src.modules += new /obj/item/device/t_scanner(src) + src.modules += new /obj/item/device/analyzer(src) + src.modules += new /obj/item/taperoll/engineering(src) + src.modules += new /obj/item/weapon/gripper(src) + src.modules += new /obj/item/device/lightreplacer(src) + src.modules += new /obj/item/device/pipe_painter(src) + src.modules += new /obj/item/device/floor_painter(src) + src.modules += new /obj/item/weapon/inflatable_dispenser/robot(src) + src.emag = new /obj/item/weapon/melee/baton/robot/arm(src) + src.modules += new /obj/item/device/geiger(src) + src.modules += new /obj/item/weapon/rcd/borg(src) + src.modules += new /obj/item/weapon/pickaxe/plasmacutter(src) + src.modules += new /obj/item/weapon/gripper/no_use/loader(src) + + var/datum/matter_synth/metal = new /datum/matter_synth/metal(40000) + var/datum/matter_synth/glass = new /datum/matter_synth/glass(40000) + var/datum/matter_synth/plasteel = new /datum/matter_synth/plasteel(20000) + + var/datum/matter_synth/wire = new /datum/matter_synth/wire() + synths += metal + synths += glass + synths += plasteel + synths += wire + + var/obj/item/weapon/matter_decompiler/MD = new /obj/item/weapon/matter_decompiler(src) + MD.metal = metal + MD.glass = glass + src.modules += MD + + var/obj/item/stack/material/cyborg/steel/M = new (src) + M.synths = list(metal) + src.modules += M + + var/obj/item/stack/material/cyborg/glass/G = new (src) + G.synths = list(glass) + src.modules += G + + var/obj/item/stack/rods/cyborg/R = new /obj/item/stack/rods/cyborg(src) + R.synths = list(metal) + src.modules += R + + var/obj/item/stack/cable_coil/cyborg/C = new /obj/item/stack/cable_coil/cyborg(src) + C.synths = list(wire) + src.modules += C + + var/obj/item/stack/material/cyborg/plasteel/P = new (src) + P.synths = list(plasteel) + src.modules += P + + var/obj/item/stack/tile/floor/cyborg/S = new /obj/item/stack/tile/floor/cyborg(src) + S.synths = list(metal) + src.modules += S + + var/obj/item/stack/material/cyborg/glass/reinforced/RG = new (src) + RG.synths = list(metal, glass) + src.modules += RG + +/obj/item/weapon/robot_module/robot/security + name = "security robot module" + channels = list("Security" = 1) + networks = list(NETWORK_SECURITY) + subsystems = list(/mob/living/silicon/proc/subsystem_crew_monitor) + can_be_pushed = 0 + supported_upgrades = list(/obj/item/borg/upgrade/tasercooler) + +/obj/item/weapon/robot_module/robot/security/general + sprites = list( + "M-USE NanoTrasen" = "robotSecy", + "Cabeiri" = "eyebot-security", + "Cerberus" = "bloodhound", + "Cerberus - Treaded" = "treadhound", + "CUPCAKE" = "Noble-SEC", + "Haruka" = "marinaSC", + "Usagi" = "tallred", + "Telemachus" = "toiletbotsecurity", + "WTOperator" = "sleeksecurity", + "XI-GUS" = "spidersec", + "XI-ALP" = "heavySec", + "Basic" = "secborg", + "Black Knight" = "securityrobot", + "Drone" = "drone-sec" + ) + +/obj/item/weapon/robot_module/robot/security/general/New() + ..() + src.modules += new /obj/item/borg/sight/hud/sec(src) + src.modules += new /obj/item/weapon/handcuffs/cyborg(src) + src.modules += new /obj/item/weapon/melee/baton/robot(src) + src.modules += new /obj/item/weapon/gun/energy/taser/mounted/cyborg(src) + src.modules += new /obj/item/taperoll/police(src) + src.modules += new /obj/item/weapon/reagent_containers/spray/pepper(src) + src.emag = new /obj/item/weapon/gun/energy/laser/mounted(src) + +/obj/item/weapon/robot_module/robot/security/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) + var/obj/item/device/flash/F = locate() in src.modules + if(F.broken) + F.broken = 0 + F.times_used = 0 + F.icon_state = "flash" + else if(F.times_used) + F.times_used-- + var/obj/item/weapon/gun/energy/taser/mounted/cyborg/T = locate() in src.modules + if(T.power_supply.charge < T.power_supply.maxcharge) + T.power_supply.give(T.charge_cost * amount) + T.update_icon() + else + T.charge_tick = 0 + var/obj/item/weapon/melee/baton/robot/B = locate() in src.modules + if(B && B.bcell) + B.bcell.give(amount) + +/obj/item/weapon/robot_module/robot/janitor + name = "janitorial robot module" + channels = list("Service" = 1) + sprites = list( + "M-USE NanoTrasen" = "robotJani", + "Arachne" = "crawler", + "Cabeiri" = "eyebot-janitor", + "CUPCAKE" = "Noble-CLN", + "Haruka" = "marinaJN", + "Telemachus" = "toiletbotjanitor", + "WTOperator" = "sleekjanitor", + "XI-ALP" = "heavyRes", + "Basic" = "JanBot2", + "Mopbot" = "janitorrobot", + "Mop Gear Rex" = "mopgearrex", + "Drone" = "drone-janitor" + ) + +/obj/item/weapon/robot_module/robot/janitor/New() + ..() + src.modules += new /obj/item/weapon/soap/nanotrasen(src) + src.modules += new /obj/item/weapon/storage/bag/trash(src) + src.modules += new /obj/item/weapon/mop(src) + src.modules += new /obj/item/device/lightreplacer(src) + src.emag = new /obj/item/weapon/reagent_containers/spray(src) + src.emag.reagents.add_reagent("lube", 250) + src.emag.name = "Lube spray" + +/obj/item/weapon/robot_module/robot/janitor/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) + var/obj/item/device/lightreplacer/LR = locate() in src.modules + LR.Charge(R, amount) + if(src.emag) + var/obj/item/weapon/reagent_containers/spray/S = src.emag + S.reagents.add_reagent("lube", 2 * amount) + +/obj/item/weapon/robot_module/robot/clerical + name = "service robot module" + channels = list("Service" = 1) + languages = list( + LANGUAGE_SOL_COMMON = 1, + LANGUAGE_UNATHI = 1, + LANGUAGE_SIIK = 1, + LANGUAGE_SKRELLIAN = 1, + LANGUAGE_ROOTLOCAL = 0, + LANGUAGE_TRADEBAND = 1, + LANGUAGE_GUTTER = 1, + LANGUAGE_SCHECHI = 1, + LANGUAGE_EAL = 1, + LANGUAGE_SIGN = 0 + ) + +/obj/item/weapon/robot_module/robot/clerical/butler + sprites = list( + "M-USE NanoTrasen" = "robotServ", + "Cabeiri" = "eyebot-standard", + "CUPCAKE" = "Noble-SRV", + "Haruka" = "marinaSV", + "Michiru" = "maidbot", + "Usagi" = "tallgreen", + "Telemachus" = "toiletbot", + "WTOperator" = "sleekservice", + "WTOmni" = "omoikane", + "XI-GUS" = "spider", + "XI-ALP" = "heavyServ", + "Standard" = "Service2", + "Waitress" = "Service", + "Bro" = "Brobot", + "Rich" = "maximillion", + "Drone - Service" = "drone-service", + "Drone - Hydro" = "drone-hydro" + ) + +/obj/item/weapon/robot_module/robot/clerical/butler/New() + ..() + src.modules += new /obj/item/weapon/gripper/service(src) + src.modules += new /obj/item/weapon/reagent_containers/glass/bucket(src) + src.modules += new /obj/item/weapon/material/minihoe(src) + src.modules += new /obj/item/weapon/material/hatchet(src) + src.modules += new /obj/item/device/analyzer/plant_analyzer(src) + src.modules += new /obj/item/weapon/storage/bag/plants(src) + src.modules += new /obj/item/weapon/robot_harvester(src) + src.modules += new /obj/item/weapon/material/knife(src) + src.modules += new /obj/item/weapon/material/kitchen/rollingpin(src) + src.modules += new /obj/item/device/multitool(src) //to freeze trays + + var/obj/item/weapon/rsf/M = new /obj/item/weapon/rsf(src) + M.stored_matter = 30 + src.modules += M + + src.modules += new /obj/item/weapon/reagent_containers/dropper/industrial(src) + + var/obj/item/weapon/flame/lighter/zippo/L = new /obj/item/weapon/flame/lighter/zippo(src) + L.lit = 1 + src.modules += L + + src.modules += new /obj/item/weapon/tray/robotray(src) + src.modules += new /obj/item/weapon/reagent_containers/borghypo/service(src) + src.emag = new /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer(src) + + var/datum/reagents/R = new/datum/reagents(50) + src.emag.reagents = R + R.my_atom = src.emag + R.add_reagent("beer2", 50) + src.emag.name = "Mickey Finn's Special Brew" + +/obj/item/weapon/robot_module/robot/clerical/general + name = "clerical robot module" + sprites = list( + "M-USE NanoTrasen" = "robotCler", + "Cabeiri" = "eyebot-standard", + "CUPCAKE" = "Noble-SRV", + "Haruka" = "marinaSV", + "Usagi" = "tallgreen", + "Telemachus" = "toiletbot", + "WTOperator" = "sleekclerical", + "WTOmni" = "omoikane", + "XI-GUS" = "spidercom", + "XI-ALP" = "heavyServ", + "Waitress" = "Service", + "Bro" = "Brobot", + "Rich" = "maximillion", + "Default" = "Service2", + "Drone" = "drone-blu" + ) + +/obj/item/weapon/robot_module/robot/clerical/general/New() + ..() + src.modules += new /obj/item/weapon/pen/robopen(src) + src.modules += new /obj/item/weapon/form_printer(src) + src.modules += new /obj/item/weapon/gripper/paperwork(src) + src.modules += new /obj/item/weapon/hand_labeler(src) + src.modules += new /obj/item/weapon/stamp(src) + src.modules += new /obj/item/weapon/stamp/denied(src) + src.emag = new /obj/item/weapon/stamp/chameleon(src) + src.emag = new /obj/item/weapon/pen/chameleon(src) + +/obj/item/weapon/robot_module/general/butler/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) + var/obj/item/weapon/reagent_containers/food/condiment/enzyme/E = locate() in src.modules + E.reagents.add_reagent("enzyme", 2 * amount) + if(src.emag) + var/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/B = src.emag + B.reagents.add_reagent("beer2", 2 * amount) + +/obj/item/weapon/robot_module/robot/miner + name = "miner robot module" + channels = list("Supply" = 1) + networks = list(NETWORK_MINE) + sprites = list( + "NM-USE NanoTrasen" = "robotMine", + "Cabeiri" = "eyebot-miner", + "CUPCAKE" = "Noble-DIG", + "Haruka" = "marinaMN", + "Telemachus" = "toiletbotminer", + "WTOperator" = "sleekminer", + "XI-GUS" = "spidermining", + "XI-ALP" = "heavyMiner", + "Basic" = "Miner_old", + "Advanced Droid" = "droid-miner", + "Treadhead" = "Miner", + "Drone" = "drone-miner" + ) + +/obj/item/weapon/robot_module/robot/miner/New() + ..() + src.modules += new /obj/item/borg/sight/material(src) + src.modules += new /obj/item/weapon/wrench/cyborg(src) + src.modules += new /obj/item/weapon/screwdriver/cyborg(src) + src.modules += new /obj/item/weapon/storage/bag/ore(src) + src.modules += new /obj/item/weapon/pickaxe/borgdrill(src) + src.modules += new /obj/item/weapon/storage/bag/sheetsnatcher/borg(src) + src.modules += new /obj/item/weapon/gripper/miner(src) + src.modules += new /obj/item/weapon/mining_scanner(src) + src.emag = new /obj/item/weapon/pickaxe/plasmacutter(src) + src.emag = new /obj/item/weapon/pickaxe/diamonddrill(src) + +/obj/item/weapon/robot_module/robot/research + name = "research module" + channels = list("Science" = 1) + sprites = list( + "L'Ouef" = "peaceborg", + "Cabeiri" = "eyebot-science", + "Haruka" = "marinaSCI", + "WTDove" = "whitespider", + "WTOperator" = "sleekscience", + "Droid" = "droid-science", + "Drone" = "drone-science", + "Handy" = "handy-science" + ) + +/obj/item/weapon/robot_module/robot/research/New() + ..() + src.modules += new /obj/item/weapon/portable_destructive_analyzer(src) + src.modules += new /obj/item/weapon/gripper/research(src) + src.modules += new /obj/item/weapon/gripper/no_use/organ/robotics(src) + src.modules += new /obj/item/weapon/gripper/no_use/mech(src) + src.modules += new /obj/item/weapon/gripper/no_use/loader(src) + src.modules += new /obj/item/device/robotanalyzer(src) + src.modules += new /obj/item/weapon/card/robot(src) + src.modules += new /obj/item/weapon/weldingtool/electric/mounted/cyborg(src) + src.modules += new /obj/item/weapon/screwdriver/cyborg(src) + src.modules += new /obj/item/weapon/wrench/cyborg(src) + src.modules += new /obj/item/weapon/wirecutters/cyborg(src) + src.modules += new /obj/item/device/multitool(src) + src.modules += new /obj/item/weapon/surgical/scalpel/cyborg(src) + src.modules += new /obj/item/weapon/surgical/circular_saw/cyborg(src) + src.modules += new /obj/item/weapon/reagent_containers/syringe(src) + src.modules += new /obj/item/weapon/reagent_containers/glass/beaker/large(src) + src.modules += new /obj/item/weapon/storage/part_replacer(src) + src.modules += new /obj/item/weapon/shockpaddles/robot/jumper(src) + src.modules += new /obj/item/weapon/melee/baton/slime/robot(src) + src.modules += new /obj/item/weapon/gun/energy/taser/xeno/robot(src) + src.emag = new /obj/item/weapon/hand_tele(src) + + var/datum/matter_synth/nanite = new /datum/matter_synth/nanite(10000) + synths += nanite + var/datum/matter_synth/wire = new /datum/matter_synth/wire() //Added to allow repairs, would rather add cable now than be asked to add it later, + synths += wire //Cable code, taken from engiborg, + + var/obj/item/stack/nanopaste/N = new /obj/item/stack/nanopaste(src) + N.uses_charge = 1 + N.charge_costs = list(1000) + N.synths = list(nanite) + src.modules += N + + var/obj/item/stack/cable_coil/cyborg/C = new /obj/item/stack/cable_coil/cyborg(src) //Cable code, taken from engiborg, + C.synths = list(wire) + src.modules += C + +/obj/item/weapon/robot_module/robot/security/combat + name = "combat robot module" + hide_on_manifest = 1 + sprites = list( + "Haruka" = "marinaCB", + "Combat Android" = "droid-combat" + ) + +/obj/item/weapon/robot_module/robot/security/combat/New() + ..() + src.modules += new /obj/item/device/flash(src) + src.modules += new /obj/item/borg/sight/thermal(src) + src.modules += new /obj/item/weapon/gun/energy/laser/mounted(src) + src.modules += new /obj/item/weapon/pickaxe/plasmacutter(src) + src.modules += new /obj/item/borg/combat/shield(src) + src.modules += new /obj/item/borg/combat/mobility(src) + src.emag = new /obj/item/weapon/gun/energy/lasercannon/mounted(src) + + +/* Drones */ + +/obj/item/weapon/robot_module/drone + name = "drone module" + hide_on_manifest = 1 + no_slip = 1 + networks = list(NETWORK_ENGINEERING) + +/obj/item/weapon/robot_module/drone/New(var/mob/living/silicon/robot/robot) + ..() + src.modules += new /obj/item/borg/sight/meson(src) + src.modules += new /obj/item/weapon/weldingtool/electric/mounted/cyborg(src) + src.modules += new /obj/item/weapon/screwdriver/cyborg(src) + src.modules += new /obj/item/weapon/wrench/cyborg(src) + src.modules += new /obj/item/weapon/crowbar/cyborg(src) + src.modules += new /obj/item/weapon/wirecutters/cyborg(src) + src.modules += new /obj/item/device/multitool(src) + src.modules += new /obj/item/device/lightreplacer(src) + src.modules += new /obj/item/weapon/gripper(src) + src.modules += new /obj/item/weapon/soap(src) + src.modules += new /obj/item/weapon/gripper/no_use/loader(src) + src.modules += new /obj/item/weapon/extinguisher(src) + src.modules += new /obj/item/device/pipe_painter(src) + src.modules += new /obj/item/device/floor_painter(src) + + robot.internals = new/obj/item/weapon/tank/jetpack/carbondioxide(src) + src.modules += robot.internals + + src.emag = new /obj/item/weapon/pickaxe/plasmacutter(src) + src.emag.name = "Plasma Cutter" + + var/datum/matter_synth/metal = new /datum/matter_synth/metal(25000) + var/datum/matter_synth/glass = new /datum/matter_synth/glass(25000) + var/datum/matter_synth/wood = new /datum/matter_synth/wood(25000) + var/datum/matter_synth/plastic = new /datum/matter_synth/plastic(25000) + var/datum/matter_synth/wire = new /datum/matter_synth/wire(30) + synths += metal + synths += glass + synths += wood + synths += plastic + synths += wire + + var/obj/item/weapon/matter_decompiler/MD = new /obj/item/weapon/matter_decompiler(src) + MD.metal = metal + MD.glass = glass + MD.wood = wood + MD.plastic = plastic + src.modules += MD + + var/obj/item/stack/material/cyborg/steel/M = new (src) + M.synths = list(metal) + src.modules += M + + var/obj/item/stack/material/cyborg/glass/G = new (src) + G.synths = list(glass) + src.modules += G + + var/obj/item/stack/rods/cyborg/R = new /obj/item/stack/rods/cyborg(src) + R.synths = list(metal) + src.modules += R + + var/obj/item/stack/cable_coil/cyborg/C = new /obj/item/stack/cable_coil/cyborg(src) + C.synths = list(wire) + src.modules += C + + var/obj/item/stack/tile/floor/cyborg/S = new /obj/item/stack/tile/floor/cyborg(src) + S.synths = list(metal) + src.modules += S + + var/obj/item/stack/material/cyborg/glass/reinforced/RG = new (src) + RG.synths = list(metal, glass) + src.modules += RG + + var/obj/item/stack/tile/wood/cyborg/WT = new /obj/item/stack/tile/wood/cyborg(src) + WT.synths = list(wood) + src.modules += WT + + var/obj/item/stack/material/cyborg/wood/W = new (src) + W.synths = list(wood) + src.modules += W + + var/obj/item/stack/material/cyborg/plastic/P = new (src) + P.synths = list(plastic) + src.modules += P + +/obj/item/weapon/robot_module/drone/construction + name = "construction drone module" + hide_on_manifest = 1 + channels = list("Engineering" = 1) + languages = list() + +/obj/item/weapon/robot_module/drone/construction/New() + ..() + src.modules += new /obj/item/weapon/rcd/borg(src) + +/obj/item/weapon/robot_module/drone/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) + var/obj/item/device/lightreplacer/LR = locate() in src.modules + LR.Charge(R, amount) + ..() return \ No newline at end of file diff --git a/code/modules/mob/living/silicon/robot/robot_modules/syndicate.dm b/code/modules/mob/living/silicon/robot/robot_modules/syndicate.dm new file mode 100644 index 0000000000..2def8149ff --- /dev/null +++ b/code/modules/mob/living/silicon/robot/robot_modules/syndicate.dm @@ -0,0 +1,45 @@ +/* Syndicate modules */ + +/obj/item/weapon/robot_module/robot/syndicate + name = "illegal robot module" + hide_on_manifest = 1 + languages = list( + LANGUAGE_SOL_COMMON = 1, + LANGUAGE_TRADEBAND = 1, + LANGUAGE_UNATHI = 0, + LANGUAGE_SIIK = 0, + LANGUAGE_SKRELLIAN = 0, + LANGUAGE_ROOTLOCAL = 0, + LANGUAGE_GUTTER = 1, + LANGUAGE_SCHECHI = 0, + LANGUAGE_EAL = 1, + LANGUAGE_SIGN = 0 + ) + sprites = list( + "Cerberus" = "syndie_bloodhound", + "Cerberus - Treaded" = "syndie_treadhound", + "Ares" = "squats", + "Telemachus" = "toiletbotantag", + "WTOperator" = "hosborg", + "XI-GUS" = "spidersyndi", + "XI-ALP" = "syndi-heavy" + ) + var/id + +/obj/item/weapon/robot_module/robot/syndicate/New(var/mob/living/silicon/robot/R) + ..() + loc = R + src.modules += new /obj/item/weapon/melee/energy/sword(src) + src.modules += new /obj/item/weapon/gun/energy/pulse_rifle/destroyer(src) + src.modules += new /obj/item/weapon/card/emag(src) + var/jetpack = new/obj/item/weapon/tank/jetpack/carbondioxide(src) + src.modules += jetpack + R.internals = jetpack + + id = R.idcard + src.modules += id + +/obj/item/weapon/robot_module/robot/syndicate/Destroy() + src.modules -= id + id = null + return ..() diff --git a/code/modules/mob/living/silicon/robot/subtypes/gravekeeper.dm b/code/modules/mob/living/silicon/robot/subtypes/gravekeeper.dm new file mode 100644 index 0000000000..9cc09b286a --- /dev/null +++ b/code/modules/mob/living/silicon/robot/subtypes/gravekeeper.dm @@ -0,0 +1,25 @@ +/mob/living/silicon/robot/gravekeeper + lawupdate = 0 + scrambledcodes = 1 + icon_state = "drone-lost" + modtype = "Gravekeeper" + lawchannel = "State" + braintype = "Drone" + idcard_type = /obj/item/weapon/card/id + +/mob/living/silicon/robot/gravekeeper/init() + aiCamera = new/obj/item/device/camera/siliconcam/robot_camera(src) + + mmi = new /obj/item/device/mmi/digital/robot(src) // Explicitly a drone. + module = new /obj/item/weapon/robot_module/robot/gravekeeper(src) + overlays.Cut() + init_id() + + updatename("Gravekeeper") + + if(!cell) + cell = new /obj/item/weapon/cell/high(src) // 15k cell, as recharging stations are a lot more rare on the Surface. + + laws = new /datum/ai_laws/gravekeeper() + + playsound(loc, 'sound/mecha/nominalsyndi.ogg', 75, 0) \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/animals/crab.dm b/code/modules/mob/living/simple_animal/animals/crab.dm index acad7f6378..35089275e5 100644 --- a/code/modules/mob/living/simple_animal/animals/crab.dm +++ b/code/modules/mob/living/simple_animal/animals/crab.dm @@ -5,6 +5,7 @@ icon_state = "crab" icon_living = "crab" icon_dead = "crab_dead" + faction = "crabs" intelligence_level = SA_ANIMAL wander = 0 @@ -45,3 +46,37 @@ response_help = "pets" response_disarm = "gently pushes aside" response_harm = "stomps" + +//Sif Crabs +/mob/living/simple_animal/giant_crab + name = "Giant Crab" + desc = "A large, hard-shelled crustacean. This one is mostly grey." + icon_state = "sif_crab" + icon_living = "sif_crab" + icon_dead = "sif_crab_dead" + faction = "crabs" + intelligence_level = SA_ANIMAL + + maxHealth = 200 + health = 200 + + mob_size = MOB_LARGE + cooperative = 1 + retaliate = 1 + turns_per_move = 3 + + minbodytemp = 175 + + melee_damage_lower = 15 + melee_damage_upper = 35 + + meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat + response_help = "pets" + response_disarm = "gently pushes aside" + response_harm = "stomps" + friendly = "pinches" + + speak_chance = 1 + speak_emote = list("clicks") + emote_hear = list("clicks") + emote_see = list("clacks") diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 9dc1c3eedc..92a8b3bdeb 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -1059,6 +1059,13 @@ mob/proc/yank_out_object() /mob/proc/is_muzzled() return 0 +//Exploitable Info Update + +/mob/proc/amend_exploitable(var/obj/item/I) + var/obj/item/exploit_item = new I(src.loc) + exploit_addons |= exploit_item + var/exploitmsg = html_decode("\n" + "Has " + exploit_item.name + ".") + exploit_record += exploitmsg /client/proc/check_has_body_select() return mob && mob.hud_used && istype(mob.zone_sel, /obj/screen/zone_sel) diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 427786ad41..e296db2ab9 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -72,6 +72,7 @@ var/sec_record = "" var/gen_record = "" var/exploit_record = "" + var/exploit_addons = list() //Assorted things that show up at the end of the exploit_record list var/blinded = null var/bhunger = 0 //Carbon var/ajourn = 0 diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 0d4b3ad085..f169ddb8fd 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -400,7 +400,7 @@ proc/is_blind(A) return // Can't talk in deadchat if you can't see it. for(var/mob/M in player_list) - if(M.client && ((!istype(M, /mob/new_player) && M.stat == DEAD) || (M.client.holder && !is_mentor(M.client))) && M.is_preference_enabled(/datum/client_preference/show_dsay)) + if(M.client && ((!istype(M, /mob/new_player) && M.stat == DEAD) || (M.client.holder && !is_event_manager(M.client))) && M.is_preference_enabled(/datum/client_preference/show_dsay)) var/follow var/lname if(M.forbid_seeing_deadchat && !M.client.holder) diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm index 1e4ae3710d..8a99192233 100644 --- a/code/modules/reagents/Chemistry-Recipes.dm +++ b/code/modules/reagents/Chemistry-Recipes.dm @@ -1204,7 +1204,7 @@ name = "Syntiflesh" id = "syntiflesh" result = null - required_reagents = list("blood" = 5, "clonexadone" = 1) + required_reagents = list("blood" = 5, "clonexadone" = 5) result_amount = 1 /datum/chemical_reaction/food/syntiflesh/on_reaction(var/datum/reagents/holder, var/created_volume) diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm index fea09819bd..c49c76be01 100644 --- a/code/modules/reagents/reagent_containers/food/snacks.dm +++ b/code/modules/reagents/reagent_containers/food/snacks.dm @@ -3460,7 +3460,7 @@ /obj/item/weapon/reagent_containers/food/snacks/skrellsnacks name = "\improper SkrellSnax" - desc = "Cured fungus shipped all the way from Jargon 4, almost like jerky! Almost." + desc = "Cured fungus shipped all the way from Qerr'balak, almost like jerky! Almost." icon_state = "skrellsnacks" filling_color = "#A66829" center_of_mass = list("x"=15, "y"=12) @@ -3495,4 +3495,4 @@ /obj/item/weapon/reagent_containers/food/snacks/croissant/New() ..() - bitesize = 2 \ No newline at end of file + bitesize = 2 diff --git a/code/world.dm b/code/world.dm index d9d2c8564b..b7c99689e7 100644 --- a/code/world.dm +++ b/code/world.dm @@ -479,7 +479,7 @@ var/world_topic_spam_protect_time = world.timeofday /hook/startup/proc/loadMods() world.load_mods() - world.load_mentors() // no need to write another hook. + world.load_event_managers() // no need to write another hook. return 1 /world/proc/load_mods() @@ -503,11 +503,11 @@ var/world_topic_spam_protect_time = world.timeofday var/datum/admins/D = new /datum/admins(title, rights, ckey) D.associate(directory[ckey]) -/world/proc/load_mentors() +/world/proc/load_event_managers() if(config.admin_legacy_system) - var/text = file2text("config/mentors.txt") + var/text = file2text("config/event_managers.txt") if (!text) - error("Failed to load config/mentors.txt") + error("Failed to load config/event_managers.txt") else var/list/lines = splittext(text, "\n") for(var/line in lines) @@ -516,7 +516,7 @@ var/world_topic_spam_protect_time = world.timeofday if (copytext(line, 1, 2) == ";") continue - var/title = "Mentor" + var/title = "Event Manager" var/rights = admin_ranks[title] var/ckey = copytext(line, 1, length(line)+1) diff --git a/config/example/admin_ranks.txt b/config/example/admin_ranks.txt index e02a56df04..69696db5df 100644 --- a/config/example/admin_ranks.txt +++ b/config/example/admin_ranks.txt @@ -29,7 +29,7 @@ Admin Observer Moderator +MOD -Mentor +MENTOR +Event Manager +ADMIN +EVENT +SPAWN +REJUV +VAREDIT +POSSESS +BUILDMODE +FUN +SOUNDS Admin Candidate +ADMIN Trial Admin +@ +SPAWN +REJUV +VAREDIT +BAN @@ -43,3 +43,4 @@ Host +EVERYTHING Developer +DEBUG +VAREDIT +SERVER +SPAWN +REJUV +POSSESS +BUILDMODE Dev Mod +@ +MOD +Dev Min +@ +ADMIN \ No newline at end of file diff --git a/icons/mob/animal.dmi b/icons/mob/animal.dmi index 60153c2d92..d9240628e5 100644 Binary files a/icons/mob/animal.dmi and b/icons/mob/animal.dmi differ diff --git a/icons/mob/robots.dmi b/icons/mob/robots.dmi index cb36f6e3b4..d32d479e3f 100644 Binary files a/icons/mob/robots.dmi and b/icons/mob/robots.dmi differ diff --git a/icons/obj/clothing/ties.dmi b/icons/obj/clothing/ties.dmi index b3c82552d4..84117e2754 100644 Binary files a/icons/obj/clothing/ties.dmi and b/icons/obj/clothing/ties.dmi differ diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi index 6465ec3319..3ba867cda1 100644 Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ diff --git a/maps/northern_star/polaris-2.dmm b/maps/northern_star/polaris-2.dmm index b7ba87c88c..13133d0cd0 100644 --- a/maps/northern_star/polaris-2.dmm +++ b/maps/northern_star/polaris-2.dmm @@ -592,20 +592,20 @@ "lt" = (/turf/simulated/shuttle/floor/white,/area/syndicate_mothership) "lu" = (/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "gravsnow_corner"; dir = 4},/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "gravsnow_corner"; dir = 8},/area/syndicate_mothership) "lv" = (/turf/unsimulated/floor{icon_state = "dark"},/area/alien) -"lw" = (/turf/space,/turf/simulated/shuttle/wall{dir = 8; icon_state = "diagonalWall3"},/area/syndicate_mothership{name = "\improper Ninja Base"}) -"lx" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/syndicate_mothership{name = "\improper Ninja Base"}) +"lw" = (/turf/simulated/shuttle/wall{dir = 8; icon_state = "diagonalWall3"},/area/syndicate_mothership{name = "\improper Ninja Base"}) +"lx" = (/turf/simulated/shuttle/wall,/area/syndicate_mothership{name = "\improper Ninja Base"}) "ly" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/plating,/area/syndicate_mothership{name = "\improper Ninja Base"}) -"lz" = (/turf/space,/turf/simulated/shuttle/wall{dir = 1; icon_state = "diagonalWall3"},/area/syndicate_mothership{name = "\improper Ninja Base"}) +"lz" = (/turf/simulated/shuttle/wall{dir = 2; icon_state = "diagonalWall3"},/area/syndicate_mothership{name = "\improper Ninja Base"}) "lA" = (/obj/item/weapon/paper{info = "Some stuff is missing..."; name = "Insert alien artifacts here."},/turf/unsimulated/floor{icon_state = "dark"},/area/alien) "lB" = (/obj/machinery/door/airlock/hatch,/turf/unsimulated/floor{icon_state = "dark"},/area/alien) -"lC" = (/turf/simulated/shuttle/floor{icon_state = "floor4"},/turf/simulated/shuttle/wall{dir = 4; icon_state = "diagonalWall3"},/area/syndicate_mothership{name = "\improper Ninja Base"}) -"lD" = (/obj/structure/table/steel_reinforced,/obj/item/clothing/mask/balaclava/tactical,/obj/item/clothing/mask/balaclava,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_mothership{name = "\improper Ninja Base"}) -"lE" = (/turf/simulated/shuttle/floor{icon_state = "floor4"},/turf/simulated/shuttle/wall{icon_state = "diagonalWall3"},/area/syndicate_mothership{name = "\improper Ninja Base"}) +"lC" = (/obj/structure/table/steel_reinforced,/obj/item/clothing/mask/balaclava/tactical,/obj/item/clothing/mask/balaclava,/turf/simulated/shuttle/floor{tag = "icon-floor_red"; icon_state = "floor_red"},/area/syndicate_mothership{name = "\improper Ninja Base"}) +"lD" = (/obj/structure/table/steel_reinforced,/obj/structure/mirror,/turf/simulated/shuttle/floor{tag = "icon-floor_red"; icon_state = "floor_red"},/area/syndicate_mothership{name = "\improper Ninja Base"}) +"lE" = (/obj/structure/undies_wardrobe,/turf/simulated/shuttle/floor{tag = "icon-floor_red"; icon_state = "floor_red"},/area/syndicate_mothership{name = "\improper Ninja Base"}) "lF" = (/obj/structure/closet/acloset,/turf/unsimulated/floor{icon_state = "dark"},/area/alien) "lG" = (/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/obj/structure/flora/bush,/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "gravsnow_corner"; dir = 8},/area/syndicate_mothership) "lH" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/plating,/area/syndicate_mothership{name = "\improper Ninja Base"}) -"lI" = (/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_mothership{name = "\improper Ninja Base"}) -"lJ" = (/obj/structure/bed/chair{dir = 1},/obj/effect/landmark{name = "ninjastart"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_mothership{name = "\improper Ninja Base"}) +"lI" = (/obj/structure/bed/chair{dir = 1},/obj/effect/landmark{name = "ninjastart"},/turf/simulated/shuttle/floor{tag = "icon-floor_red"; icon_state = "floor_red"},/area/syndicate_mothership{name = "\improper Ninja Base"}) +"lJ" = (/turf/simulated/shuttle/floor{tag = "icon-floor_red"; icon_state = "floor_red"},/area/syndicate_mothership{name = "\improper Ninja Base"}) "lK" = (/turf/space,/area/shuttle/alien/base) "lL" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/plating,/area/syndicate_mothership{name = "\improper Ninja Base"}) "lM" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/airless,/area/syndicate_mothership) @@ -614,18 +614,16 @@ "lP" = (/turf/space,/obj/structure/shuttle/engine/propulsion,/turf/simulated/shuttle/plating/airless/carry,/area/syndicate_mothership) "lQ" = (/turf/space,/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_r"},/turf/simulated/shuttle/plating/airless/carry,/area/syndicate_mothership) "lR" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/plating,/area/syndicate_mothership{name = "\improper Ninja Base"}) -"lS" = (/obj/machinery/computer/teleporter,/turf/simulated/floor/plating,/area/syndicate_mothership{name = "\improper Ninja Base"}) -"lT" = (/obj/machinery/teleport/station,/turf/simulated/floor/plating,/area/syndicate_mothership{name = "\improper Ninja Base"}) -"lU" = (/obj/machinery/teleport/hub,/turf/simulated/floor/plating,/area/syndicate_mothership{name = "\improper Ninja Base"}) +"lS" = (/obj/machinery/teleport/station,/turf/simulated/shuttle/floor{tag = "icon-floor_red"; icon_state = "floor_red"},/area/syndicate_mothership{name = "\improper Ninja Base"}) +"lT" = (/obj/machinery/computer/teleporter,/turf/simulated/shuttle/floor{tag = "icon-floor_red"; icon_state = "floor_red"},/area/syndicate_mothership{name = "\improper Ninja Base"}) +"lU" = (/obj/machinery/teleport/hub,/turf/simulated/shuttle/floor{tag = "icon-floor_red"; icon_state = "floor_red"},/area/syndicate_mothership{name = "\improper Ninja Base"}) "lV" = (/turf/unsimulated/wall,/area) "lW" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/airless,/area/syndicate_mothership{name = "\improper Ninja Base"}) "lX" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1; direction = 2; name = "thrower_throwdown"; tiles = 0},/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1; name = "escapeshuttle_leave"; teleport_x = 25; teleport_x_offset = 245; teleport_y = 25; teleport_y_offset = 245; teleport_z = 6; teleport_z_offset = 6},/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1; name = "escapeshuttle_leave"; teleport_x = 25; teleport_x_offset = 245; teleport_y = 25; teleport_y_offset = 245; teleport_z = 6; teleport_z_offset = 6},/turf/space,/area/space) "lY" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1; direction = 2; name = "thrower_throwdown"; tiles = 0},/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1; name = "escapeshuttle_leave"; teleport_x = 25; teleport_x_offset = 245; teleport_y = 25; teleport_y_offset = 245; teleport_z = 6; teleport_z_offset = 6},/turf/space,/area/space) -"lZ" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "diagonalWall3"},/area/syndicate_mothership{name = "\improper Ninja Base"}) "ma" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l"},/turf/space,/area/syndicate_mothership{name = "\improper Ninja Base"}) "mb" = (/obj/structure/shuttle/engine/propulsion,/turf/space,/area/syndicate_mothership{name = "\improper Ninja Base"}) "mc" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_r"},/turf/space,/area/syndicate_mothership{name = "\improper Ninja Base"}) -"md" = (/turf/space,/turf/simulated/shuttle/wall{dir = 4; icon_state = "diagonalWall3"},/area/syndicate_mothership{name = "\improper Ninja Base"}) "me" = (/turf/simulated/mineral,/area/space) "mf" = (/turf/simulated/shuttle/wall/dark/hard_corner,/area/centcom/specops) "mg" = (/obj/effect/landmark/start,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area) @@ -2471,14 +2469,14 @@ ajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajaaaaaaaaaaaaaaaa ajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafhVihjyjyjyjyjyjyjyjKjKjKjyjyjyjyjyjyjykekTlolplphVafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf ajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaflslslslslslslslsafafhVihjyltltltltltjyjKjKjKjyjKjKjKjKjKjyluhVlolplphVafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf ajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaflslvlvlvlslvlvlsafafhVihjyltltltltltltjKjKjKjKjKjKjKjKjKjyluhVhVhVhVhVafafafafafafafafaflwlxlylxlzafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf -afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaflslvlAlvlBlvlvlsafafhVihjyltltltltltltjKjKjKjKjKjKjKjKjKjyjLihhVafafafafafafafafafafafaflxlClDlElxafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf -afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaflslFlFlFlslvlvlsafafhVihjyltltltltltjyltltltjyjKjyjKjyjyjylGihhVafafafafafafafafafafafaflHlIlJlIlHafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf -afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaflKlKlKlKlslslslslslslvlvlsafafhVihjyltltltjyjyjyltltltjyjyjyjKjKjKjyjLihhVafafafafafafafafafafafaflLlIlIlIlLafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf -afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaflKlKlKlKlBlvlBlvlvlvlvlvlsafafhVihjyltltltjyihjylMlMlMjyihjyjKjKjKjyjLihhVafafafafafafafafafafafaflLlIlIlIlLafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf -afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaflKlKlKlKlslslslslvlvlvlNlsafafhVihjylMlMlMjyihjylOlPlQjyihjylMlMlMjyjLihhVafafafafafafafafafafafaflRlIlIlIlRafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf -afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaflslFlvlvlNlsafafhVihjylOlPlQjyihihihihihihihjylOlPlQjyihihhVafafafafafafafafafafafaflxlSlTlUlxafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf +afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaflslvlAlvlBlvlvlsafafhVihjyltltltltltltjKjKjKjKjKjKjKjKjKjyjLihhVafafafafafafafafafafafaflxlDlClElxafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf +afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaflslFlFlFlslvlvlsafafhVihjyltltltltltjyltltltjyjKjyjKjyjyjylGihhVafafafafafafafafafafafaflHlJlIlJlHafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf +afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaflKlKlKlKlslslslslslslvlvlsafafhVihjyltltltjyjyjyltltltjyjyjyjKjKjKjyjLihhVafafafafafafafafafafafaflLlJlJlJlLafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf +afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaflKlKlKlKlBlvlBlvlvlvlvlvlsafafhVihjyltltltjyihjylMlMlMjyihjyjKjKjKjyjLihhVafafafafafafafafafafafaflLlJlJlJlLafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf +afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaflKlKlKlKlslslslslvlvlvlNlsafafhVihjylMlMlMjyihjylOlPlQjyihjylMlMlMjyjLihhVafafafafafafafafafafafaflRlJlJlJlRafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf +afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaflslFlvlvlNlsafafhVihjylOlPlQjyihihihihihihihjylOlPlQjyihihhVafafafafafafafafafafafaflxlTlSlUlxafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf lVlVlVlVlVlVlVlVlVlVlVlVlVlVlVafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaflslFlvlvlNlsafafhVihihihihihihihihihihihihihihihihihihihihhVafafafafafafafafafafafaflxlWlWlWlxafafafafafafafafafafafaflXlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlY -lVlVlVlVlVlVlVlVlVlVlVlVlVlVlVafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaflslslslslslsafafhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVafafafafafafafafafafafaflZmambmcmdafafafafafafafafafafafaflYafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf +lVlVlVlVlVlVlVlVlVlVlVlVlVlVlVafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaflslslslslslsafafhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVafafafafafafafafafafafaflwmambmclwafafafafafafafafafafafaflYafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf lVlVlVlVlVlVlVlVlVlVlVlVlVlVlVafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaflYafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf lVlVlVlVlVlVlVlVlVlVlVlVlVlVlVafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaflYafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf lVlVlVlVlVlVlVlVlVlVlVlVlVlVlVafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaflYafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf diff --git a/maps/northern_star/polaris-5.dmm b/maps/northern_star/polaris-5.dmm index 9e883190ba..cf6ccecf5f 100644 --- a/maps/northern_star/polaris-5.dmm +++ b/maps/northern_star/polaris-5.dmm @@ -304,10 +304,10 @@ "fR" = (/obj/structure/closet/bombcloset/double,/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology) "fS" = (/turf/simulated/floor/tiled,/area/outpost/research/xenobiology) "fT" = (/obj/structure/grille,/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio1"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/cable/blue{d2 = 2; icon_state = "0-2"},/obj/structure/window/reinforced/full,/turf/simulated/floor/plating,/area/outpost/research/xenobiology) -"fU" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio1"; name = "Containment Blast Doors"; opacity = 0},/obj/machinery/door/window/southright{dir = 1; name = "Containment Pen"; req_access = list(47)},/turf/simulated/floor/reinforced,/area/outpost/research/xenobiology) +"fU" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio1"; name = "Containment Blast Doors"; opacity = 0},/obj/machinery/door/window/brigdoor/northright{name = "Containment Pen"; req_access = list(47)},/turf/simulated/floor/reinforced,/area/outpost/research/xenobiology) "fV" = (/obj/structure/grille,/obj/structure/disposalpipe/segment,/obj/structure/cable/blue{d2 = 2; icon_state = "0-2"},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio1"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/window/reinforced/full,/turf/simulated/floor/plating,/area/outpost/research/xenobiology) "fW" = (/obj/structure/grille,/obj/structure/cable/blue{d2 = 2; icon_state = "0-2"},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio2"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/window/reinforced/full,/turf/simulated/floor/plating,/area/outpost/research/xenobiology) -"fX" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio2"; name = "Containment Blast Doors"; opacity = 0},/obj/machinery/door/window/southright{dir = 1; name = "Containment Pen"; req_access = list(47)},/turf/simulated/floor/reinforced,/area/outpost/research/xenobiology) +"fX" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio2"; name = "Containment Blast Doors"; opacity = 0},/obj/machinery/door/window/brigdoor/northright{name = "Containment Pen"; req_access = list(47)},/turf/simulated/floor/reinforced,/area/outpost/research/xenobiology) "fY" = (/obj/structure/grille,/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio2"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/disposalpipe/segment,/obj/structure/cable/blue{d2 = 2; icon_state = "0-2"},/obj/structure/window/reinforced/full,/turf/simulated/floor/plating,/area/outpost/research/xenobiology) "fZ" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology) "ga" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/outpost/research/hallway/toxins_hallway) @@ -317,7 +317,7 @@ "ge" = (/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology) "gf" = (/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Xenobiology Fore Port"; dir = 2},/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/structure/cable/blue{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/tiled,/area/outpost/research/xenobiology) "gg" = (/obj/structure/table/reinforced,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/machinery/button/remote/blast_door{id = "xenobio1"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access = list(55)},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology) -"gh" = (/obj/machinery/door/window/southright{name = "Containment Pen"; req_access = list(47)},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology) +"gh" = (/obj/effect/floor_decal/industrial/warning,/obj/machinery/door/window/brigdoor/southright{name = "Containment Pen"; req_access = list(47)},/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology) "gi" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology) "gj" = (/obj/effect/floor_decal/industrial/warning,/obj/structure/sink{pixel_y = 30},/obj/structure/cable/blue{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/tiled,/area/outpost/research/xenobiology) "gk" = (/obj/structure/table/reinforced,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning,/obj/machinery/button/remote/blast_door{id = "xenobio2"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access = list(55)},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology) @@ -371,8 +371,8 @@ "hg" = (/obj/structure/cable/blue{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled,/area/outpost/research/xenobiology) "hh" = (/obj/structure/cable/blue{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled,/area/outpost/research/xenobiology) "hi" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/outpost/research/xenobiology) -"hj" = (/obj/machinery/door/window/northleft{base_state = "right"; dir = 8; icon_state = "right"; name = "Containment Pen"; req_access = list(55)},/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology) -"hk" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio3"; name = "Containment Blast Doors"; opacity = 0},/obj/machinery/door/window/eastleft{name = "Containment Pen"; req_access = list(55)},/turf/simulated/floor/reinforced,/area/outpost/research/xenobiology) +"hj" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio3"; name = "Containment Blast Doors"; opacity = 0},/obj/machinery/door/window/brigdoor/eastright{name = "Containment Pen"; req_access = list(47)},/turf/simulated/floor/reinforced,/area/outpost/research/xenobiology) +"hk" = (/obj/machinery/door/window/brigdoor/westleft{name = "Containment Pen"; req_access = list(47)},/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology) "hl" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/tiled,/area/outpost/research/hallway/catwalk) "hm" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/lattice,/obj/structure/window/reinforced,/turf/space,/area/space) "hn" = (/obj/structure/lattice,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/space,/area/space) @@ -442,7 +442,7 @@ "iz" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/airless,/area/mine/explored) "iA" = (/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable/blue,/turf/simulated/floor/tiled,/area/outpost/research/xenobiology) "iB" = (/obj/structure/cable/blue{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/outpost/research/xenobiology) -"iC" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio4"; name = "Containment Blast Doors"; opacity = 0},/obj/machinery/door/window/eastleft{name = "Containment Pen"; req_access = list(55)},/turf/simulated/floor/reinforced,/area/outpost/research/xenobiology) +"iC" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio4"; name = "Containment Blast Doors"; opacity = 0},/obj/machinery/door/window/brigdoor/eastright{name = "Containment Pen"; req_access = list(47)},/turf/simulated/floor/reinforced,/area/outpost/research/xenobiology) "iD" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/outpost/research/hallway/catwalk) "iE" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/outpost/research/hallway/catwalk) "iF" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/lattice,/turf/simulated/mineral/floor/ignore_mapgen,/area/mine/explored) @@ -471,7 +471,7 @@ "jc" = (/obj/structure/bed/chair/office/light,/turf/simulated/floor/tiled,/area/outpost/research/xenobiology) "jd" = (/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Xenobiology Aft Port"; dir = 1},/obj/structure/cable/blue,/turf/simulated/floor/tiled,/area/outpost/research/xenobiology) "je" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 9},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology) -"jf" = (/obj/machinery/door/window/southright{dir = 1; name = "Containment Pen"; req_access = list(47)},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology) +"jf" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/door/window/brigdoor/northright{name = "Containment Pen"; req_access = list(47)},/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology) "jg" = (/obj/structure/table/reinforced,/obj/machinery/button/remote/blast_door{id = "xenobio6"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access = list(55)},/obj/effect/floor_decal/industrial/warning{dir = 5},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology) "jh" = (/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for a door to space."; id = "xenobioout6"; name = "Containment Release Switch"; pixel_x = 0; pixel_y = -28; req_access = list(55)},/obj/structure/sink,/obj/structure/cable/blue,/turf/simulated/floor/tiled,/area/outpost/research/xenobiology) "ji" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology) @@ -483,10 +483,10 @@ "jo" = (/obj/structure/table/standard,/obj/item/weapon/melee/baton/slime/loaded,/obj/item/weapon/gun/energy/taser/xeno,/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology) "jp" = (/obj/item/clothing/shoes/galoshes,/obj/item/clothing/shoes/galoshes,/turf/simulated/floor/tiled,/area/outpost/research/xenobiology) "jq" = (/obj/structure/grille,/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio6"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/disposalpipe/segment,/obj/structure/cable/blue,/obj/structure/window/reinforced/full,/turf/simulated/floor/plating,/area/outpost/research/xenobiology) -"jr" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio6"; name = "Containment Blast Doors"; opacity = 0},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/window/southright{name = "Containment Pen"; req_access = list(47)},/turf/simulated/floor/reinforced,/area/outpost/research/xenobiology) +"jr" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio6"; name = "Containment Blast Doors"; opacity = 0},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/window/brigdoor/southright{name = "Containment Pen"; req_access = list(47)},/turf/simulated/floor/reinforced,/area/outpost/research/xenobiology) "js" = (/obj/structure/grille,/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio6"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/cable/blue,/obj/structure/window/reinforced/full,/turf/simulated/floor/plating,/area/outpost/research/xenobiology) "jt" = (/obj/structure/grille,/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio5"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/disposalpipe/segment,/obj/structure/cable/blue,/obj/structure/window/reinforced/full,/turf/simulated/floor/plating,/area/outpost/research/xenobiology) -"ju" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio5"; name = "Containment Blast Doors"; opacity = 0},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/window/southright{name = "Containment Pen"; req_access = list(47)},/turf/simulated/floor/reinforced,/area/outpost/research/xenobiology) +"ju" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio5"; name = "Containment Blast Doors"; opacity = 0},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/window/brigdoor/southright{name = "Containment Pen"; req_access = list(47)},/turf/simulated/floor/reinforced,/area/outpost/research/xenobiology) "jv" = (/obj/structure/grille,/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio5"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/cable/blue,/obj/structure/window/reinforced/full,/turf/simulated/floor/plating,/area/outpost/research/xenobiology) "jw" = (/obj/structure/extinguisher_cabinet{pixel_x = 25; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology) "jx" = (/obj/structure/reagent_dispensers/watertank,/obj/item/weapon/extinguisher,/obj/item/weapon/extinguisher,/turf/simulated/floor/tiled/dark,/area/outpost/research/xenobiology) @@ -1912,7 +1912,7 @@ "KN" = (/obj/structure/lattice,/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/space,/area/space) "KO" = (/obj/structure/lattice,/obj/structure/grille,/turf/space,/area/space) "KP" = (/obj/machinery/power/tracker,/obj/structure/cable/yellow,/turf/simulated/floor/airless{icon_state = "asteroidplating2"},/area/outpost/engineering/solarsoutside/aft) - + (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -2005,11 +2005,11 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadndndnafafgagbafafdTaafPgcfQfQdndndndndnffffgdfSgegfggghgigjgkghglgmgefSgnffadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadndngogpgqgrgsaaaagcgcgcgcaadndndndngtgufSfSfSgvgwgxgygzgAgxgBgCgDffffffffffadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadngEgFgGgHgIaaaagJgKgJgKaaaaaaaadngLgMgNgOgegPgQgRgRgSgRgRgRgTgUgVfrgWfrffadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadngXgYgZgHgIhaaaaaaaaaaaaaaahahbhchdffffffffhehfhggxhhfSfSgehihjhkfrfrfrffadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadngXgYgZgHgIhaaaaaaaaaaaaaaahahbhchdffffffffhehfhggxhhfSfSgehihkhjfrfrfrffadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagEhlgGgHhmhbhbhbhbhbhbhbhbhnhlhoffhphqhrffhshthuhvhwhxfSgehyhzhAhBhBhCffadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahDhEhFhGhHhHhIhJhHhHhHhKhHhHhLhMhNhOhPhQhRhShThUhVffhWhXhYhZiaffibibibffadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaicgFidieifififigifififihifififiiffijikilffhihfhiiminiohigeipiqirisisisffadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaitiuiviwixiyiyiyiyiyiyiyiyiyizhdffffffffiAhfgvgxiBgxhhgehihjiCfrfrfrffadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaitiuiviwixiyiyiyiyiyiyiyiyiyizhdffffffffiAhfgvgxiBgxhhgehihkiCfrfrfrffadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiciDiEiFdndnaaaaaaaaaaaaaaaaaagtiGiHiIiJiKiLiMiMiNiMiMiMiOhziPiQiRiSffadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiciTiEiFdndndnaaaaaaaaaaaaaaaagLiUfSfSiVhgiWgxiXiYiBgxiZjagDffffffffffadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiciTiEiFdndndnaaaaaaaaaaaaaaaaffffjbjcgejdjejfjgjhjijfjjjkgefSjlffadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -2170,3 +2170,4 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} + diff --git a/maps/southern_cross/southern_cross-1.dmm b/maps/southern_cross/southern_cross-1.dmm index f7a9f84c3c..571e78dc1f 100644 --- a/maps/southern_cross/southern_cross-1.dmm +++ b/maps/southern_cross/southern_cross-1.dmm @@ -5382,7 +5382,7 @@ "bZz" = (/obj/machinery/portable_atmospherics/powered/pump/filled,/turf/simulated/floor/plating,/area/maintenance/robotics) "bZA" = (/obj/machinery/portable_atmospherics/powered/scrubber,/turf/simulated/floor/plating,/area/maintenance/robotics) "bZB" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/maintenance/robotics) -"bZC" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/blast/shutters{dir = 2; id = "mining_storage"; name = "Mining Storage"},/turf/simulated/floor/tiled/dark,/area/assembly/chargebay) +"bZC" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/blast/shutters{dir = 2; id = "Skynet_launch"; name = "Mining Storage"},/turf/simulated/floor/tiled/dark,/area/assembly/chargebay) "bZD" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/light/small{dir = 8},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating,/area/maintenance/research_medical) "bZE" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/research_medical) "bZF" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/research_medical) @@ -10110,6 +10110,7 @@ "dMv" = (/obj/machinery/hologram/holopad,/turf/simulated/shuttle/floor,/area/shuttle/arrival/station) "dMw" = (/obj/effect/landmark{name = "carpspawn"},/turf/space,/area/shuttle/shuttle2/arrivals_dock) "dMx" = (/obj/effect/landmark{name = "carpspawn"},/turf/space,/area/shuttle/response_ship/thirddeck) +"dMy" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/blast/shutters{dir = 2; id = "Skynet_launch"; name = "Mech Bay"},/turf/simulated/floor/tiled/dark,/area/assembly/chargebay) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -10493,7 +10494,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvybvybvybvybvybvybvybvybvybvybvybvybvyaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvybvybvybvybvybvybvybvybvybvybvybvybvyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaabFVbOobFVbOobFVbOobFVbOobFVbOobFVbOoaadbTwbTxbTybTzbTAbTBbTCbTAbRZbTDbTEbTFbwObTGbTHbTGbysbTIbTJbLcbTKbOybOybTLbSjbOybOybTMbLgbTNbTObTPbTQbTRbTSbMYbJXbAhbAhbNbbTTbTUbLsbLsbLsbLsbTVbNjbTWbNjbTXbNjbNjbNjbpJbtybxBbTYbpJaaaaaabGKbTZbUabUbbUcbUdbUebUfbUgbUhbUibRbbUjbUjbUkbUlbRibUmbUnbUobUobUpbUqbUrbRibUsbUtbUubSTbUvbDNaaaaaabrybPsbzcbrybKrbUwbUxbUybUybUzbUAbUBbUCbUDbUEbUFbUGbUHbUIbUIbUIbUJbUKbULbUMbUNbUObTlbUPbUQbURbUSbKBbUTbUUbUVbKBbUWbUXbUYbKEbMubMvbUZbVabVbbVcbVdbVebVfbVgbVhbVibVjbVkbVkbVjbVjbVjbVjbVjaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvybvybvybvybvybvybvybvybvybvybvybvybvyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaabQdbQebQfbQebQfbQebQfbQebQfbQebQfbQebQgbVlbOqbVmbTCbTAbTBbTCbTAbRZbVnbVobVobVobVobVobVobVobVpbVqbLcbVrbVsbVtbVubVvbVwbVxbVybLgbLgbVzbLgbVAbVBbLgbVCbJXbAhbAhbVDbLqbVEbVFbVGbVHbVIbVJbNjbVKbNjbVLbNjbVMbVNbVObtybxBbtybpJaaaaaabGKbVPbVQbPgbVRbVSbVTbVUbVVbVWbVXbVYbVZbWabWbbWcbRibWdbWebWfbWgbWhbUqbWibWjbWkbWlbWmbWnbWobDNaaaaaabrybPsbWpbWqbKrbKrbWrbWsbWtbWubPAbWvbWwbWxbWybWzbWAbWBbWCbWDbWEbWFbUKbWGbWHbWIbWJbTlbKBbWKbKBbKBbKBbKBbKBbKBbKBbKEbKEbKEbKEbWLbWMbUZbWNbWObWPbWQbWRbWSbVebVhbVhbVjbWTbWUbWVbVjbWWbWXbVjbVjaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvybvybvybvybvybvybvybvybvyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaafaafaafbQdbWYbWZbWYbWZbWYbWZbWYbWZbWYbWZbWYbQgbXabOqbXbbTCbXcbXdbTCbXcbRZbXebVobXfbXgbXhbXibXjbVobSfbXkbVybVybVybVybVybVybVybVybVybXlbLgbLgbLgbLgbLgbLgbXmbXnbyHbXobXmbXpbXpbXpbXpbXpbXpbXpbXqbXqbXqbXqbNjbXrbXsbpJbXtbXubXvbpJaaaaaabGKbXwbXxbLEbXybXzbRbbRbbRbbRbbRbbRbbXAbXBbXBbXCbRibRibRibRibRibXDbUqbXEbRibIGbWlbWmbWnbXFbDNaaaaaabrybXGbsIbsIbXHbKrbKrbKrbKrbKrbKrbXIbXJbXKbXJbXIbKybKybKybKybKybKybTlbXLbXMbXMbXNbTlbXObXObXObXPbXQbXRbXSbXTbXUbXVbXWbsTbXXbXYbXZbYabYbbYcbYdbWQbWRbYebVebYfbVhbYgbYhbYibYjbVkbYkbYibYlbVjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvybvybvybvybvybvybvyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaabHJbYmbHJbYmbHJbYmbHJbYmbHJbYmbHJbYmaafaafbOqbYnbYobYpbYqbYrbYsbYtbYubYvbYwbYxbYybYzbYAbYBbSfbYCbYDbYEbYFbYGbYHbYHbYHbYHbYHbYHbYHbYHbYHbYIbYJbYKbYLbYMbYNbYNbYObpJbYPbYPbYQbyVbYRbtybwfbwfbqSbqTbpJbYSbpJbpJbtybxBbYTbpJaaaaaabGJbYUbXxbLEbYVbYWbYXbYYbYZbZabZbbZcbZdbZebZebZfbZebZebZebZgbZhbZibZjbZkbRibIGbZlbLKbWnbSUbGLaaaaaabrybZmbZnbZnbZnbZobZpbsIbZqbZrbrybZsbZtbZubZtbZvbZwbZxbZybZzbZAbZBbTlbTlbZCbZCbTlbTlbZDbZEbZEbZFbZGbZHbZIbZIbZIbXRbZJbsTbZKbZLbJnbZMbZNbZObZPbWQbWRbWRbYebYebVhbVjbZQbZRbZSbZTbZUbZVbZWbZXbZYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvybvybvybvybvybvybvyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaabHJbYmbHJbYmbHJbYmbHJbYmbHJbYmbHJbYmaafaafbOqbYnbYobYpbYqbYrbYsbYtbYubYvbYwbYxbYybYzbYAbYBbSfbYCbYDbYEbYFbYGbYHbYHbYHbYHbYHbYHbYHbYHbYHbYIbYJbYKbYLbYMbYNbYNbYObpJbYPbYPbYQbyVbYRbtybwfbwfbqSbqTbpJbYSbpJbpJbtybxBbYTbpJaaaaaabGJbYUbXxbLEbYVbYWbYXbYYbYZbZabZbbZcbZdbZebZebZfbZebZebZebZgbZhbZibZjbZkbRibIGbZlbLKbWnbSUbGLaaaaaabrybZmbZnbZnbZnbZobZpbsIbZqbZrbrybZsbZtbZubZtbZvbZwbZxbZybZzbZAbZBbTlbTlbZCdMybTlbTlbZDbZEbZEbZFbZGbZHbZIbZIbZIbXRbZJbsTbZKbZLbJnbZMbZNbZObZPbWQbWRbWRbYebYebVhbVjbZQbZRbZSbZTbZUbZVbZWbZXbZYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOqbZZcaacabcaccadcaebRZcafbVobVobVobVocagcahcaicajcakcalcalcamcancaocaocaocaocaocaocaobYKbYKbYKcapcaqcarcascatcaucavcawcaxcaycaxcaxcaxcaxcaxcazcazcazcazcaAcazcazcazcaBcaCbpJbGKbGKbGJcaDbXxbLEbXycaEcaFcaGcaGcaHbZbcaIbRfbRfbRfbRfbRfbRfbRfcaIbRjcaJcaKcaLbRicaMbZlbIGcaNcaObGLcaPcaPbrybPsbsIbzcbxMbxNcaQbsIcaRbsIcaScaTcaUcaVcaUcaTcaWbZxcaXcaYcaZcbacbbcbccbdcaUcbecbecbfbXPbXPbXPbXPbXPbXPbXPbZIbXRcbgbsTcbhcbicbjbUZcbkcblcbmbWQbWRbYecbncbobVhbVjcbpcbqcbrbVjbVkcbsbVkbVjbVjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOpbOqcbtcbtbOqcbucbvcbwbRZcbxcbycbzcbAcbBcbCcbDcbEcbFcbGcbHcbIcbJcbKcaocbLcbLcbLcbLcbLcbMcbNcbObYKcbPcbQcbRcbScbTcbUcbVbpJbpJbpJbpJbpJbpJbpJbpJbpJbpJbpJbpJbpJbpJbpJbpJbpJcbWcbXcbYcbZbGJccaccbcccccdccecaFcaFccfccgbZbcchbRfccicciccicciccibRfccjbRicckcclbRibRiccmccnccmccoccpccqccrccscctccubqtbrybrybrybrybrybrybrybryccvccwccxccyccvbZwbZwbZwcczbZwbZwbZwbZwccAccBcbeccCccDccEccFccFccFccFccFbXPbXRbXRbVibsTccGbsTbsTbUZccHbUZbUZbWQbVhbVibVjbVjbVjbVjccIcbqccJccKccLccMccNccObVjbVjaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccPbOqccQccRccSccTccUccVccWccXccYccZcdacdbcdccddcdecdfcdgcdhcdicalcdjcdkcaocbLcbLcbLcbLcbLcdlcdmcbTcdncdocdpcdpcdqcbTcdocdpcdrcdscbTcdocdtcducdvcdwcdxcdycdpcdzcdAcdBcbTcdncdCcdDcdEcdFcdGcdHbPgbPgcdIcdJcdKcdLcaFbZbbZbbZbbXAbRfccicciccicciccibRfcaIbRibRibRibRiccrcdMcdNcdOcdOcdOcdPcdQcdRcdScdTcdUcdVcdWcdXcdYcdZceacebcdYcdYcdZceccedceeceecefcegcehceeceicejcekccAccBcelccBcemcenccFccFccFccFccFbXPceobXRcepceqcercesbVicetceucevcewbVecexceybVjcezceAbVjceBcbqbYibYibYicbqbYiceCceDbVkaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/maps/submaps/cave_submaps/cave.dm b/maps/submaps/cave_submaps/cave.dm index d30004887f..b2619b0021 100644 --- a/maps/submaps/cave_submaps/cave.dm +++ b/maps/submaps/cave_submaps/cave.dm @@ -7,4 +7,9 @@ /datum/map_template/cave/deadBeacon name = "Abandoned Relay" desc = "An unregistered comms relay, abandoned to the elements." - mappath = 'maps/submaps/cave_submaps/deadBeacon.dmm' \ No newline at end of file + mappath = 'maps/submaps/cave_submaps/deadBeacon.dmm' + +/datum/map_template/cave/prepper1 + name = "Prepper Bunker" + desc = "A little hideaway for someone with more time and money than sense." + mappath = 'maps/submaps/cave_submaps/prepper1.dmm' \ No newline at end of file diff --git a/maps/submaps/cave_submaps/cave_areas.dm b/maps/submaps/cave_submaps/cave_areas.dm index 7c80c66ec1..e25ffbc1df 100644 --- a/maps/submaps/cave_submaps/cave_areas.dm +++ b/maps/submaps/cave_submaps/cave_areas.dm @@ -3,4 +3,7 @@ icon_state = "submap" /area/submap/cave/deadBeacon - name = "abandoned relay" \ No newline at end of file + name = "abandoned relay" + +/area/submap/cave/prepper1 + name = "Prepper Bunker" \ No newline at end of file diff --git a/maps/submaps/cave_submaps/prepper1.dmm b/maps/submaps/cave_submaps/prepper1.dmm new file mode 100644 index 0000000000..2e9f7a24d4 --- /dev/null +++ b/maps/submaps/cave_submaps/prepper1.dmm @@ -0,0 +1,33 @@ +"a" = (/turf/template_noop,/area/template_noop) +"b" = (/turf/simulated/wall/r_wall,/area/submap/cave/prepper1) +"c" = (/obj/structure/table/steel,/obj/random/maintenance/engineering,/obj/random/maintenance/engineering,/obj/item/stack/rods,/turf/simulated/floor/plating,/area/submap/cave/prepper1) +"d" = (/obj/structure/table/steel,/obj/random/maintenance/security,/obj/item/stack/cable_coil/random,/turf/simulated/floor/plating,/area/submap/cave/prepper1) +"e" = (/obj/structure/table/steel,/obj/random/maintenance/engineering,/turf/simulated/floor/plating,/area/submap/cave/prepper1) +"f" = (/obj/structure/table/steel,/obj/random/maintenance/engineering,/obj/random/maintenance/engineering,/turf/simulated/floor/plating,/area/submap/cave/prepper1) +"g" = (/obj/structure/table/steel,/obj/item/weapon/storage/box/glasses,/turf/simulated/floor/plating,/area/submap/cave/prepper1) +"h" = (/obj/structure/table/steel,/obj/random/toolbox,/turf/simulated/floor/plating,/area/submap/cave/prepper1) +"i" = (/turf/simulated/floor/plating,/area/submap/cave/prepper1) +"j" = (/obj/structure/table/steel,/obj/item/weapon/tape_roll,/obj/random/maintenance/engineering,/turf/simulated/floor/plating,/area/submap/cave/prepper1) +"k" = (/obj/structure/table/steel,/obj/random/maintenance/engineering,/obj/random/maintenance/engineering,/obj/item/stack/tile/floor/steel,/turf/simulated/floor/plating,/area/submap/cave/prepper1) +"l" = (/obj/structure/inflatable/door,/turf/simulated/floor/plating,/area/submap/cave/prepper1) +"m" = (/obj/structure/closet/wardrobe/grey,/turf/simulated/floor/plating,/area/submap/cave/prepper1) +"n" = (/obj/structure/closet/crate/freezer/rations,/turf/simulated/floor/plating,/area/submap/cave/prepper1) +"o" = (/obj/structure/reagent_dispensers/water_cooler/full,/turf/simulated/floor/plating,/area/submap/cave/prepper1) +"p" = (/obj/structure/loot_pile/maint/technical,/turf/simulated/floor/plating,/area/submap/cave/prepper1) +"q" = (/obj/structure/table/rack,/obj/item/weapon/tank/emergency/oxygen/engi,/obj/item/weapon/tank/emergency/oxygen/engi,/obj/item/clothing/mask/gas,/obj/item/clothing/suit/armor/material/makeshift,/obj/item/clothing/head/helmet/bucket,/turf/simulated/floor/plating,/area/submap/cave/prepper1) +"r" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/turf/simulated/floor/plating,/area/submap/cave/prepper1) +"s" = (/obj/structure/table/steel,/obj/item/device/flashlight/lantern,/turf/simulated/floor/plating,/area/submap/cave/prepper1) +"t" = (/obj/structure/table/rack,/obj/item/weapon/gun/projectile/shotgun/pump/rifle/lever,/obj/item/ammo_magazine/clip/c762,/obj/item/ammo_magazine/clip/c762,/turf/simulated/floor/plating,/area/submap/cave/prepper1) + +(1,1,1) = {" +aaaaaaaaaa +aabbbbbbaa +abbcdefbba +abghiijkba +aliiiiimba +aliiiiinba +aboiiipnba +abbqrstbba +aabbbbbbaa +aaaaaaaaaa +"} diff --git a/maps/submaps/surface_submaps/forest.dm b/maps/submaps/surface_submaps/forest.dm index be13e4f947..40a045a37d 100644 --- a/maps/submaps/surface_submaps/forest.dm +++ b/maps/submaps/surface_submaps/forest.dm @@ -7,4 +7,9 @@ /datum/map_template/surface/farm1 name = "Farm 1" desc = "A small farm tended by a farmbot." - mappath = 'maps/submaps/surface_submaps/farm1.dmm' \ No newline at end of file + mappath = 'maps/submaps/surface_submaps/farm1.dmm' + +/datum/map_template/surface/spider1 + name = "Spider Nest 1" + desc = "A small spider nest, in the forest." + mappath = 'maps/submaps/surface_submaps/spider1.dmm' \ No newline at end of file diff --git a/maps/submaps/surface_submaps/forest_areas.dm b/maps/submaps/surface_submaps/forest_areas.dm index f8fe110cb0..b1d763d4aa 100644 --- a/maps/submaps/surface_submaps/forest_areas.dm +++ b/maps/submaps/surface_submaps/forest_areas.dm @@ -3,4 +3,7 @@ icon_state = "submap" /area/submap/farm1 - name = "farm" \ No newline at end of file + name = "farm" + +/area/submap/spider1 + name = "spider nest" \ No newline at end of file diff --git a/maps/submaps/surface_submaps/spider1.dmm b/maps/submaps/surface_submaps/spider1.dmm new file mode 100644 index 0000000000..761105c246 --- /dev/null +++ b/maps/submaps/surface_submaps/spider1.dmm @@ -0,0 +1,21 @@ +"a" = (/turf/template_noop,/area/template_noop) +"b" = (/obj/effect/spider/stickyweb,/turf/simulated/floor/outdoors/snow,/area/submap/spider1) +"c" = (/turf/simulated/floor/outdoors/snow,/area/submap/spider1) +"d" = (/obj/structure/flora/tree/pine,/turf/simulated/floor/outdoors/snow,/area/submap/spider1) +"e" = (/obj/effect/spider/eggcluster/small/frost,/turf/simulated/floor/outdoors/snow,/area/submap/spider1) +"f" = (/mob/living/simple_animal/hostile/giant_spider/frost,/turf/simulated/floor/outdoors/snow,/area/submap/spider1) +"g" = (/obj/structure/flora/tree/sif,/turf/simulated/floor/outdoors/snow,/area/submap/spider1) +"h" = (/obj/effect/spider/cocoon,/mob/living/simple_animal/hostile/giant_spider/frost,/turf/simulated/floor/outdoors/snow,/area/submap/spider1) + +(1,1,1) = {" +aaaaaaaaaa +abbccbbbca +accbcbccba +adecccccda +abcfccccca +accccccgca +accccchcca +acccbbbdca +acdbcbccca +aaaaaaaaaa +"} diff --git a/polaris.dme b/polaris.dme index 1b4622133a..05478349e1 100644 --- a/polaris.dme +++ b/polaris.dme @@ -986,7 +986,6 @@ #include "code\game\objects\structures\electricchair.dm" #include "code\game\objects\structures\extinguisher.dm" #include "code\game\objects\structures\flora.dm" -#include "code\game\objects\structures\ghost_pods.dm" #include "code\game\objects\structures\girders.dm" #include "code\game\objects\structures\gravemarker.dm" #include "code\game\objects\structures\grille.dm" @@ -1039,6 +1038,8 @@ #include "code\game\objects\structures\crates_lockers\closets\secure\scientist.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\secure_closets.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\security.dm" +#include "code\game\objects\structures\ghost_pods\ghost_pods.dm" +#include "code\game\objects\structures\ghost_pods\silicon.dm" #include "code\game\objects\structures\stool_bed_chair_nest\alien_nests.dm" #include "code\game\objects\structures\stool_bed_chair_nest\bed.dm" #include "code\game\objects\structures\stool_bed_chair_nest\chairs.dm" @@ -1416,6 +1417,7 @@ #include "code\modules\examine\descriptions\containers.dm" #include "code\modules\examine\descriptions\devices.dm" #include "code\modules\examine\descriptions\engineering.dm" +#include "code\modules\examine\descriptions\food.dm" #include "code\modules\examine\descriptions\machines.dm" #include "code\modules\examine\descriptions\medical.dm" #include "code\modules\examine\descriptions\mobs.dm" @@ -1578,11 +1580,13 @@ #include "code\modules\mob\mob_helpers.dm" #include "code\modules\mob\mob_movement.dm" #include "code\modules\mob\mob_transformation_simple.dm" -#include "code\modules\mob\modifiers.dm" #include "code\modules\mob\say.dm" #include "code\modules\mob\transform_procs.dm" #include "code\modules\mob\typing_indicator.dm" #include "code\modules\mob\update_icons.dm" +#include "code\modules\mob\_modifiers\cloning.dm" +#include "code\modules\mob\_modifiers\modifiers.dm" +#include "code\modules\mob\_modifiers\traits.dm" #include "code\modules\mob\dead\death.dm" #include "code\modules\mob\dead\observer\login.dm" #include "code\modules\mob\dead\observer\logout.dm" @@ -1748,7 +1752,6 @@ #include "code\modules\mob\living\silicon\robot\robot.dm" #include "code\modules\mob\living\silicon\robot\robot_damage.dm" #include "code\modules\mob\living\silicon\robot\robot_items.dm" -#include "code\modules\mob\living\silicon\robot\robot_modules.dm" #include "code\modules\mob\living\silicon\robot\robot_movement.dm" #include "code\modules\mob\living\silicon\robot\syndicate.dm" #include "code\modules\mob\living\silicon\robot\drone\drone.dm" @@ -1758,6 +1761,10 @@ #include "code\modules\mob\living\silicon\robot\drone\drone_items.dm" #include "code\modules\mob\living\silicon\robot\drone\drone_manufacturer.dm" #include "code\modules\mob\living\silicon\robot\drone\drone_say.dm" +#include "code\modules\mob\living\silicon\robot\robot_modules\event.dm" +#include "code\modules\mob\living\silicon\robot\robot_modules\station.dm" +#include "code\modules\mob\living\silicon\robot\robot_modules\syndicate.dm" +#include "code\modules\mob\living\silicon\robot\subtypes\gravekeeper.dm" #include "code\modules\mob\living\silicon\robot\subtypes\lost_drone.dm" #include "code\modules\mob\living\simple_animal\corpse.dm" #include "code\modules\mob\living\simple_animal\simple_animal.dm"