diff --git a/baystation12.dme b/baystation12.dme index 344c54397e..6d131d1232 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -1140,4 +1140,4 @@ #include "code\ZAS\Variable Settings.dm" #include "interface\skin.dmf" #include "maps\tgstation.2.0.8.dmm" -// END_INCLUDE \ No newline at end of file +// END_INCLUDE diff --git a/code/WorkInProgress/Cael_Aislinn/Tajara/say.dm b/code/WorkInProgress/Cael_Aislinn/Tajara/say.dm index d65e10abdd..de333045f0 100644 --- a/code/WorkInProgress/Cael_Aislinn/Tajara/say.dm +++ b/code/WorkInProgress/Cael_Aislinn/Tajara/say.dm @@ -377,11 +377,12 @@ for (var/mob/M in W) W |= M.contents - if(ishuman(M)) - var/mob/living/carbon/human/G = M - for(var/name in G.organs) - var/datum/organ/external/F = G.organs[name] - W |= F.implant + if(hasorgans(M)) + var/mob/living/carbon/G = M + for(var/name in G:organs) + var/datum/organ/external/F = G:organs[name] + for(var/obj/item/weapon/implant/I in F.implant) + W |= I for (var/obj/item/device/pda/M in W) W |= M.contents diff --git a/code/game/dna.dm b/code/game/dna.dm index cb0221b6c5..2aa8f9dc38 100644 --- a/code/game/dna.dm +++ b/code/game/dna.dm @@ -509,13 +509,8 @@ // human > monkey var/mob/living/carbon/human/H = M H.monkeyizing = 1 - var/list/implants = list() //Try to preserve implants. - for(var/obj/item/weapon/implant/W in H) - implants += W - W.loc = null - if(!connected) - for(var/obj/item/W in (H.contents-implants)) + for(var/obj/item/W in (H.contents)) if (W==H.w_uniform) // will be teared continue H.drop_from_slot(W) @@ -553,7 +548,7 @@ M.viruses -= D - for(var/obj/T in (M.contents-implants)) + for(var/obj/T in (M.contents)) del(T) //for(var/R in M.organs) // del(M.organs[text("[]", R)]) @@ -584,12 +579,8 @@ // monkey > human, var/mob/living/carbon/monkey/Mo = M Mo.monkeyizing = 1 - var/list/implants = list() //Still preserving implants - for(var/obj/item/weapon/implant/W in Mo) - implants += W - W.loc = null if(!connected) - for(var/obj/item/W in (Mo.contents-implants)) + for(var/obj/item/W in (Mo.contents)) Mo.drop_from_slot(W) M.update_clothing() M.monkeyizing = 1 diff --git a/code/game/gamemodes/newobjective.dm b/code/game/gamemodes/newobjective.dm index 3e3eeb5c6a..5b28669809 100644 --- a/code/game/gamemodes/newobjective.dm +++ b/code/game/gamemodes/newobjective.dm @@ -56,11 +56,11 @@ /proc/PickObjectiveFromList(var/list/objectivesArray) var/list/datum/objectives = objectivesArray[1] var/pick_index = text2num(pickweight(objectivesArray[2])) - if (pick_index > objectives.len || pick_index < 1) - log_admin("Objective picking failed. Error logged. One or more traitors will need to be manually-assigned objectives") + log_admin("Objective picking failed. Error logged. One or more traitors will need to be manually-assigned objectives. Pick_index was [pick_index]. Tell Sky.") + message_admins("Objective picking failed. Error logged. One or more traitors will need to be manually-assigned objectives. Pick_index was [pick_index]. Tell Sky.") CRASH("Objective picking failed. Pick_index was [pick_index].") - + return objectives[pick_index] /proc/RemoveObjectiveFromList(var/list/objectiveArray, var/datum/objective/objective) @@ -97,7 +97,7 @@ if(1 to 55) //Theft Objectives (55% chance) var/datum/objective/objective = PickObjectiveFromList(theftobjectives) for(1 to 10) - if(objective.points + totalweight <= 110) + if(objective.points + totalweight <= 100) break objective = PickObjectiveFromList(theftobjectives) chosenobjectives += objective @@ -107,7 +107,7 @@ var/datum/objective/assassinate/objective = PickObjectiveFromList(killobjectives) world << objective for(1 to 10) - if(objective.points + totalweight <= 110) + if(objective.points + totalweight <= 100) break objective = PickObjectiveFromList(killobjectives) if(!objective) @@ -128,7 +128,7 @@ if(93 to 95) //Framing Objectives (3% chance) var/datum/objective/objective = PickObjectiveFromList(frameobjectives) for(1 to 10) - if(objective.points + totalweight <= 110) + if(objective.points + totalweight <= 100) break objective = PickObjectiveFromList(frameobjectives) if(!objective) @@ -149,7 +149,7 @@ if(96 to 100) //Protection Objectives (5% chance) var/datum/objective/protection/objective = PickObjectiveFromList(protectobjectives) for(1 to 10) - if(objective.points + totalweight <= 110) + if(objective.points + totalweight <= 100) break objective = PickObjectiveFromList(protectobjectives) if(!objective) diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index 39fb22d84e..1bd7d9af20 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -233,7 +233,9 @@ synd_mob.equip_if_possible(new /obj/item/ammo_magazine/a12mm(synd_mob), synd_mob.slot_in_backpack) synd_mob.equip_if_possible(new /obj/item/weapon/reagent_containers/pill/cyanide(synd_mob), synd_mob.slot_in_backpack) synd_mob.equip_if_possible(new /obj/item/weapon/gun/projectile/automatic/c20r(synd_mob), synd_mob.slot_belt) - var/obj/item/weapon/implant/dexplosive/E = new/obj/item/weapon/implant/dexplosive(synd_mob) + var/datum/organ/external/O = pick(synd_mob.organs) + var/obj/item/weapon/implant/dexplosive/E = new/obj/item/weapon/implant/dexplosive(O) + O.implant += E E.imp_in = synd_mob E.implanted = 1 diff --git a/code/game/jobs/job/captian.dm b/code/game/jobs/job/captian.dm index d570a6176b..6e9bd017ab 100644 --- a/code/game/jobs/job/captian.dm +++ b/code/game/jobs/job/captian.dm @@ -18,7 +18,9 @@ H.equip_if_possible(new /obj/item/clothing/head/caphat(H), H.slot_head) H.equip_if_possible(new /obj/item/clothing/glasses/sunglasses(H), H.slot_glasses) H.equip_if_possible(new /obj/item/weapon/storage/id_kit(H), H.slot_in_backpack) - var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) + var/datum/organ/external/O = pick(H.organs) + var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(O) + O.implant += L L.imp_in = H L.implanted = 1 world << "[H.real_name] is the captain!" diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm index 2f4dc783ad..57587b4637 100644 --- a/code/game/jobs/job/security.dm +++ b/code/game/jobs/job/security.dm @@ -23,7 +23,9 @@ H.equip_if_possible(new /obj/item/clothing/glasses/sunglasses/sechud(H), H.slot_glasses) H.equip_if_possible(new /obj/item/weapon/handcuffs(H), H.slot_in_backpack) H.equip_if_possible(new /obj/item/weapon/gun/energy/gun(H), H.slot_s_store) - var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) + var/datum/organ/external/O = pick(H.organs) + var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(O) + O.implant += L L.imp_in = H L.implanted = 1 return 1 @@ -53,7 +55,9 @@ H.equip_if_possible(new /obj/item/clothing/glasses/sunglasses/sechud(H), H.slot_glasses) H.equip_if_possible(new /obj/item/weapon/handcuffs(H), H.slot_in_backpack) H.equip_if_possible(new /obj/item/device/flash(H), H.slot_l_store) - var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) + var/datum/organ/external/O = pick(H.organs) + var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(O) + O.implant += L L.imp_in = H L.implanted = 1 return 1 @@ -92,7 +96,9 @@ H.equip_if_possible(new /obj/item/weapon/zippo(H), H.slot_l_store) // H.equip_if_possible(new /obj/item/weapon/reagent_containers/food/snacks/candy_corn(H), H.slot_h_store) // No... just no. --SkyMarshal - var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) + var/datum/organ/external/O = pick(H.organs) + var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(O) + O.implant += L L.imp_in = H L.implanted = 1 return 1 @@ -122,7 +128,9 @@ H.equip_if_possible(new /obj/item/clothing/gloves/red(H), H.slot_gloves) H.equip_if_possible(new /obj/item/weapon/handcuffs(H), H.slot_s_store) H.equip_if_possible(new /obj/item/device/flash(H), H.slot_l_store) - var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) + var/datum/organ/external/O = pick(H.organs) + var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(O) + O.implant += L L.imp_in = H L.implanted = 1 return 1 diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm index 253d725409..e366238992 100644 --- a/code/game/machinery/adv_med.dm +++ b/code/game/machinery/adv_med.dm @@ -253,7 +253,7 @@ AN = "[e.wound]:" if(e.open) open = "OPEN:" - if(e.implant) + if(e.implant && e.implant.len) imp = "IMPLANT:" if(!AN && !open && !infected & !imp) AN = "None" diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index d3a150d9ed..a0460b9d67 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -395,7 +395,9 @@ //Add an implant if needed var/obj/item/weapon/implant/health/imp = locate(/obj/item/weapon/implant/health, subject) if (isnull(imp)) - imp = new /obj/item/weapon/implant/health(subject) + var/datum/organ/external/O = pick(subject.organs) + imp = new /obj/item/weapon/implant/health(O) + O.implant += imp imp.implanted = subject R.fields["imp"] = "\ref[imp]" //Update it if needed diff --git a/code/game/machinery/telecomms/broadcaster.dm b/code/game/machinery/telecomms/broadcaster.dm index 0a923bf110..5b32f3a1f7 100644 --- a/code/game/machinery/telecomms/broadcaster.dm +++ b/code/game/machinery/telecomms/broadcaster.dm @@ -316,8 +316,13 @@ var // - Just display a garbled message - else heard_garbled += R - for(var/obj/item/weapon/implant/imp in R) - imp.hear(message,M) + if(hasorgans(R)) + for(var/datum/organ/external/O in R:organs) + for(var/obj/item/weapon/implant/imp in O.implant) + imp.hear(message,M) + else + for(var/obj/item/weapon/implant/imp in R) + imp.hear(message,M) /* ###### Begin formatting and sending the message ###### */ @@ -595,8 +600,13 @@ var // - Just display a garbled message - heard_garbled += R - for(var/obj/item/weapon/implant/imp in R) - imp.hear(text,M) + if(hasorgans(R)) + for(var/datum/organ/external/O in R:organs) + for(var/obj/item/weapon/implant/imp in O.implant) + imp.hear(text,M) + else + for(var/obj/item/weapon/implant/imp in R) + imp.hear(text,M) /* ###### Begin formatting and sending the message ###### */ diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm index dbd6c61745..37f159ef55 100644 --- a/code/game/machinery/teleporter.dm +++ b/code/game/machinery/teleporter.dm @@ -66,7 +66,7 @@ L[tmpname] = R for (var/obj/item/weapon/implant/tracking/I in world) - if (!I.implanted || !ismob(I.loc)) + if (!I.implanted || !(istype(I.loc,/datum/organ/external) || ismob(loc))) continue else var/mob/M = I.loc diff --git a/code/game/objects/devices/flash.dm b/code/game/objects/devices/flash.dm index 6f3146ae99..0bcf591130 100644 --- a/code/game/objects/devices/flash.dm +++ b/code/game/objects/devices/flash.dm @@ -49,10 +49,11 @@ if(ishuman(M) && ishuman(user)) if(user.mind in ticker.mode.head_revolutionaries) var/revsafe = 0 - for(var/obj/item/weapon/implant/loyalty/L in M) - if(L && L.implanted) - revsafe = 1 - break + for(var/datum/organ/external/O in M.organs) + for(var/obj/item/weapon/implant/loyalty/L in O.implant) + if(L && L.implanted) + revsafe = 1 + break if(M.mind.has_been_rev) revsafe = 2 if(!revsafe) diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm index cca25ab9d6..21f2325fd5 100644 --- a/code/game/objects/items/weapons/implants/implant.dm +++ b/code/game/objects/items/weapons/implants/implant.dm @@ -249,8 +249,8 @@ the implant may become unstable and either pre-maturely inject the subject or si var/list/replacechars = list("'" = "","\"" = "",">" = "","<" = "","(" = "",")" = "") msg = sanitize_simple(msg, replacechars) if(findtext(msg,phrase)) - if(istype(loc, /mob/)) - var/mob/T = loc + if(istype(imp_in, /mob/)) + var/mob/T = imp_in T.gib() explosion(find_loc(src), 1, 3, 4, 6, 3) var/turf/t = find_loc(src) @@ -284,8 +284,8 @@ the implant may become unstable and either pre-maturely inject the subject or si return dat process() - var/mob/M = src.loc - + var/mob/M = imp_in + if(isnull(M)) // If the mob got gibbed var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset(null) a.autosay("states, \"[mobname] has died-zzzzt in-in-in...\"", "[mobname]'s Death Alarm") diff --git a/code/game/objects/items/weapons/teleportation.dm b/code/game/objects/items/weapons/teleportation.dm index d2f37e012b..289d6fc486 100644 --- a/code/game/objects/items/weapons/teleportation.dm +++ b/code/game/objects/items/weapons/teleportation.dm @@ -60,7 +60,7 @@ Frequency: src.temp += "Extranneous Signals:
" for (var/obj/item/weapon/implant/tracking/W in world) - if (!W.implanted || !ismob(W.loc)) + if (!W.implanted || !(istype(W.loc,/datum/organ/external) || ismob(W.loc))) continue else var/mob/M = W.loc diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index 7c02f43e8e..562403ee83 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -107,10 +107,19 @@ break else C.images += image(tempHud,perp,"hudunknown") - for(var/obj/item/weapon/implant/I in perp) - if(I.implanted) - if(istype(I,/obj/item/weapon/implant/tracking)) - C.images += image(tempHud,perp,"hud_imp_tracking") - if(istype(I,/obj/item/weapon/implant/loyalty)) - C.images += image(tempHud,perp,"hud_imp_loyal") + if(hasorgans(perp)) + for(var/datum/organ/external/E in perp) + for(var/obj/item/weapon/implant/I in E.implant) + if(I.implanted) + if(istype(I,/obj/item/weapon/implant/tracking)) + C.images += image(tempHud,perp,"hud_imp_tracking") + if(istype(I,/obj/item/weapon/implant/loyalty)) + C.images += image(tempHud,perp,"hud_imp_loyal") + else + for(var/obj/item/weapon/implant/I in perp) + if(I.implanted) + if(istype(I,/obj/item/weapon/implant/tracking)) + C.images += image(tempHud,perp,"hud_imp_tracking") + if(istype(I,/obj/item/weapon/implant/loyalty)) + C.images += image(tempHud,perp,"hud_imp_loyal") diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index bb3507561d..664db918a0 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -9,9 +9,11 @@ var/muzzled = istype(src.wear_mask, /obj/item/clothing/mask/muzzle) //var/m_type = 1 - for (var/obj/item/weapon/implant/I in src) - if (I.implanted) - I.trigger(act, src) + for(var/named in organs) + var/datum/organ/external/F = organs[named] + for (var/obj/item/weapon/implant/I in F.implant) + if (I.implanted) + I.trigger(act, src) if(src.stat == 2.0 && (act != "deathgasp")) return diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index d59ae496a2..dabef32f65 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -347,11 +347,12 @@ for (var/mob/M in W) W |= M.contents - if(ishuman(M)) - var/mob/living/carbon/human/G = M - for(var/name in G.organs) - var/datum/organ/external/F = G.organs[name] - W |= F.implant + if(hasorgans(M)) + var/mob/living/carbon/G = M + for(var/name in G:organs) + var/datum/organ/external/F = G:organs[name] + for(var/obj/item/weapon/implant/I in F.implant) + W |= I for (var/obj/item/device/pda/M in W) W |= M.contents